推测解码:让大模型生成快 2–10 倍的核心算法
推测解码用一个轻量"草稿模型"先并行猜出多个 token,再由大模型一次性"批改",把串行生成变成批处理。本文讲清原理、加速比公式与适用边界,帮你理解为什么 JetSpec、Medusa、EAGLE 能让推理快数倍。
本节你将能
读完本文,你将能够:用自己的话解释推测解码(speculative decoding)为什么能加速;读懂加速比公式里最关键的两个变量;并在部署本地大模型时判断它是否适合你的场景。
背景:自回归生成的瓶颈
今天的大语言模型(LLM)大多是自回归的:每生成一个词(token),都要把前面所有内容重新算一遍,再预测下一个。这就像写作时必须逐字等待——前一行没写完,下一行动不了。瓶颈不在于"算得慢",而在于每一步都要等上一步的结果,GPU 的大量算力在"等待下一个 token"时被白白浪费。
直觉模型:草稿先写,老师批改
推测解码的核心思路非常朴素:找一个更小、更快的"草稿模型"先一口气猜出接下来 5 个 token,然后让大模型(目标模型)一次性 parallel 验证这 5 个猜测对不对。猜对的保留,猜错的地方从正确的那个 token 起重新来。
图1:草稿模型并行猜测,目标模型一次性验证,把逐 token 串行变成批处理
核心要点:加速比由两个变量决定
设草稿模型一次猜 γ 个 token,目标模型对单个草稿 token 的接受概率为 α。在理想批处理下,平均每个"大步"产出的 token 数约为:
也就是说,接受率越高、猜测步数越多,加速越明显。当 α 接近 1 时(草稿模型很准),加速比趋近 γ+1;而目标模型单次前向的代价被摊薄到多个 token 上,GPU 利用率大幅提升。这正是阶跃 JetSpec 在 H100 上把 MATH-500 推理加速 9.64 倍、开放对话加速 4.58 倍的根源。
图2:固定猜测步数 γ=5 时,加速比随接受率 α 上升而快速增长
为什么它"免费"加速
关键好处是:目标模型的输出分布完全不变。验证只是"是否采用草稿的猜测",一旦拒绝就回退到目标模型自己的采样结果——所以生成质量与不加速时完全一致。你只是用"少量额外算力换来了并行度",没有任何质量损失。
常见变体
- 自投机解码:直接用目标模型自身的小版本当草稿,省去额外模型。
- 多 Token 预测(MTP):模型架构内置预测头,llama.cpp 已合入,本地推理约翻倍。
- Medusa / EAGLE:用轻量"出头"网络并行提议多个候选,进一步提升接受率。
- 候选树(如 JetSpec):用树状候选替代线性序列,突破传统线性推测的扩展天花板。
适用边界
推测解码在高批大小、低单步延迟敏感的服务端收益最大;在极短输出或草稿模型很不准时收益有限。另外,它主要加速解码阶段,对长上下文的预填充(prefill)延迟帮助不大——后者更取决于显存带宽。