A new champion among partner LLMs for DGX Spark? Comparing Qwen3.6-35B-A3B-NVFP4 in two quantized versions

A new champion among partner LLMs for DGX Spark? Comparing Qwen3.6-35B-A3B-NVFP4 in two quantized versions

I ran actual benchmarks of the much-talked-about Qwen3.6-35B-A3B-NVFP4 on the DGX Spark, comparing the NVIDIA version and Unsloth version quantization benchmarks under identical conditions. I investigated the new "fastest" and the truth behind the speed debate that had been dividing forums.
2026.07.13

This page has been translated by machine translation. View original

Introduction

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

I just recently wrote an article thinking about model configurations to keep resident on a single DGX Spark, and Qwen3.6-35B-A3B, which differs in parameter count from the star of that article, Qwen3.6-27B, has been getting a lot of attention lately. Unsloth is pushing a new NVFP4 quantized version claiming it's "2.5x faster," while the NVIDIA forums have seen pushback saying "actually, when measured empirically, the official NVIDIA version is faster." Many of you are probably wondering which to believe.

https://huggingface.co/unsloth/Qwen3.6-35B-A3B-NVFP4

My interest is less in the debate itself and more in whether this 35B-A3B can replace the "partner for a single DGX Spark" position. In my previous article, the single fastest was Nemotron Nano plus an external drafter added to Gemma at 61–62 tok/s, while the balanced pick for smarts and image input was Qwen3.6-27B at 29 tok/s. The 35B-A3B is a MoE with Active 3B, comes bundled with MTP, and also supports image input — specs that could unify the speed slot and balance slot into one. Since vLLM's new stable v0.25.0 just came out, I downloaded both the NVIDIA version and the Unsloth version and re-measured them under the same conditions.

To state the conclusion upfront: the title of single fastest for my use case has changed hands. The NVIDIA version of 35B-A3B achieves 77 tok/s out of the box, and with the bundled MTP enabled it reaches single 108 tok/s — 1.75x the previous speed champions. And in the much-discussed quantized version showdown, the empirical results under identical conditions showed the NVIDIA version was 12–17% faster across all configurations. The measurements also explain where the "2.5x" claim came from, and why the Unsloth version's benchmark numbers weren't a lie either.

My previous article is here (written as of 2026-07-06). This article is a continuation, adding 35B-A3B under the same harness and same measurement conditions.

https://dev.classmethod.jp/articles/dgx-spark-single-node-best-llm-qwen3-6-27b-nvfp4/

This article presents the results of empirically testing two quantized versions of Qwen3.6-35B-A3B-NVFP4 on a single DGX Spark, covering speed, quality, and image input comprehensively. I hope it's useful for anyone looking to update their local LLM selection for DGX Spark.

What kind of model is Qwen3.6-35B-A3B

First, let's confirm its characteristics. The previous star, Qwen3.6-27B, was a "dense-leaning hybrid" that reads 27B worth of weights for every token. Today's 35B-A3B is, as the name suggests, a MoE with 35B total parameters, with only 3B Active parameters used per token. It operates by selecting 8 + 1 shared experts from 256. Since decode speed on the DGX Spark is largely determined by "the amount of weights read per token," speed is practically guaranteed at this point.

What's nice is that all the virtues of the 27B remain intact. An MTP module for speculative decoding is bundled in the checkpoint, it supports image input (VL), context extends to 262K, and the license is Apache 2.0. The publicly stated intelligence benchmark is also 88.8 on AIME 2025, maintaining a level close to the 27B's 92.7.

One thing that caught my attention is that there are two lineages of NVFP4 quantized versions. Looking inside, it's not just a difference in distributor — the quantization method itself differs.

Item NVIDIA Version Unsloth Version
HF Repository nvidia/Qwen3.6-35B-A3B-NVFP4 unsloth/Qwen3.6-35B-A3B-NVFP4
Quantization modelopt (static) compressed-tensors (dynamic)
Contents FP8 static + NVFP4 (MoE layers) FP8 dynamic/token + NVFP4 dynamic
Checkpoint 23.4GB 26.5GB
MTP Module Bundled Bundled
Published Benchmark MMLU Pro 85.0 / AIME 88.8 MMLU-Pro 85.85 / AIME 92.29

The Unsloth version claims to be "1.56x faster than other NVFP4 quants," and Mia's repository testing this on a DGX Spark reported approximately 80 tok/s single. On the other hand, the NVIDIA forums also have follow-up tests claiming "the NVIDIA version is 15% faster under identical conditions," leaving the numbers split. It seemed fastest to just download both and measure them with the same harness.

There were 2 pitfalls to getting it running on vLLM v0.25.0

The execution environment was based on the stable vllm/vllm-openai:v0.25.0-aarch64, which had just been released the day before verification. Since my previous article was based on v0.24.0, I first re-measured the 27B that was still in cache with v0.25.0 to bridge the versions. It came in at base 12.43 / MTP 28.91 tok/s, within 2.5% of the previous measurements (12.13 / 29.38), so I judged that numbers could be compared directly across builds.

When I then launched 35B-A3B on top of that, it immediately crashed. There were 2 stumbling blocks, so I'll note them first.

The first is an assertion error at launch. Launching with default settings hits the following error and stops:

AssertionError: In Mamba cache align mode, block_size (2096) must be <= max_num_batched_tokens (2048).

35B-A3B is a hybrid with linear attention (GDN), and the block size of 2096 for its Mamba-style cache barely exceeds the v0.25.0 default max_num_batched_tokens of 2048. The fix is simply to add --max-num-batched-tokens 4096 to the launch flags. The 27B, which is also a GDN hybrid, doesn't hit this assertion, so it's a 35B-A3B-specific stumbling block.

The second is the recommended flags for the Unsloth version. The model card specifies --moe-backend flashinfer_b12x --linear-backend flashinfer_b12x for DGX Spark, but specifying --linear-backend flashinfer_b12x with the official v0.25.0 image causes it to fail to launch:

ValueError: --linear-backend=flashinfer_b12x was requested but no 'flashinfer_b12x' kernel exists for this layer type.

There are the same reports in the forums, and it appears this flag only works with special builds like Mia's Docker image (vLLM 0.24.1-dev + FlashInfer 0.6.13). So I measured three variations of how much the backend specification changes things with the NVIDIA version in its default state:

moe-backend specification single tok/s
None (auto) 77.52
marlin 76.51
flashinfer_b12x (MoE only) 77.67

The difference is 1.5%, within the margin of error. Looking at the launch logs, v0.25.0's auto internally selects the MARLIN kernel, landing in the same place as the NVIDIA model card's recommendation (marlin). In other words, as long as you're using the official image, there's no need to worry about backend specification. All subsequent measurements use auto with no flag specification.

To summarize, the launch command for v0.25.0 is as follows. The only difference is that the NVIDIA version uses --quantization modelopt, while the Unsloth version in compressed-tensors format leaves out the quantization specification and relies on auto-detection.

vllm serve nvidia/Qwen3.6-35B-A3B-NVFP4 \
  --host 0.0.0.0 --port 8000 \
  --quantization modelopt \
  --kv-cache-dtype fp8 \
  --max-model-len 65536 \
  --max-num-seqs 8 \
  --max-num-batched-tokens 4096 \
  --gpu-memory-utilization 0.85 \
  --reasoning-parser qwen3 \
  --speculative-config '{"method":"mtp","num_speculative_tokens":3}' \
  --enable-prefix-caching --trust-remote-code

It already exceeded the previous speed champions out of the box

The measurements use exactly the same harness as last time. Force-generating 256 tokens, measuring decode speed excluding TTFT, with single being the median of 3 runs and parallel looking at the combined throughput of 2/4/8 simultaneous requests.

Starting with the NVIDIA version results. The bare state produced single 76.7 tok/s. This already exceeds the previous fastest — Nemotron Nano's 61.2 and Gemma with external drafter's 62.4 — without any MTP. Being 25% faster than Nano at the same Active 3B is likely attributable to the additional lightness of NVFP4 weights compared to bf16 equivalent.

And enabling the bundled MTP, speeds stretched to 98.0 at spec=2 and 108.3 tok/s at spec=3. The speculative decoding acceptance rates at spec=3 were 0.86 / 0.67 / 0.55 from the first stage — the descending staircase distribution you see when things are working well. Previously with Gemma's external drafter, increasing to 3 lookaheads didn't change speed at all, but it's interesting that 35B-A3B's bundled MTP provides a net positive even at stage 3's acceptance rate of 0.55.

Lined up against the 5 models from last time, the changing of the guard is immediately obvious:

Horizontal bar chart of single decode speed for 6 models. Qwen3.6-35B-A3B stands far ahead at 76.7 base + MTP uplift reaching 108.3, followed by Gemma 62.4, Nano 61.1, 27B 28.9, Super 24.0, Ornith 12.6
Dark blue is bare speed, light blue is the MTP uplift. The newcomer 35B-A3B already exceeds the previous speed champions at baseline, reaching 108.3 tok/s with MTP enabled.

Model Configuration Footprint Bare Single MTP Single
Qwen3.6-35B-A3B (NVIDIA) MoE (Active 3B) ~23GB 76.66 108.30
Gemma 4 26B-A4B MoE (Active 3.8B) ~18GB 30.19 62.36 (ext.)
Nemotron 3 Nano 30B-A3B MoE (Active 3B) ~21GB 61.15 N/A
Qwen3.6-27B-NVFP4 dense-hybrid 27B ~20GB 12.43 28.91
Nemotron 3 Super 120B-A12B MoE (Active 12B) ~70GB 15.77 24.02
Ornith 1.0 9B dense 9B (bf16) ~18GB 12.64 N/A

The hypothesis I laid out in the previous article — "decode speed approaches the value of memory bandwidth 273 GB/s divided by bytes read per token" — holds just as well for the newcomer. With a footprint of around 23GB, comparable to Nano and Gemma, it also fits right into the shared sub-machine configuration from last time where you throttle gpu-memory-utilization to around 0.35 to co-reside with RAG or ComfyUI.

Which is faster, the NVIDIA version or the Unsloth version?

Now for the main event. I measured the much-discussed quantized version showdown across 3 configurations — bare, MTP spec=2, and spec=3 — using the same vLLM v0.25.0, same backend (auto), and same harness.

Grouped horizontal bar chart of single decode speed for NVIDIA vs Unsloth versions. Bare 76.7 vs 67.5, MTP spec=2 98.0 vs 81.6, spec=3 108.3 vs 89.9, with NVIDIA version winning all configurations
Blue is NVIDIA version (modelopt), green is Unsloth version (compressed-tensors). NVIDIA version was 12–17% faster across all configurations.

Configuration NVIDIA Single Unsloth Single Diff NVIDIA 8-parallel Unsloth 8-parallel
Bare (no MTP) 76.66 67.52 -11.9% 298.7 264.9
MTP spec=2 97.96 81.61 -16.7% 357.4 361.4
MTP spec=3 108.30 89.92 -17.0% 375.8 344.5

The NVIDIA version wins all single sessions. The results are consistent with forum follow-up reports (Unsloth version averaging 15.2% lower decode speed, single 75 vs 90 tok/s), and at least in my DGX Spark environment's single sessions, "the Unsloth version is faster" did not reproduce.

What's interesting is that the MTP acceptance rates were nearly identical between both versions. spec=2 showed 0.87 / 0.69 for both, spec=3 showed 0.86–0.87 / 0.67–0.69 / 0.54–0.55 for both. This means there's no difference in drafter prediction quality — the difference is purely in execution efficiency of the quantization format. The Unsloth version's compressed-tensors dynamically quantizes activations every token, and in single sessions that computation adds directly to latency. The fact that the gap nearly disappears at 8-parallel load (in MTP spec=2 the Unsloth version actually edges ahead by a slim margin) makes sense if this overhead is amortized across batches.

As for the "2.5x" claim, it's an assertion that includes B200 throughput, and Mia's ~80 tok/s can be substantially reproduced with the Unsloth version's MTP spec=2 result of 81.6 tok/s in this measurement. The numbers themselves are correct; it appears the truth is simply that the comparison against the NVIDIA version under identical conditions was missing.

Checking quality and image input too

Making a switch based on speed alone invites problems, so I ran the same 4-question Japanese quality check from last time (50-character instruction compliance, free description, code generation, numerical calculation) through both versions.

The NVIDIA version passed all 4 questions as expected. It answered the "explain Japan's capital in 50 characters or fewer including punctuation" in 11 characters, code generation was correct through execution verification, and the apple and orange calculation was right. The Unsloth version was correct on code generation and calculation, but on just the 50-character instruction question, the thinking process ran long and was cut off before reaching an answer. Since it was only one trial, I can't call it a statistically significant quality difference, but the tendency toward longer thinking does show up in the numbers.

One caution here: 35B-A3B is a reasoning model, and thinking length is considerably longer than the 27B. When I first ran the quality check with max_tokens 512, thinking used up the entire budget on every question and answers came back empty. It's recommended to secure 2048 or more when checking quality.

I also confirmed image input. The method was to send image requests with MTP enabled and watch the speculative decoding counters in vLLM's metrics. The result was that speculative decoding remained active for both versions, with both text and image requests. MTP's 108 tok/s and image input are compatible. The same behavior confirmed with the 27B is maintained in 35B-A3B as well.

Conclusion

Empirically testing Qwen3.6-35B-A3B-NVFP4 on a single DGX Spark yielded two answers. First, the resident model slot for a single DGX Spark now belongs to the NVIDIA version of 35B-A3B + bundled MTP. At single 108 tok/s, it's 1.75x the previous speed champions, with smarts and image input both covered — it ended up being almost a pure superset of the 27B I said I'd use as my axis last time. I'm going to update my thinking from "choosing between the speed slot of Nano and instruction-following of Gemma" to "start with just 35B-A3B."

Second, the quantized version showdown on DGX Spark single sessions goes to the NVIDIA version. The Unsloth version nearly catches up in 8-parallel, and both versions' published numbers are correct for their respective conditions. However, if you switch without verifying "which conditions the numbers apply to," you'll lose 17% in single sessions.

Next I'd like to incorporate the new champion into a resident configuration and try out tool calling from Hermes Agent and co-residing with RAG in actual operation. I'm also planning to cover re-measurement of Nano and Gemma on the latest builds, and how much the full flashinfer_b12x path on the special build differs, in a follow-up article if the opportunity arises.


AI白書2026 配布中

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

AI白書2026

無料でダウンロードする

Share this article

DevelopersIO 2026