疯了!居然有人试图让我搞懂,什么是 DeepGEMM

人工智能
​DeepSeek开源周,继DeepEP之后,开源了第三弹DeepGEMM。今天简单来说说DeepGEMM的相关知识。

DeepSeek开源周,继DeepEP之后,开源了第三弹DeepGEMM。

今天简单来说说:

  • 吃瓜:DeepGMEE是干嘛的?
  • 技术:DeepGMEE是怎么做到的?
  • 普通人有什么用:对写提示词有什么启示?

 DeepGMEE是干嘛的?

DeepGMEE,General Matrix Multiplication,一个FP8通用矩阵乘法库(library)。

画外音,FP8:8-bit Floating Point,8位浮点格式。

关于FP8通用矩阵乘法

一个矩阵乘法的优化而已,写了这么多年代码都没用过矩阵乘法,值得这么吹流弊吗?

额,我竟无言以对。

矩阵乘法是现代AI计算的基石。

  • 矩阵是数据表示的核心工具:神经网络中的权重,特征,参数传递等都使用矩阵表示;
  • 矩阵乘法占大模型中90%的计算量:Transformer基操QKV运算,卷积计算,分层全连接计算等;
  • 硬件优化的核心目标就是矩阵乘法计算;

传统AI的矩阵乘法怎么算?

传统一般使用NVIDIA开源的CUDA C++模板库CUTLASS。

传统方法通常采用FP16/FP32,存在一些潜在的不足:

  • 占显存资源:FP32占显存是FP8的4倍;
  • 资源利用率低:强制要求矩阵为2次幂尺寸(例如:128*128),容易出现显存碎片;
  • 不支持MOE模型的分组矩阵计算;
  • 部署复杂度高:需要编译,需要配置;

那为什么之前不直接采用FP8呢?

FP8虽然占用资源少,资源利用率高,但会带来精度损失。

这个问题程序员最好理解。

高精度乘法:1.2 * 3.4 = 4.08

如果直接降低精读,用整数表示浮点数,变为1 * 3 = 3,精读损失是无法接受的。

那有没有弥补精读不足的问题?

我们可以对浮点数进行整数化编码处理:

  • 步骤一:1.2用(12, 1)表示,其中1是小数位数;
  • 步骤二:3.4用(34, 1)表示;
  • 步骤三:1.2 * 3.4 = (12, 1) * (34, 1) = (12*34, 1+1) = (408, 2)

如此一来,就没有精度损失啦。

当然,矩阵乘法的精度补偿比这个复杂,其核心思路是:使用低精度乘法矩阵快速计算,高精度加法补足。

结论就是:deepseek使用FP8就能完成FP16/FP32的计算,降低显存占用+提高显存利用率的同时,仍然能够保持高精度。

DeepGMEE的特点

Git介绍中对DeepGMEE有三个关键形容词:

  • 简洁(clean)
  • 高效(efficient)
  • 高精度(fine-grained scaling)

为什么说DeepGMEE简洁?

  • 核心代码300行,而CUTLASS数千行;
  • 零依赖(除CUDA),无需预编译,无需复杂环境配置;
  • 注释清晰,便于学习与二次开发;

画外音:我看了一下,调整数据分块策略,只需要修改10-20行代码。

为什么说DeepGMEE高效?

这是FP8对比FP16/FP32的天然优势,相比GUTLASS:

  • 显存占用下降50%+;
  • MOE推理延时下降60%+;
  • 计算密度(TFLOPS)提升了270%+;

为什么说DeepGEMM高精度?

采用FP8矩阵乘法加速计算,BF16累加修正精读的方法,平衡了速度与精读。

除此之外,DeepGEMM还有不少特色:

  • 针对MOE优化,支持MOE分组矩阵乘法;
  • 针对硬件加速;
  • 动态编译JIT:运行时根据矩阵大小与硬件条件优化;
  • 矩阵灵活尺寸对齐(例如:可以支持112*128矩阵);

上面种种,DeepGMEE本次最大的创新,我认为是:FP8优化,JIT优化,以及MOE优化。

DeepGMEE是怎么做到的?

信息密度太大,头疼,有点学不过来了,感兴趣的同学去官网看吧,我Copy一下git的信息:

  • Persistent warp-specialization
  • Hopper TMA features
  • A unified and optimized block scheduler
  • Fully JIT design
  • Unaligned block sizes
  • FFMA SASS interleaving
  • Common detail optimizations

画外音:其实你也不想知道这些how?

了解GEMM对普通人写提示词有什么启示?

没有启示,这东西和提示词没关系。

结尾

对于DeepGEMM,我的思考是:

  • 之前各大玩家都卷硬件,而忽略了软件的优化;
  • 僵化思维真的很要命,一直以来都是FP16/FP32,大家也都用CUTLASS,它就一定是最优吗?
  • 写代码,搞架构,少即是多:多写这类300行优美的代码,而不要在垃圾公司堆shi山;

先睡了,共勉!

画外音:球球deepseek,明天不要开源新东西了。

责任编辑:赵宁宁 来源: 架构师之路
相关推荐

2020-12-17 10:23:41

死锁LinuxLockdep

2022-01-04 09:24:32

Python Excel 表格

2015-07-30 09:20:26

微软Android Lau

2023-04-10 07:26:28

UseStateUseReducer

2019-02-12 11:07:49

2022-12-05 16:49:05

volatileJava

2021-07-03 09:06:22

测试自动化Selenium

2023-11-01 15:52:35

2021-08-03 22:26:46

Go函数分页

2024-03-18 09:24:12

RocketMQ消息模型分布式

2023-11-30 08:27:38

泛化调用架构

2019-08-09 15:07:33

TomcatJaegerSpringBoot

2023-05-25 10:03:40

2021-11-01 15:00:47

协程PythonGo

2020-11-19 07:54:32

程序员报警

2020-08-18 10:35:18

JWTredis认证

2021-02-28 07:52:24

蠕虫数据金丝雀

2020-12-09 11:00:44

Nginx 运维Tomcat

2020-08-17 09:22:30

字符串子串对象

2020-03-11 19:40:09

架构架构设计Java
点赞
收藏

51CTO技术栈公众号