deepseek-ai/DeepEP
DeepEP: an efficient expert-parallel communication library
DeepEP – 面向 Mixture-of-Experts (MoE) 模型的高性能通信
简介 – DeepEP(DeepEveryParallel)是一个 C++/Python 库,为大规模 Mixture-of-Experts (MoE) 训练和推理提供超高速的 GPU 间通信原语。它实现了专家并行(EP)的全对全内核,以及对流水线、上下文和数据并行以及远程内存访问(Engram)的实验性支持。内核在运行时通过配套工具 DeepJIT 进行 JIT 编译,从而能够针对所使用的确切 GPU 架构进行调优。
重要性 – MoE 模型将神经网络层拆分为许多 专家,并将每个 token 路由到其中的几个。这带来了巨大的模型容量,但需要在每一层在 GPU 之间移动张量。传统的 NCCL 集合通信成为瓶颈。DeepEP 的 EP 内核实现了高吞吐、低延迟的全对全调度/合并,支持 FP8 调度,并且可以在 NVLink 上预取专家权重并减少冗余梯度,从而实现 MoonEP 和 UltraEP 中描述的“专家复制”技术。
主要特性
- JIT 编译的 EP 内核(通过 DeepJIT) – 在运行时针对准确的 SM 数量和 GPU 模型进行编译。
- NCCL-Gin 后端 – 轻量级的设备端 API,可以重用现有的 NCCL 通信器。
- 统一的
EPBufferAPI – 一个对象处理调度、合并、权重预取、梯度减少和缓冲区分配。 - 实验性原语 – Engram(基于 RDMA 的远程内存)、流水线并行(PP)、用于上下文和数据并行工作负载的 Bucket 集合通信。
- 支持 NVIDIA Hopper+ GPU,并通过单独的仓库支持华为昇腾 950 NPU。
- 解析式 SM/QP 数量估算 – 无需自动调优。
- 冗余专家支持 – 用于动态专家复制的
lb_prefetch_weights/lb_reduce_grads。
典型工作流程
- 创建
EPBuffer并设置 MoE 超参数(隐藏大小、top-k、专家数量、FP8 标志)。缓冲区会估算为全对全内核分配多少 SM。 - 调度 – 调用
buffer.dispatch(...)将 token 路由到所有 rank 上对应的专家。该调用返回一个EventOverlap,可以稍后等待,从而实现计算与通信的重叠。 - 运行专家 GEMM 对接收到的 token 进行计算。
- 合并 – 调用
buffer.combine(...)(或反向辅助函数)将专家输出归约回原始 rank。 5.(可选)负载均衡 – 使用lb_prefetch_weights和lb_reduce_grads在 NVLink 连接的 GPU 之间复制负载较高的专家。
安装快照
# 克隆并初始化子模块(DeepJIT)
git submodule update --init --recursive
# 安装匹配的 NCCL 包(CUDA 13 的示例)
python -m pip install "nvidia-nccl-cu13>=2.32.3" --no-deps
# 构建并安装 wheel
bash install.sh
构建过程会针对本地 CUDA、NCCL 和 C++20 工具链编译 C++ 扩展。安装时不需要 GPU;内核在首次使用时编译。
何时使用 DeepEP
- 大型 MoE 模型(例如,具有数千个专家的 GPT 风格)的训练或推理。
- 需要专家复制来跨 GPU 平衡负载的场景。
- 具有 NVLink 节点内链路以及可选 RDMA 节点间网络的系统。
- 已经使用 PyTorch 2.x 并希望为全对全通信层提供即插即用替换的项目。
限制 / 实验性部分
- Engram、PP 和 Bucket 集合通信仍标记为实验性。
- EP 内核需要 GPU SM;不支持纯 RDMA 模式。
- 需要更新的硬件(NVIDIA Hopper 或更高版本)和 CUDA 13.1+。
资源
- 主仓库:https://github.com/deepseek-ai/DeepEP
- 用于运行时内核编译的 DeepJIT 子模块。
- Ascend 兼容分支:https://github.com/deepseek-ai/DeepEP-Ascend
- 相关的负载均衡项目:MoonshotAI/MoonEP、Dots-Infra/UltraEP。
DeepEP 是一个面向专家并行深度学习工作负载的专业通信库,提供 JIT 编译的内核和 API,使研究人员和工程师能够在现代 GPU 集群上高效扩展 MoE 模型。
相关
- 项目
- 项目
- Dispatch
- 项目
- 项目