λLLM Wiki

Speculative DecodingVerifiedPublished

投机解码(Speculative Decoding) 是一类无损的推理加速方法:用一个轻量的 draft model 先快速生成 γ\gamma 个候选 token,再由目标模型(target model)一次并行验证。验证通过的 token 直接接受,验证失败的从目标模型重新采样。由于验证是并行的(一次前向处理 γ\gamma 个 token),理想情况下一步就能推进多个 token,显著提升生成速度。

关键性质:输出分布与目标模型完全一致(精确加速,不是近似)。这由一个被称为 修正采样(modified rejection sampling) 的步骤保证——被拒绝的位置用目标分布和 draft 分布的残差重新采样。

基本流程

设 draft model 为 MdM_d,target model 为 MtM_t,每轮猜测 γ\gamma 个 token:

  1. DraftMdM_d 自回归生成 γ\gamma 个候选 token t^1,t^2,,t^γ\hat{t}_1, \hat{t}_2, \dots, \hat{t}_\gamma
  2. VerifyMtM_t[prefix,t^1,,t^γ][\text{prefix}, \hat{t}_1, \dots, \hat{t}_\gamma] 做一次并行前向,得到每个位置的目标分布 p1,,pγp_1, \dots, p_\gamma
  3. Accept/Reject:从左到右依次检查。对位置 ii,以概率 min ⁣(1,  pi(t^i)qi(t^i))\min\!\left(1,\; \frac{p_i(\hat{t}_i)}{q_i(\hat{t}_i)}\right) 接受(qiq_i 为 draft 分布)。一旦拒绝,从修正分布 max(0,  piqi)\max(0,\; p_i - q_i) 重新采样该位置,后续候选全部丢弃——这一算法即 rejection sampling

每轮接受的 token 数称为 接受长度(acceptance length) τ\tau,平均 τ\tau 越大加速比越高。

每一轮 target model 会接受若干个草稿 token 并在错误的位置或是最后一个位置之后预测一个新 token,因此使用了投机解码的解码轮次一定不会高于未使用投机解码的解码轮次。

加速比

对于一般的投机解码工作,设 draft model 每步延迟 tdt_d,target model 每步延迟 tvt_v,猜测长度 γ\gamma,平均接受长度 τ\tau

Speedup(τ+1)tvγtd+tv\text{Speedup} \approx \frac{(\tau + 1) \cdot t_v}{\gamma \cdot t_d + t_v}

加速的前提是 tdtvt_d \ll t_v(draft 比 target 快得多)且 τ\tau 足够大(accept rate 高)。当 draft 和 target 分布差异过大时,τ0\tau \to 0,系统退化为普通自回归。

Tree Attention

标准投机解码沿单条链验证 γ\gamma 个 token——一旦中间某个被拒绝,后面全部丢弃。Tree attention 将候选组织成树结构:draft model 在每个位置生成多个候选分支,target model 用树形因果掩码一次性验证整棵树。这样即使某条路径被拒绝,其他分支仍可能被接受。

EAGLE-2 和 EAGLE-3 均使用 tree attention,通过动态调整树结构(基于 draft 置信度)来平衡验证成本和接受概率。

前沿工作

Draft Model 的设计流派演变

现在更多的工作并非使用一个独立的小模型作为 draft model,而更多使用一种附加在 target model 上的轻量 draft head 作为草稿生成器的设计。

流派代表方法draft 来源特点
独立小模型Leviathan et al. (2023)独立训练的小 LM最通用,但需要额外模型和显存
Draft headMedusa, EAGLE 系列附加在目标模型上的轻量头复用目标模型特征,参数极少
Block diffusionDFlash轻量扩散模型 + 目标模型特征注入并行生成整块 token,常数级延迟
无训练Prompt Lookup, Lookahead从 prompt 或 n-gram 匹配零额外参数,但 accept rate 有限

EAGLE-3:Training-Time Test

EAGLE 系列用一个单层 Transformer 作为 draft head,附加在目标模型上。输入目标模型的 hidden states 和 token embedding,自回归生成多个候选 token。

EAGLE-3 (Li et al., 2025) 相比 EAGLE-2 有三项关键改进:

  1. 去掉特征级预测损失:EAGLE-1/2 要求 draft head 同时预测 hidden features 和 token,这限制了表达能力且使加速比无法随数据量扩展。EAGLE-3 只保留 token-level loss,解锁了线性 scaling law
  2. 多层特征融合:不再只用目标模型的顶层 hidden states,而是从低/中/高三层提取特征并投影融合,提供更丰富的语义信号
  3. Training-time test:训练时模拟推理场景——第一步用真实的目标模型特征,后续步骤用 draft head 自身的输出。消除了训练/推理的分布偏差,使 accept rate 在深层 draft 位置不再衰减

在 LLaMA-3.3 70B 上达到 4.12× 加速,比 EAGLE-2 提升约 45%。

DFlash:Block Diffusion Drafting

DFlash (Chen et al., 2026) 用一个轻量级 block diffusion model(5 层 Transformer)替代自回归 draft model,一次前向并行生成整个 token block(16 tokens)。

核心创新是 KV Injection:从目标模型的多个层(均匀采样 5 层)提取 hidden features,投影后注入到 draft model 每一层的 KV cache 中。相比 EAGLE-3 仅在输入层融合目标特征,KV Injection 在所有层持续提供 target conditioning。

关键优势是 drafting 延迟为常数级——不随 draft token 数量增长(自回归 draft 的延迟则线性增长)。在 Qwen3-8B 上达到 4.86× 加速(SGLang 集成后 6.1×),比 EAGLE-3 快约 2.5×。

Speculative Speculative Decoding:异步双层投机

Speculative Speculative Decoding (Kumar, Dao & May, 2026) 引入第二层投机:在目标模型验证当前 draft 的同时,draft model 提前预测验证结果并预计算下一轮候选。

具体来说:

  • Draft model 需要和 target model 在独立的 GPU 上运行,这是和之前的工作不同的一点。
  • 在 target model 进行验证的同一时间,draft model 猜测可能返回的验证结果,进行下一步的草稿生成。
  • 如果 target model 返回的验证结果被成功猜测,即在“提前生成的验证结果”缓存中命中,就可以跳过一个 draft model 的轮次直接进入 target model 的下一轮验证,从而实现比纯 speculative decoding 更高的加速比。

注意,此处的验证结果不光包含“生成的草稿猜对了几个 token”,也包括“第一个猜错位置的 token 应该是什么”。因此并不是总能命中,未命中时则退还为普通推测解码。

在这一思想的基础之上,作者又提出了 Saguaro 优化算法以解决三个问题:

  1. 如何用几何级数 fan-out 策略来高效预测验证结果。
  2. 如何用 Saguaro sampling 策略平衡 cache hit rate 和 acceptance rate.
  3. 根据 batch size 在高质量草稿生成和快速 fallback 之间切换。

虽然作者声称他们的算法与 EAGLE3 等现代推测解码算法是正交的,但是笔者认为,此类尝试跳过 draft model 轮次的设计,与 EAGLE3 / DFlash 中需要 target model 的 hidden states 以提高预测效果的设计是天然矛盾的。在 draft model 的轮次之前,我们自然是无法拿到进一步的 target model 的内部信息,从而会大大影响猜测结果——即使在“cache hit”的情况之下,反而可能因为预测质量下降导致效果退化。

SSD 在 LLaMA-3.1 70B 上达到约 5× 加速,比标准投机解码再快约 30%。

投机解码的边界

所有投机解码方法在高 batch size / 高吞吐场景下收益递减:当瓶颈从延迟转向计算,draft 的生成和验证开销反而成为净负担。因此投机解码更适合低并发、延迟敏感的场景(如交互式对话),而非高吞吐批处理。

相关页面

Comments