投机解码与 EAGLE 本节摘要:前沿 LLM 生成一个 token 需要对数十亿参数做一次完整前向传播,而这个前向传播是严重过度供给的——大多数时候,一个小得多的模型能猜对接下来 35 个 token,大模型只需「验证」这个猜测。猜对了,你就用一个前向传播的代价拿到了 5 个 token。投机解码(Speculative Decoding,Leviathan 等 2023)用一套精确的接受/拒绝规则把这件事变得严格等价于从目标模型采样;EAGLE-3(2025)则把每次验证的接受 token 数推到约 4.5 个,实现 45 倍加速且输出分布不变。本节讲透双模型 setup、精确性规则、期望加速比、用蒸馏训练草稿模型,以及 EAGLE 的树形草稿与特征复用两大改进。
本节摘要:前沿 LLM 生成一个 token 需要对数十亿参数做一次完整前向传播,而这个前向传播是严重过度供给的——大多数时候,一个小得多的模型能猜对接下来 35 个 token,大模型只需「验证」这个猜测。猜对了,你就用一个前向传播的代价拿到了 5 个 token。投机解码(Speculative Decoding,Leviathan 等 2023)用一套精确的接受/拒绝规则把这件事变得严格等价于从目标模型采样;EAGLE-3(2025)则把每次验证的接受 token 数推到约 4.5 个,实现 45 倍加速且输出分布不变。本节讲透双模型 setup、精确性规则、期望加速比、用蒸馏训练草稿模型,以及 EAGLE 的树形草稿与特征复用两大改进。
对应原课程:Phase 10 · Lesson 23 ·
25-speculative-decoding(原英文phases/10-llms-from-scratch/25-speculative-decoding/docs/en.md)。
阅读完本节,你应当能够:
E[tokens]=(1-α^(K+1))/(1-α) 估算加速比。70B 级模型在 H100 上的解码吞吐通常只有 40~80 token/秒。每个 token 都要读全部权重做一次完整前向传播——你既不能缩小模型(会改变输出),也不能无限加大 batch(受显存所限)。看起来卡死了。
但自回归生成 x_{t+1} = sample(p(·|x_{1:t})) 虽然看似串行,却藏着一个并发机会:如果你有一个便宜的预测器说「接下来 4 个 token 大概是 [a,b,c,d]」,你就能在大模型的一次前向传播里并行验证全部 5 个位置,并接受最长匹配前缀。
Leviathan、Kalai、Matias(2023)用一套精巧的接受/拒绝规则让这件事严格等价于从目标模型 p 采样——同样的输出分布,2~4 倍速度。
每步:
x_1,...,x_K ~ q。草稿与目标完全一致 → 一次目标前向拿 K+1 个 token;草稿第 1 位就错 → 只拿 1 个。
for each drafted token x_t: r ~ Uniform(0, 1) if r < p(x_t) / q(x_t): accept x_t # 接受 else: # 从残差分布采样替换,然后停止 replacement = sample_from( positive_part(p - q) ) stop
其中 positive_part(p-q) 是逐点差的正部。当草稿与目标一致(p≈q)时接受率接近 1;不一致时,残差分布的构造保证了整体样本仍精确等于 p。
💡 贪婪情形简化:temperature=0 时,只需检查
argmax(p)==x_t,是则接受,否则输出argmax(p)并停止。
设草稿的 token 级接受率为 α,则每次目标前向的期望产出 token 数:
E[tokens] = (1 - α^(K+1)) / (1 - α) # K=草稿长度, α∈[0,1]
α=0.8、K=4 时:(1-0.8^5)/(1-0.8) = 3.36 个 token/前向。若 cost_p >> cost_q*K(目标远贵于 K 步草稿),吞吐加速约 3.36 倍。**唯一真正的参数是 α,它完全取决于草稿与目标的对齐度——好的草稿决定一切。**
随机小模型做草稿效果很差。标准配方是从目标蒸馏:
结果:代码场景 α 通常 0.60.8,自然语言聊天 0.70.85,生产加速 2~3 倍。
Li 等(2024, EAGLE)指出标准投机解码的两个低效:
EAGLE-3(2025)把这两点做到极致,每次验证接受约 4.5 个 token,实现 4~5 倍加速,且分布严格不变。
| 维度 | 标准投机解码 | EAGLE-3 |
|---|---|---|
| 草稿形态 | 线性链 K 个 token | 树形多路径 |
| 特征 | 草稿从头算 | 复用目标隐藏状态 |
| 接受 token/验证 | 2~3(α≈0.7,K=4) | ~4.5 |
| 加速比 | 2~3× | 4~5× |
| 输出分布 | 严格等于 p | 严格等于 p |
生产中,vLLM、TensorRT-LLM 等推理引擎均已内置 EAGLE-3 级别的投机解码。
本节产出一份 outputs/skill-speculative-decoding.md——何时用投机解码的决策清单:目标模型大(>7B)、解码是延迟瓶颈、能提供/蒸馏出对齐草稿时启用;反之小模型或 prefill 受限时收益有限。
r < p(x_t)/q(x_t),拒绝时从残差 positive_part(p-q) 采样,整体严格等于 p。E=(1-α^(K+1))/(1-α),α(对齐度)是唯一关键参数。至此「从零构建 LLM」章的推理加速部分完成。下一节(梯度检查点)转向训练侧的显存优化——用重算换显存。