Speculative Decoding 为什么能加速:从并行验证到 GPU Memory-Bound
副标题 / 摘要 Speculative decoding 并不是让大模型先生成一遍,再与小模型逐个比较;它让小模型先提供未来 token 的候选路径,使大模型能在一次 forward 中并行验证多个位置。它的本质,是用更多、甚至部分无效的并行计算,换取更少的串行 Target forward。 预计阅读时长:12~16 分钟 目标读者:了解 Transformer 基础,希望理解 LLM 推理性能、vLLM 或 speculative decoding 的读者 核心问题:为什么一次验证多个 token 会比逐个生成更快?如果中间猜错,后面的计算是否全浪费了? 先给结论 理解 speculative decoding,只需要抓住四件事: 自回归生成慢在串行依赖:不知道前一个 token,就无法确定下一个 token 的条件分布。 Draft 模型先猜出一条候选路径后,Target 模型就能在一次 forward 中并行计算这条路径上多个位置的条件分布。 第一个未被接受的 token 之后,验证结果确实全部作废;这是用并行冗余换串行轮次的代价。 加速是否成立,取决于接受长度、Draft 成本、Target verify 成本、batch 大小和 KV Cache 流量,而不是只看一次 draft 了多少个 token。 一句话概括: Draft 模型最重要的作用,不只是“帮大模型猜答案”,而是暂时补上未知的未来输入,让 Target 能跨过原本必须串行执行的多个解码位置。 普通自回归生成为什么必须串行 假设当前上下文是: I love Target 模型准备生成: New York City very much 普通 decode 只能这样执行: ...