本章导读:第一章我们把瓶颈拆成了「算子效率」和「显存管理」两半。这一章是全书的技术心脏,逐一拆解两个核心模块的内部机理。FlashAttention-2 的精髓在于「在线 softmax」——不物化完整分数矩阵也能算出正确结果;PagedAttention 的精髓在于「像操作系统管内存一样管 KV Cache」。读完你应该能分别说出:FlashAttention-2 靠哪三个设计把 GPU 利用率拉满,以及 PagedAttention 如何用块表(block table)把碎片几乎消灭。本章不含完整源码逐行,但会给出关键数据流的等价伪代码与原理图,并在第 3 章把「为什么这样快」的原理讲深。
在动手读原理之前,先划清边界,免得你带着错预期进来:
一句话:第 1 章教你「怎么诊断」,第 2 章教你「两个引擎的内部构造」,第 3 章教你「为什么这样快、怎么测真」,第 4 章教你「怎么把它跑起来」。
第一章给出的判读是:推理加速有两条互补的战线。一条在算子层,解决「注意力算得慢」的带宽瓶颈;一条在系统层,解决「KV Cache 放不下、放不满」的显存碎片。本章的两个主角恰好一人守一条线,而且职责几乎不重叠:
[n, n] 分数矩阵落 HBM,全程在 SRAM 内分块计算,把显存从 O(n²) 降到 O(n),且数学结果无损。详见 2.1。在真实引擎(以 vLLM 形态为典型)中,它们是一前一后、各管一段的齿轮:
基于大量初学者和一线工程师的反馈,提前帮你排雷:
两个模块都在快速演进:FlashAttention 已有多个版本,注意力内核还在持续被新的融合实现(以及不同硬件厂商的专属内核)取代;PagedAttention 的分页思想也被更多引擎采纳并扩展(如加入前缀缓存的更精细管理)。本文聚焦「原理不变的那部分」,具体 API 与默认参数请结合你所用引擎的官方文档核实,不要凭记忆套用旧版本配置。
本章配了多张原理图,统一约定如下,方便你快速抓重点:
所有图都强调「分层」与「数据流」,建议你边看图边在脑子里走一遍:一个 token 从进入到写出 KV,经过了哪几层、每层谁负责。能顺畅走完一遍,说明原理已经吃透。
| 小节 | 主角 | 解决的核心问题 | 关键图 |
|---|---|---|---|
| 2.1 | FlashAttention-2 | 注意力算得慢、O(n²) 临时显存 | Tiling / Online Softmax / HBM 对比 |
| 2.2 | PagedAttention | KV Cache 碎片、并发容量受限 | 连续分配 vs 分页 / 块表 / 共享 |
| 2.3 | 两者协同 | 怎么组合起来拿到端到端吞吐 | 分层栈 / 处理流 / 误区 |
带着这张表读,不容易迷路。
读本章前,建议你已经掌握(若生疏,先回看第 1 章):
softmax(QK^T/√d)V,以及它为何物化 [n, n] 分数矩阵;读完本章,你应该能独立做到:
这四项不是背概念,而是能「讲出来、画出来、用得上」——这才是把原理真正变成工程能力的标志。
第二章我们把两个核心模块的原理和分工讲透了,带着「模块怎么搭」进入第三章,我们去看「为什么这样搭才快、怎么验证它真的快」。
如果你是按「问题驱动」的方式学习,这里给一条捷径:被「长序列显存爆」困扰,优先精读 2.1 与第 3 章的 Roofline 推导;被「并发上不去、显存利用率低」困扰,优先精读 2.2 与第 4 章的部署配置。两条线最终会在第 4 章实战里汇合。也提醒一句:本章所有性能表述都是「数量级与趋势」,不是可承诺的基准数字,落地前请用第 3 章的方法论在你的硬件上亲自测一遍。当你能不翻书就把这一章的三张核心图重画出来,原理就算真正内化了。
下一章(第 3 章,进阶原理)将把「为什么 FA-2 对长序列收益更大」「PagedAttention 在共享场景下的正确性边界」「数值稳定性」与「性能测试方法论」讲透。
读到这里,你已经握住了两把钥匙:知道注意力为什么慢(第 1 章),也知道两个核心模块各自怎么动手(本章)。下一章我们把「为什么这样快」讲透,并给你一套能在自己硬件上复现的性能测试方法。