投机解码(Speculative Decoding)
一句话:让小草稿模型先猜
个 token,目标大模型一次前向并行验证,配合拒绝采样在数学上严格保持目标分布——输出不变、decode 加速 2-3 倍起步。论文:Fast Inference from Transformers via Speculative Decoding(2022,ICML 2023)。 关键年份:Speculative Decoding 2022(Google,arXiv:2211.17192,ICML 2023)· Speculative Sampling 2023(DeepMind,arXiv:2302.01318)· Medusa 2024(Princeton/Together,arXiv:2401.10774)· EAGLE-1 2024(arXiv:2401.15077,ICML 2024)· EAGLE-2 2024(EMNLP 2024)· MTP 2024(Meta multi-token prediction arXiv:2404.19737 · DeepSeek-V3 arXiv:2412.19437)· EAGLE-3 2025(arXiv:2503.01840) 前置阅读:推理优化总览、KV Cache
1. 直觉与动机
Decode 阶段是 memory-bound:一次前向处理 1 个 token 和处理
另一个观察是 token 难度的不均匀:大量 token(语法功能词、固定搭配、对 prompt 的复述)小模型也能猜对,但标准自回归强迫大模型对每个 token 付出同样代价。投机解码借用 CPU 投机执行的思想:让便宜的草稿模型沿"预测路径"先走几步,大模型一次性验证,错了再回滚。
剩下的关键难题是正确性:草稿 token 采自草稿分布
2. 方法与公式
主循环
每轮:草稿模型从当前前缀出发自回归生成
无损的接受规则(speculative sampling)
记某位置目标分布为
- 若
:直接接受; - 否则以概率
拒绝,并从残差分布重采样:
直觉:
加速比的解析形式
定义单个草稿 token 的接受率
设
两点结论:分子随
Medusa:多解码头 + 树注意力(非无损)
Medusa(Cai et al., 2024)不要独立草稿模型:在主干最后隐状态上接
验证上 Medusa 用 typical acceptance 替代拒绝采样:按目标分布的熵设动态阈值——熵高时放宽、熵低时收紧,超过阈值即接受。它不保证输出与目标分布严格一致,是有损方案,用放弃精确分布匹配换更高接受率;仅在温度 0 时退化为精确匹配验证。
EAGLE:特征层外推,当前事实标准
- EAGLE-1(Li et al., 2024,ICML 2024):在目标模型倒数第二层(second-to-top-layer)的特征层做自回归外推,比 token 层更有规律;同时把提前一个时间步的 token 序列(含已采样 token)一并输入,消除采样随机性带来的特征不确定性。草稿网络复用目标模型的 embedding 与 LM head,中间只有一个 FC 降维层加单个 decoder 层(7B 目标约 0.24B、70B 目标约 0.99B 参数)。验证沿用标准 speculative sampling,可证无损;LLaMA2-Chat 70B 上加速 2.7-3.5x,贪心下首 token 接受率约 0.75-0.85,平均每轮接受约 3.6-4.5 个 token。
- EAGLE-2(2024,EMNLP 2024):发现草稿模型置信度能较准地近似 token 接受率,据此做 context-aware 的动态草稿树扩展与重排序(替代静态树);3.05-4.26x,比 EAGLE-1 快 20-40%,仍无损。
- EAGLE-3(2025):放弃"预测下一步特征"的约束、改为直接预测 token,并用 training-time test 融合目标模型低/中/高多层特征,使草稿网络能从训练数据规模化中持续获益;最高 6.5x,SGLang 中 batch size 64 下吞吐仍提升 1.38x。

图源:Li et al., EAGLE: Speculative Sampling Requires Rethinking Feature Uncertainty, arXiv:2401.15077(用于学习注解,版权归原作者)
EAGLE 系列已合入 vLLM、SGLang、TensorRT-LLM、MLC-LLM 等 15+ 主流框架,是目前工程上的默认选择。
MTP(多 token 预测):训练目标兼自投机 draft
前面几种方法都是事后给一个训练好的模型外挂草稿;MTP(Multi-Token Prediction)则把"预测多个未来 token"直接做进预训练目标——模型在训练时除了预测下一个 token,还并行/串行地预测再往后的若干 token。它一举两得:既给训练加密了监督信号(每个位置承担更多预测任务,被证明在大模型上能提升主模型质量),又天然得到一组"预测未来 token 的头",推理时无需独立草稿模型即可做自投机(self-speculative)解码。
- Meta 的 multi-token prediction(Gloeckle et al., 2024, arXiv:2404.19737):在共享主干上接
个独立输出头,一次前向并行预测未来 个 token。论文发现该目标在较大模型上收益更明显(代码等生成任务尤甚),且用这些头做自投机解码可获得约 3x 的推理加速(原文报告,随设置而变)。 - DeepSeek-V3 的 MTP(arXiv:2412.19437, 2024-12):采用顺序式 MTP 模块(保留完整因果链,逐个预测后续 token)densify 训练信号、提升主模型表现;推理时这些 MTP 模块可直接复用为自投机的 draft,官方报告第二个 token 的接受率约 85%–90%、端到端 decode 提速约 1.8x(以技术报告为准)。
与 Medusa / EAGLE 的关系:三者推理形态高度相通——都是"主干 + 轻量未来-token 预测头 + 一次验证"。区别在于 MTP 的头是在预训练阶段就一起学的(因此还能反哺主模型质量),而 Medusa/EAGLE 通常是对一个既有模型额外训练草稿头。在已用 MTP 预训练的模型(如 DeepSeek-V3)上,自投机几乎是"免费搭车";其无损性同样取决于验证是否走严格的拒绝采样。
3. 与 baseline 对比
| 维度 | 标准自回归 | 独立草稿模型(Leviathan/Chen) | Medusa | EAGLE 系列 |
|---|---|---|---|---|
| 草稿来源 | — | 同 tokenizer 的小模型 | 主干 + | 特征层轻量草稿网络 |
| 额外训练 | 无 | 需现成或自训小模型 | 训头(Medusa-1 可冻结主干) | 训约 0.24-1B 的草稿层 |
| 分布保持 | — | 无损(拒绝采样) | typical acceptance,非无损 | 无损(拒绝采样) |
| 候选结构 | — | 单链 | 静态树 | 树,EAGLE-2 起动态树 |
| 论文典型加速 | 1x | 2-3x | 2.2-3.6x | 2.7-6.5x |
| 额外显存 | — | 整个小模型 + 其 KV | 头部参数 | 草稿层(共享 embedding/LM head) |
4. 实现要点
def speculative_step(prefix, draft, target, gamma):
xs, qs = [], []
for _ in range(gamma): # 串行:γ 次小模型前向
q = draft(prefix + xs); x = sample(q)
xs.append(x); qs.append(q)
ps = target(prefix + xs) # 并行:1 次大模型前向,γ+1 个分布
out = []
for i, x in enumerate(xs):
if random() < min(1, ps[i][x] / qs[i][x]):
out.append(x) # 接受
else:
out.append(sample(norm_clamp(ps[i] - qs[i]))) # 残差重采样
return out # 拒绝即截断,回滚其后 KV
out.append(sample(ps[gamma])) # 全接受,免费多得 1 个
return out- KV cache 回滚:拒绝位置之后的草稿与目标 KV 必须作废;分页式 KV 管理(见 KV Cache)下即释放对应 block。
- tokenizer 必须一致:这是独立草稿路线的最大约束(跨家族模型词表对不上);Medusa/EAGLE 直接长在主干上,天然规避。
- 树形验证需要专门的 attention mask:让每个候选节点只看到其祖先路径,一次前向同时验证整棵树。
- batch size 与收益负相关:大 batch 下 GPU 趋向 compute-bound,"验证免费"的前提弱化,加速比明显低于单请求场景(EAGLE-3 在 batch 64 仍有 1.38x,但远低于其单请求数字);离线大吞吐批处理通常不开投机解码。
- 正确性自检:greedy 下开/关投机解码的输出应逐 token 一致(Chen et al. 的措辞是"在硬件数值精度内"一致,浮点归约顺序可能造成个别差异)。
5. 调参与实践经验
- 先看
再定 :上线前在真实流量样本上量接受率; 高才值得加大 ,按 speedup 公式或直接网格搜索定 (框架默认值通常在 3-5 一带,应据实测调整)。 - 草稿模型选型盯住
:草稿单步耗时要远小于目标模型,通常选小 1-2 个数量级的同家族模型;若没有合适的现成小模型,训一个 EAGLE 草稿层比从头训小模型便宜得多。 - 路线选择:手头有同 tokenizer 小模型且不想训练 → 独立草稿(零训练成本,先验证收益);追求最高加速且能接受一次性训练 → EAGLE(框架支持最成熟);对采样分布严格性有要求(评测、RL rollout 等)→ 避开 Medusa 的 typical acceptance,用无损路线。
- 负载特征决定收益:模板化文本、代码补全、对长 prompt 的复述类任务草稿命中率高、收益大;高温度、高熵的开放创作任务接受率下降,收益打折。
- 与量化叠加:投机解码减少目标模型前向次数,量化减少每次前向的字节搬运,两者正交,延迟敏感场景常同时启用。
6. 参考文献
- Leviathan et al., 2022. Fast Inference from Transformers via Speculative Decoding. arXiv:2211.17192(ICML 2023)
- Chen et al., 2023. Accelerating Large Language Model Decoding with Speculative Sampling. arXiv:2302.01318
- Cai et al., 2024. Medusa: Simple LLM Inference Acceleration Framework with Multiple Decoding Heads. arXiv:2401.10774
- Li et al., 2024. EAGLE: Speculative Sampling Requires Rethinking Feature Uncertainty. arXiv:2401.15077(ICML 2024)
- Li et al., 2024. EAGLE-2: Faster Inference of Language Models with Dynamic Draft Trees. arXiv:2406.16858(EMNLP 2024)
- Li et al., 2025. EAGLE-3: Scaling up Inference Acceleration of Large Language Models via Training-Time Test. arXiv:2503.01840
- Gloeckle et al., 2024. Better & Faster Large Language Models via Multi-token Prediction. arXiv:2404.19737
- DeepSeek-AI, 2024. DeepSeek-V3 Technical Report(含顺序式 MTP 训练目标与自投机推理). arXiv:2412.19437