FlashAttention 是大模型时代最重要的 CUDA 优化之一,由 Tri Dao 等人在 2022 年提出。
它的核心思想是:
通过 tiling 和 online softmax,把 Attention 的计算分块进行,避免显式存储完整的 $N \times N$ 注意力矩阵,从而同时降低显存占用和提升计算效率。
标准 Attention 的问题在于:
FlashAttention 通过 IO 感知的设计,把 Attention 从“显存受限”变成“计算受限”,在现代 GPU 上大幅加速。
一句话总结:FlashAttention 用分块计算和在线 softmax,把 Attention 的 HBM 读写从 $O(N^2)$ 降到 $O(N)$,实现了显存和速度的双赢。
对于输入 $Q, K, V \in \mathbb{R}^{N \times d}$,标准 Attention 为:
$$ S = QK^T $$
$$ P = \text{softmax}(S) $$
$$ O = PV $$
其中:
标准实现需要显式存储:
显存占用为:
$$ O(N^2) $$
当 $N = 8192$ 时,$N^2 = 6.7 \times 10^7$,FP16 下约 128MB;当 $N = 32768$ 时,约 2GB。这还只是一个 attention head,多头、多层、多 batch 后更夸张。
更严重的是 HBM 读写:
大量时间花在 HBM 读写上,而不是计算上。
GPU 的算力增长远快于 HBM 带宽增长,所以 Attention 成为显存带宽受限的典型。
核心思想:
把 $Q, K, V$ 分成小块,每次只加载一小块到 SRAM(shared memory),在 SRAM 内完成计算。
具体做法:
这样:
Tiling 带来的问题是:softmax 需要全局的归一化因子,但分块后无法一次看到所有分数。
Online softmax 解决这个问题:
在遍历 $K, V$ 块的过程中,动态维护当前最大值 $m$ 和归一化因子 $\ell$,逐步更新输出。
标准 softmax:
$$ \text{softmax}(s_i) = \frac{e^{s_i - m}}{\sum_j e^{s_j - m}} $$
其中 $m = \max_j s_j$。
Online softmax 的更新规则:
假设当前已处理到第 $j$ 块,维护:
处理新块时:
$$ m_{j+1} = \max(m_j, \tilde{m}) $$
$$ \ell_{j+1} = e^{m_j - m_{j+1}} \ell_j + e^{\tilde{m} - m_{j+1}} \tilde{\ell} $$
$$ O_{j+1} = e^{m_j - m_{j+1}} O_j + e^{\tilde{m} - m_{j+1}} \tilde{O} $$
其中 $\tilde{m}, \tilde{\ell}, \tilde{O}$ 是新块的局部统计量。
这样,不需要存储完整的 $S$,也不需要两次遍历,就能得到正确的 softmax 结果。
反向传播时,需要 $P$ 来计算梯度。
FlashAttention 不保存 $P$,而是在反向时:
这就是 activation checkpointing 的思想,用计算换显存。
因为重计算在 SRAM 内进行,速度很快,代价可接受。
综合以上:
实际上,FlashAttention 的 HBM 访问量约为:
$$ O\left(\frac{N^2 d^2}{M}\right) $$
相比标准的 $O(N^2 d)$,有显著下降。
FlashAttention 把多个操作融合进一个 kernel:
避免了中间结果的 HBM 读写,减少了 kernel launch 开销。
显存节省非常显著,尤其长序列下。
在 A100 上,FlashAttention 相比标准实现可以提速 2–4 倍,长序列下更明显。
标准 Attention 是带宽受限:
FlashAttention 变成计算受限:
| 维度 | 标准 Attention | FlashAttention |
|---|---|---|
| 显存 | $O(N^2)$ | $O(N)$ |
| HBM 读写 | $O(N^2)$ | 大幅减少 |
| 中间矩阵 | 存储 $S, P$ | 不存储 |
| 反向 | 用保存的 $P$ | 重计算 |
| 瓶颈 | 带宽受限 | 计算受限 |
| 速度 | 较慢 | 快 2–4 倍 |
这是一道很好的大模型 CUDA 优化面试题,适合考察候选人对 Attention 底层实现和 IO 优化的理解。它既能考察 tiling、online softmax 等核心算法,也能延伸到 HBM 读写、kernel fusion 和版本演进。如果候选人能把 FlashAttention 的 tiling、online softmax、重计算、HBM 读写减少以及为什么能同时省显存和提速都讲清楚,基本可以判断其具备大模型算子优化的扎实基础。
评论专区
评论加载中...登录后即可发表评论