Loading...

文章背景图

DeepGEMM:统一高性能张量核心 GEMM 计算库编译与使用指南

2026-10-27
0
- 字
- 分钟
|

DeepGEMM:统一高性能张量核心 GEMM 计算库编译与使用指南

DeepGEMM 是 DeepSeek 开源的统一高性能张量核心 kernel 库,把现代大模型的关键计算原语——FP8/FP4/BF16 GEMM、融合通信的 Mega MoE、MQA 打分、HyperConnection 等——整合进同一套 CUDA 代码库。所有 kernel 在运行时通过 DeepJIT 即时编译,安装时无需 CUDA 编译。

一、项目官方信息

项目 信息
GitHub 仓库 https://github.com/deepseek-ai/DeepGEMM
开源协议 MIT
主要语言 CUDA(50.6%)
Star 数 9.1k+
性能 H800 上 FP8 最高约 1550 TFLOPS

二、官方图片

DeepGEMM 仓库社交预览图:

DeepGEMM

三、环境要求

  • NVIDIA SM90(Hopper)或 SM100 架构 GPU;
  • Python 3.8 及以上;
  • 支持 C++20 <format> 的编译器与标准库;
  • CUDA Toolkit 12.9 及以上;
  • PyTorch 2.3 及以上;
  • CUTLASS 4.0 及以上(可由 Git submodule 拉取)。

四、部署步骤

1. 克隆(含子模块)

git clone --recursive https://github.com/deepseek-ai/DeepGEMM
cd DeepGEMM

2. 开发模式构建

./develop.sh

3. 安装为 wheel

./install.sh

之后即可在 Python 中 import deep_gemm。

五、使用方法

基础非分组 FP8 GEMM

库的命名约定为 D = C + A @ B,输入布局为 NT(A 不转置、B 转置):

import deep_gemm
# 非分组 FP8 GEMM
out = deep_gemm.fp8_gemm_nt(a_fp8, a_sf, b_fp8, b_sf, c)

SM90 仅支持 NT 布局;SM100 支持 NT/TN/NN/TT 全部布局。缩放因子(scale factor)SM90 用 FP32,SM100 用打包的 UE8M0。

分组 GEMM(MoE)

DeepGEMM 的分组只沿 M 轴分组,N/K 固定,适合 MoE 中各专家形状一致的场景:

  • 训练前向 / prefill(连续布局):m_grouped_fp8_gemm_{nt, nn}_contiguous;
  • 权重反向(K 轴分组):k_grouped_fp8_gemm_tn_contiguous;
  • 推理 decoding(masked 布局):m_grouped_fp8_gemm_nt_masked,输入可用 DeepEP 的低延迟 kernel 输出。

Mega MoE 融合 kernel

Mega MoE 把 EP dispatch、linear1/linear2、SwiGLU、EP combine 融合成一个 mega-kernel,重叠 NVLink 通信与张量核心计算:

buffer = deep_gemm.get_symm_buffer_for_mega_moe(
    group, num_experts, num_max_tokens_per_rank, num_topk, hidden, intermediate_hidden,
    mma_type='fp8xfp4',
)
transformed_l1, transformed_l2 = deep_gemm.transform_weights_for_mega_moe(l1_weights, l2_weights)
buffer.x[:num_tokens].copy_(x_fp8)
y = torch.empty((num_tokens, hidden), dtype=torch.bfloat16, device='cuda')
deep_gemm.fp8_fp4_mega_moe(y, transformed_l1, transformed_l2, buffer)

工具函数

  • set_num_sms / get_num_sms:限制/查询 SM 数;
  • set_tc_util:设置近似张量核心利用率;
  • set_pdl:开关 Programmatic Dependent Launch;
  • get_mk_alignment_for_contiguous_layout:查询连续布局的对齐。

常用环境变量

  • DG_JIT_CACHE_DIR:JIT 缓存目录(默认 $HOME/.dj);
  • DG_JIT_DEBUG=1:打印编译器命令、PTXAS 输出、PTX/SASS dump;
  • DG_JIT_PRINT_COMPILER_COMMAND=1:打印编译命令;
  • DG_SKIP_CUDA_BUILD=1:安装时跳过 CUDA 扩展构建。

六、常见问题 FAQ

Q1:DeepGEMM 是什么? 统一高性能张量核心 GEMM 库,覆盖 FP8/FP4/BF16 与 MoE、MQA 等大模型核心算子。

Q2:支持哪些 GPU? NVIDIA SM90(Hopper)与 SM100 架构。

Q3:安装要 CUDA 编译吗? 不需要。kernel 运行时由 DeepJIT 即时编译,安装脚本只构建 C++ 扩展。

Q4:怎么跑一次 FP8 GEMM? deep_gemm.fp8_gemm_nt(a, a_sf, b, b_sf, c),布局 NT。

Q5:MoE 的分组 GEMM 怎么调? 连续布局用 m_grouped_fp8_gemm_nt_contiguous,decoding 用 m_grouped_fp8_gemm_nt_masked。

Q6:和 CUTLASS 什么关系? 借鉴了 CUTLASS/CuTe 思路,但避免重度依赖其模板代数,核心逻辑精简,便于学习 GPU kernel 优化。

七、跳转链接

评论交流

文章目录