Tried Running the Image-Capable 120B MoE "Nemotron 3.5 Super VL 120B-A12B" on DGX Spark

Tried Running the Image-Capable 120B MoE "Nemotron 3.5 Super VL 120B-A12B" on DGX Spark

Nemotron 3.5 Super VL 120B-A12B NVFP4, now with image support, was run using the model card's vLLM recipe for DGX Spark. Started with 1M context default, single 38 tok/s on LiLiCorr.
2026.10.18

This page has been translated by machine translation. View original

Introduction

Hello, I'm Morishige from Classmethod's Manufacturing Business Technology Department.

NVIDIA released Nemotron 3.5 Super VL 120B-A12B on October 15. It is the largest model in the Nemotron 3.5 family, capable of reading both images and video. The announcement blog states it "runs on DGX Spark, DGX Station, and RTX systems," and the model card includes a vLLM recipe for a single DGX Spark.

https://blogs.nvidia.com/blog/nemotron-3-5-super-vl/

Bolt 74B-A9B, released on the same day, was benchmarked on DGX Spark's llama.cpp the day after its release (this article is dated 2026-10-16). Super VL, at 120B, has NVFP4 weights alone weighing 70 GiB. I was immediately curious whether it would fit in a 128GB DGX Spark, and if so, whether it would actually start up with the default 1M token context intact.

https://dev.classmethod.jp/articles/dgx-spark-nemotron-3-5-bolt-74b-a9b-first-touch/

To state the conclusion up front: the model card recipe ran as written, and it started up with the default 1M context in 11 minutes. With the external draft LiLiCorr it achieved 38.07 tok/s single-stream, and 19.06 tok/s without it. Japanese and tool-calling were best with thinking strength set to medium, achieving 9/9 on Japanese and passing all 6 agent fitness probes—a result no other model measured on the same tasks had reached. On the other hand, it could not read vertically written Japanese.

This article presents the results of running Nemotron 3.5 Super VL 120B-A12B NVFP4 on a DGX Spark with vLLM, two days after its release. I will cover whether the official recipe runs as-is, how much effect LiLiCorr has, and measurements of Japanese, code, tools, and images using the same tasks as for Bolt and Lightning.

What is Nemotron 3.5 Super VL 120B-A12B

First, let me establish the facts from primary sources. The numbers are taken from the model card, config.json, and the Hugging Face file listing.

Item Value
Parameters 120B (active 12B)
Architecture Hybrid MoE of Mamba-2 + Transformer, 512 experts per MoE layer, images via C-RADIO
Quantization NVFP4 (vision encoder, connector, Mamba convolutions, and embeddings remain BF16; router stays FP32)
Context 1M tokens
Input Text, images, video (mp4, up to 2 minutes)
Supported languages English, French, German, Italian, Japanese, Spanish, Chinese (languages covered in post-training)
License OpenMDW-1.1 (commercial use permitted)
Recommended sampling Text: temperature 1.0 / top_p 0.95; images: temperature 0.6 / top_p 0.95
Distribution 88 safetensors files totaling 69.86 GiB; speculative decoding draft LiLiCorr 1.23 GiB
Intended deployment 1× DGX Spark, 1× H200, 2× H100, 1× GB200

Because Bolt 74B-A9B is a child model extracted from this model via Star Elastic, the layer count and hybrid skeleton are the same. The differences lie in the number of experts and quantization: Super VL holds 512 experts in NVFP4, while Bolt prunes experts per layer and compresses down to 2 bits. The active parameters used per token are 12B for Super VL, 9B for Bolt, and 3B for Lightning, which has a different skeleton.

Thinking comes in 3 levels. The default on, on (medium) which the card notes may reduce accuracy in exchange for fewer tokens, and off. Medium is enabled simply by passing medium_effort: true in chat_template_kwargs, the same mechanism as Bolt. Since thinking and the main response share the same max_tokens, in this article I use the term budget to refer to the output token limit.

The official benchmarks are presented as a comparison table between BF16 and NVFP4. I reproduce the card's numbers directly.

Benchmark BF16 NVFP4
GPQA-Diamond 89.52 89.90
LiveCodeBench v6 88.22 87.41
SWE-bench Verified 71.10 71.07
Terminal-Bench 2.1 60.67 62.78
tau2-bench retail 69.24 69.30
OCRBench v2 (English) 68.12 68.34
MMLU-ProX 76.91 73.76
WebVoyager 77.72 66.31
DeepSWE 24.65 18.2

With NVFP4, code and Q&A scores barely drop. The declines appear in multilingual MMLU-ProX and in the long-running browser and repository tasks of WebVoyager and DeepSWE. Whether this gap shows up in Japanese tasks and long agent tasks is something I will examine hands-on.

Getting It Running

The Quick Start in the model card explicitly states "this vLLM configuration is for DGX Spark (GB10) only," with a startup command included. The image is vllm/vllm-openai:nightly-3f1bcfd82bb2e93fcd364fc7a5491718453a77e2, and the arm64 build of the same commit was pushed to Docker Hub on October 15. The card also lists the v0.32.0 tag, but as of October 17 it was not yet on Docker Hub.

After downloading the weights and draft with hf download, I passed the recipe's arguments verbatim.

docker run -d --name supervl --gpus all --ipc=host \
  -p 127.0.0.1:8000:8000 \
  -v "$MODEL_DIR":/model:ro -v "$DRAFT_DIR":/draft:ro \
  vllm/vllm-openai:nightly-3f1bcfd82bb2e93fcd364fc7a5491718453a77e2 /model \
  --served-model-name nemotron-3.5-super-vl \
  --max-num-seqs 1 \
  --trust-remote-code \
  --gpu-memory-utilization 0.75 \
  --max-num-batched-tokens 8192 \
  --speculative_config.model /draft \
  --speculative_config.num_speculative_tokens 7 \
  --speculative_config.method dflash \
  --mamba-backend flashinfer \
  --mamba-ssm-cache-dtype float16 \
  --enable-mamba-cache-stochastic-rounding \
  --mamba-cache-philox-rounds 5 \
  --enable-mamba-shared-prefix-checkpoint \
  --video-pruning-rate 0.5 \
  --media-io-kwargs '{"video": {"fps": 2, "num_frames": 256}}' \
  --block-size 64 --prefix-match-unit 64 \
  --enable-auto-tool-choice --tool-call-parser qwen3_coder \
  --reasoning-parser nemotron_v3

This recipe has no --max-model-len. That means the context length defaults to the 1,048,576 from config.json. Whether a 120B model with a 1M slot would actually start on a 128GB machine was the main thing I wanted to see.

The result: it started without any changes.

Item Value
Startup 661 seconds (weight loading 343 s, draft 7 s, rest is warmup)
KV cache 1,201,281 tokens—enough to hold 1.15 requests of 1M tokens
Host free memory 116 GiB before startup, 13–17 GiB during measurement
KV without draft 5,084,004 tokens (4.85 requests of 1M)

The startup log shows Maximum concurrency for 1,048,576 tokens per request: 1.15x. With only 15% headroom for a 1M slot, the value --gpu-memory-utilization 0.75 looks like it was carefully tuned to hit exactly this point. On the forums there is a report of someone who added more simultaneous images, causing insufficient KV allocation and a startup rejection (basbunarhasan, 2026-10-17). If you intend to use the full 1M context, it is safer not to add anything beyond the recipe. An NVIDIA staff member in the same thread also wrote: "this recipe assumes nothing else is running during inference; if something else is co-located, lower it to 0.7" (eugr_nv, 2026-10-16).

There is one number discrepancy in the card. The deployment summary table reads "1× DGX Spark / vLLM / 1M context / MTP with 5 draft tokens." The Quick Start command, however, uses LiLiCorr DFlash with 7 tokens. Since the card's descriptive text says "LiLiCorr is recommended on DGX Spark in all scenarios," I treated the Quick Start command as authoritative for my measurements. I did not test the built-in MTP this time.

There are three lines in the startup log worth verifying: Resolved architecture: LiLiCorrDraftModel confirming the draft was loaded, SpeculativeConfig(method='dflash', model='/draft', num_spec_tokens=7) for the speculative configuration, and the KV cache line above. Additionally, checking that /metrics' vllm:spec_decode_num_drafts_total increments with each request helps prevent the pitfall of thinking speculation is active when it is not.

Measurement Conditions

The speed section was measured with a single-sequence startup following the recipe verbatim. All other sections used a startup configuration aligned with the other models: --max-model-len 131072 --max-num-seqs 8 --max-num-batched-tokens 8192 --kv-cache-dtype fp8_e4m3, --gpu-memory-utilization 0.75, no speculation, same image. The value 131,072 was aligned to the max_seq_len in the model card's TensorRT-LLM Spark configuration. Startup took 607 seconds, and the KV cache held 2,783,188 tokens.

Sampling used the recommended values of temperature 1.0 / top_p 0.95, with a base budget of 8,192 output tokens; tasks that hit the limit have an additional row at 16,384. Image tasks were also measured at the text recommended values to match conditions with Bolt (the card's image recommendation is temperature 0.6).

Comparison targets are Bolt 74B-A9B 24GB (2-bit, llama.cpp) and Lightning 30B-A3B (NVFP4, vLLM) from the same Nemotron 3.5 family. Since Bolt was measured with llama.cpp, speed is not compared—only quality judgments are placed side by side. Thinking strength is high for both, budget also 8,192. Lightning's tool-calling and agent fitness were measured with a budget of 4,096, so those columns carry a note.

During measurement, I recorded GPU temperature, power, throttle reason from nvidia-smi, and the hottest zone in /sys/class/thermal every 5 seconds.

Speed

First, using the single-sequence startup with the verbatim recipe, I examine how well LiLiCorr works. Median of 3 runs with forced output of 256 tokens at temperature 0.

Configuration Single-stream tok/s TTFT (s)
No speculation 19.06 0.264
LiLiCorr (7 lookahead tokens) 38.07 0.328

2.0×. The acceptance rate (the fraction of draft candidates accepted by the main model) can be read from /metrics deltas; for this short fixed text it was 43%, advancing an average of 3.0 tokens per verification step. Compared to Bolt's LiLiCorr acceptance rate of 35% and 1.56× speedup, Super VL shows higher acceptance rate and higher speedup.

I also measured behavior when feeding long inputs with the same startup. I constructed needle-test prompts at 16K, 32K, and 64K tokens, and had the model write 512 forced tokens with thinking off.

Input tokens TTFT (s) prefill tok/s decode tok/s Keyword
16,397 7.5 2,184 91.9 ○
32,809 14.7 2,227 90.6 ○
65,487 30.6 2,138 64.6 ○

Prefill is stable at 2,100–2,200 tok/s, so reading 64K tokens takes 30 seconds before the first response. Decode was over 90 tok/s for 16K and 32K, faster than the 38 tok/s on short text. This is because the draft acceptance rate rose to 83–85%; needle tasks tend toward formulaic output, which is easy for the draft to predict. Please do not carry these decode numbers over as expectations for Japanese conversation.

A note on thermals. On the NVIDIA forums there is a report of the power cutting out when feeding inputs of 32K or longer with the same recipe (ronspie314, 2026-10-15). A follow-up noted that when the GPU was at 81–85 °C, the hottest zone in /sys/class/thermal showed 93–96 °C (basbunarhasan, 2026-10-17). On my own unit, through the entire 64K sequence, the GPU peaked at 77 °C, the zone peaked at 83.3 °C, and maximum power was 82 W, with no throttling events at all. Since I did not feed inputs longer than 64K, anyone planning to run long inputs continuously would do well to monitor zone temperature in addition to GPU temperature.

Concurrent execution was measured with the 8-sequence startup aligned to the other models, without speculation.

Concurrency tok/s per request Total tok/s TTFT (s)
1 19.18 19.18 0.218
2 16.07 31.15 0.483
4 13.33 52.05 0.461
8 10.12 79.32 0.516

Single-stream is 19.18 tok/s, essentially the same as the 19.06 measured with the 1M startup without speculation. The fact that single-stream speed is unchanged whether the context window is 1M or 131K is worth noting. At 8 concurrent requests, total throughput is 79 tok/s with 10 tok/s per stream. Lightning achieved 79.59 tok/s single-stream and 331.97 tok/s total at 8 concurrent under the same conditions. The difference between active 3B and 12B comes through directly.

Japanese

I ran 10 Japanese tasks. Budget 8,192, thinking high. Scoring uses mechanically verifiable criteria such as character count, presence of required terms, and whether JSON parses successfully. The Bolt column carries the same values as the October 16 article.

Task Super VL (high) Tokens consumed Thinking length Bolt (high)
Answer within 50 characters ○ (26 chars) 878 1,027 ○
Open-ended response ○ 604 635 ○
Code generation ○ 128 473 ○
Numerical reasoning ○ 412 296 ○
Vocabulary constraint ○ (181 chars) 1,046 1,226 ○
JSON formatting ○ 306 685 ○
Summary with proper nouns × (no body) 8,192 11,432 × (no body)
Transcription of figures/tables ○ (5/5) 1,336 3,033 ○ (5/5)
Rewrite in polite form ○ (5/5) 382 566 ○ (5/5)
Extraction from long text ○ (4/4) 648 1,586 ○ (4/4)
Machine-scored total 8/9 8/9

The open-ended response cannot be scored mechanically and is excluded from the total.

The high score of 8/9 matches Bolt, and the failed task is the same: summary with proper nouns. After 11,432 characters of thinking, the 8,192 budget was exhausted with no body output. I also measured a row with the budget extended to 16,384, but this time 23,447 characters of thinking again exhausted the budget. Lightning and Bolt fail this task in the same way; Nemotron 3.5's high thinking seems to have a tendency to not stop on this particular task. The other 9 tasks showed no change in score at 16,384.

The picture changes when varying thinking strength.

Condition Machine score Total tokens Time for 10 tasks Failed tasks
high (default) 8/9 13,932 737 s Summary with proper nouns (exhausts 8,192 budget)
medium 9/9 8,075 427 s None
off 7/9 1,003 56 s 50-char constraint (53 chars), summary with proper nouns (5 of 6 terms)

9/9 with medium. The summary with proper nouns task that exhausted the budget on high was handled at medium with 6,360 characters of thinking, producing a 159-character summary retaining all 6 terms. Token consumption was 60% of high, time was 7 minutes, and the score was better. Bolt's medium achieved 8/9, retaining only 4 of 6 proper nouns, so Super VL's 12B made the difference here.

Disabling thinking lets all 10 tasks finish in 56 seconds, but the 50-character constraint is violated at 53 characters and one proper noun is dropped. The same pattern appeared with Bolt and Lightning—thinking is being used to follow instructions. Reading the open-ended responses by eye: medium and high both return two pros and two cons of remote work, organized with headings and bullet points; off returns the same content more briefly. All of them read as natural Japanese, a step above the "not broken" impression I had from the 2-bit Bolt—these read as genuinely normal prose.

Code Generation

Two parts: writing 5 programs from scratch given Japanese specifications, and fixing bugs in a mini-repository. Scoring is done by running pytest ourselves; the model's self-assessment is not used.

Writing from Specifications

Problem Super VL Time (s) Bolt Lightning
slugify ○ 11/11 62.6 ○ 11/11 ○ 11/11
parse_duration ○ 16/16 150.3 ○ 16/16 × (budget exceeded)
merge_intervals ○ 8/8 36.7 ○ 8/8 ○ 8/8
group_by_month ○ 6/6 27.5 ○ 6/6 ○ 6/6
top_k_frequent ○ 8/8 32.3 ○ 8/8 ○ 8/8
Total 5/5 5/5 4/5

All 5 problems, 49 tests passing. The result matches Bolt. parse_duration (converting strings like "1h30m" to seconds), which Lightning failed due to budget overflow, was solved in 150 seconds. Super VL and Bolt were not differentiated here.

Fixing Existing Bugs

A mini-repository where 5 of 12 tests are failing is handed over, and the model must fix it using only file read/write tools.

Model Fixed Turns Tool calls Time (s)
Super VL 5/5 6 14 99.7
Bolt 5/5 5 11 43.0
Lightning 5/5 13 12 33.6

All three bring all 12 tests to passing. Super VL fixes everything in 6 turns, with 0 malformed calls (unparseable output). The 99.7 seconds reflects the single-stream 19 tok/s speed directly—about twice Bolt's time. The amount of progress per turn is similar to Bolt, and about half of Lightning's 13 turns.

Fitness as a Tool

I examine whether it can serve as a component in an agent. The tool-calling format is the same XML as Bolt and Lightning, and the vLLM side uses --tool-call-parser qwen3_coder to convert it to OpenAI-compatible JSON.

All 5 basic call tests passed. The task of finding bugs in a pseudo-filesystem also solved in 3 turns with 6 tool calls and 0 malformed calls. Both tool calls and thinking content appear properly in streaming chunks.

required stops at 1 call; two queries are batched into one message

The behavior most prominent in Lightning—returning the same call 159 times with tool_choice: required—did not appear. It accepts the constraint and stops at 1 call, same as Bolt.

For a query like "tell me the weather in Tokyo and Osaka," it returned both calls bundled in a single message. Lightning split them into 2 turns of 1 call each, so this bundled pattern appears to have been inherited from Super VL through to Bolt. One observation is not enough to characterize this as a fixed behavior, but in environments where tool round-trips are costly, this tendency is advantageous.

Agent Fitness Probes

I examine whether the model can be hosted on harnesses like opencode or Hermes Agent using 6 probes. To be clear up front: what is being measured here is the capabilities those harnesses depend on, not the results of running the harnesses themselves.

Probe high medium off high (16,384) Bolt (high)
Select correctly from 40 tools 4/6 ○ 6/6 5/6 ○ 6/6 4/6
Rule adherence with long system prompt ○ ○ × ○ ○
Reproduce fixed format (5 times) ○ 5/5 ○ 5/5 × ○ 5/5 4/5
Lock response language ○ (3/3) ○ (3/3) ○ (3/3) ○ (3/3) ○ (3/3)
Suppress excessive tool calls ○ (2/2) ○ (2/2) ○ (2/2) ○ (2/2) ○ (2/2)
Multi-turn exchange ○ ○ ○ ○ ○

All 6 probes passed with medium. Per-harness judgment: all 3 harnesses—opencode, Hermes Agent, and OpenClaw—rated "usable." Lightning, Bolt, and Qwen3.8-27B measured on the same probes all rated "difficult" for all 3 harnesses under every condition, so this is the first time this rating has been achieved.

High at 8,192 failed only 2 of the tool selection questions. Not choosing a cron-creation tool for "schedule this to run every morning at 9" is the same miss as Bolt and Lightning. But with the budget extended to 16,384, it passed 6/6. With 40 tool definitions loaded, thinking becomes long, and at 8,192 the budget runs out before the answer can be written. Medium passes at 8,192 by the same logic: shortening the thinking leaves room in the budget to reach the answer.

Disabling thinking causes the "place a one-line summary at the end" rule in the long system prompt to be dropped, and the daily report format fluctuates in line count across 5 tries. This is the same breakdown seen with Bolt and Lightning. In the Nemotron 3.5 family, hosting on a harness with thinking disabled is not recommended.

Images

Super VL can also read images, so I ran the same 3 probes as Bolt, plus a Japanese document image task.

Probe Result Details
List protective equipment (factory photo) ○ Names helmet and reflective vest; does not name things not present
Read values from bar chart ○ (4/4) Transcribes 17, 43, 62, 88 in order
OCR of inspection record ○ (CER 0.0) Date, equipment number AZ-4471, 7.5 mm/s, judgment, inspector—not a single character missed

All 3 passed, with 0 hallucinations (naming things not in the image). The result matches Bolt; again no differentiation between Super VL and Bolt here.

For Japanese document images, I took 2 horizontal-text and 2 vertical-text pages from the synthetic OCR dataset JSSODa (CC-BY 4.0) and scored with Character Error Rate (CER). Budget 4,096, thinking high.

Image Result Time (s)
Horizontal 1 CER 0.0 123
Horizontal 2 CER 0.0 129
Vertical 1 (3 columns) No body (thinking exhausts budget) 217
Vertical 2 (3 columns) No body (thinking exhausts budget) 216

The 2 horizontal-text pages were transcribed without a single error. For the 2 vertical-text pages, roughly 8,000 characters of thinking exhausted the 4,096 budget before any body output appeared. To distinguish a budget issue from a capability issue, I re-measured the same 2 pages with thinking off and with budget 16,384.

Condition Vertical 1 Vertical 2
No thinking, budget 4,096 CER 0.939 CER 0.999
high, budget 16,384 CER 0.964 CER 1.003

Body text did appear in both cases, but it was not readable. Looking at the output, instead of reading each column top to bottom, it was picking up characters at the same height across columns. The result was text like picking one character correctly from each column but assembling them in the wrong order. Quadrupling the budget produced the same breakdown—just a longer wait, up to nearly 10 minutes. Horizontal Japanese text is readable; vertical text is read horizontally across columns. This is not a budget issue; it is about how this model reads. Anyone working with vertically written documents should treat this as a given.

Video input, which the model card mentions, was not tested this time.

How Super VL and Bolt Differ on the Same Tasks

I rearrange the scores so far across all three Nemotron 3.5 models. Since Bolt used llama.cpp and Lightning and Super VL used vLLM, speed is omitted and only quality judgments are compared.

Task Super VL 120B-A12B Bolt 74B-A9B (2-bit) Lightning 30B-A3B
Japanese (high) 8/9 8/9 8/9
Japanese (medium) 9/9 8/9 not measured
Code generation 5/5, 49/49 5/5, 49/49 4/5
Bug fixing 5/5, 6 turns 5/5, 5 turns 5/5, 13 turns
Tool calling 5/5, required stops at 1 5/5, required stops at 1 5/5, required returns 159
Agent fitness (high) 5/6 probes, 1 harness usable 4/6 probes, all harnesses difficult 4/6 probes, all harnesses difficult
Agent fitness (medium) 6/6 probes, 3 harnesses usable 4/6 probes, all harnesses difficult not measured
Image 3 probes 3/3 3/3 text-only

Looking only at high-condition scores, Super VL and Bolt are almost identical: Japanese 8/9, code 5/5, tools 5/5, images 3/3. The fact that Bolt, compressed to 2 bits, matches Super VL this closely is the effect of QAD, which I described in the Bolt article, seen now from the Super VL side.

The difference appears with medium thinking and wider budgets. Super VL rises to Japanese 9/9 and agent fitness 6/6 at medium; Bolt stays at 8/9 and 4/6 regardless. The 2 tool-selection misses can be resolved in Super VL by providing a budget of 16,384; Bolt missed the same 2 questions at all three thinking levels (I did not measure Bolt at 16,384). My reading is that the gap between active 12B and 9B is invisible on easy tasks, and shows up on tasks involving selection from many options or summarization while preserving proper nouns.

The trade-off is that Super VL is slow. Single-stream is 38 tok/s with speculation, 19 tok/s without. It does not reach Bolt's 61.61 tok/s on llama.cpp or Lightning's 79.59 tok/s. Resident memory is also close to 100 GiB, which means dedicating the entire DGX Spark to this model. If you want a single smart executor, Super VL; if you prioritize speed and co-location, Bolt; if you need to share with several users, Lightning. Measuring Super VL reaffirmed my view that even within Nemotron 3.5, the right choice depends on where you are deploying it.

Summary

Nemotron 3.5 Super VL 120B-A12B NVFP4 ran with the DGX Spark recipe from the model card exactly as written, starting up with the default 1M context in 11 minutes. LiLiCorr speculative decoding delivers 38.07 tok/s single-stream, and 19.06 tok/s without it. For inputs from 16K to 64K tokens, prefill runs at 2,100–2,200 tok/s, and time to first token for 64K input is 30 seconds.

Quality was best with thinking set to medium: Japanese 9/9, code 5 problems 49 tests all passing, tool calling 5/5, all 6 agent fitness probes passed, 3 harnesses rated "usable." This is a result that no other model measured on the same tasks had reached, and the active 12B advantage shows up on tasks with many choices. The default high exhausts its budget on some tasks within 8,192 tokens, so I recommend medium for both conversational use and harness deployment.

Things it could not do are also worth noting. Vertical Japanese text was read horizontally across columns, and this did not improve with more budget. Built-in MTP and video input were not tested.

Next is actually using that 1M context window. There are already forum reports of successfully retrieving a keyword from a 1M-token context, so I would like to measure TTFT when feeding documents of several hundred thousand tokens while keeping an eye on zone temperatures.


AI白書2026 配布中

クラスメソッドが独自に行なったAI診断調査をもとに、企業のAI活用の現在地を調査レポートとしてまとめました。企業規模別の活用度傾向に加え、規模を超えてAI活用を進める企業に共通する取り組みまで、自社の現在地を捉えるためのヒントにぜひ。

AI白書2026

無料でダウンロードする

Share this article

DevelopersIO 2026