TreeFlash: Parallel AR-Approximation for Faster Speculative Decoding
Preprint 2026
ETH Zurich, Switzerland
Abstract
Overview

Speculative decoding accelerates LLM inference by letting a cheaper drafter propose multiple future tokens that the target model verifies in parallel. Tree-based speculative decoding improves this further by proposing a tree of possible continuations instead of a single chain.
One-shot block drafters such as DFlash are especially attractive because they generate an entire draft block in one forward pass. Their limitation is that each future position is predicted from the prefix alone: the distribution for token x_{t+i} does not depend on the earlier drafted tokens. This marginal conditioning becomes increasingly mismatched with the verifier’s true autoregressive distribution as draft depth grows, and it is especially limiting for tree drafting, where different branches need different continuations.
TreeFlash addresses this bottleneck with a small AR-approximation module. It conditions each draft position on the previous token while preserving the O(1) drafting time complexity that makes one-shot drafters fast.
How It Works

TreeFlash has three main components:
- One-shot backbone: TreeFlash starts from a DFlash-style block drafter that predicts all draft positions in parallel.
- AR-approximation: For each draft position, a small SwiGLU module combines the drafter hidden state with the embedding of the preceding token. This produces a corrected distribution
q'(x_{t+i} | x_{\leq t}, x_{t+i-1}). - Tree construction: The corrected distributions are used with OPT-Tree selection to allocate the draft budget to the most promising candidate continuations.
Naively applying AR conditioning would require sequential steps. TreeFlash avoids this with a fixed top-M intermediate tree: because the AR-approximator conditions only on the immediately preceding token, all modified distributions can be computed in parallel across draft depth and candidate tokens.
Training initializes from a pretrained DFlash checkpoint and zero-initializes the AR-approximator, so training begins as a faithful copy of DFlash. The model is then fine-tuned with forward KL divergence against the verifier distribution, using random anchor positions and ground-truth previous tokens for the AR-approximation input.
Results

TreeFlash is evaluated on Qwen3 4B, Qwen3 8B, and Qwen3 Coder 30B A3B across mathematical reasoning, code generation, and instruction-following tasks. Baselines include EAGLE-3, DFlash, and DDTree.
Key numbers
- +24.8% block efficiency and +17.1% speedup over DFlash at the budget-matched setting B=16.
- +7.5% block efficiency and +3.9% speedup over DDTree at B=16, showing that AR-approximation adds value beyond tree construction alone.
- +12.4% block efficiency and +9.1% speedup over DDTree at B=64, where deeper tree positions make AR conditioning more important.
- +46.2% speedup over DFlash at B=64 on average across the evaluated target models.
- On Qwen3 Coder 30B A3B, TreeFlash improves over DFlash by +1.50 tau at B=16 and achieves +42.8% speedup over DFlash at B=64.
Why AR-Approximation Helps

The core issue is not only that DFlash is imperfect; it is that marginal future-token distributions are structurally limited. Even the ground-truth marginal distribution diverges from the verifier’s autoregressive distribution as draft depth increases. TreeFlash reduces this mismatch by conditioning on the previous token, capturing local token-level coherence that pure marginal distributions miss.

This improved calibration matters most in tree drafting. A tree budget is only useful when the selected branches remain plausible under the verifier. TreeFlash assigns probability mass to branch-specific continuations, so the draft tree can spend its budget on candidates that are more likely to survive verification.
Qualitative Comparison


Ablations


Citation
@misc{rheinboldt2026treeflash,
author = {Rheinboldt, P. and Berdoz, F. and Wattenhofer, R.},
title = {{TreeFlash: Parallel AR-Approximation for Faster Speculative Decoding}},
note = {arXiv:2606.03819},
year = {2026}
}