FlashAttention 为什么不改公式却更快?

区分 FLOPs、显存 IO 与中间矩阵存储。

内容修订 4 · 2026-10-24

S03 · 修订 1 · 2026-10-21

  1. HBM:Q / K / V
  2. SRAM:分块 + 在线 softmax
  3. HBM:输出与统计量
本站重绘:IO 路径重绘;框的大小不表示实际容量。

问题从哪里来

朴素注意力可能在 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 分配管理。

原始来源

启用脚本后可使用手动本地阅读记录和交互计算器。

继续追问

I04 · 长上下文为什么不等于可靠长记忆?

S04 · PagedAttention 如何减少 KV 分配浪费?

全部18题