DeepSeek开源DeepGEMM:专为FP8设计的简洁高效通用矩阵乘法库

DeepSeek开源DeepGEMM,一个专为FP8设计的简洁高效通用矩阵乘法库,支持NVIDIA Hopper张量核心,性能优异。

原文标题:DeepSeek开源周第三天:专为FP8设计的DeepGEMM来了,核心内核代码仅300行!

原文作者:AI前线

冷月清谈:

DeepSeek开源了DeepGEMM,这是一个专为FP8通用矩阵乘法设计的CUDA库,具有细粒度缩放功能。该库采用轻量级即时编译,无需编译安装,支持普通GEMMs和MoE分组GEMMs。目前仅支持NVIDIA Hopper张量核心,使用CUDA核心两级累加策略解决FP8张量核心累加不精确问题。DeepGEMM内核经过warp专门化,实现了重叠数据移动、张量核心MMA指令和CUDA核心提升,使用TMA加载数据和存储输出矩阵。尽管设计简洁,核心代码仅约300行,但在各种矩阵形状下的性能可与专家调优的库匹敌甚至超越。DeepSeek在H800上进行了全量测试,结果显示DeepGEMM相较于CUTLASS 3.6有显著性能提升。

怜星夜思:

1、DeepGEMM只支持Hopper架构,未来会支持其他架构吗?比如Ampere或者Ada Lovelace?
2、DeepGEMM核心代码只有300行,性能却这么好,怎么做到的?
3、相比于CUTLASS,DeepGEMM有哪些优势?除了性能还有什么其他方面的改进?

原文内容

左右滑动查看更多图片

R2 被曝将在5月或更早推出,而刚刚,DeepSeek开源了DeepGEMM,一个专为简洁高效的FP8通用矩阵乘法(GEMMs)设计的库,具有细粒度缩放功能(如DeepSeek-V3中提出的方案)。
 
该库采用 CUDA 编写,采用轻量级即时编译(JIT)模块,安装时无需编译(所有内核在运行时编译)。它支持普通 GEMMs 以及专家混合 (MoE) 分组 GEMMs。
 
目前,DeepGEMM 仅支持 NVIDIA Hopper 张量核心,该库使用CUDA核心两级累加(promotion)(晋升)策略来解决FP8张量核心累加不精确问题。尽管DeepGEMM借鉴了 CUTLASS 和 CuTe 的一些理念,但避免了过度依赖模板或复杂的代数结构。该库设计简洁,仅包含一个核心内核函数,代码大约只有 300 行左右。
 
按照 CUTLASS 设计,DeepGEMM 中的内核经过了 warp 专门化,可实现重叠数据移动、张量核心 MMA 指令和 CUDA 核心提升。DeepGEMM 使用 TMA 加载 LHS、RHS 和缩放因子,以及存储输出矩阵。
 
尽管设计轻量,DeepGEMM 的性能在各种矩阵形状下均能匹配或超越经过专家调优的库。
 
DeepSeek在配备NVCC 12.8的H800计算卡上对DeepSeek-V3/R1推理流程(包含预填充和解码阶段,除了张量并行场景)可能涉及的所有矩阵形状进行全量测试,所有加速性能指标均基于CUTLASS 3.6深度优化的内部实现作为基准对比(见图2-4)。DeepGEMM在部分特定矩阵形状上的性能表现仍有提升空间。
 
“虽然 FP8 在生产中还处于相对早期阶段,但 DeepGEMM 代表着在使 FP8 成为大规模 MoE 模型的可行选择方面迈出了重要一步。朋友们,这真是太酷了。”有网友评价。
 
使用要求:
·Hopper 架构 GPU,sm_90a必须支持
·Python 3.8 或更高版本
·CUDA 12.3 或更高版本(官方建议强烈建议使用 12.8 或更高版本)
·PyTorch 2.1 或更高版本
·CUTLASS 3.6 或更高版本(可以通过 Git 子模块克隆)
 
开源地址(MIT 许可证):
https://github.com/deepseek-ai/DeepGEMM

“浓缩的都是精华”说的就是DeepGEMM吧,哈哈。估计作者在设计和实现上都下了不少功夫,才能在保证性能的前提下把代码写的这么简洁。

文章里提到DeepGEMM避免了过度依赖模板和复杂的代数结构,感觉代码应该会更容易理解和维护。性能方面,DeepGEMM在某些特定矩阵形状下还有提升空间,未来可期。

现在FP8相关的库和应用都还在早期阶段,感觉厂商也在不断尝试和优化,估计DeepGEMM会逐步拓展对其他架构的支持,等等看吧,说不定过段时间就有新消息了。

个人猜测,未来可能会支持其他架构。不过从DeepGEMM的代码来看,它对Hopper架构的张量核心做了很多优化,要支持其他架构可能需要不少工作量。可以关注一下他们的GitHub,看看有没有相关的issue或者讨论。

代码简洁不代表功能简单,没准这300行代码里包含了很多高深的优化技巧,像warp专门化、TMA加载之类的。可以仔细研究一下源码。

支持其他架构肯定在计划中吧,毕竟现在Hopper卡也不是那么普及,要是能支持更多架构,肯定会有更多人用。静等官方更新!

DeepGEMM的轻量级JIT编译也是一大优势,安装时无需编译,使用起来更方便。相比之下,CUTLASS的编译过程比较复杂,容易踩坑。

300行代码就能达到这么高的性能,真的厉害。估计是作者对底层硬件和CUDA非常熟悉,才能写出这么精简高效的代码。

就我目前了解,DeepGEMM对FP8的支持和优化做得更好,尤其是在解决FP8张量核心累加不精确问题上,DeepGEMM用了CUDA核心两级累加的策略。这个特性对模型训练和推理的精度提升应该会有帮助。