✨ 复制成功!

以文会友,打造好学人设!

📋 已复制到剪贴板:

【补充资料】FlashAttention 是什么?FlashAttention 和 PagedAttention 有什么区别?

创建时间:2026-09-19 更新时间:2026-09-19 阅读次数:1275 次 分类:分布式训练与工程优化

1、FlashAttention 是什么?

FlashAttention 是一种针对 Transformer 注意力计算的高效 CUDA 实现算法,由 Tri Dao 等人在 2022 年提出。

它要解决的核心问题是:标准 Attention 需要显式存储 N×N 的注意力矩阵,显存占用 O(N^2),而且大量时间花在 HBM 读写上,导致长序列训练和推理又慢又吃显存。

FlashAttention 的核心做法是:

  • Tiling:把 Q、K、V 分块,每次只把一小块加载到 SRAM(shared memory)里计算;
  • Online Softmax:在分块遍历的过程中动态维护最大值和归一化因子,不需要一次看到所有分数;
  • 重计算:反向传播时不保存完整的注意力矩阵,而是从保存的统计量重新计算;
  • Kernel Fusion:把 QK^T 、softmax、PV 融合进一个 kernel,减少 HBM 读写和 kernel launch 开销。

效果是:

  • 显存从 O(N^2)降到 O(N);
  • HBM 读写大幅减少;
  • 在 A100 等 GPU 上,训练和推理速度提升 2–4 倍,长序列下更明显。

一句话总结:FlashAttention 用分块计算和在线 softmax,把 Attention 从“显存带宽受限”变成“计算受限”,实现了省显存和提速的双赢,而且是精确计算,不是近似。

它后续还有 FlashAttention-2、FlashAttention-3,分别针对并行划分和 Hopper 架构做了进一步优化。现在 PyTorch 的 scaled_dot_product_attention、vLLM、TensorRT-LLM 等主流框架都已集成。

2、FlashAttention 和 PagedAttention 有什么区别?

FlashAttention 和 PagedAttention有区别,而且区别还挺大。它们虽然名字里都有 “Attention”,但解决的是完全不同层面的问题,经常被放在一起用,但不是同一类东西。

简单说:

  • FlashAttention 解决的是“注意力怎么算得快、怎么少读写显存”,是一个计算 kernel 的优化算法;
  • PagedAttention 解决的是“KV Cache 怎么存、怎么管理显存”,是一个显存管理机制。

可以从几个维度对比:

维度 FlashAttention PagedAttention
解决的问题 注意力计算慢、HBM 读写多 KV Cache 显存碎片、利用率低
优化对象 计算过程 存储管理
核心思想 Tiling + online softmax + 重计算 分页 + block table + 按需分配
主要收益 省显存、提速,长序列更明显 省显存、提吞吐,高并发更明显
适用阶段 训练和推理都可用 主要用于推理
代表框架 PyTorch SDPA、FlashAttention 库 vLLM
是否改变计算结果 不改变,精确计算 不改变注意力数学,只改变 KV 存储方式

具体来说:

FlashAttention 关心的是“算”。标准 Attention 要显式生成 $N \times N$ 的注意力矩阵,显存 $O(N^2)$,而且大量时间花在 HBM 读写上。FlashAttention 通过分块、online softmax、重计算,把中间矩阵留在 SRAM 里,不写回 HBM,从而把显存降到 $O(N)$,速度提升 2–4 倍。它不关心 KV Cache 在显存里怎么组织,只关心一次注意力计算怎么高效完成。

PagedAttention 关心的是“存”。推理时 KV Cache 会随着生成不断增长,传统方式按最大长度预分配连续显存,导致严重碎片和浪费。PagedAttention 把 KV Cache 切成固定大小的 block,用 block table 做逻辑到物理的映射,允许离散存储,显存利用率从 20%–40% 提升到 90% 以上,还支持前缀共享和 Copy-on-Write。它不改变注意力计算的数学,只改变 KV Cache 的存储和访问方式。

两者是互补关系。在 vLLM 这类现代推理框架里,常见做法是:

  • 用 PagedAttention 管理 KV Cache 的存储;
  • 用 FlashAttention 或类似的优化 kernel 做实际的注意力计算。

也就是说,PagedAttention 决定“KV 放在哪、怎么找”,FlashAttention 决定“拿到 KV 后怎么算得快”。一个管存储,一个管计算,合在一起才能同时拿到高显存利用率和低延迟。

一句话总结:FlashAttention 是计算层面的优化,PagedAttention 是存储层面的优化;前者让 Attention 算得更快,后者让 KV Cache 存得更省,两者结合才是推理优化的完整拼图。


📌 面试天下网:一款服务于上班族的口袋书,让大家在地铁里/公交上可以学习大模型技术!
📌 网站公告:【悬赏 200 元/篇】寻找“大模型面试战场”的一手回忆录
📌 网站公告:【大模型/Agent面试陪练1V1指导】正式启动......

评论专区

评论加载中...