模型部署与推理优化

FlashAttention:IO 感知的精确注意力

kp-015核心25 分钟04-KV与注意力

一句话定义

FlashAttention 通过分块(tiling)与 online softmax 把注意力的计算全部留在 GPU 片上高速缓存(SRAM)内完成,从不把 n×n 注意力矩阵写回显存,做到结果精确不变的前提下把显存从 O(n²) 降到 O(n)、速度提升数倍。

为什么重要

它是 2022 年后所有长上下文能力与 prefill 速度的底层功臣:没有它,4k 以上上下文的 prefill 要么慢一个量级、要么 O(n²) 显存直接放不下。它是"算法不变、只改计算组织方式就拿到数量级收益"的典范案例,也是理解"访存意识(IO-aware)"设计思想的最佳教材。

前置知识

  • softmax 的性质(可分解为 max 与 log-sum-exp 两步);kp-003(prefill 计算密集)。
  • GPU 存储层级:SRAM(快、小,约几十 MB)与 HBM(慢、大,几十 GB)。

核心概念

  • 标准注意力的浪费:先算 S=QKᵀ(n×n)写回 HBM,再 softmax 写回,再乘 V——n² 级中间矩阵在慢速 HBM 上往返两次,瓶颈是 IO 而非 FLOPs。
  • 分块计算(tiling):把 Q、K、V 切成小块,逐块在 SRAM 内算部分注意力结果。
  • online softmax:块与块之间维护运行最大值与运行和,看到新块时对已积累的输出做一次代价很小的重缩放——数学上与全局 softmax 严格等价。
  • 精确而非近似:与标准注意力结果数值一致(浮点误差级),这是它区别于各类"线性注意力/稀疏近似"的根本点。
  • FlashAttention-2:减少非矩阵乘操作占比、沿序列维并行、改善 warp 分工,在 A100 上进一步接近算力上限。

原理与机制

标准注意力的浪费不在计算而在搬运:n×n 中间矩阵要在慢速 HBM 上往返两次。FlashAttention 用 tiling 把 Q/K/V 切成能装进 SRAM 的小块,块内算完注意力再换下一块,中间量只写 O(n) 的输出;online softmax 用"运行最大值 + 运行和 + 重缩放"保证跨块累加与全局 softmax 严格等价——所以它是精确算法,收益来自 IO 复杂度下降而非计算量减少。

公式与模型

IO 复杂度(HBM 读写字符数):

标准: Θ(n d + n2), FlashAttention: Θ(n2 d2M)

M 为 SRAM 大小。d(头维度)通常 64–128,故 FlashAttention 的 HBM 往返可低一个数量级;显存占用从 O(n²) 降到 O(n)——32k 上下文下,n² 矩阵在 FP16 下超过 2GB/头,而 Flash 只需存 KV 本身。

直观类比

改卷子不必把全班所有卷子铺满操场(写回 HBM)再逐份批改,而是每次抽一小摞在桌上(SRAM)批完记总分,再换下一摞——桌面小,但没人要求把操场铺满。

实例或案例

prefill 8k 上下文的实测典型值:朴素实现受 HBM 往返限制,注意力部分耗时是 FlashAttention 的 3–7 倍;且朴素实现 O(n²) 显存使 16k+ 训练/推理直接不可行。工程上无需手动启用——vLLM/SGLang/TensorRT-LLM 默认即用,需要关注的是"自定义注意力算子是否也遵循 IO-aware"。

常见误区

  • "FlashAttention 是近似/有损注意力":不,结果精确等价,只是计算组织方式不同。
  • "它减少了计算量":FLOPs 几乎不变,减的是 HBM IO 与显存占用——所以对带宽受限的 decode 帮助小于对 prefill 的帮助。
  • "任何模型都能直接替换":依赖算子实现与硬件架构支持(SM 数量、SRAM 大小),老架构收益打折。

自测题

  1. FlashAttention 省的是什么资源?不省什么?

要点:省 HBM IO 与 O(n²) 显存;FLOPs 基本不变。

  1. online softmax 如何保证与全局 softmax 等价?

要点:维护运行 max 与运行和,新块到来时对累积结果按比例重缩放。

  1. 为什么 FlashAttention 对 prefill 的收益比 decode 更明显?

要点:prefill 序列长、注意力占比高且 compute-bound,O(n²) IO 是主要浪费;decode 的瓶颈更多在权重读取。

与其他知识点的关系

与 kp-013 组合决定长上下文可行性;kp-016 的 GQA 减 KV 体积、Flash 减 IO,两者互补;kp-024 的 PD 分离里 prefill 实例的效率依赖本页技术。

延伸阅读

《FlashAttention》(Dao 等,2022)第 3 节的 IO 分析是全领域"访存意识"设计思想的代表;FlashAttention-2 论文对并行化的讨论适合工程向读者。

#FlashAttention#SRAM#tiling#online softmax#注意力