一句话:投机解码(Speculative Decoding)是让小模型先猜、大模型再验的大模型推理加速方法,在不改变目标模型输出分布的前提下降低生成延迟。
为什么能加速
大语言模型生成文本是自回归的:每吐一个字,都要把整个模型跑一遍。可这一遍里,GPU 的算力常常没吃满,真正的瓶颈是“把大量参数从显存搬进计算单元”的带宽。换句话说,大模型像一位逐字口述的专家,每写一个字都要重新翻一遍资料,慢在翻资料,不在写字。
投机解码的做法是:找一个小而快的草稿模型,先一口气猜出接下来 K 个词;再让大模型把这 K 个位置并行验证。专家不必自己写,而是让实习生先写一整段,自己一次读完,遇到第一个错字就停,前面写对的照单全收,并亲自改正错字,后面的草稿全部丢掉。验证 K 个词和生成 1 个词,对大模型来说耗时接近,因为瓶颈仍是搬运参数;只要草稿命中率高,就能把“一次前进一步”变成“一次前进好几步”。
草稿不一定非要来自小模型,也可以是 n-gram、检索片段、模型自带的小预测头等。核心要求只有一个:草稿要足够快,而且猜得尽量准。
和相邻概念的区别
投机解码不是模型压缩,也不是让大模型“变笨”。量化、蒸馏会改变模型权重或精度,可能影响质量;投机解码通常保持目标模型的输出分布不变,草稿只负责提议,最终由大模型验收。
它也不是束搜索(Beam Search):束搜索是为了找更优序列,可能更慢;投机解码是为了降延迟。它和批处理也不冲突:批处理提升吞吐,投机解码降低单请求延迟,两者可以一起用。
| 概念 | 主要目的 | 是否改变输出质量 | 常见瓶颈 |
|---|---|---|---|
| 投机解码 | 降低生成延迟 | 理论上不变 | 草稿接受率 |
| 量化/蒸馏 | 降成本、缩小模型 | 可能变化 | 精度损失 |
| 批处理 | 提升吞吐 | 不变 | 显存与调度 |
对实际工作的意义
对普通人,最直接的感受是聊天、写作、代码补全的响应更快,而不是模型突然变聪明或变笨。
对从业者,投机解码适合延迟敏感的聊天、代码补全、Agent 循环等场景,尤其是单请求或中小批量、显存带宽受限的推理。关键要看接受率、草稿长度和端到端延迟:草稿太差,验证开销会白费;请求批量很大、系统已经算力吃紧时,收益也会缩小。它本质上是拿额外显存和草稿计算,换更低的单次延迟。
具体框架支持哪些草稿模型和参数,以官方文档为准。
