DeepSeek 开源周第三弹!DeepGEMM:FP8矩阵计算神器!JIT编译+Hopper架构优化,MoE性能飙升

简介: DeepGEMM 是 DeepSeek 开源的专为 FP8 矩阵乘法设计的高效库,支持普通和混合专家(MoE)分组的 GEMM 操作,基于即时编译技术,动态优化矩阵运算,显著提升计算性能。

❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!

🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦


🚀 “矩阵革命!DeepSeek开源FP8计算库:300行代码跑赢专家优化,MoE训练提速3倍”

大家好,我是蚝油菜花。当同行还在为万亿参数模型算力发愁时,一群极客用300行代码改写了游戏规则——

你是否正经历这些至暗时刻?

  • 👉 MoE模型分组计算卡在显存瓶颈,batch_size死活上不去
  • 👉 FP8精度损失严重,手动调参到凌晨3点仍报NaN警告
  • 👉 专家库动辄百万行代码,想优化却找不到切入点...

DeepGEMM 的三大破局利器:

  • ✅ JIT即时编译:运行时动态优化,彻底告别安装编译依赖地狱
  • ✅ TMA硬件级加速:榨干Hopper架构性能,矩阵搬运效率提升200%+
  • ✅ 双级累加黑科技:FP8计算+BF16精度保障,误差率直降80%

现在,百川智能的工程师用它把MoE推理延迟压进毫秒级——点击看如何用5行代码激活这个性能怪兽!

🚀 快速阅读

DeepGEMM 是 DeepSeek 开源的专为 FP8 矩阵乘法设计的高效库,支持普通和混合专家(MoE)分组的 GEMM 操作。

  1. 核心功能:支持高效 FP8 矩阵乘法,细粒度缩放和即时编译技术,显著提升计算性能。
  2. 技术原理:基于 NVIDIA Hopper 架构的 Tensor Memory Accelerator(TMA)特性,优化数据传输效率,并通过 CUDA 核心双级累加技术解决 FP8 精度问题。

DeepGEMM 是什么

DeepGEMM

DeepGEMM 是 DeepSeek 开源的专为 FP8(8 位浮点)矩阵乘法设计的高效库,支持普通和混合专家(MoE)分组的 GEMM 操作。该库基于即时编译(JIT)技术,无需安装时编译,支持在运行时动态优化,显著提升矩阵运算的性能和精度。

DeepGEMM 专为 NVIDIA Hopper 架构设计,充分利用 Tensor Memory Accelerator(TMA)特性,提升数据传输效率。其核心代码仅约 300 行,易于学习和优化,在多种矩阵形状上均达到或超过专家级优化库的性能。

DeepGEMM 的主要功能

  • 高效 FP8 矩阵乘法(GEMM):专为 FP8 矩阵乘法设计,支持细粒度缩放,显著提升矩阵运算的性能和精度。
  • 支持普通和分组 GEMM:适用于常规的矩阵乘法操作,并支持混合专家(MoE)模型中的分组矩阵乘法,优化多专家共享形状的场景。
  • 即时编译(JIT)设计:所有内核在运行时动态编译,无需安装时编译,根据矩阵形状、块大小等参数进行优化,节省寄存器提升性能。
  • Hopper 架构优化:充分利用 Tensor Memory Accelerator(TMA)特性,包括 TMA 加载、存储、多播和描述符预取,显著提升数据传输效率。
  • 细粒度缩放和双级累加:引入细粒度缩放技术,基于 CUDA 核心的双级累加机制,将 FP8 计算结果提升到更高精度的格式(如 BF16),确保计算精度。
  • 轻量级设计:核心代码简洁,仅约 300 行,易于理解和扩展,避免复杂模板或代数结构的依赖,降低学习和优化的难度。

DeepGEMM 的技术原理

DeepGEMM-design

  • 即时编译(JIT)技术:所有内核在运行时动态编译,无需安装时编译,根据矩阵形状、块大小等参数进行优化,节省寄存器提升性能。
  • Tensor Memory Accelerator(TMA):利用 Hopper 架构的 TMA 特性,提升数据传输效率,包括 TMA 加载、存储、多播和描述符预取。
  • 细粒度缩放和双级累加:通过细粒度缩放技术,结合 CUDA 核心的双级累加机制,解决 FP8 精度不足的问题,确保计算精度。

如何运行 DeepGEMM

环境要求

在运行 DeepGEMM 之前,请确保满足以下环境要求:

  • 支持 Hopper 架构的 GPU(必须支持 sm_90a
  • Python 3.8 或更高版本
  • CUDA 12.3 或更高版本(推荐 12.8 或以上以获得最佳性能)
  • PyTorch 2.1 或更高版本
  • CUTLASS 3.6 或更高版本(可以通过 Git 子模块克隆)

开发环境配置

1. 克隆代码库

DeepGEMM 的代码库包含必要的子模块,因此需要使用 --recursive 参数克隆:

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

2. 创建符号链接

运行以下命令以创建第三方库(如 CUTLASS 和 CuTe)的符号链接:

python setup.py develop

3. 测试 JIT 编译

运行以下命令以测试 JIT 编译是否正常工作:

python tests/test_jit.py

4. 测试核心功能

运行以下命令以测试所有 GEMM 实现(包括普通 GEMM 和分组 GEMM):

python tests/test_core.py

5. 安装 DeepGEMM

完成开发环境配置后,可以通过以下命令安装 DeepGEMM:

python setup.py install

安装完成后,可以在 Python 项目中导入 deep_gemm 模块,开始使用 DeepGEMM。

使用 DeepGEMM 的核心功能

DeepGEMM 提供了多种矩阵乘法接口,支持普通 GEMM 和分组 GEMM(连续布局和掩码布局)。以下是具体的使用方法。

普通 GEMM(非分组)

DeepGEMM-Normal GEMMs for dense models

要执行一个基本的非分组 FP8 GEMM,可以调用 deep_gemm.gemm_fp8_fp8_bf16_nt 函数。以下是一个简单的示例代码:

import torch
import deep_gemm

# 创建 FP8 输入矩阵
lhs = torch.randn(64, 7168, dtype=torch.float8_e4m3fn)
rhs = torch.randn(7168, 2112, dtype=torch.float8_e4m3fn)

# 执行 GEMM 操作
output = deep_gemm.gemm_fp8_fp8_bf16_nt(lhs, rhs)

print("Output shape:", output.shape)

代码解释

  1. lhsrhs 是 FP8 格式的输入矩阵。
  2. deep_gemm.gemm_fp8_fp8_bf16_nt 函数执行非转置 LHS 和转置 RHS 的矩阵乘法。
  3. 输出结果为 BF16 格式。

分组 GEMM(连续布局)

DeepGEMM-Grouped GEMMs for MoE models contiguous layout

分组 GEMM 适用于 MoE(Mixture of Experts)模型,其中每个专家的输入矩阵形状相同。以下是一个连续布局的分组 GEMM 示例:

import torch
import deep_gemm

# 创建分组输入矩阵
lhs = torch.randn(4, 8192, 7168, dtype=torch.float8_e4m3fn)
rhs = torch.randn(7168, 4096, dtype=torch.float8_e4m3fn)

# 执行分组 GEMM 操作
output = deep_gemm.m_grouped_gemm_fp8_fp8_bf16_nt_contiguous(lhs, rhs)

print("Output shape:", output.shape)

代码解释

  1. lhs 是一个分组矩阵,其中每个组的形状为 (8192, 7168)
  2. rhs 是一个共享的权重矩阵。
  3. 输出结果为每个组的矩阵乘法结果。

分组 GEMM(掩码布局)

DeepGEMM-Grouped GEMMs for MoE models masked layout

在推理阶段,当使用 CUDA 图形时,可以通过掩码布局支持分组 GEMM。以下是一个示例:

import torch
import deep_gemm

# 创建掩码分组输入矩阵
lhs = torch.randn(4, 1024, 7168, dtype=torch.float8_e4m3fn)
rhs = torch.randn(7168, 4096, dtype=torch.float8_e4m3fn)
mask = torch.randint(0, 2, (4, 1024), dtype=torch.bool)

# 执行掩码分组 GEMM 操作
output = deep_gemm.m_grouped_gemm_fp8_fp8_bf16_nt_masked(lhs, rhs, mask)

print("Output shape:", output.shape)

代码解释

  1. mask 是一个布尔张量,用于指示哪些部分需要计算。
  2. deep_gemm.m_grouped_gemm_fp8_fp8_bf16_nt_masked 函数仅计算掩码为 True 的部分。

配置优化选项

DeepGEMM 提供了一些实用工具函数和环境变量,用于优化性能。以下是一些常用配置:

设置最大 SM 数量

deep_gemm.set_num_sms(132)  # 设置最大 SM 数量

获取对齐要求

alignment = deep_gemm.get_m_alignment_for_contiguous_layout()
print("Alignment requirement:", alignment)

环境变量

  • DG_CACHE_DIR:设置编译内核的缓存目录,默认为 $HOME/.deep_gemm
  • DG_DISABLE_FFMA_INTERLEAVE:禁用 FFMA 交错优化。

性能优化

DeepGEMM 在性能优化方面采用了多种技术,包括:

  • 持久化线程块专用化:通过线程块专用化实现数据移动、张量核 MMA 指令和 CUDA 核提升的重叠。
  • Hopper TMA 特性:利用 Tensor Memory Accelerator(TMA)实现异步数据加载和存储。
  • 完全 JIT 设计:在运行时编译内核,优化寄存器使用和指令调度。
  • 未对齐块大小支持:针对特定形状优化 SM 利用率。
  • FFMA 指令交错:通过修改编译后的二进制文件优化指令级并行性。

资源


❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!

🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦

相关实践学习
使用PAI+LLaMA Factory微调Qwen2-VL模型,搭建文旅领域知识问答机器人
使用PAI和LLaMA Factory框架,基于全参方法微调 Qwen2-VL模型,使其能够进行文旅领域知识问答,同时通过人工测试验证了微调的效果。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
7月前
|
人工智能 自然语言处理 开发工具
统一多模态 Transformer 架构在跨模态表示学习中的应用与优化
本文介绍统一多模态 Transformer(UMT)在跨模态表示学习中的应用与优化,涵盖模型架构、实现细节与实验效果,探讨其在图文检索、图像生成等任务中的卓越性能。
统一多模态 Transformer 架构在跨模态表示学习中的应用与优化
|
7月前
|
算法 物联网 定位技术
蓝牙室内定位技术解决方案:核心技术架构与优化实践
本文探讨了蓝牙iBeacon与Lora结合的室内定位技术,分析其在复杂室内环境中的优势与挑战。通过三层架构实现高精度定位,并提出硬件、算法与部署优化方向,助力智慧仓储、医疗等场景智能化升级。
383 0
蓝牙室内定位技术解决方案:核心技术架构与优化实践
|
7月前
|
数据采集 人工智能 安全
开源赋能双碳:MyEMS 能源管理系统的架构与实践价值
在全球碳中和趋势与“双碳”目标推动下,能源管理趋向精细化与智能化。MyEMS是一款基于Python开发的开源能源管理系统,具备灵活适配、功能全面的优势,覆盖工厂、建筑、数据中心等多元场景。系统支持能源数据采集、分析、可视化及设备管理、故障诊断、AI优化控制等功能,提供“监测-分析-优化”闭环解决方案。遵循“国家+省级+接入端”三级架构,MyEMS在重点用能单位能耗监测中发挥关键作用,助力实现能源效率提升与政策合规。开源模式降低了技术门槛,推动“双碳”目标落地。
249 0
|
4月前
|
机器学习/深度学习 数据可视化 网络架构
PINN训练新思路:把初始条件和边界约束嵌入网络架构,解决多目标优化难题
PINNs训练难因多目标优化易失衡。通过设计硬约束网络架构,将初始与边界条件内嵌于模型输出,可自动满足约束,仅需优化方程残差,简化训练过程,提升稳定性与精度,适用于气候、生物医学等高要求仿真场景。
525 4
PINN训练新思路:把初始条件和边界约束嵌入网络架构,解决多目标优化难题
|
4月前
|
运维 Prometheus 监控
别再“亡羊补牢”了!——聊聊如何优化企业的IT运维监控架构
别再“亡羊补牢”了!——聊聊如何优化企业的IT运维监控架构
200 8
|
4月前
|
缓存 运维 监控
Redis 7.0 高性能缓存架构设计与优化
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Redis 7.0高性能缓存架构,探索函数化编程、多层缓存、集群优化与分片消息系统,用代码在二进制星河中谱写极客诗篇。
|
6月前
|
机器学习/深度学习 存储 人工智能
RAG系统文本检索优化:Cross-Encoder与Bi-Encoder架构技术对比与选择指南
本文将深入分析这两种编码架构的技术原理、数学基础、实现流程以及各自的优势与局限性,并探讨混合架构的应用策略。
452 10
RAG系统文本检索优化:Cross-Encoder与Bi-Encoder架构技术对比与选择指南
|
6月前
|
机器学习/深度学习 人工智能 算法
|
6月前
|
数据采集 机器学习/深度学习 运维
从数据感知到决策优化:MyEMS 开源能源管理系统的技术架构与实践效能解析
MyEMS 是一款开源能源管理系统,采用分层解耦与模块化设计,支持多能源协同监测与智能优化调度。系统具备数据采集、分析、预警、碳核算等功能,助力企业实现节能降耗、安全管控与低碳转型,已在百余家全球企业落地应用,具备自主可控、成本低、安全性强等优势,面向虚拟电厂、数字孪生等未来场景持续演进。
295 0
|
7月前
|
缓存 人工智能 监控
1688 平台商品详情接口技术揭秘:架构演进与实战优化
本文深入解析了1688商品详情接口的技术架构与核心实现,涵盖微服务拆分、多级缓存、数据聚合及高可用策略,展示了如何构建高性能电商接口系统,并展望AI技术在商品展示中的应用。

热门文章

最新文章