通过日常隐喻(猜题小模型 + 评判大模型、仓库与货车)直观解释投机解码原理:LLM 推理瓶颈在权重加载而非计算,多生成几个 token 几乎不增加 wall-clock 时间。
这是一篇通俗易懂的图文解释器。阅读它不需要推理背景:每个概念都会先用日常比喻引入(小模型猜测、大模型评分;仓库、卡车、车间),再用数学呈现——每个出现的公式旁边都有通俗易懂的英文解读。有几处我故意简化,以保持直觉在前。论文中脚注式的严谨性详见参考文献列表。如果你被原始论文劝退过,这篇文章就是你的入口。
为什么 LLM 推理很慢,为什么投机解码能让它变快?归根结底一句话:把矩阵做大确实会增加 GPU 的乘法运算量——但无论矩阵多大,一次矩阵乘法恰好加载权重一次。更多的计算量不等于更多的加载次数。在 LLM 推理中,加载(把权重从 GPU 内存移动到计算单元)几乎消耗了所有时间,而计算几乎免费。所以处理几个额外的 Token 几乎不增加实际时间。这不是算法把戏——而是 GPU 硬件的物理事实。投机解码带来的每一分加速,都是在兑现这一硬件红利。
一个具体例子:句子"the cat sat on the red mat"就是一个矩阵。每个 Token 首先被转换成一行数字(它的嵌入,假设为 d 维)。将 7 行堆叠,就得到一个 7 × d 的矩阵 X:
┌ ┐
the │ 0.12 -0.83 0.05 0.47 … │
cat │ -0.31 0.22 0.68 -0.10 … │
sat │ 0.55 0.09 -0.42 0.33 … │
on │ -0.07 0.61 0.18 -0.25 … │
the │ 0.12 -0.83 0.05 0.47 … │
red │ 0.29 -0.14 0.52 0.40 … │
mat │ 0.44 0.37 -0.20 0.08 … │
└ ┘
= matrix X (7 rows × d columns)
行 = Token(这里有 7 个)。更长的句子意味着更多的行和更多的乘法运算——但将整个块 X 乘以权重矩阵 W,加载 W 的次数恰好是一次。这就是"更多计算不等于更多加载"的具体体现。(彩蛋:两个"the"行是完全相同的——相同的 Token、相同的嵌入行,在注意力机制介入之前。)

背景:这是两篇系列文章的技术深度解析。第一部分认为投机解码是 2025–2026 年 LLM 推理岗位最被低估的技能利基之一,并引入了核心思路("小模型猜测,大模型评分")。本部分涵盖完整的数学推导(含拒绝采样证明)、过去两年的主要研究方向以及真实的面试题清单。
阅读指南:第 1 节是基础。第 2 节是数学(公式,但每个都有通俗易懂的解释)。第 3 节是研究全景图(用作学习路线图)。第 4 节是一个在面试中脱颖而出的框架洞察。第 5 节是学习路径和面试题库。
要理解投机解码为何有效,首先必须看清楚推理究竟慢在哪里。本节暂不涉及算法,但它是后面一切的基石——在面试中把这个解释清楚,会让你立刻与只会背算法的候选人拉开差距。
主流 LLM 是生成自回归的因果 Transformer [15]:
通俗解释:每个 Token 都需要所有前序 Token 作为输入。生成 100 个 Token 意味着 100 次串行的模型调用。
这种串行性质存在于算法层面,无法在不改变建模范式的情况下绕过——这正是 Lookahead Decoding 和扩散语言模型等更激进方法的来源。
这个反直觉,而且是最热门的面试话题:LLM 推理的瓶颈不是 GPU 计算(FLOPs)——而是内存带宽。
GPU 内存是分层的:

GPU 计算核心只能从 SRAM 中取数工作。在每一次前向传播中,所有模型权重必须从 HBM 流式加载到 SRAM 中参与计算——这是由 GPU 物理特性决定的,任何软件层都无法跳过。
给个数字:一个 70B 模型(FP16 格式)大约是 140 GB 的权重。以 H100 约 3 TB/s 的 HBM 带宽,单次前向传播的下限大约是 47 ms——这是每个 Token 延迟的物理下界。
但更重要的结论是:140 GB 的传输成本几乎不随处理的 Token 数量变化。处理 1 个 Token:加载全部一次。处理 7 个 Token:仍然加载全部一次。多处理几个位置几乎不增加前向传播的时间。
为什么"多几个位置"几乎免费?前向传播的核心运算是矩阵乘法 Y = X · W:输入 X 形状为 [N, d](N 个位置,每个 d 维),权重 W 形状为 [d, d']。一旦 GPU 把 W 从 HBM 加载到 SRAM,它就用同一份 W 的副本乘以 X 的所有 N 行。
准确地说:从 1 行增加到 7 行确实增加了 GPU 的 FLOPs——六行额外的乘累加不是零工作。关键是:一次矩阵乘法恰好加载 W 一次,而加载量不取决于行数。由于 LLM 推理是内存受限的——计算资源极其丰富,而带宽才是约束——所以额外的计算隐藏在权重加载时间内:计算核心本来就在等待 W 到达而处于空闲状态,所以多乘几行几乎不增加额外时间。"额外计算是免费的"不是说计算真的零成本——而是 GPU 的计算能力远大于带宽这一特性的直接结果。
瓶颈 A(算法层面):N 次串行前向传播是必需的。瓶颈 B(硬件层面):每次前向传播支付固定的加载成本,但只产生 1 个 Token。
两者结合,就是推理缓慢的本质:每次传播支付"移动 140 GB 权重"的代价,却只换回 1 个 Token,简直是糟糕的交换比。
投机解码的精妙之处在于:它利用 B 来部分克服 A——既然额外的 Token 几乎是免费的,就想办法让一次前向传播验证多个 Token。记住这一点,领域内的每篇论文都会豁然开朗。

是时候戳破一个非常常见的误解了——把这件事搞清楚,是理解后面一切的关键。
大多数人会认为一次 Transformer 前向传播计算 1 个 Token。其实不会。
💡 关键机制:一次前向传播 = 一次权重加载 + 一次矩阵乘法,而这单个矩阵乘法同时计算出所有输入位置。加载和计算是焊在一起的——不存在"加载一次,然后分别计算 N 次"这种操作。"计算 N 次"在物理上根本不存在。存在的只有"1 次前向传播""2 次前向传播"……而每次前向传播都是"加载一次 + 计算所有当前位置"不可分割的捆绑。
Transformer [15] 使用因果自注意力:给定一个长度为 N 的输入序列,一次前向传播同时输出所有 N 个位置的"下一个 Token 分布"。每个输入位置 i 都会得到一个分布 P(x_{i+1} | x_{≤i})。这正是 Transformer 比 RNN 训练快得多的原因——所有位置并行计算。
那么,为什么普通解码看起来像是"每次传播 1 个 Token"?因为:
位置 0 预测"输入 Token 1 之后是什么"→ 这是输入 Token 2,我们已经有了
位置 1 预测"输入 Token 2 之后是什么"→ 这是输入 Token 3,我们已经有了
……
位置 N−1 预测"最后一个输入 Token 之后是什么"→ 这是唯一真正的新信息
所以前 N−1 个位置的预测完全被浪费了——它们预测的是我们已经见过的输入。普通解码只保留最后一个位置的输出,因此外部看起来是"每次传播 1 个新 Token"。
投机解码恰恰利用了这种浪费:让一个小模型在这些"未来位置"预填充猜测,忽然之间,大模型单次前向传播的所有 N 个分布就变得有意义了——
前 γ 个分布验证对应的草稿 Token("我,大模型,同意小模型的猜测吗?")
最后一个分布产生一个免费的奖励 Token(如果所有 γ 个草稿都被接受)
把普通解码和投机解码并列对比,就一目了然了(两者都产生 7 个 Token):
这里有一个反直觉的部分:普通解码的第 7 次前向传播同样要计算 7 个位置——只是前 6 个预测的是"我们已经知道的输入"然后被丢弃了。因此,两种方法的总矩阵乘法工作量大致相同。真正的区别不在于计算量,而在于加载次数:普通解码要加载权重 7 次;推测解码将其压缩到 1 次。而由于加载主导了延迟(每次加载约 47 ms),将 7 次加载压缩到 1 次,就是将时间本身压缩了。
在这一次验证过程中,成本也极度不均衡:
⚠️ 一个常见的错误表述是"一次前向传播内进行多次验证"或"多次前向传播"。两者都不精确。前向传播是 1 次,加载是 1 次,验证是来自单次前向传播的多个分布被外部算法并行消费。这是 Transformer 因果结构带来的免费红利。
将这个机制和证明内化之后,研究全景和面试问题在接下来的章节中都会变得直观。

目标模型 M_p,分布 p(· | context)(大、慢——比如 70B)
草稿模型 M_q,分布 q(· | context),比 M_p 小得多(小、快——比如 1B)
推测解码的每一轮有 4 个步骤 [1, 2]:

2.2 关键问题:为什么输出恰好等价于从 M_p 采样?
这是推测解码最神奇也是最重要的特性:它不是"近似无损"——它在数学上是精确的。非常反直觉,但证明很短。在面试中现场推导,立刻就能区分"读过论文"和"真正理解"。
目标:证明输出任意 token x 的概率恰好是 p(x)。
输出 x 有两条路径:
路径 1(x 被接受):
路径 2(被拒绝,然后从校正分布重新采样 x):
这里需要一个关键恒等式:
也就是说:校正分布的归一化常数恰好等于拒绝概率。两者相互抵消:
输出精确服从 p。∎
为什么这个证明很优美:校正分布的归一化常数 Σ_y (p(y)−q(y))₊ 通常需要遍历整个词表(数万个 token)求和。通过这个恒等式,它自动与拒绝概率相抵消——算法永远不需要显式计算它,但结果却完全正确。这就是校正 rejection sampling 的精妙之处。
💡 面试提示:把这五行背熟,现场推导。立刻让你从"听说过"升级到"理解它"。
2.3 效率:接受率决定加速上限
定义接受率:
其中 TV 是总变差距离。直观上,α 衡量目标分布和草稿分布之间的重叠——两者越相似,接受率越高,加速越大。

每轮期望 token 数 [1]:
设草稿与目标成本比为 c(通常 c ∈ [0.02, 0.1]),每轮加速比为:
结论:当 c → 0 且 γ 最优时,加速比趋近于 1 / (1 − α)。vLLM 在生产环境中报告高达 2.8× [3];EAGLE 系列方法达到 3–4×。
一旦 vanilla 推测解码确立,过去两年产生了若干活跃分支。这些正是推理团队招聘的技术栈。

3.1 自我推测:Medusa 与 EAGLE 系列
Vanilla 需要部署一个独立的小模型——真实的运维成本和内存开销。自我推测让目标模型为自己起草:
EAGLE 系列加速比通常为 3–4×,是目前的主流生产选择。
3.2 Token 树验证:SpecInfer
Vanilla 每轮验证一条线性草稿;如果位置 1 被拒绝,其后所有内容都被丢弃——浪费。
SpecInfer [8] 让草稿模型生成多条以树结构组织的候选分支,目标模型通过自定义树注意力在一次前向传播中验证整棵树,大幅提高了期望接受的 token 数。后续工作(EAGLE-2 等)增加了动态深度调整。
💡 注意:SpecInfer 发表在 ASPLOS——一个系统会议,而非 ML 会议。这一事实本身就反映了这个领域的真正本质(见第 4 节)。
3.3 多 Token 预测(MTP)
MTP [9, 10] 走了一条不同的路,但常与推测解码一起讨论。
思路是改变训练目标,使模型在每个位置预测 k 个未来 token:
MTP 提供两类价值:
DeepSeek-V3 大规模采用了 MTP [10];这是业界最受关注的方向之一。
💡 高级洞察:MTP 和推测解码攻击的是不同的瓶颈——推测解码借用硬件红利(瓶颈 B)来缓解算法瓶颈(A);MTP 直接攻击 A。如果未来硬件(存算一体等)消除了 B,推测解码的红利将大幅缩水——但 MTP 仍然有效。阐述这个区别是面试中的高级信号。
3.4 Lookahead Decoding
Lookahead Decoding [11] 完全不需要草稿模型:将自回归解码视为求解非线性系统,用 Jacobi 迭代并行更新多个位置,收敛到与标准自回归解码完全相同的输出。
优点:零辅助模型,零训练。缺点:加速通常低于推测解码(1.5–2×)。
适合资源受限的部署场景,或者无法维护额外草稿模型的团队。
3.5 在线学习与生产部署
Online Speculative Decoding [12] 观察到草稿模型的接受率会随着查询分布漂移——一个在通用文本上训练的草稿模型,在代码密集的生产流量上可能损失一半的接受率。解决方案:在服务过程中持续用实时流量微调草稿模型。
在工程侧,vLLM Speculators [7] 将推测解码的训练和部署产品化,支持 EAGLE-3 等主流变体,被用于包括 Amazon Rufus 和 LinkedIn AI 在内的大型生产系统 [13]。
理解这一点会让你听起来像是真正懂这个领域的人,而非只是读过论文的人。
退后一步看整个领域:
进阶内容:MTP [9]、DeepSeek-V3 报告 [10]、SpecInfer [8]、EAGLE-3 [6]。
用 HuggingFace transformers 运行一个 spec-decoding 示例:model.generate(..., assistant_model=...) —— 只要几行代码
测量接受率 α:换用不同规模的草稿模型(1B 对比 3B),观察 α 的变化
阅读 vLLM spec-decoding 源码:github.com/vllm-project/vllm
绘制接受位置分布图:哪些 token 会被拒绝?(专有名词和数字经常被拒绝;"the/a/of" 则顺利通过)
面试时一句话 —— "我基准测试了 X + Y 模型组合,在 α = … 时获得了 Z 倍加速,并发现……最容易被拒绝" —— 就能让你脱颖而出。
热身题(每场面试都会问):
中级题(大多数候选人在这里被筛选):
高级题(区分顶尖候选人的题目):
主动抛出三个关键术语:memory-bound、acceptance rate α、corrected rejection sampling。面试官听到这些就知道你是真懂的
推导,而不是背诵:现场推导出 min(p,q) + (p−q)₊ = p 会瞬间提升你的level
主动说出局限性:"在大批次服务中收益会缩小,因为大批次不再是 memory-bound" —— 面试官爱听这个
搞定投机解码 vs MTP:"一个借 memory-bound 股息攻击瓶颈 A;另一个直接攻击 A" —— 顶级候选人信号
投机解码不是 ML 玄学。它是一个清晰的、可学习的工程优化。整个领域可以浓缩为一句话:
为 1 个 token 支付"移动 140 GB 权重"的代价是极其糟糕的交易;让一个小模型猜测多个 token,让大模型一次加载批改所有猜测,然后用修正的拒绝采样保证输出完全无损。
抓住这条主线,每一个变体 —— Medusa、EAGLE、SpecInfer、MTP、Lookahead —— 都只是同一棵树的不同分支。
我希望这两篇文章能帮助任何准备 LLM 推理岗位的人。这个领域真的没那么难——关键是用可测量的数字构建项目。
如果你没有顶尖名校或研究背景:这是一条完全可行的路径。公司迫切需要理解推理优化的工程师,而这里的入门门槛远低于"训练大模型"。仔细研读这两篇文章,用真实的测量数据构建一两个小项目,你就已经领先于大多数候选人了。
[1] Leviathan, Y., Kalman, M., & Matias, Y. (2023). Fast Inference from Transformers via Speculative Decoding. Proceedings of the 40th International Conference on Machine Learning (ICML 2023). arXiv:2211.17192.
[2] Chen, C., Borgeaud, S., Irving, G., Lespiau, J.-B., Sifre, L., & Jumper, J. (2023). Accelerating Large Language Model Decoding with Speculative Sampling. arXiv preprint.