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 的开源工作。
实践建议
- 先跑通官方示例,确认环境。这是最容易卡住的环节,别跳。
- 用 profiler 看官方实现的访存模式,对照代码理解为什么这么写。
- 想改算子的话,先改参数(tile 大小、分块策略),看性能怎么变,再动结构。
一个提醒 这些组件是为 DeepSeek 自己的模型结构优化的。如果你的模型结构不一样,直接拿来用未必是最优的。
价值更多在于「参考实现」——告诉你在这套硬件上,一个高性能算子应该长什么样。照着这个思路写你自己的算子,比直接调用更靠谱。
本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。