Loading...

文章背景图

DeepEP:MoE 专家并行 EP 通信 kernel 编译与使用指南

2026-10-27
0
- 字
- 分钟
|

DeepEP:MoE 专家并行 EP 通信 kernel 编译与使用指南

DeepEP(DeepEveryParallel)是 DeepSeek 开源的高性能机器学习训练与推理通信库,为 MoE 模型的专家并行(EP)all-to-all 提供高吞吐、低延迟的 GPU kernel,包括 FP8 dispatch、NVLink 权重/梯度交换,并附带 PP/CP/DP 与远程内存访问(Engram)等实验性原语。通信 kernel 在运行时由 DeepJIT 即时编译。

一、项目官方信息

项目 信息
GitHub 仓库 https://github.com/deepseek-ai/DeepEP
官方网站 —(仓库文档为主)
开源协议 MIT
主要语言 CUDA(41.6%)
Star 数 10k+
配套项目 DeepJIT、DeepGEMM

二、官方图片

DeepEP 仓库社交预览图:

DeepEP

三、环境要求

  • Linux;
  • Python 3.10 及以上;
  • NVIDIA Hopper 或更新 GPU;
  • CUDA Toolkit 13.1 及以上(供 DeepJIT 编译,需支持目标 GPU);
  • 支持 std::format 的 C++20 编译器;
  • PyTorch 2.10 及以上(带 CUDA);
  • NCCL 2.32.3 及以上;
  • 节点内 NVLink、节点间 RDMA 网络。

四、部署步骤

1. 安装 NCCL 依赖

# CUDA 13.x
python -m pip install "nvidia-nccl-cu13>=2.32.3" --no-deps
# CUDA 12.x 改用 nvidia-nccl-cu12

自定义 NCCL 安装时,设置 EP_NCCL_ROOT_DIR 指向包含 include/ 与 lib/ 的目录。

2. 拉取子模块并编译安装

git clone https://github.com/deepseek-ai/DeepEP
cd DeepEP
git submodule update --init --recursive
bash install.sh

install.sh 会构建 wheel 并装入当前 Python 环境。GPU kernel 由 DeepJIT 在运行时针对当前设备编译,因此安装时不需要可见 GPU。运行时需保留 CUDA 工具链与主机编译器。

3. 开发模式与测试

bash develop.sh
python tests/ep/test_ep.py
python tests/bucket/test_all_gather.py
python tests/engram/test_engram.py

五、使用方法

创建 EPBuffer

from deep_ep import EPBuffer

_buffer = EPBuffer(
    group,
    num_max_tokens_per_rank=num_max_tokens_per_rank,
    hidden=hidden,
    num_topk=num_topk,
    use_fp8_dispatch=False,
)
_num_comm_sms = _buffer.get_theoretical_num_sms(num_experts, num_topk)

dispatch(前向,把 token 路由到各专家)

event = _buffer.dispatch(
    x,
    topk_idx=topk_idx,
    topk_weights=topk_weights,
    num_experts=num_experts,
    num_max_tokens_per_rank=num_max_tokens_per_rank,
    num_sms=_num_comm_sms,
    async_with_compute_stream=True,
)
# 先做独立计算,再等待通信结果
recv_x, _, recv_topk_weights, handle = event.current_stream_wait()

combine(把专家输出汇总回原 rank)

event = _buffer.combine(expert_output, handle=handle, num_sms=_num_comm_sms)
combined_x, _ = event.current_stream_wait()

前向保存的 handle 供反向传播的 combine_backward / dispatch_backward 使用。通信与计算重叠:先发起通信,在真正需要结果处再 wait。

常用环境变量

  • EP_JIT_CACHE_DIR:JIT 编译缓存目录(默认 $HOME/.dj);
  • EP_NCCL_ROOT_DIR:NCCL 安装目录;
  • EP_BUFFER_DEBUG=1:打印初始化与拓扑诊断;
  • EP_JIT_DEBUG=1:打印编译器命令、PTXAS 输出与 PTX/SASS dump。

六、常见问题 FAQ

Q1:DeepEP 是什么? MoE 专家并行的高性能 all-to-all 通信库,提供高吞吐(训练/prefill)与低延迟(decoding)kernel,原生支持 FP8 dispatch。

Q2:安装需要哪些关键依赖? CUDA 13.1+、PyTorch 2.10+、NCCL 2.32.3+、Hopper 或更新 GPU、C++20 编译器。

Q3:怎么安装? 先装 nvidia-nccl-cu13,再 git submodule update --init --recursive && bash install.sh。

Q4:kernel 何时编译? 运行时由 DeepJIT 针对当前 GPU 即时编译,安装时不需要可见 GPU;首次运行会有编译开销,之后走缓存。

Q5:dispatch 和 combine 怎么配合? dispatch 把 token 发到专家,combine 把专家输出汇总回原 rank;前向保存 handle 供反向使用。

Q6:支持哪些网络? 节点内 NVLink、节点间 RDMA(InfiniBand 实测兼容,理论兼容 RoCE)。

七、跳转链接

评论交流

文章目录