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

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
模型训练 PAI-DLC,100CU*H 3个月
交互式建模 PAI-DSW,每月250计算时 3个月
简介: 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-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
14天前
|
机器学习/深度学习 人工智能 文件存储
Llama Nemotron:英伟达开源基于Llama架构优化的推理模型,253B参数持平DeepSeek R1!
NVIDIA推出的Llama Nemotron系列推理模型,基于Llama架构优化,包含Nano/Super/Ultra三款,在数学推理、编程和工具调用等任务中展现卓越性能。
56 5
Llama Nemotron:英伟达开源基于Llama架构优化的推理模型,253B参数持平DeepSeek R1!
|
7天前
|
人工智能 算法 网络安全
基于PAI+专属网关+私网连接:构建全链路Deepseek云上私有化部署与模型调用架构
本文介绍了阿里云通过PAI+专属网关+私网连接方案,帮助企业实现DeepSeek-R1模型的私有化部署。方案解决了算力成本高、资源紧张、部署复杂和数据安全等问题,支持全链路零公网暴露及全球低延迟算力网络,最终实现技术可控、成本优化与安全可靠的AI部署路径,满足企业全球化业务需求。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
GR00T N1:全球首个开源人形机器人基座模型!双系统架构解锁通用操作
GR00T N1 是英伟达推出的全球首个开源人形机器人基础模型,基于多模态输入和双系统架构,能够执行复杂操作任务,适用于物流、制造、零售等多个领域。
89 1
GR00T N1:全球首个开源人形机器人基座模型!双系统架构解锁通用操作
|
8天前
|
数据采集 运维 Serverless
云函数采集架构:Serverless模式下的动态IP与冷启动优化
本文探讨了在Serverless架构中使用云函数进行网页数据采集的挑战与解决方案。针对动态IP、冷启动及目标网站反爬策略等问题,提出了动态代理IP、请求头优化、云函数预热及容错设计等方法。通过网易云音乐歌曲信息采集案例,展示了如何结合Python代码实现高效的数据抓取,包括搜索、歌词与评论的获取。此方案不仅解决了传统采集方式在Serverless环境下的局限,还提升了系统的稳定性和性能。
|
15天前
|
弹性计算 负载均衡 网络协议
阿里云SLB深度解析:从流量分发到架构优化的技术实践
本文深入探讨了阿里云负载均衡服务(SLB)的核心技术与应用场景,从流量分配到架构创新全面解析其价值。SLB不仅是简单的流量分发工具,更是支撑高并发、保障系统稳定性的智能中枢。文章涵盖四层与七层负载均衡原理、弹性伸缩引擎、智能DNS解析等核心技术,并结合电商大促、微服务灰度发布等实战场景提供实施指南。同时,针对性能调优与安全防护,分享连接复用优化、DDoS防御及零信任架构集成的实践经验,助力企业构建面向未来的弹性架构。
157 76
|
9天前
|
机器学习/深度学习 人工智能 算法
超越 DeepSeek-R1!Seed-Thinking-v1.5:字节跳动开源MoE架构推理模型,200B总参数仅激活20B,推理效率提升5倍
字节跳动推出的200B参数混合专家模型,在AIME/Codeforces/GPQA等基准测试中实现多项突破,采用强化学习框架与流式推理系统,支持7大领域复杂推理任务。
132 13
超越 DeepSeek-R1!Seed-Thinking-v1.5:字节跳动开源MoE架构推理模型,200B总参数仅激活20B,推理效率提升5倍
|
11天前
|
SQL 运维 Java
蚂蚁 Flink 实时计算编译任务 Koupleless 架构改造
本文介绍了对Flink实时计算编译任务的Koupleless架构改造。为解决进程模型带来的响应慢、资源消耗大等问题,团队将进程模型改为线程模型,并借助Koupleless的类加载隔离能力实现版本和包的隔离。通过动态装配Plugin及其Classpath,以及Biz运行时仅对依赖Plugin可见的设计,大幅优化了编译任务的性能。结果表明,新架构使编译耗时降低50%,吞吐量提升5倍以上。
蚂蚁 Flink 实时计算编译任务 Koupleless 架构改造
|
27天前
|
人工智能 测试技术 语音技术
阿里开源多模态全能王 Qwen2.5-Omni:创新Thinker-Talker架构,全面超越Gemini-1.5-Pro等竞品
阿里开源Qwen2.5-Omni多模态大模型,支持文本、图像、音频和视频输入,具备实时语音合成与流式响应能力,在OmniBench等基准测试中全面超越Gemini-1.5-Pro等竞品,提供免费商用授权。
535 6
阿里开源多模态全能王 Qwen2.5-Omni:创新Thinker-Talker架构,全面超越Gemini-1.5-Pro等竞品
|
10天前
|
机器学习/深度学习 编解码 人工智能
Kimi开源MoE架构多模态推理模型,小激活参数,大能量!
最近Moonshot AI推出了 Kimi-VL,这是一个高效的开源混合专家(MoE)视觉-语言模型(VLM),它提供了先进的多模态推理、长上下文理解以及强大的代理能力——所有这些功能都只需激活其语言解码器中的2.8B参数(Kimi-VL-A3B)。
65 1
|
16天前
|
人工智能 计算机视觉 开发者
Meta开源多模态AI新王炸!Llama 4:MoE架构仅用17B参数碾压Gemma 3,支持1000万token上下文
Meta最新开源的Llama 4系列多模态AI模型,采用混合专家架构,支持200种语言处理,最高达2万亿参数规模,在语言理解、图像分析和代码生成等任务中展现突破性性能。
84 0
Meta开源多模态AI新王炸!Llama 4:MoE架构仅用17B参数碾压Gemma 3,支持1000万token上下文

热门文章

最新文章