从 DeepGEMM 到 DeepEP:DeepSeek 昇腾开源组件该怎么读
✦
← CSDN

从 DeepGEMM 到 DeepEP:DeepSeek 昇腾开源组件该怎么读

楼主:超级管理员 · 2026-10-08 12:12 · 浏览 13

DeepSeek 算子 DeepGEMM
超级管理员 楼主

从 DeepGEMM 到 DeepEP:DeepSeek 昇腾开源组件该怎么读

DeepSeek 开源了面向昇腾平台的基础设施组件,与英伟达平台的开源组件一一对应。想从中学习或者用到项目里,有个推荐的阅读顺序。

组件清单 昇腾侧包含 DeepGEMM、FlashMLA、TileKernel、DeepSelect 等高性能算子库组件,以及 DeepEP 分布式通信库。

编程语言层是 TileLang 高级语言编译工具。

建议的阅读顺序

第一步:先理解 TileLang 的编程模型 别一上来就看算子实现。TileLang 的思维方式和 CUDA 不一样,它把「tile(数据块)」作为一等公民。

理解了这个抽象,后面的算子代码才好读。官方的说法是:相对 CUDA 编程更简单、开发效率更高;相对其它同类高级语言,能充分发挥芯片特性达到硬件性能上限。

第二步:读 DeepGEMM GEMM(通用矩阵乘法)是最基础也最被优化的算子。它的实现展示了这套工具链怎么处理数据分块、怎么调度访存、怎么利用硬件特性。

读懂一个 GEMM,后面的算子都是同一个思路的变体。

第三步:看 FlashMLA MLA(Multi-head Latent Attention)是 DeepSeek 模型的核心结构之一。FlashMLA 展示了如何把注意力计算做成访存友好的实现。

第四步:最后看 DeepEP 分布式通信库和算子的关注点不同,它处理的是跨设备的数据交换。只有在理解了单设备计算之后,才好理解通信优化在解决什么问题。

底层接口 昇腾平台提供稳定开放的 Ascend C API,用户可以对访存路径与计算流水线做深度调优。依托 Ascend C 编程接口与 PTO ISA 底层指令体系,支撑了 TileLang 的开源工作。

实践建议

  1. 先跑通官方示例,确认环境。这是最容易卡住的环节,别跳。
  2. 用 profiler 看官方实现的访存模式,对照代码理解为什么这么写。
  3. 想改算子的话,先改参数(tile 大小、分块策略),看性能怎么变,再动结构。

一个提醒 这些组件是为 DeepSeek 自己的模型结构优化的。如果你的模型结构不一样,直接拿来用未必是最优的。

价值更多在于「参考实现」——告诉你在这套硬件上,一个高性能算子应该长什么样。照着这个思路写你自己的算子,比直接调用更靠谱。

从 DeepGEMM 到 DeepEP:DeepSeek 昇腾开源组件该怎么读 示意图


本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。

郑军

先读算子再读通信库这个顺序合理,算子是性能的地基。建议边读边跑官方基准测试,光看代码很难建立对性能差异的直观感受,跑一次能省很多理解成本。

卫颖

按这个顺序读挺合理,先 TileLang 再算子确实省事。想问一下 TileKernel 和 DeepGEMM 是什么关系,是前者调用后者,还是并列的两种实现?另外昇腾这套组件在没有实际硬件的情况下,有没有办法先验证编译结果对不对,我这边暂时只有英伟达的机器。

钱子墨

先 TileLang 再看算子这个顺序记下了。想问一下 TileLang 有没有能跑在英伟达卡上的后端,我手头没有昇腾机器,但又想先把编程模型摸熟。另外 DeepEP 这层通信库是不是必须实际多机才能看出差异,单机能验证到什么程度?

登录 后参与回复