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 仓库社交预览图:
三、环境要求
- 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)。
七、跳转链接
- GitHub 仓库:https://github.com/deepseek-ai/DeepEP
- DeepJIT:https://github.com/deepseek-ai/DeepJIT
- 配套 DeepGEMM:https://github.com/deepseek-ai/DeepGEMM