How fast each setup answers, and why
Decode speed is tokens generated per second for one request on an otherwise idle server; prefill is how fast the prompt is read before the first token. Both measured by the same script on every server, with unique prompts so caches cannot inflate them.
Speculative decoding speeds up without changing answers
Qwen3.8 + MTP: 31.8 → 50.8 tok/s. Muse + DFlash: 38.5 → 56.5 tok/s.
The A6000 decodes 2.5× faster than the Spark; prefill is about equal
Same checkpoint, same vLLM recipe, MTP on both: 50.8 vs 20.3 tok/s.
The prefix cache has no effect on the Spark's vLLM; it works on 0.29
Repeating a 20k-token prompt: 16.7 s again on the Spark; 1.7 s on vLLM 0.29 with MTP on.
The Spark's newer deployment: a different model, faster, with a working cache
Qwen3.8-Flash-Next on vLLM 0.31: 36.2 tok/s decode, prefix cache hits, 20k-token repeat 7.1 s → 0.27 s.
Measured 2026-10-09 with the server verified idle (request count sampled every 15 s). This is not the same model with and without patches: Flash-Next is a 125B-total / 6B-active mixture-of-experts served by a team-built image (vLLM 0.31 + Spark patches, MTP with 2 draft tokens), the "before" column is Qwen3.8-27B on vLLM 0.26.1. Compare deployments, not models. A larger probe run overlapped with another user; its speed and acceptance numbers are not used (its quality samples are: GSM8K 40/40, HumanEval 39/40).
MTP acceptance and the reduced draft vocabulary
The image's drafter proposes 2 tokens per step from a fixed set of 65,536 token ids; the model verifies every proposal against its full output head, so answers are unchanged and only acceptance can drop. On this run's own counters (7,044 drafted tokens, GSM8K, temperature 1.0): of drafted tokens accepted, tokens per step, by position . Cumulative since the server booted (mixed traffic): .
How much does the reduced vocabulary cost? We re-tokenized every saved reasoning trace and answer of this study with the Flash-Next tokenizer and counted the tokens outside the set (method):
The set is essentially ids 0–65,535 (BPE merge order), so what falls out are line-start variants that reasoning uses (" Hmm", "Potential", "Proceed", "Probably") and chemistry pieces (" methyl", " benz"); 6,666 distinct ids are ever missed, the top 40 are 27% of misses. Ceiling on the effect: about 1.6 points of acceptance on this text. A list built from reasoning traces would recover it; not tested on the server (needs a restart with a new list).
All decode and prefill numbers
| Configuration | Decode tok/s | TTFT | Prefill ~1k | ~4k | ~12k |
|---|
Compare speed only within the same runtime (llama.cpp vs vLLM differ in prefill), or the same model and runtime across machines. Muse NVFP4 on vLLM carries two Ampere workarounds that cost it speed.