FlashAttention 为什么不改公式却更快?
区分 FLOPs、显存 IO 与中间矩阵存储。
内容修订 4 · 2026-10-24
S03 · 修订 1 · 2026-10-21
- HBM:Q / K / V
- SRAM:分块 + 在线 softmax
- HBM:输出与统计量
问题从哪里来
朴素注意力可能在 HBM 中物化并读写 T×T 分数和概率矩阵,数据搬运成为负担。FlashAttention 将注意力分块,尽可能在片上 SRAM 中完成局部运算,避免把完整中间矩阵写回显存。
关键机制
在线 softmax 维护每行的最大值 m、归一化和 l 与加权输出。读入新的分块后,用新的最大值对已有累积量重缩放,再合并本块贡献。反向传播可重算部分中间量,用计算换 IO;数学上仍为标准注意力,浮点舍入不必逐位一致。
m′ = max(m, max(S_tile)); l′ = e^(m−m′)l + Σe^(S_tile−m′)
算例与证据
教学图将 HBM 中的 Q/K/V 分块搬入 SRAM,局部计算后只写所需输出与统计量。避免完整 T² 中间存储不意味着避免 T² 个稠密注意力交互。实际收益要报告序列长度、头维度、精度与硬件。
收益之外的新约束
片上容量、线程布局与内核支持决定适用范围;小序列或特殊掩码未必有同样收益。FlashAttention 解决执行效率,不能替代长上下文能力评测或 KV 分配管理。
原始来源
- FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness · 2022-05-27 · 核对 2026-10-21
启用脚本后可使用手动本地阅读记录和交互计算器。