单篇 · 无期号ARTICLE

论文 / 机制解读 paper

领域 推理与效率

FlashAttention 深度解析:大模型长序列的算力解放

2026-07-22 阅读约 9 分钟

本期要点POINTS

本期要点

本期未收录要点:抽取阶段判定该篇正文没有可提炼的线索性结论(不造数、不空着)。

关键实测数据DATA

关键实测数据

本期无新增实测:该篇正文没有自测数字(不造数、不空着)。 同类读数集中在有实测的期与 证据索引页。

FlashAttention 深度解析:大模型长序列的算力解放

Transformer 的长序列处理一直被算力瓶颈卡着脖子——不是算不动,是显存带宽不够用。FlashAttention 的思路很直接:把数据搬运算搬到 SRAM 里分批做完,减少对 HBM 的依赖。没有魔法,但足够聪明。

一、为什么 Attention 这么慢?

要理解 FlashAttention,得先搞清楚 GPU 的三层存储结构:

层级 容量 带宽 速度特征
寄存器 ~64KB ~50 TB/s 最快,直连计算单元
SRAM(共享内存) ~192KB ~20 TB/s 次快,每个SM独立
HBM(显存) ~80GB ~2 TB/s 慢一个数量级

← 表格可左右滑动查看

标准 Attention 的计算过程看起来简单——O = softmax(QKᵀ) · V——但在 GPU 上的实际执行是这样的:

① Q, K, V 从 HBM 加载到 SRAM
② 计算 S = Q·Kᵀ,写回 HBM
③ 读回 S 做 softmax → P,写回 HBM
④ 读回 P,乘 V → O,写回 HBM

一共 6 次 HBM 访问。 每一次都在等显存带宽。

虽然 HBM 有 80GB 的大容量(可以放下长序列的 Attention 矩阵),但 2 TB/s 的带宽和 SRAM 的 20 TB/s 差了一个数量级。Attention 的计算本身很快(矩阵乘法是 GPU 的强项),但数据搬运占了绝大部分时间。

简单估算一下:对于 64K 长度的序列,标准 Attention 需要中间矩阵 S 的大小是 64K × 64K = 4B 个元素,用 FP16 存储就是 8GB。每轮计算要在 8GB 数据和 HBM 之间来回搬运 6 次 → 48GB 的数据传输。按 2TB/s 算,光搬数据就占 24ms,而计算本身可能只需要几毫秒。

IO 复杂度:O(N²) 的数据搬运,这就是长序列时的瓶颈所在。

二、FlashAttention 的核心:Tiling

FlashAttention 的改进思路很直接:不要让大矩阵来回穿梭 HBM,而是把计算切分成小块,全部在 SRAM 里完成后再合并。

这个技术叫 Tiling(分块计算)。

核心流程:

  1. 分块: 把 Q、K、V 按 SRAM 容量切分成小块(block),每块约 64-128 个 token
  2. 加载: 一次只加载一个 Q 块和对应的 K、V 块到 SRAM
  3. 局部计算: 在 SRAM 里算 S = Q_block · K_blockᵀ(小矩阵乘法)
  4. 在线 softmax: 在同一块 SRAM 里完成 softmax——这是关键创新点
  5. 累加: 把结果累加到输出 O 的对应位置
  6. 重复: 所有块都算完,得到完整的 Attention 输出

在线 softmax 算法

传统 softmax 需要知道整个序列的最大值和分母求和,这就要求全量数据在同一个地方。FlashAttention 用了一个技巧:

  • 对每个 block 计算局部 softmax
  • 用统计方法(rescaling)在累加时修正之前 block 的贡献
  • 最终结果在数学上等价于全局 softmax,但 不需要一次加载所有数据

这个算法细节是 FlashAttention 真正的技术贡献——它让分块+精确的 Attention 计算变得可能,无需近似或妥协。

三、性能对比

指标 标准 Attention FlashAttention 提升
HBM 访问次数 6 次 2 次 3× 减少
速度(4K 序列) 基线 1.5-2× —
速度(64K 序列) 基线 2.5-4× 长序列优势更大
精确度 标准 严格等价 🎯 无损

← 表格可左右滑动查看

为什么长序列提升更大?因为序列越长,中间矩阵 S 越大,IO 负担越重,Tiling 节省的效果越显著。

注意: FlashAttention 不是近似方法。它和标准 Attention 在数学上完全等价——每 bit 都一样。

数据来源:FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness (Tri Dao et al., 2022)

四、后续演进

FlashAttention 自 2022 年提出后,已经有多个迭代版本:

  • FlashAttention-2(2023):减少了 non-matmul 操作,优化了线程块调度,速度快了约 2×
  • FlashAttention-3(2024):针对 Hopper 架构(H100)的 FP8 优化,进一步利用 WGMMA 指令
  • Block-Sparse FlashAttention:支持稀疏 Attention 的加速版本

如今,PyTorch 的 torch.nn.functional.scaled_dot_product_attention 底层已经集成了 FlashAttention(有 GPU 和 cuDNN 支持的情况下自动启用)。也就是说,大多数大模型已经在用了,可能只是你不知道。

五、总结

  • 瓶颈不是算力,是带宽 — Attention 的计算/IO 比极低,数据搬运才是大头
  • Tiling + 在线 softmax = FlashAttention 的核心技术创新
  • 无损加速 — 在数学上严格等价的前提下,做到 2-4× 速度提升
  • 应用广泛 — 已是现代 Transformer 框架的标准组件

锐Owl,不是更快,是更聪明。


参考文献:

[1] Dao, T., Fu, D., Ermon, S., Rudra, A., & Ré, C. (2022). FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness. arXiv preprint arXiv:2205.14135.
[2] Dao, T. (2023). FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning. arXiv preprint arXiv:2307.08691.
[3] Shah, J., et al. (2024). FlashAttention-3: Fast and Accurate Attention with Hardware-Awareness. arXiv preprint arXiv:2407.08614.