AI Infra Academy
返回 Wiki
FlashAttentionAttentionIO-awareCUDA

FlashAttention 为什么快:IO-aware 算法设计

21 次阅读更新于 2026/6/27
1 2

标准 Attention 的真正瓶颈

标准实现需要把中间矩阵 S = QKᵀ(N×N)和 softmax(S) 完整写回 HBM。问题在于:

Attention 是 memory-bound(带宽受限),而非 compute-bound。

HBM 带宽远低于片上 SRAM,频繁读写 N×N 矩阵成为瓶颈。

FlashAttention 的两个关键技术

1. Tiling(分块)

将 Q/K/V 切成小块,逐块载入 SRAM,在片上完成局部计算,避免实例化完整的 N×N 矩阵。

2. Online Softmax(在线 softmax)

softmax 需要全局归一化,但分块计算时看不到全局。FlashAttention 用增量更新的方式维护运行中的最大值和分母:

m_new = max(m_old, m_block)
l_new = exp(m_old - m_new) * l_old + exp(m_block - m_new) * l_block

这样无需保存完整的 S 矩阵也能得到数值正确的结果。

复杂度对比

实测 A100 上比 PyTorch 原生实现快 2~4 倍,且数值等价(非近似)。

小结

FlashAttention 的精髓不是减少计算量,而是减少慢速显存访问——这是 IO-aware 算法设计的典范。

讨论区(1)

HHogan7 天前

1