⚡ DSpark vs DFlash: Up to 2.55× Throughput in a vLLM Test
With DSpark checkpoints and vLLM support now available, parallel speculative decoding is becoming a practical serving option rather than just a research idea.
Zhihu contributor kaiyuan explains how DFlash and DSpark work, then benchmarks both on the same Qwen3-4B target model.
The result: DSpark reached 2.45–2.55× baseline throughput, while DFlash achieved 1.96–2.09×.
1️⃣ Why LLM Decoding Is Naturally Slow
Autoregressive models generate text one token at a time.
Token n+1 cannot be produced before token n. This sequential dependency limits how much parallel GPU compute can be used during decoding.
Non-autoregressive generation works differently. It treats generation more like filling multiple blanks and can predict several positions in one forward pass.
Parallel speculative decoding combines both ideas:
🔹 A lightweight draft model proposes several tokens in parallel.
🔹 The target model verifies them in one batch.
🔹 Accepted tokens are kept; generation restarts from the first rejection.
The challenge is making the draft both fast and accurate enough to be useful.
2️⃣ Why Traditional Draft Models Hit a Wall
Conventional speculative decoding often uses a smaller autoregressive model such as EAGLE.
It produces higher-quality drafts, but still generates candidate tokens sequentially.
Longer drafts require more draft-model forward passes. Making the draft model larger improves accuracy but also increases latency.
Parallel drafters solve the latency problem by proposing an entire token block at once.
However, later tokens in that block do not fully depend on earlier predictions. Their accuracy often drops quickly, creating suffix acceptance decay.
3️⃣ How DFlash Improves Parallel Drafting
DFlash uses a parallel, fill-in-the-blanks-style draft model.
To improve draft quality, it extracts hidden states from several layers of the target model and fuses them into an additional context representation.
Each draft layer then attends to two sources:
🔹 Context derived from the target model
🔹 Representations from the draft tokens themselves
The target model’s hidden states make the lightweight drafter more informed without requiring multiple autoregressive passes.
DFlash can therefore propose a long block in one forward pass.
But longer blocks still create a problem: the suffix is more likely to be rejected, while the target model must spend compute verifying it.
4️⃣ DSpark Adds Sequential Structure
DSpark extends DFlash with semi-autoregressive generation.
It first uses a parallel backbone to generate intermediate logits for multiple positions. A lightweight sequential module, implemented with an RNN or Markov head, then produces the draft tokens from left to right.
This small sequential step restores dependencies inside the block without giving up most of the parallel speed.
It also predicts a confidence value for every token: the probability that the token will survive target-model verification if the previous prefix is accepted.
The result is a stronger draft with less suffix decay.
5️⃣ Verification Length Becomes Dynamic
DSpark does not automatically send the entire draft to the target model.
Its Hardware-Aware Prefix Scheduler considers:
🔹 The survival probability of each draft prefix
🔹 The current batch size and system load
🔹 A profiled steps-per-second curve for the hardware
Verifying one more token may increase the expected accepted length. But it also enlarges the verification batch and can reduce processing speed.
The scheduler expands each prefix only while estimated throughput continues improving. Low-confidence suffix tokens are discarded before they consume target-model compute.
Draft long, but verify only the prefix that is still worth verifying.
6️⃣ The vLLM Test Setup
The author tested both methods under the same environment:
🔹 8× NVIDIA A800-SXM4-80GB
🔹 Qwen3-4B target model
🔹 DSpark block-7 and DFlash block-16 draft models
🔹 vLLM 0.26.0
The initial comparison used DSpark with four speculative tokens and DFlash with seven.
On 250 GSM8K questions:
✅ DSpark: 35.2% accuracy, 0.75s average latency
✅ DFlash: 31.6% accuracy, 0.84s average latency
On 250 MMLU questions:
✅ DSpark: 28.8% accuracy, 0.24s average latency
✅ DFlash: 27.6% accuracy, 0.27s average latency
DSpark reduced average latency by roughly 11% in both tests.
7️⃣ Throughput Is the Stronger Result
Because the two methods used different speculative-token settings, the author swapped those parameters and tested again.
🔹 Original settings: DSpark=7, DFlash=4
DSpark reached 584 tok/s, while DFlash reached 449 tok/s.
✅ DSpark was 1.30× faster.
🔹 Swapped settings: DSpark=4, DFlash=7
DSpark reached 561 tok/s, while DFlash reached 480 tok/s.
✅ DSpark remained 1.17× faster.
Changing num_speculative_tokens affected throughput by less than 7%.
DSpark remained faster in both configurations, showing that its advantage did not come from receiving a more favorable draft length.
Compared with the 229 tok/s baseline:
🔹 DSpark delivered 2.45–2.55× throughput.
🔹 DFlash delivered 1.96–2.09× throughput.
At matched settings, DSpark stayed roughly 20% faster than DFlash.
⚠️ Do Not Overread the Accuracy Numbers
The accuracy differences are less conclusive.
MMLU results varied by about one percentage point. On GSM8K, even the baseline changed from 29.2% to 34.4% across two runs.
The author attributes this to different vLLM batch compositions changing floating-point accumulation order. That can alter a small number of token choices even with temperature=0.
So the test strongly supports a throughput advantage. It does not establish that speculative decoding improves model intelligence.
💡 The Practical Takeaway
DFlash proves that parallel drafting can generate many candidates cheaply.
DSpark adds the two components needed for production serving:
🔹 Lightweight sequential modeling to improve draft quality
🔹 Load-aware scheduling to avoid unnecessary verification
Its real contribution is not simply drafting more tokens. It is deciding which tokens are still worth verifying under the current serving load.
🔗 DeepSpec:
🔗 Test notebook:
🔗 Full Reading:
#
DSpark# #
DFlash# #
SpeculativeDecoding# #
vLLM# #
LLMInference# #
AIInfrastructure# #
DeepSeek#