现代 AI 推理的“快进键”:Speculative Decoding(投机采样)深度解析

在 LLM 推理中,最令人沮丧的体验就是看着模型一个 token 一个 token 地缓慢蹦出。尽管我们有了 PagedAttention 和 Continuous Batching 来提升整体吞吐量,但对于单个用户的首字延迟 (TTFT) 和 生成速度 (TPOT) 来说,瓶颈依然存在:LLM 的自回归特性决定了它必

专属插画
现代 AI 推理的“快进键”:Speculative Decoding(投机采样)深度解析

现代 AI 推理的“快进键”:Speculative Decoding(投机采样)深度解析

在 LLM 推理中,最令人沮丧的体验就是看着模型一个 token 一个 token 地缓慢蹦出。尽管我们有了 PagedAttention 和 Continuous Batching 来提升整体吞吐量,但对于单个用户的首字延迟 (TTFT)生成速度 (TPOT) 来说,瓶颈依然存在:LLM 的自回归特性决定了它必须串行生成。

为了打破这个限制,业界引入了一种极其巧妙的方案:Speculative Decoding(投机采样)

核心矛盾:大模型的“慢”与小模型的“快”

LLM 生成 token 的过程是内存受限(Memory Bound)的。无论模型是 70B 还是 7B,读取权重到 GPU 缓存的时间成本在单次推理中占据主导。这意味着用一个巨大的模型去预测下一个极简单的 token(比如 "of the" 之后的 "world")是非常浪费的。

投机采样的核心思想是:用一个轻量级的“草稿模型”(Draft Model)先行试探,再由“目标模型”(Target Model)一次性验证。

工作流程:试探 $\rightarrow$ 验证 $\rightarrow$ 修正

  1. 投机阶段 (Speculation)
    一个小规模的模型(例如 Qwen-0.5B 或 Llama-160M)快速连续生成 $K$ 个 token(例如 $K=5$)。因为小模型参数少,读取速度极快,这步几乎不耗时。

  2. 验证阶段 (Verification)
    将这 $K$ 个 token 以及原始 Prompt 一次性输入给大模型(目标模型)。由于大模型在处理 Prompt 时可以并行计算所有 token 的概率分布,它能瞬间判断出这 $K$ 个 token 中有多少个是符合其概率分布的。

  3. 接受与修正 (Acceptance & Correction)

  4. 如果大模型认为前 3 个 token 正确,第 4 个错误,那么系统会接受前 3 个,并利用大模型在第 4 个位置生成的正确 token 进行修正。
  5. 然后重新开始下一轮投机。

为什么这能加速?

在理想情况下,如果草稿模型的预测准确率高,大模型一次验证就能确认多个 token。原本需要 $K+1$ 次串行推理的时间,现在被压缩到了 $1 + \epsilon$ 次(其中 $\epsilon$ 是极小的并行验证开销)。

这种方案最迷人的地方在于:它在数学上保证了输出分布与直接使用大模型完全一致。它不是在牺牲质量换速度,而是在利用冗余算力换时间。

工程挑战与实践

实现 Speculative Decoding 需要解决几个关键问题:
- 模型对齐:草稿模型和目标模型的分词器(Tokenizer)必须完全一致,否则无法对接。
- 接受率优化:如果草稿模型太弱,导致接受率极低,频繁的修正反而会增加开销。因此需要选择一个在领域内表现良好且足够轻量的小模型。
- 硬件调度:需要高效地在 GPU 上切换两个模型的上下文。

总结

如果说 PagedAttention 是优化了“空间”,Continuous Batching 是优化了“时间”,那么 Speculative Decoding 就是在尝试通过“预测”来跳过时间。它将 LLM 推理从纯粹的串行模式推向了“并行验证”模式,是实现实时 AI 对话体验的关键技术之一。

留言区

欢迎分享你的想法!

发表留言

0/500

加载留言中…