Skip to content

DeepEP 源码解读:从 NVSHMEM 双路径到 NCCL Gin ​

本书把 DeepEP V1 与 EPv2 放在一条演进线上解释:V1 如何用 NVLink IPC、NVSHMEM 和两种通信模式完成专家分发与回收;V2 如何围绕 NCCL Gin、DeepJIT 和统一的 EPBuffer 重组执行路径。分析范围覆盖 V1 v1.2.1 与当前仓库 main 的 V2.5 快照,两代实现始终分开追踪。

版本快照 ​

字段V1V2.5
仓库deepseek-ai/DeepEPdeepseek-ai/DeepEP
版本锚点v1.2.1main
commit9af0e0d0e74f3577af1979c9b9e1ac2cad0104ee93eb6eb238127e96c6d7a4a625a6dad158348509
提交时间2025-09-152026-09-30
核对日期2026-10-132026-10-13
分析范围Python Buffer、C++ runtime、CUDA kernels 与测试EPBuffer、NCCL/Gin context、DeepJIT kernels、相关测试与模块生命周期

V2.5 的 README 声明 V1 已完整移除,包括旧 API 与 NVSHMEM 后端。因此本书不从 V2.5 源码倒推 V1 行为:凡涉及旧路径,均明确使用 v1.2.1 快照;凡涉及当前 API,均使用 V2.5 快照。

主要源码锚点 ​

全书要回答的问题 ​

  • 一份 token 的 top-k 路由结果如何变成跨 rank 的发送计划、专家输入与反向 combine?
  • V1 的 normal / low-latency 双 API 与 V2 的统一 EP API,分别把哪些工作交给调用者和运行时?
  • NVLink、RDMA、同步计数、布局元数据和异步事件由哪些层共同管理?
  • V2 通过 NCCL Gin 与 DeepJIT 重构后,哪些机制变简单,哪些部署条件与生命周期约束仍由调用方承担?

目录 ​

第一部分:把两代实现放在同一张图上 ​

第二部分:V2 的执行模型 ​

附录 ​

阅读主线 ​

flowchart LR
    A[MoE 路由结果] --> B[V1 layout 与 rank 分组]
    B --> C[V1 dispatch / expert compute / combine]
    C --> D[版本边界:V1 被移除]
    D --> E[V2 EPBuffer 与 DeepJIT]
    E --> F[NCCL Gin 通信与对称窗口]
    F --> G[dispatch / 扩展布局 / expert compute]
    G --> H[combine / EventOverlap]

V1 与 V2 的链路在章节中分别展开。图中的连接表达的是主题演进,不表示跨版本共享同一运行时或数据结构。

References ​