What Is DSpine? Tencent's Speculative Decoding Draft Model
DSpine is Tencent's roughly 2B draft model for Qwen3.8-27B. See how it speeds up speculative decoding and how it differs from DFlash2 and Eagle 3.
For Engineering and Executives

What is DSpine?
DSpine is an open-weight speculative decoding draft model from Tencent, released under Apache 2.0. The Qwen3.8-27B checkpoint is a small helper (about 2B parameters, five layers) that guesses a block of 16 tokens at once so the 27B model can verify them in a single pass. Its twist is that each layer passes information between neighboring guess positions, so the parallel guesses agree with each other and more of them get accepted.
TL;DR
- DSpine is a small draft model, not a chat model. It sits beside Qwen3.8-27B and proposes tokens that the big model checks.
- It drafts 16 tokens per block in parallel, then lets neighboring positions share features at every layer instead of fixing mismatches afterward.
- On Tencent's general benchmarks, DSpine's acceptance length beats DFlash2 on every task listed, for example 7.20 vs 5.69 on GSM8K at temperature 0.
- On agent workloads at concurrency 8, Tencent reports 2.71x to 3.84x speedups over plain autoregressive decoding at the
lowsetting. - A creator's single-stream test on one H100 measured about 33 tokens/s without DSpine and 156 tokens/s with it, roughly 4.8x. Treat that as one data point, not a benchmark.
- The release is tied to SGLang and a specific Qwen3.8-27B setup, so check the repo before planning around it.
What is speculative decoding?
A large language model normally writes one token at a time. Each token needs a full pass through the model, and that pass is slow. Speculative decoding adds a small, fast draft model that guesses the next several tokens. The big model then checks all of those guesses in one pass.
It keeps the correct guesses from the start of the block, fixes the first wrong one, and discards the rest. The big model always has the final say, so the output quality comes from the target model. The only thing that changes is speed.
The metric that matters is acceptance length: the average number of tokens accepted per verification round. Higher means fewer slow passes through the big model.
How does DSpine work?
The core problem with fast drafters is that parallel guesses are made without seeing each other. If position 3 guesses one thing and position 4 guesses something that does not follow from it, the target model rejects everything from the first mismatch onward.
DSpine's paper title says it plainly: "Draft in Parallel, Condition Through Depth: Adjacent Causal Injection for Speculative Decoding." The model card describes the mechanism like this: each layer passes predicted predecessor features to adjacent positions, carrying causal dependencies through network depth.
In plain terms:
- The draft model starts all 16 positions in parallel.
- At every layer, each position hands its current guess to the next position.
- The guesses are refined together, so they line up as they move deeper into the network.
- At the end, tokens are picked left to right, which keeps the final step cheap.
The dependency between tokens is still modeled. It is carried through the depth of the network rather than through sequential generation steps.
The checkpoint details from the model card:
| Spec | Value |
|---|---|
| Target model | Qwen3.8-27B |
| Draft layers | 5 |
| Block size | 16 |
| Sliding window | 8,192 tokens |
| License | Apache 2.0 |
How is DSpine different from Eagle 3, DFlash and DFlash2?
The approaches differ in when the draft tokens get to see each other.
| Method | How it drafts | Weak spot |
|---|---|---|
| Eagle 3 | One token at a time | Careful, but slow |
| DFlash | Whole block in one pass | Guesses ignore each other, so acceptance stops at the first mismatch |
| DFlash2, Domino, DSpark | Block draft plus a fix-up step after the main pass | Dependencies are repaired after the fact |
| DSpine | Block draft with neighbors exchanging features in every layer and again at the final pick | Needs its own training and runtime support |
That comparison follows the creator's summary of the field. The model card also notes that DSpine's inference uses dynamic verification that references DSpark, and it was built with thanks to DFlash, SpecForge, SGLang and FlashInfer. So it is part of a lineage, not a clean break.
One detail worth noting: in Tencent's evaluation, DSpine drafts blocks of 16 while the official DFlash2 baseline uses blocks of 8. The comparison reflects each method as configured, not an identical block size.
How fast is DSpine?
Tencent's numbers come from SGLang 0.5.22, BF16, FlashAttention 3 and concurrency 8.
Acceptance length vs DFlash2
| Task | DFlash2 (T=0) | DSpine (T=0) | DFlash2 (T=1) | DSpine (T=1) |
|---|---|---|---|---|
| GSM8K | 5.69 | 7.20 | 5.45 | 6.31 |
| MATH-500 | 5.49 | 6.49 | 5.27 | 5.66 |
| HumanEval | 4.87 | 5.71 | 4.34 | 4.71 |
| MBPP | 5.04 | 6.14 | 4.79 | 5.41 |
| MT-Bench | 4.11 | 4.48 | 3.89 | 4.03 |
The gain is largest on math and code, where output is more predictable, and smallest on open-ended chat (MT-Bench). That pattern is typical for speculative decoding. Temperature 1.0 sampling lowers acceptance for both methods.
Agent throughput
For agent benchmarks, Tencent replayed recorded tool-decision prefixes. Throughput is total output tokens divided by wall time. A few examples at the low reasoning setting:
| Benchmark | AR (tok/s) | DFlash2 | DSpine |
|---|---|---|---|
| WorkBuddy Code | 253.35 | 590.27 (2.33x) | 686.23 (2.71x) |
| WorkBuddy Office | 210.03 | 664.77 (3.17x) | 805.53 (3.84x) |
| SWE-bench Pro | 241.86 | 657.71 (2.72x) | 713.41 (2.95x) |
| τ²-bench | 301.39 | 891.37 (2.96x) | 964.30 (3.20x) |
DSpine leads DFlash2 in every row the card lists, at both low and xhigh reasoning. The gap in end-to-end throughput is smaller than the gap in acceptance length, which makes sense. Longer accepted runs help, but the larger draft block and verification add their own cost. A video review of the paper cited roughly 11% more throughput than DFlash2 on average, which fits that picture.
The independent single-stream test
A creator served Qwen3.8-27B with SGLang on a single 80 GB H100 and ran eight prompts one at a time. Without DSpine, the model produced about 33 tokens/s. With DSpine it produced about 156 tokens/s overall, with individual prompts ranging from roughly 95 to 235. That is about 4.8x.
This is a small test on one machine and sits well above Tencent's concurrency-8 agent figures. Batch size, prompt type and settings all change the result. Use it as evidence that the speedup reproduces, not as a number to expect on your workload.
How do you run DSpine?
The setup uses the Tencent repo and SGLang.
git clone https://github.com/Tencent/DSpine.git
cd DSpine
pip install -e .
Then serve the target model with the draft model attached. The key flags from the model card:
sglang serve \
--model-path Qwen/Qwen3.8-27B \
--speculative-algorithm DSPINE \
--speculative-draft-model-path /path/to/Qwen3.8-27B-DSpine-b16 \
--speculative-num-draft-tokens 16 \
--dtype bfloat16 \
--attention-backend fa3 \
--speculative-draft-attention-backend fa3
The full command on the model card adds flags for linear attention, the ReplaySSM cache, memory fraction, context length (131072), max running requests (8) and the Qwen3 reasoning and tool-call parsers. Copy that complete command rather than the trimmed version above.
On hardware, the creator reported that the setup worked on an H100 but did not work when first tried on an A100. Memory use in that test was just under 79 GB with DSpine versus just under 72 GB without it, so the draft model and its caches cost several extra gigabytes.
What are the limitations?
- Narrow target. This checkpoint is built for Qwen3.8-27B. A draft model has to match its target.
- Runtime dependency. The documented path runs through SGLang with a specific algorithm flag and a repo install.
- Vendor benchmarks. The tables come from Tencent. Independent results on your prompts and batch sizes are what count.
- Memory overhead. The draft model and caches add VRAM use on top of a 27B model.
Frequently Asked Questions
Does DSpine change the output of Qwen3.8-27B?
No. In speculative decoding the large model verifies every drafted token and keeps only what it would accept. The draft model affects speed, not who decides the final text.
What does "acceptance length" mean?
It is the average number of drafted tokens the target model accepts per verification round. A higher value means fewer slow passes through the 27B model, which usually means faster generation.
Is DSpine the same as DFlash?
No. Both draft a block of tokens in parallel, but DFlash's guesses do not see each other. DSpine passes features between adjacent positions at every layer so the guesses stay consistent. DSpine's authors also credit DFlash in the acknowledgements.
Is DSpine free to use?
The weights and code are released under the Apache 2.0 license. You still need the hardware to serve Qwen3.8-27B itself.
Useful for
How we source, write, and correct our articles. Editorial standards
Related articles

Meta Muse Ember vs Claude Haiku 5.5 vs GPT-6 Luna: Small Model Comparison

How Good Is Qwen4 Max? Hands-On Tests vs Qwen 3.8

Should You Say Please to AI? Cost, Quality and Habit
