Speculative Decoding — 猜测式解码加速
更新于 2026-04-04
LLM 推理的 Decode 阶段是 memory-bound 的 — 每步只生成 1 个 token,GPU 算力大量空闲。自回归生成的核心瓶颈在于顺序依赖:每个 token 的生成都依赖前一个 token 的结果。
Speculative Decoding(猜测式解码)的核心思路是:用一个快速但不那么准确的方法”猜测”多个未来 token,然后让目标大模型一次性并行验证这些猜测。 如果猜对了,一轮就能产出多个 token;猜错了,从错误位置重新采样 — 而且可以保证最终输出分布和只用大模型生成完全一致。
动机 — 为什么 Decode 很慢
回顾 prefill-vs-decode 的结论:
- Prefill 阶段: 并行处理所有 prompt token,是 compute-bound(GPU 算力充分利用)
- Decode 阶段: 逐 token 生成,每步执行 GEMV(矩阵-向量乘法),是 memory-bound
Decode 的每次 forward pass 都需要把整个模型权重从 HBM 加载到计算单元,但只做很少的计算(一个 token 的 GEMV)。GPU 的算力利用率极低。
核心问题:能否”批量”生成 token?直接批量不行(因为自回归依赖),但可以先猜后验 — 这就是 Speculative Decoding。
Draft-then-Verify — 经典方案
Draft 阶段
使用一个参数量小得多的 draft model(例如 7B 目标模型配一个 68M 的小模型),自回归生成 个候选 token。小模型速度快但不够准确。
Verify 阶段
目标大模型对 个候选 token 做一次 forward pass — 这就像 Prefill 阶段一样是并行的,一次性获得所有 个位置的概率分布。
Draft model 自回归生成 K=4 个候选 token(速度快,但不够准确)
Rejection Sampling — 保证分布一致性
这是 Speculative Decoding 最精妙的部分 — 通过 rejection sampling 保证输出分布与只用大模型生成完全一致:
对每个位置 ,比较 draft 概率 和 target 概率 :
- 如果 :接受 — draft 的保守猜测是安全的
- 如果 :以概率 拒绝
被拒绝后,从修正分布 重新采样 1 个 token。
关键保证: 无论 draft model 有多差,最终输出分布都和只用 target model 生成一模一样。差的 draft model 只会降低加速比(更多 rejection),不会影响质量。
加速比分析
定义 acceptance rate — draft token 被接受的平均概率。
期望每轮生成的 token 数为:
越高(draft 越准)、 越大(一次猜得越多),加速比越高:
实际加速比通常在 2–3x(取决于 draft model 质量和目标模型大小)。
Medusa — 推理时加多头
Cai et al. (2024) 提出了一种不需要独立 draft model 的方案。
核心改进
在 target model 的最后一层 hidden state 上接多个轻量 prediction head:
- Head 1 预测下一个 token
- Head 2 预测再下一个 token
- Head K 预测第 个 token
Tree Attention 验证
多个 head 的预测组合成一棵候选树(而非单一序列),用 tree attention mask 一次 forward pass 验证所有候选路径,选择最长的被接受路径:
Medusa 的多个 head 组合成候选树,Tree Attention 一次验证所有路径,选择最长被接受分支
训练
冻结 target model,只训练额外的 prediction heads。训练成本低,只需要少量数据和小参数量。
优势: 不需要额外模型、部署简单、训练成本低
局限: Heads 未经联合训练(推理时才加上的),预测质量有限 → acceptance rate 不如后面的 Eagle
Multi-Token Prediction (MTP) — 训练时加多头
核心思想
与 Medusa 的关键区别:训练时就让模型同时预测未来第 1, 2, …, K 个 token。 每个预测头共享主干网络,各有独立的输出层,训练 loss = 各头 loss 之和(或加权和)。
和 Medusa 的关键区别
| Medusa | MTP | |
|---|---|---|
| 训练方式 | 推理时冻结主模型,单独训 heads | 联合训练,heads 和 backbone 一起优化 |
| Head 质量 | 未见过主模型的训练过程 | 与主干共同优化 |
| 类比 | 临时加装的猜测器 | 出厂自带的多步预测能力 |
MTP 核心: 训练时联合优化的多个预测头 → 推理时直接复用做 speculative draft
与 Medusa 不同: heads 和 backbone 一起训练,预测质量更高
训练到推理的桥梁
训练时的多头预测 → 推理时直接复用这些头做 speculative draft。不需要额外的 draft model,模型自身就是 drafter + verifier(self-speculative)。
实际应用
- DeepSeek-V3: 训练时使用 MTP,推理时利用 MTP heads 做 speculative decoding
- Meta 2024: “Better & Faster LLMs via Multi-Token Prediction” 系统验证了 MTP 的有效性
Eagle — Feature-Level Drafting
Li et al. (2024) 提出了当前 acceptance rate 最高的方案。
核心洞察
Draft 不需要从 token embedding 开始预测 — target model 最后一层的 hidden state 已编码了丰富的上下文语义信息。直接用 hidden state feature 做 draft,信息量远大于 token-level,准确率自然更高。
关键洞察: Token embedding 只有 token 本身的信息,而 hidden state 编码了完整上下文、语义关系、语法模式
架构
Eagle 的 “auto-regression head” 是一个轻量 decoder 层:
- 输入: Target model 的 top-layer hidden state + 当前 token embedding
- 输出: 下一位置的 feature 向量 → 通过 target model 的 LM head 映射到 token 概率
- 自回归: 可以用自己的输出继续预测更远的位置
为什么 Acceptance Rate 更高
- Feature-level 信息量 >> token-level: Hidden state 包含了完整上下文、语义关系、语法模式
- Token embedding 只有 token 本身的信息,丢失了上下文
- 实验显示 Eagle 的 acceptance rate 比 Medusa 高约 10–15%
Eagle-2 改进
引入 context-aware dynamic draft tree:
- 根据每个节点的置信度动态调整树结构
- 高置信度分支 → 展开更深(更多候选)
- 低置信度分支 → 提前剪枝(不浪费验证计算)
- 结果:比 Eagle-1 进一步提升加速比
训练
冻结 target model,只训练轻量 decoder(类似 Medusa 的训练方式),但因为输入是 feature 而非 token,同等训练量下效果更好。
Draft Tree — 树状推测结构
前面 Medusa 和 Eagle-2 都提到了 tree attention — 这里详细展开 draft tree 的结构和验证机制。
为什么树比序列好
经典的 Draft-then-Verify 生成一条链(序列):一旦某个位置被 reject,后续所有 token 全部作废。而 draft tree 维护多条候选路径,一次 forward pass 并行验证所有路径 — reject 只影响单条分支,其他路径不受影响。
Tree Attention Mask
要在一次 forward pass 中验证整棵树,需要构造特殊的 attention mask:每个节点只能 attend 自己的祖先路径上的节点(而非所有前面的节点)。这比标准因果 mask 更加稀疏:
验证完成后,选择树中最长的被接受路径作为输出。固定 token budget 下,树结构的 expected accepted tokens 显著高于链结构。
EAGLE-3 — Scaling Up Speculative Decoding
EAGLE 系列是目前 acceptance rate 最高的 speculative decoding 方案。从 EAGLE-1 到 EAGLE-3,核心演进是:
EAGLE-3 的关键改进
EAGLE-1/2 预测 feature 向量(target model 的 hidden state),再映射到 token。EAGLE-3 转为 direct token prediction — 直接预测下一个 token,同时融合 target model 多层的特征(multi-layer feature fusion),通过 Training-Time Test 技术更好地利用训练数据 scaling。
实测 EAGLE-3 达到 6.5x 加速比,比 EAGLE-2 提升约 1.4x。在 SGLang 推理框架中,batch=64 时吞吐提升 1.38x。
Lookahead Decoding — 无 Draft Model
Fu et al. (2024) 提出了一种完全不同的思路。
基于 Jacobi 迭代
不需要任何 draft model 或额外 head — 基于 Jacobi 迭代,同时猜测多个未来位置的 token,并行验证,不断迭代直到收敛。
工作原理:
- 初始: 随机猜测位置 的 token
- 每步: 用 target model 对所有位置并行做 forward pass
- 如果某位置的预测和猜测一致 → 该位置”收敛”
- 未收敛的位置用新预测替换,继续迭代
- 通常 2–3 轮迭代就能收敛
优势: 零额外参数、零训练成本、任何模型即插即用
局限: 加速比通常低于 Medusa/Eagle(迭代次数不可控),实际约 1.5–2x
对比总结
| 方法 | 额外参数 | 训练成本 | 加速比 | 适用场景 |
|---|---|---|---|---|
▶Draft-then-Verify 独立 draft model 需训练 draft 2-3x 有配套小模型 | ||||
▶Medusa 多个轻量 head 低 2-3x 快速部署 | ||||
▶MTP 训练时内置 高(预训练) 2-3x 从头训新模型 | ||||
▶Eagle 轻量 decoder 低 3-4x 追求最高加速比 | ||||
▶Eagle-3 轻量 draft model 低 ~6.5x 最高加速比 | ||||
▶Lookahead 无 零 1.5-2x 即插即用 | ||||
选择指南
- 已有配套小模型 → Draft-then-Verify
- 从头训新模型 → MTP(预训练时内置多头预测能力)
- 已有大模型,想快速加速 → Eagle > Medusa > Lookahead
- 不想训练任何东西 → Lookahead(即插即用)
所有方法都通过 rejection sampling 保证分布一致性 — 加速是无损的,只影响速度不影响质量。核心区别在于 draft 的来源和质量,这决定了 acceptance rate 和最终加速比。