DeepGEMM 是一个专门为实现简洁、高效的 FP8 通用矩阵乘法(GEMM)而设计的库。它具备细粒度缩放功能,支持普通和混合专家(MoE)分组 GEMM。DeepGEMM使用 CUDA 编写,安装时无需预先编译,而是借助轻量级即时(JIT)模块在运行时对所有内核进行编译。
目前,DeepGEMM 仅支持 NVIDIA Hopper 张量核心。为解决 FP8 张量核心累积不精确的问题,它采用了 CUDA 核心两级累积(提升)的方法。虽然 DeepGEMM 借鉴了 CUTLASS 和 CuTe 的一些概念,但避免了对它们的模板或代数过度依赖。该库的设计十分简洁,仅包含一个核心内核函数,代码量约 300 行。这使得它成为学习 Hopper FP8 矩阵乘法及优化技术的优质且易于上手的资源。尽管 DeepGEMM 设计轻量化,但其性能足以与甚至超越经过专家调整的库。
DeepGEMM的创新:
-
Hopper TMA加速:利用Tensor Memory Accelerator实现更快的数据异步传输。
-
全JIT设计:运行时编译内核,将矩阵形状等参数作为常量,显著提升小形状矩阵的性能。
-
非对齐块大小:打破传统2的幂对齐限制,提升SM利用率。
-
FFMA指令交错:通过自定义脚本优化汇编代码,进一步提升计算并行性。
DeepGEMM在搭载 NVCC 12.8 的 H800 上测试了 DeepSeek - V3/R1 推理过程中可能会用到的所有矩阵形状(包括预填充和解码,但未涉及张量并行性)。所有加速指标都是与基于CUTLASS 3.6的内部优化实现相比计算得出的。
需要说明的是,DeepGEMM 在部分矩阵形状上的表现欠佳。如果您对此感兴趣,欢迎提交优化PR。
密集模型的正常 GEMM
用于 MoE 模型的分组 GEMM(连续布局)
用于 MoE 模型的分组 GEMM(掩蔽布局)