CUDA 内核融合研究案例:在 NVIDIA Hopper 架构上使用 CUTLASS 库实现 FlashAttention-2
💡
原文中文,约500字,阅读约需2分钟。
📝
内容提要
本文介绍了FlashAttention-2前向传递的优化实现,使用了自定义融合的CUDA内核,适应NVIDIA Hopper架构,并使用开源的CUTLASS库编写。通过解释在线softmax和连续的GEMM内核融合的挑战和技术,利用Hopper特定的Tensor Memory Accelerator(TMA)和Warpgroup Matrix-Multiply-Accumulate(WGMMA)指令,定义和转换CUTLASS布局和张量,重叠复制和GEMM操作,并选择最优瓦片大小,平衡寄存器压力和共享内存利用率。在单个H100 PCIe GPU上的对比性测试中,与针对上一代NVIDIA Ampere架构进行优化的FlashAttention-2版本相比,FLOPs/s高出20-50%。
🎯
关键要点
- FlashAttention-2前向传递的优化实现使用自定义融合的CUDA内核。
- 该实现适应NVIDIA Hopper架构,并使用开源的CUTLASS库编写。
- 文章解释了在线softmax与连续GEMM内核融合的挑战和技术。
- 利用Hopper特定的Tensor Memory Accelerator(TMA)和Warpgroup Matrix-Multiply-Accumulate(WGMMA)指令。
- 定义和转换CUTLASS布局和张量,重叠复制和GEMM操作。
- 选择Q、K和V注意力矩阵的最优瓦片大小,平衡寄存器压力和共享内存利用率。
- 在单个H100 PCIe GPU上的对比性测试中,FLOPs/s高出20-50%。
- 与上一代NVIDIA Ampere架构优化的FlashAttention-2版本相比,性能显著提升。
➡️