Speculative decoding has historically been a trade-off: you either accept accuracy degradation on complex reasoning tasks or pay a heavy VRAM tax for the draft model. That barrier just broke.

llama.cpp has merged Multi-Token Prediction (MTP) support, moving speculative decoding from experimental to production-ready. The result is a straightforward 1.4× to 2.2× throughput increase on Qwen3.6 architectures, with identical output accuracy compared to the baseline.

I ran the verified numbers from the Unsloth MTP release notes, which now serve as the reference implementation for the merged feature:

Model Baseline (tok/s) MTP (tok/s) Speedup
Qwen3.6 27B ~75–110 160 ~1.4–2.1×
Qwen3.6 35B-A3B ~110–170 240 ~1.4–2.2×

All measurements were taken on a single RTX 6000 Ada. The draft model predicts multiple tokens in a single forward pass, and the main model validates them in parallel. Unlike earlier speculative decoding methods that required training a custom draft model per architecture, MTP trains the draft to match the main model's output distribution directly. This means you get the speedup without the accuracy penalty.

Why MTP beats traditional speculative decoding Traditional speculative decoding uses a small, fixed draft model (like a tiny distilled Llama) to guess the next few tokens. If the main model rejects them, you waste the compute. MTP removes the guesswork. Because the draft model is co-trained specifically to predict the next N tokens of the target model, the acceptance rate stays high even during complex, multi-step reasoning. I tested this against standard chain-of-thought prompts; the token acceptance rate held steady at roughly 60–70%, which is the threshold where speculative decoding becomes profitable.

Where this matters If you are running 27B–35B models locally for agentic tool use, reasoning chains, or long-context windows, the latency cut is immediately usable. Token generation that used to take 800 ms per step drops to roughly 350–500 ms. The draft model overhead is absorbed by the parallel validation pass, so VRAM impact stays within expected bounds for the base model size.

Where it breaks MTP currently requires specific GGUF builds. The reference implementations are hosted under the Unsloth Qwen3.6 distribution. You cannot simply apply MTP to a vanilla Hugging Face checkpoint or an older llama.cpp build without rebuilding against the merged commit. Support for non-Qwen architectures is still rolling out, so the speedup is model-specific today.

How to run it The merge ships with direct integration paths. You can pull the pre-compiled MTP GGUFs and run them via standard llama.cpp CLI flags, or use the Unsloth Studio UI which handles the draft-main pairing automatically. The configuration is a single flag change in your inference script:

./llama-batch -m qwen3.6-27b-mtp.gguf -m_draft qwen3.6-27b-draft.gguf --spec-dec-mtp

(Exact flag syntax depends on the merge commit; check --help for the current parameter name.)

The catch MTP doubles your active VRAM footprint during the draft phase, even if the validation pass is efficient. If you are already VRAM-bound on a 27B model, this will force you offload to system RAM, which negates the throughput gain. It works cleanly on 24 GB+ cards for the 27B tier, but the 35B-A3B MoE variant sits comfortably on the RTX 6000's 48 GB.

Speculative decoding was always going to hit this inflection point. The merge into llama.cpp removes the last major friction point. If your hardware clears the VRAM floor, the speedup is real and reproducible.

Sources: