DeepSeek开源DeepGEMM矩阵乘法加速库,最快加速2.7倍
myzbx 2025-03-24 18:33 35 浏览
DeepSeek 开源活动来到了第三天,新项目如约而至。
此次开源库名为 DeepGEMM,GitHub 地址在文末。
DeepSeek 表示,这是一个支持密集和混合专家(MoE,Mixture of Experts)通用矩阵乘法(GEMM,General Matrix Multiplication)的 FP8 GEMM 库,为 V3/R1 的训练和推理提供支持。
在 Hopper GPU 上最高可达 1350+FP8 TFLOPS。其他优点包括:
没有过多的依赖,像教程一样简洁
完全即时编译
核心逻辑约为 300 行,但在大多数矩阵大小上均优于专家调优的内核
支持密集布局和两种 MoE 布局
据 DeepSeek 介绍,DeepGEMM 是一个专门设计的、干净且高效的工具库,它的核心任务是进行一种叫做 GEMM 的数学运算,这是 AI 模型训练和运行中非常常见的一种计算。
DeepGEMM 的特别之处在于,它使用了一种叫做 FP8 的超高效、低精度计算方式,能让运算速度更快,同时占用更少的内存。这种方式在 DeepSeek-V3 中被提出,并且支持精细的缩放调整(fine-grained scaling),让计算更灵活。
除了普通的矩阵乘法,DeepGEMM 还能处理混合专家矩阵乘法。
目前,DeepGEMM 只支持英伟达 Hopper 架构的张量核心。张量核心是 GPU 里的一种特殊硬件,专门用来加速矩阵运算。不过,Hopper 的张量核心在做 FP8 计算时,会出现累加(accumulation,就是把结果一点点加起来的过程)不够精确的问题。
为了解决这个问题,DeepGEMM 采用了两级累加(two-level accumulation)的办法。它借助 CUDA 核心来做更精确的累加,确保结果不会因为硬件限制而出错。
DeepGEMM 借鉴了一些来自 CUTLASS 和 CuTe 的概念。这两个也是 NVIDIA 的高性能矩阵运算库。不过,DeepGEMM 没有完全依赖它们的复杂模板或数学系统。
相反,该库的设计非常简单,只有一个核心内核函数,包含大约 300 行代码。这使其成为学习 Hopper FP8 矩阵乘法和优化技术的、干净且易于访问的资源。
尽管 DeepGEMM 设计轻量,但它的性能足以媲美那些由专家精心调优的库,甚至在某些矩阵形状(matrix shapes,指矩阵的大小和结构)上表现得更好。
在性能方面,DeepSeek 在搭载 NVCC 12.8 的 H800 上测试了 DeepSeek-V3/R1 推理中可能使用的所有形状(包括预填充和解码,但没有张量并行性)。
从性能对比表格上可见,DeepGEMM 最高能加速 2.7 倍。
所有加速指标都是与 DeepSeek 基于 CUTLASS 3.6 的内部精心优化的实现进行比较计算的。
鉴于 DeepGEMM 在某些矩阵形状上的表现并不是很好,DeepSeek 也邀请各路大神帮助优化这个开源库。
在优化方面,DeepSeek 实现了一些 CUTLASS 设计之外的优化。这些也是 DeepGEMM 最具创新的地方。
首先是完全 JIT 设计,安装时无需编译。所有内核均使用轻量级 JIT 实现在运行时进行编译。这种方法的优点包括:
- GEMM 形状、块大小和管道阶段数被视为编译时常量
- 自动选择块大小、warpgroups 数量、最佳管道阶段和 TMA 集群大小
- 全面展开 MMA 管道,为编译器提供更多优化机会
其次是支持非对齐的块大小。在做矩阵乘法时,矩阵会被分成一个个小块(block)来计算。块的大小通常是固定的,比如 128×128(因为 128 是 2 的幂,计算机喜欢这种数字)。但有时候,矩阵的尺寸跟这些块大小不完全匹配,就会浪费计算资源。
举个例子:
假设矩阵的行数(M)是 256,列数(N)是 7168。如果用常见的块大小 BLOCK_M=128(行)和 BLOCK_N=128(列),那么行方向可以分成 256÷128=2 个块,列方向可以分成 7168÷128=56 个块。总共用到的 SM(GPU 的计算单元)是 2×56=112 个。
GPU 通常有更多 SM(比如 128 个),但这里只用了 112 个,剩下的就闲着了,没充分利用。
DeepGEMM 的办法是支持非对齐的块大小,也就是不一定非要是 2 的幂(比如 128),可以根据矩阵尺寸灵活调整。
还是上面的例子,如果把 BLOCK_N 改成 112(而不是 128,不是 2 的幂),行方向还是 256÷128=2 个块,列方向变成了 7168÷112=64 个块。总共用到的 SM 变成 2×64=128 个。
这下正好把 128 个 SM 全用上,没有浪费。
最后一点是,DeepSeek 通过观察和修改底层代码(SASS 汇编指令)实现了性能优化。
简单来说,DeepSeek 发现新版编译器(NVCC 12.3)里有些底层代码变了,性能变得更好。深入研究后,他们觉得这是因为线程调度(yield)的方式变了,能让 GPU 同时干更多工作。
于是,他们模仿这个变化,写了个脚本修改自己的代码(调整 FFMA 指令的某些位),让 MMA 指令(矩阵乘累加)和提升指令更高效地“重叠在一起执行”。
结果是 DeepGEMM 在某些场景下快了 10% 以上,特别适合那种需要灵活调整的 FP8 矩阵乘法。
最后,DeepSeek 致谢了 CUTLASS 项目,称其是 DeepGEMM 的灵感来源。
参考资料:
https://x.com/deepseek_ai/status/1894553164235640933
https://github.com/deepseek-ai/DeepGEMM
排版:刘雅坤
相关推荐
- Xbox Series X具有比PS5更高的有效I/O吞吐量
-
来源:cnBeta在今年3月宣布XboxSeriesX时,微软就已经预告了全新的XboxVelocity架构,宣称可为次世代主机带来前所未有的功能体验。据悉,XboxVelocity体系结构有...
- 科个普:固态硬盘之友!DirectStorage显存直通车
-
谁能想到有一天,固态硬盘之友竟然是一个API——为了解决游戏Loading烦人的等待时间,微软利用NVMeSSD的超高读写速度特性,有针对性的开发了DirectStorageAPI,它可以让游戏直...
- 虚拟机备份应注意四大问题_虚拟机备份命令
-
2015-01-1405:48:00作者:赵为民虚拟化技术在近两年发展的非常快,很多企业都采用虚拟机技术来解决企业IT基础设施所面临的一些问题,如硬件过度浪费,扩展难等问题,但对于企业来说,保证企...
- PS4支持进入倒计时:2026年春季新发售的PS4游戏将停用部分功能
-
PlayStation似乎正在逐步开始淘汰对上世代主机PS4的支持。据InsiderGaming独家报道,PS4的一些传统服务将在2026年春季停止提供。InsiderGaming收到的文件显示...
- 2026年春季起索尼PS4平台新发行游戏将停用部分旧版PSN功能
-
IT之家10月2日消息,据游戏媒体InsiderGaming今天报道,部分文件显示,索尼互娱似乎已经准备开始逐步淘汰PS4游戏机。InsiderGaming收到的文件显示,索尼...
- 吞吐量18.09GB/s,硬盘启用DirectStorage 1.1的GPU解压功能实测
-
IT之家12月21日消息,AMD在今年5月初曾表示,即便用户装备了NVMe的存储设备,也可能无法满足SmartAccessStorage(该技术建立在微软DirectStora...
- 面试官:如何让localStorage支持过期时间设置?
-
聊到localStorage想必熟悉前端的朋友都不会陌生,我们可以使用它提供的getItem,setItem,removeItem,clear这几个API轻松的对存储在浏览器本地的...
- 2025年是时候对localstorage说再见了
-
localStorage隐藏风险在前端开发领域,localStorage自诞生之日起就一直是数据持久化的首选方案。凭借其看似简单的setItem/getItemAPI,它成为了存储用户偏好和应用状...
- 前端最能打的本地存储方案_前端数据存储
-
前言之前开发了一个离线存储的需求,需要在本地存储较大的数据量,并且还要考虑到多种场景下的存储方式兼容。产品的原话就是“要又大又全”。既然存储量大,也要覆盖全多种设备多种浏览器。方案选择既然要存储的数量...
- 抛弃 localStorage,这个存储方案更安全更高效
-
在前端开发的世界里,浏览器存储一直是我们处理客户端数据持久化的重要工具。多年来,localStorage凭借其简单易用的API和跨会话持久化能力,成为了许多开发者的默认选择。然而,随着Web...
- 软件性能测试中链接追踪工具Zipkin工具的使用
-
大家好,今天一起来学习一下在软件性能测试过程中如何使用Zipkin这个工具来追踪链接程序逻辑链路上的相关问题首先我们了解一下Zipkin是什么?Zipkin是Twitter的一个开源项目,基于G...
- Vue3管理系统实现动态路由和动态侧边菜单栏
-
在做Vue管理系统的时候,都会遇到的一个需求:每个用户的权限是不一样的,那么他可以访问的页面(路由),可以操作的菜单选项是不一样的,如果由后端控制,我们前端需要去实现动态路由,动态渲染侧边菜单栏。实现...
- JS删除上一条浏览器历史记录的方法(登录回退)
-
JS使用window.location.replace删除上一条浏览器历史记录的方法(登录回退)一、问题如果用户登录状态过期,或者没有登录,当用户登录之后回退上一个页面的时候,就会回退到登录页面,这样...
- LightRAG: 简单快速的检索增强生成工具
-
这里是Aideas,每日分享AI相关资讯。本文由AideasAgent整理并推荐。项目地址:/HKUDS/LightRAG,程序语言:Python,收藏:14,287,分支:1,996,...
- 实战指南:React 路由与Ant Design集成
-
路由管理:如何在React项目中集成react-router-dom使用前的准备:安装react-router-dom为了在React项目中使用路由功能,首先需要安装react-router-dom...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)
- 时钟启动 (33)
- HTML 游戏 (34)
- JS Loop For (32)