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版本相比,性能显著提升。
➡️

继续阅读