高效矩阵乘法仍然是现代深度学习和高性能计算的关键组成部分。随着模型变得越来越复杂,常规的通用矩阵乘法(GEMM)方法通常面临内存带宽限制、数值精度和硬件利用率不优等挑战。这些问题因混合精度格式(如FP8)的出现而变得更加复杂,这需要谨慎处理以避免计算不准确。最近GPU架构的进步,特别是NVIDIA的Hopper张量核心,为性能提升创造了机会——但前提是软件必须设计得能够充分利用这些能力。在这种情况下,需要工具不仅要解决这些性能瓶颈,还要在设计中保持简洁和透明。
DeepSeek AI发布的DeepGEMM标志着对FP8 GEMM操作的深思熟虑的改进。DeepGEMM专门设计用于高效、简洁的FP8矩阵乘法,并具有细粒度的缩放功能,支持标准和混合专家(MoE)分组GEMM。该库用CUDA编写,因其通过轻量级即时(JIT)模块进行运行时内核编译而脱颖而出。这种设计选择意味着在安装过程中无需长时间的编译过程,使其易于集成到现有项目中。DeepGEMM为NVIDIA Hopper张量核心量身定制,确保它利用现代硬件能力,同时解决固有挑战,如FP8累加不精确。
技术细节和优势
DeepGEMM的核心采用细粒度缩放和FP8算术相结合的方式,以平衡速度和数值精度。为了应对FP8张量核心累加的问题,该库通过CUDA核心采用两级累加策略——通常称为提升。这种方法在不牺牲性能的情况下,最大限度地减少了计算过程中的误差。实现非常简洁,一个核心内核函数大约只有300行代码。这种简洁性不仅有助于理解底层原理,还便于社区进一步改进。
DeepGEMM从像CUTLASS和CuTe这样的成熟库中汲取灵感,但故意避免过度依赖复杂的模板或代数框架。相反,重点是提供一个简洁易懂的代码库,专注于优化GEMM操作,无论是普通配置还是分组配置。对分组GEMM的支持,为MoE模型设计,以两种形式实现:连续布局和掩码布局。每种布局都精心设计,以适应每个专家的不同token数量,反映了现代推理和训练任务的实际需求。
性能洞察和考虑
DeepGEMM存储库中提供的性能数据显示了其效率提升的明显情况。在NVIDIA H800 GPU上使用NVCC 12.8进行测试,结果表明,在一系列矩阵维度中,DeepGEMM的加速效果与经过精心优化的基于CUTLASS的实现相比具有竞争力。例如,普通GEMM操作的加速因子根据具体的矩阵形状,范围大约在1.4倍到2.7倍之间。在MoE模型的分组GEMM背景下,连续布局和掩码布局均显示出一致的改进,尽管提升幅度较为温和,加速因子在1.1倍到1.2倍之间。
这些性能提升是几个深思熟虑的设计决策的结果。该库的JIT编译策略允许动态优化内核参数,如块大小、流水线阶段数量和warp组,这些参数根据具体的GEMM形状和硬件配置进行调整。此外,Hopper的张量内存加速器(TMA)的使用有助于优化数据传输,这是在现代GPU架构上实现高性能的重要因素。存储库还详细介绍了几个辅助函数,帮助开发人员对齐张量维度和配置共享内存,确保该库可以顺利集成到更大的系统中。
结论
DeepGEMM代表了对FP8 GEMM计算挑战的审慎而有效的解决方法。通过关注精度和性能,该库为研究人员和实践者提供了一个优雅的解决方案,用于在NVIDIA Hopper张量核心上优化矩阵乘法。其设计强调清晰性和可访问性——简洁的代码库和通过运行时JIT编译消除预编译步骤都体现了这一点。无论是普通GEMM还是MoE模型所需的更专业的分组GEMM,DeepGEMM都提供了一个实用、文档齐全的平台,用于提升计算效率。
对于那些寻求改进深度学习流程或深入了解现代GPU优化技术的人来说,DeepGEMM是一个宝贵的资源。该存储库在MIT许可证下发布,并得到开发者社区的支持,邀请进一步探索和完善。
详见:https://github.com/deepseek-ai/DeepGEMM