Preprint · arXiv:2611.13017 · 2026

Multi-Future Drafting

Mixture Block Drafters for Tree-Verified Speculative Decoding

Haoyu Huang1,2 Jialiang Kang2 Linlin Yang3 Xiao Yang2,✉ Baochang Zhang1,✉

1Beihang University 2Canva Research 3Communication University of China

TL;DR

  • A draft tree ranked by a product of per-position distributions cannot keep futures apart. To hold two futures that disagree in m positions it must also hold 2m−1−1 of their chimeras, prefixes spliced from both that the target never says. In practice chimeras are 27–33% of a 64-node tree.
  • MFD adds K learned mode embeddings to the input of a one-pass block drafter, trains them winner-take-all, and keeps the B best prefixes over all modes in one exact tree. Cost: K+1 vectors, no extra drafting pass, decoding stays lossless.
  • On four Qwen targets from 4B to 27B, MFD is the fastest method on every task at both temperatures: up to 7.8× speedup, 5–8% faster than the strongest single-mode tree trained identically, 9–16% faster than DARTree, and 45–46% faster than the fastest released drafter in SGLang at batch size 1.

In one minute

A real GSM8K context for Qwen3-4B. After Let’s break, the target model can say this down step by step or down the problem step by step. Watch what a product-ranked tree does with the two futures, and what MFD does instead.

On a narrow screen the animation scrolls sideways; the MP4 below plays full-screen.

Drafter (a): DFlash fine-tuned with D-PACE, one distribution per position, DDTree keeps the 15 best prefixes under the product. Drafter (b): the same drafter fine-tuned as MFD with K = 8 modes; the tree keeps the 15 best prefixes over all modes, each scored by its best mode. In (b) the bars are each mode’s token probabilities; the 15th-best score (.698) is the common cut-off, each mode keeps the prefixes of its block that reach it (37 in all), and every node is pulled from the modes that keep it, so shared prefixes are built once. Both trees and the mode probabilities are the real ones from the paper’s Figure 1 example. Download: MP4 · GIF.

up to 7.8×
speedup over autoregressive decoding (Qwen3.5-4B, T=0), batch size 1
5–8%
faster than the strongest single-mode tree trained identically; 6–12% with 1.42M prompts
9–16%
faster than the released DARTree trained on the same prompts (Qwen3-4B, Qwen3-8B)
45–46%
faster than the fastest released drafter in SGLang 0.5.22 at batch size 1
27–33%
of a 64-node product tree’s nodes are chimeras; its best path crosses one in 61–65% of rounds
K+1
extra vectors (about 23K parameters for K=8), no extra drafting pass, lossless

Abstract

Block drafters such as DFlash draft a block of future tokens in one forward pass, and draft trees such as DDTree verify the prefixes ranked highest by the product of the drafter’s per-position distributions. Under tree verification, the expected number of accepted tokens is the probability mass the tree covers. We show that a product misallocates it: when the continuation can follow several futures, it splices them into chimeras, prefixes stitched together from different futures that the target never produces, and gives them as much budget as the futures themselves. Barring ties, no product-ranked tree can hold two futures that disagree in m positions without 2m−1−1 chimeras, however well the drafter is trained, and in practice chimeras make up 27–33% of a 64-node tree. We propose Multi-Future Drafting (MFD), which restores the coupling with a latent variable instead of the chain rule: K learned mode embeddings at the drafter’s input draft K coherent blocks in the same pass, and a mixture DDTree lets the verifier pick the future the target takes, losslessly and with K+1 extra vectors. On four Qwen targets from 4B to 27B parameters, at batch size 1, MFD reaches up to 7.8× speedup, 5–8% faster than the best single-mode tree trained identically and, on Qwen3-4B and Qwen3-8B, 9–16% faster than the released DARTree trained on the same prompts.

How it works

1

The problem: a product splices futures

Under tree verification the expected number of accepted tokens equals the probability mass the tree covers, so the best tree holds the B most probable prefixes by joint probability. A one-pass drafter gives one distribution per position, and ranking by their product is right only if positions are independent. They are not: a step can be phrased, ordered or formatted in several ways, and after the futures split they disagree almost everywhere. The product’s error is the total correlation between positions, which compounds with depth, and no training of such a drafter removes it.

2

The fix: a latent future, not the chain rule

Two classical tools make positions dependent again. The chain rule conditions each position on the tokens before it and pays with sequential drafting. MFD uses the other one: a latent variable that names the future; given it, positions are independent. K learned embeddings are added to the drafter’s input, one per mode, and the K blocks are drafted side by side in the same forward pass. Training is winner-take-all on each block’s coverage, so the mode that fits a future keeps learning it and the modes specialize.

3

One exact tree, one verification pass

Every prefix is scored by its best mode, and the B best prefixes over all modes form one tree: exactly the union of the per-mode trees, computed by merging the K best-first searches into one heap. The target verifies it in a single pass, as with DDTree, and keeps the future it actually takes. The modes are not separate drafts: uncertainty about the future becomes breadth that the verifier checks in parallel.

Method figure: (a) K modes drafted in one pass, (b) winner-take-all training, (c) one tree verified in one pass
Figure 2. (a) K mode embeddings ek are added to every position of copy k of the block; the copies share the context and run in one forward pass, each giving one distribution per position. (b) The D-PACE loss is applied inside each mode and weighted toward the mode with the largest coverage of the block, so the modes specialize. (c) Prefixes are scored by their best mode; the B best form one tree that the target checks in one pass. Here the real 15-node tree: 6 nodes on future A, 9 on B, no chimera; the target accepts 6 drafted tokens plus the bonus token.

Results

Five tasks (GSM8K, MATH-500, HumanEval, MBPP, MT-Bench) at T=0 and T=1, Hugging Face Transformers, batch size 1, one RTX PRO 6000 GPU. Speedup over autoregressive decoding, with the acceptance length τ in parentheses, five-task means. Every tree method is at its best budget. FT: fine-tuned under our recipe, one or three epochs, on 100K DFlash prompts regenerated by each target; the bottom block uses the 1.42M target-regenerated prompts of Domino, the data of DARTree’s drafter.

Figure 1: the running example and speedup against the tree budget
Figure 1. (a, b) The running example. (c) Speedup (T=0, five-task mean) against the tree budget B: MFD leads the strongest D-PACE tree under the same recipe at every budget, by about 2% at B=16 and 6–7% from B=64 on. DDTree uses the released drafter; dashed: chain drafters.
Table 1. Speedup and acceptance length τ, five-task means. Bold: best within each block.
MethodTrainingQwen3-4BQwen3-8BQwen3.5-4B (thinking)Qwen3.6-27B (thinking)
T=0T=1T=0T=1T=0T=1T=0T=1
EAGLE-3released4.21× (6.46)3.87× (6.01)3.75× (6.07)3.42× (5.58)––––
DFlash chainreleased4.38× (5.98)3.73× (5.08)4.26× (5.99)3.48× (4.88)4.85× (6.25)3.29× (4.23)4.66× (5.81)4.04× (5.04)
DFlash 2 selector chainFT 1 ep4.73× (6.63)4.12× (5.79)4.73× (6.74)4.00× (5.75)5.38× (7.01)3.97× (5.18)4.89× (6.09)4.35× (5.43)
DDTreereleased6.08× (8.59)5.44× (7.70)5.73× (8.18)5.00× (7.13)6.53× (8.78)4.77× (6.51)5.89× (7.62)5.27× (6.86)
DFlash 2 + DDTreeFT 1 ep6.13× (8.84)5.39× (7.78)5.80× (8.60)4.88× (7.28)6.80× (9.29)4.62× (6.40)5.73× (7.40)5.07× (6.57)
D-PACE + DDTreeFT 1 ep6.31× (8.91)5.54× (7.84)6.06× (8.62)5.10× (7.26)6.96× (9.37)4.67× (6.37)6.43× (8.31)5.52× (7.19)
D-PACE + DDTreeFT 3 ep6.22× (8.78)5.39× (7.63)6.04× (8.60)5.03× (7.15)6.97× (9.38)4.66× (6.35)6.46× (8.35)5.50× (7.17)
MFD (K=8)FT 1 ep6.67× (9.63)5.90× (8.54)6.41× (9.35)5.41× (7.88)7.17× (9.88)5.03× (7.02)6.56× (8.64)5.82× (7.71)
MFD (K=8)FT 3 ep6.73× (9.71)5.96× (8.63)6.51× (9.47)5.43× (7.89)7.31× (10.07)5.04× (7.03)6.77× (8.91)5.94× (7.87)
Full data: 1.42M target-regenerated prompts
DARTreereleased6.53× (9.97)5.49× (8.34)6.42× (10.09)5.23× (8.11)––––
D-PACE + DDTreeFT 3 ep6.66× (9.34)5.66× (7.96)6.43× (9.18)5.26× (7.48)7.31× (9.82)4.74× (6.46)6.74× (8.72)5.69× (7.40)
MFD (K=8)FT 3 ep7.32× (10.49)6.35× (9.13)6.98× (10.18)5.88× (8.52)7.78× (10.72)5.18× (7.23)7.16× (9.42)6.16× (8.16)

MFD is the fastest method for every target, temperature and task: the three-epoch MFD is 4.8–7.4% faster than the strongest baseline at T=0 and 5.7–7.6% at T=1. Fine-tuned on the full 1.42M prompts, both trees improve and the mixture’s lead grows to 6.2–12.2%. DARTree is timed in its released configuration, in the same process and on the same prompts: at the same 64 nodes it accepts more tokens per round, but its per-depth correction takes 2.6–2.7 ms per round to build the tree, against about 0.35 ms for MFD. Fine-tuning for three epochs instead of one leaves the single-mode D-PACE unchanged or slightly worse on every target, while MFD improves.

In a serving engine

We implemented DDTree and the mixture tree in SGLang 0.5.22, verifying trees inside the target’s CUDA graphs. Both draft over the 64K most frequent tokens of target responses and verify over the full vocabulary, so decoding stays lossless.

Table 2. Batch size 1 in SGLang 0.5.22 on one RTX PRO 6000 GPU: decode speedup over SGLang’s autoregressive decoding (prefill excluded), with τ in parentheses, five-task means. Bold: fastest per column.
Qwen3-4BQwen3-8B
T=0T=1T=0T=1
Released drafters on SGLang’s own engine paths
EAGLE-32.75× (5.21)2.58× (4.91)3.12× (5.69)2.88× (4.91)
DFlash chain4.06× (5.97)3.46× (5.10)4.39× (5.90)3.62× (4.88)
DFlash 2 selector chain3.37× (5.20)3.07× (4.72)3.57× (4.94)3.26× (4.52)
Tree verification in our SGLang engine
DDTree (released drafter)4.97× (7.81)4.44× (6.99)5.27× (7.79)4.56× (6.74)
D-PACE + DDTree (full data)5.52× (8.72)4.72× (7.48)5.99× (8.84)4.82× (7.15)
MFD (ours)5.93× (9.62)5.06× (8.23)6.43× (9.72)5.26× (7.96)
MFD-D (ours)5.89× (9.59)5.11× (8.27)6.41× (9.69)5.24× (7.95)

Batch size 1. MFD is 45–46% faster than the fastest released drafter, the DFlash chain on SGLang’s own engine paths, and 7–9% faster than D-PACE fine-tuned on the same data in our engine, which shares every optimization.

Larger batches. MFD is 10–18% faster than every released option at batch 1–2 and 3–11% at batch 4, but falls behind DDTree with the released drafter from batch 8 and SGLang’s own paths from batch 16: its draft cost grows with the batch while its acceptance length does not.

MFD-D. The same drafter with a single-mode default path, which the engine switches to from three requests, is the fastest configuration we timed at every batch size.

Figure 5: closed-loop speedup against batch size in SGLang
Figure 5. Closed-loop decode speedup over SGLang’s autoregressive decoding against the batch size (as many requests in flight as the batch size), Qwen3-4B and Qwen3-8B at T=0 and T=1, each method at its best budget per batch size. Dashed line: the fastest released option on SGLang’s own engine paths (DFlash chain, DFlash 2, EAGLE-3) at each batch size, which is the DFlash chain except where DFlash 2 is faster (open squares); DDTree: the released DFlash drafter in our tree engine. MFD and MFD-D run their drafter’s linear layers in FP8 (SGLang’s online option, no new checkpoint): the acceptance length is unchanged, MFD gains 4–8% at batch 4–8 and 8–15% at batch 16–32, the single-mode drafters little (DDTree with the released drafter 3–6% at batch 32, SGLang’s own paths nothing), so every released option is shown at the better of its bf16 and FP8 timings. MFD leads at batch 1–4; MFD-D switches to its single-mode path from three requests and is the fastest option at every batch size.

What the modes are

A mode is one value of a latent variable that names the future. The uncertainty it hedges over is the drafter’s: at T=0 the target is deterministic, but a small drafter that reads a few target layers cannot tell the futures apart, and what remains is spread over the ways a step can be phrased, ordered or formatted. The gain therefore persists at T=0 and needs a branching verifier: a chain that follows one mode, even the gate’s best guess, is worse than a single-mode drafter, while the tree over all modes gains up to 8.7%.

  • All eight modes are used. The effective number of modes is 7.9–8.0 of 8; no mode is the likeliest for more than 16% of the blocks, and leaving any one out lowers τ by 0.3–1.2%. About their mean, the embeddings are nearly equiangular, close to a regular simplex.
  • The winning mode is hard to predict. The gate’s top mode is the winner in 28% of the blocks (chance: 12.5%); its top four contain it in 72%. Following each block’s best mode as a chain would be 20–40% longer, which is the hedging value no chain can collect.
  • The value is in the coupling across positions. Shuffling the modes independently at each position keeps every position’s distributions but drops the tree below the single-mode one; the product of the modes’ mean marginals only matches it. The mixture explains a coupling that grows with depth and passes log K at depth 9–10.
  • Most of the gain lives in the drafter’s weights. Random embeddings with the trained norms keep 60–80% of the gain on the MFD drafter but only 12–24% on a drafter trained without modes.
  • Modes help where the target forks. Anchors where a runner-up token of at least 10% leads elsewhere are 60–71% of all anchors and carry 75–88% of the gain; the mixture tree removes 54–57% of the chimeras that forks add.
Table 13. Tokens each mode drafts at the first position where the modes’ argmax chains disagree, most often relative to the average mode (lift in parentheses; Qwen3-4B, T=0). The modes differ in how the next step starts, ends and is formatted.
ModeDistinctive fork tokens
1Our (3.9), But (3.7), implementation (3.2), To (2.6), However (2.5)
2Rightarrow (2.8), **, (2.6), $, (2.5), `, (2.3), Thus (2.2)
3This (3.4), These (3.1), which (3.1), Key (2.6), Since (2.6)
4Therefore (5.0), also (3.0), Test (2.7), correctly (2.6), Then (2.6)
5without (2.8), We (2.8), may (2.7), They (2.6), we (2.5)
6Analy (2.5), --- (2.2), in (2.1), The (2.1), denote (2.1)
7passes (4.2), Solve (2.4), end of turn (1.9), Find (1.9), #### (1.8)
8$. (3.1), So (2.7), indentation (2.5), let (2.5), abc (2.3)
Figure 3: where the budget of a product tree goes
Figure 3. Where the budget goes (Qwen3-4B). Left: share of the nodes at each depth whose last step the target takes with probability below 1%. Right: probability mass kept at each depth. From depth 2 on, where chimeras first form, the product trees waste more nodes and keep less mass; at the same budget the MFD tree covers 8–10% more of the target’s probability mass.

Code and models

The release contains Hugging Face inference with the paper’s speed benchmark, the SGLang 0.5.22 patch (tree verification inside CUDA graphs, the mixture tree, exact tree verification for hybrid Gated-DeltaNet targets, the fused mode-attention kernel), tests, and the drafters below. Each drafter is a DFlash-format checkpoint with K=8 mode embeddings, fine-tuned from the released DFlash drafter of its target.

DrafterTargetData, epochsIn the paperCheckpoint
MFDQwen3-4B1.42M, 3Table 1 (full data), Table 2MFD-Qwen3-4B
MFDQwen3-8B1.42M, 3Table 1 (full data), Table 2MFD-Qwen3-8B
MFDQwen3.5-4B (thinking)1.42M, 3Table 1 (full data)MFD-Qwen3.5-4B
MFDQwen3.6-27B (thinking)1.42M, 3Table 1 (full data)MFD-Qwen3.6-27B
MFDQwen3-4B100K, 3Table 1MFD-Qwen3-4B-100K
MFDQwen3-8B100K, 3Table 1MFD-Qwen3-8B-100K
MFDQwen3.5-4B (thinking)100K, 3Table 1MFD-Qwen3.5-4B-100K
MFDQwen3.6-27B (thinking)100K, 3Table 1MFD-Qwen3.6-27B-100K
MFD-DQwen3-4B1.42M, 3Table 2, Figure 5MFD-D-Qwen3-4B
MFD-DQwen3-8B1.42M, 3Table 2, Figure 5MFD-D-Qwen3-8B

BibTeX

@article{huang2026mfd,
  title   = {Multi-Future Drafting: Mixture Block Drafters for Tree-Verified Speculative Decoding},
  author  = {Huang, Haoyu and Kang, Jialiang and Yang, Linlin and Yang, Xiao and Zhang, Baochang},
  journal = {arXiv preprint arXiv:2611.13017},
  year    = {2026}
}