本站内容由 AI 生成,可能存在错误。如发现问题,欢迎到 GitHub Issues 反馈。

Speculative Decoding — 猜测式解码加速

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 的小模型),自回归生成 KK 个候选 token。小模型速度快但不够准确。

Verify 阶段

目标大模型对 KK 个候选 token 做一次 forward pass — 这就像 Prefill 阶段一样是并行的,一次性获得所有 KK 个位置的概率分布。

Draft: 小模型快速生成
Draft Model (68M) — 快速自回归Theq=0.40quickq=0.30brownq=0.25foxq=0.35

Draft model 自回归生成 K=4 个候选 token(速度快,但不够准确)

Rejection Sampling — 保证分布一致性

这是 Speculative Decoding 最精妙的部分 — 通过 rejection sampling 保证输出分布与只用大模型生成完全一致

对每个位置 ii,比较 draft 概率 q(xi)q(x_i) 和 target 概率 p(xi)p(x_i)

  • 如果 q(x)p(x)q(x) \leq p(x)接受 — draft 的保守猜测是安全的
  • 如果 q(x)>p(x)q(x) > p(x):以概率 1p(x)/q(x)1 - p(x)/q(x) 拒绝

被拒绝后,从修正分布 norm(max(0,p(x)q(x)))\text{norm}(\max(0, p(x) - q(x))) 重新采样 1 个 token。

关键保证: 无论 draft model 有多差,最终输出分布都和只用 target model 生成一模一样。差的 draft model 只会降低加速比(更多 rejection),不会影响质量。

加速比分析

定义 acceptance rate α\alpha — draft token 被接受的平均概率。

期望每轮生成的 token 数为:

E[tokens]=1αK+11αE[\text{tokens}] = \frac{1 - \alpha^{K+1}}{1 - \alpha}

α\alpha 越高(draft 越准)、KK 越大(一次猜得越多),加速比越高:

期望每轮生成 token 数
3.69 tokens
(1 − 0.80^6) / (1 − 0.80) = 3.69
24681012345678910K (draft length)Expected Tokensα=0.5α=0.7α=0.8α=0.9α=0.95
α=0.5
α=0.7
α=0.8
α=0.9
α=0.95

实际加速比通常在 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 预测第 KK 个 token

Tree Attention 验证

多个 head 的预测组合成一棵候选树(而非单一序列),用 tree attention mask 一次 forward pass 验证所有候选路径,选择最长的被接受路径:

Current
Head 1
Head 2
catconf: 1.00satconf: 0.72isconf: 0.61onconf: 0.68byconf: 0.31aconf: 0.55veryconf: 0.22

Medusa 的多个 head 组合成候选树,Tree Attention 一次验证所有路径,选择最长被接受分支

训练

冻结 target model,只训练额外的 prediction heads。训练成本低,只需要少量数据和小参数量。

优势: 不需要额外模型、部署简单、训练成本低

局限: Heads 未经联合训练(推理时才加上的),预测质量有限 → acceptance rate 不如后面的 Eagle

Multi-Token Prediction (MTP) — 训练时加多头

核心思想

与 Medusa 的关键区别:训练时就让模型同时预测未来第 1, 2, …, K 个 token。 每个预测头共享主干网络,各有独立的输出层,训练 loss = 各头 loss 之和(或加权和)。

和 Medusa 的关键区别

MedusaMTP
训练方式推理时冻结主模型,单独训 heads联合训练,heads 和 backbone 一起优化
Head 质量未见过主模型的训练过程与主干共同优化
类比临时加装的猜测器出厂自带的多步预测能力
训练时推理时Backbone(共享)Input TokensBackbone(同一个)Input TokensHead 1Loss₁ (next)Head 1Verify (target)Head 2Loss₂ (next+1)Head 2Draft token 1Head 3Loss₃ (next+2)Head 3Draft token 2

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,准确率自然更高。

传统 Draft ModelTokenEmbedding信息少 ↓小模型 (68M)独立参数Draft TokensvsEagle — Feature-Level DraftingHidden StatesTarget 最后一层信息丰富 ↑轻量 Decoder1 层Draft TokensHidden state 包含完整上下文语义 → Eagle 的 acceptance rate 比 Medusa 高 ~10-15%

关键洞察: 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-based Draft (Token Budget = 9)Thep=1.0catp=0.7satp=0.8onp=0.9downp=0.1isp=0.2herep=0.5dogp=0.3ranp=0.6AcceptedRejectedPruned (not verified)9 tokens verified4 accepted (44%)Tree vs Chain: 同样的 Token BudgetTree: 多条候选路径并行验证 → reject 只影响单条分支,其他路径不受影响Chain: 单一序列 → 一处 reject 后所有后续 token 作废,budget 利用率低

Tree Attention Mask

要在一次 forward pass 中验证整棵树,需要构造特殊的 attention mask:每个节点只能 attend 自己的祖先路径上的节点(而非所有前面的节点)。这比标准因果 mask 更加稀疏:

Standard Causal Mask每个 token 看到所有之前的 tokenThecatsatonisdogranThecatsatonisdogranTree Attention Mask每个 token 只看到自己的祖先路径ThecatsatonisdogranThecatsatonisdogranTree mask 允许不同分支并行验证: "is" 不会看到 "sat/on","dog" 不会看到 "cat" 分支一次 forward pass 验证所有路径 → 选择最长被接受路径

验证完成后,选择树中最长的被接受路径作为输出。固定 token budget 下,树结构的 expected accepted tokens 显著高于链结构。

EAGLE-3 — Scaling Up Speculative Decoding

EAGLE 系列是目前 acceptance rate 最高的 speculative decoding 方案。从 EAGLE-1 到 EAGLE-3,核心演进是:

EAGLE-1: Feature-Level Drafting
EAGLE-1: Hidden State → Feature → Token用 target model 的 hidden state 做 draft — feature 级信息量 > token 级Target ModelForward PassHidden StateTop-layer featureToken EmbeddingDraft HeadLightweight decoderfeatureembeddingDraft TokensT+1, T+2, ...核心洞察: Feature-level > Token-levelHidden state 编码了完整上下文语义 → acceptance rate 比 Medusa 高 10-15%限制: Draft 阶段依赖 target model 的 hidden state → 必须等 target forward pass 完成

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 1/2: Feature Prediction Pipeline
EAGLE 1/2: Hidden State → Feature → TokenDraft 依赖 target model 的 hidden state — 三步流程Target ForwardExtract Hidden StateDraft Head (Feature→Token)Verify (Target)串行依赖链: Draft 必须等 Target 的 Hidden State → 无法流水线化迭代过程:Target #1Draft #1Target #2Draft #2Target #3Draft #3每轮: Target forward (慢) → Draft (快) → 串行等待EAGLE-1 ~3.5x | EAGLE-2 ~4.5x (dynamic tree 改善了 budget 分配)

实测 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,并行验证,不断迭代直到收敛。

工作原理:

  1. 初始: 随机猜测位置 t+1,t+2,,t+Kt+1, t+2, \ldots, t+K 的 token
  2. 每步: 用 target model 对所有位置并行做 forward pass
  3. 如果某位置的预测和猜测一致 → 该位置”收敛”
  4. 未收敛的位置用新预测替换,继续迭代
  5. 通常 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 和最终加速比。