MMDec, 2023

CUDA 内核融合研究案例:在 NVIDIA Hopper 架构上使用 CUTLASS 库实现 FlashAttention-2

TL;DR我们提供了 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 上进行的对比性测试中,针对某些常见的超参数选择,我们观察到与针对上一代 NVIDIA Ampere 架构进行优化的 FlashAttention-2 版本相比,FLOPs/s 高出 20-50%。