AI Infra 自学教材

第三篇 · 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)。


← 返回 首页 | 上一章:第二篇 · 框架与自动微分

On this page