第三篇 · GPU 与算子优化
单个 GPU 上,一个算子怎么写才快
⏳ 本章待补充
这一章要回答的问题
单个 GPU 上,一个算子怎么写才快?
前两篇给了你判断依据,这一章开始给实现手段。核心思想只有一句:好的算子设计不是减少计算量,而是减少数据搬运。
FlashAttention 之所以是 AI Infra 的里程碑,正是因为它把这个思想做成了一个通用范本。
前置知识
- 必须先读完 第一篇,尤其是 1.3 节的分块与 1.5 节的 Roofline。
- 了解 SIMT / warp / thread block 的基本概念即可,不需要先学会写 CUDA 再读论文。
计划覆盖的内容
| 小节 | 回答的问题 |
|---|---|
| FlashAttention | 注意力为什么要分块?online softmax 怎么推?为什么反向不用保存中间矩阵? |
| FlashAttention-2 | 算法正确了和打满硬件之间还差多远? |
| Triton | 为什么不直接手写 CUDA?tile 级语言解决了什么? |
| Winograd 与另一条路线 | "减少计算量"和"减少访存量"两条路各自的天花板在哪? |
| 动手实验 | 手写 CUDA matmul 并逐步优化到接近 cuBLAS;用 Triton 写一个 softmax |
用到的第一篇的知识
- 1.3 节的分块 → FlashAttention 的全部思想来源
- 1.5 节的 Roofline 与拐点 → 每一处优化的收益都用它判断
- 1.6 节的动手方法 → 先度量、再定位、后优化
对应的论文(见论文清单)
FlashAttention 1/2(NeurIPS 2022 / 2023)、Triton(MAPS 2019)、online softmax(2018)、Winograd(CVPR 2016)、Flash-Decoding(2023)。
← 返回 首页 | 上一章:第二篇 · 框架与自动微分