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 只能这样执行: ...

2026年8月26日 · 6 分钟 · map[name:Jeanphilo]

FlashAttention 的 MQA/GQA:共享 KV 的等价、收益与实现要点(含可运行验证)

解释 FlashAttention 在 MQA/GQA 下如何利用共享 KV:从数学等价(复制 KV)到工程收益(KV cache 与带宽),并给出可运行代码验证。

2026年1月25日 · 10 分钟 · map[name:Jeanphilo]

FlashAttention 为什么能 one-pass:在线 softmax(m/l)与 Tiling 的核心思想

从标准注意力的显存 IO 账本出发,解释 FlashAttention 的核心:在线 softmax 维护 (m,l) 并流式累积输出,再配合 tiling 把数据驻留在片上存储,从而避免显式存储 $QK^\top$ 与 softmax 概率矩阵。本文给出可运行的 Numpy 分块注意力实现与数值等价验证,并用可复制的字节算账方法说明它为什么会快。

2026年1月25日 · 10 分钟 · map[name:Jeanphilo]

Softmax 工程实现与 GPU 访存优化:在线更新、融合与带宽算账(含可运行验证)

从标准两遍 softmax 的访存模式出发,推导在线 softmax(m,l)更新与正确性;进一步解释在 attention/cross-entropy 中如何通过融合避免落地概率矩阵,并用可运行代码验证等价与估算带宽收益。

2026年1月25日 · 11 分钟 · map[name:Jeanphilo]