AI个人学习
和实操指南
豆包Marscode1

DeepEP:专为MoE模型优化通信效率的开源工具(DeepSeek 开源周第二天)

综合介绍

DeepEP是由deepseek-ai团队开发的一款开源通信库,专注于提升Mixture-of-Experts(MoE)模型和专家并行(EP)的训练与推理效率。它通过优化GPU间的数据交换,提供高吞吐量和低延迟的通信支持,适用于大规模分布式系统。DeepEP支持NVLink和RDMA技术,兼容低精度运算如FP8,并针对训练和推理场景分别设计了高效内核。该库已在DeepSeek团队的生产环境中经过实战验证,特别适用于需要跨节点协作的MoE模型,能够显著提升系统的整体性能,是AI研究者和开发者在构建高效深度学习模型时的得力助手。目前,DeepEP已在GitHub上开源,欢迎社区参与改进。

DeepEP:专为MoE模型优化通信效率的开源工具-1


 

功能列表

  • 高效全对全通信:优化GPU间的all-to-all通信,支持节点内NVLink和节点间RDMA,确保数据交换快速稳定。
  • 高吞吐量训练支持:提供专为训练和推理预填充设计的内核,能处理大规模数据传输,提高模型训练效率。
  • 低延迟推理内核:针对推理解码阶段,使用纯RDMA技术减少延迟,适合实时应用场景。
  • FP8低精度运算:原生支持FP8分发,降低计算成本的同时保持性能,适用于资源敏感环境。
  • 灵活资源控制:支持流式多处理器(SM)数量调节,开发者可根据硬件条件优化配置。
  • 通信与计算重叠:通过hook机制实现通信和计算的无缝衔接,提升GPU利用率。
  • 跨域带宽优化:针对DeepSeek-V3的分组限域算法,提供NVLink到RDMA的高效数据转发支持。

 

使用帮助

安装流程

DeepEP是一个基于GitHub的开源项目,需要手动下载和配置环境才能使用。以下是详细的安装步骤:

1. 前置条件

  • 操作系统:建议使用Linux系统(如Ubuntu 20.04或更高版本),以兼容GPU和网络硬件。
  • 硬件要求:配备支持NVLink或RDMA的GPU(如NVIDIA H800),并连接高速网络(如InfiniBand 400Gb/s)。
  • 软件依赖
    • CUDA Toolkit(推荐版本与硬件兼容,如CUDA 11.x或12.x)。
    • NCCL(NVIDIA集体通信库)。
    • 修改版NVSHMEM(DeepEP依赖其通信功能,需单独安装)。
    • Python 3.8+(用于测试和脚本运行)。

2. 下载DeepEP源码

打开终端,运行以下命令克隆仓库:

git clone https://github.com/deepseek-ai/DeepEP.git  
cd DeepEP

3. 安装NVSHMEM

DeepEP依赖修改版的NVSHMEM,请参考官方提供的NVSHMEM安装指南。简要步骤如下:

  • 下载NVSHMEM源码并应用DeepEP提供的补丁(位于third-party/nvshmem.patch)。
  • 编译并安装:
    cd nvshmem  
    patch -p1 < ../third-party/nvshmem.patch  
    make -j && sudo make install
    

4. 编译DeepEP

进入DeepEP目录,编译通信库:

make

编译完成后,会生成可在项目中调用的内核文件。

5. 配置环境变量

为确保DeepEP正确运行,需设置NVSHMEM相关参数,例如虚拟通道分配:

export NVSHMEM_IB_SL=0  # 设置虚拟通道,避免流量冲突

如需启用自适应路由(仅限低延迟内核),可额外配置:

export NVSHMEM_ENABLE_ADAPTIVE_ROUTING=1

6. 测试安装

运行提供的测试脚本,验证DeepEP功能:

python tests/test_low_latency.py

若输出显示通信成功,则安装完成。

使用方法

DeepEP主要通过集成到MoE模型的工作流中使用,以下是主要功能的详细操作指南:

功能1:运行高吞吐量训练

DeepEP的高吞吐量内核适用于MoE模型的分布式训练。假设你有一个基于DeepSeek-V3的模型,可以按照以下步骤操作:

  1. 准备模型和数据:确保你的MoE模型已配置好专家并行逻辑,并准备好训练数据集。
  2. 调用DeepEP内核:在训练脚本中引入DeepEP的all-to-all通信接口。例如:
    #include "deep_ep.h"  
    void moe_train(float* input, float* output, int size) {  
    deep_ep_all_to_all(input, output, size, FP8);  
    }
    
  3. 配置硬件:指定使用的GPU设备,例如:
    CUDA_VISIBLE_DEVICES=0,1,2,3 ./train_script
    
  4. 运行训练:启动训练后,DeepEP会自动优化NVLink和RDMA间的通信。

功能2:低延迟推理

低延迟内核适用于实时推理任务,如在线对话系统:

  1. 加载模型:将预训练的MoE模型加载到内存。
  2. 调用推理内核:使用纯RDMA通信接口。例如:
    #include "deep_ep.h"  
    void moe_infer(float* query, float* result, int batch_size) {  
    deep_ep_low_latency_all_to_all(query, result, batch_size);  
    }
    
  3. 测试推理速度:运行以下命令测量延迟:
    python tests/test_inference.py --batch_size 128 --hidden_size 7168
    

    输出将显示每批次的推理时间,确保满足实时需求。

功能3:FP8运算优化

DeepEP支持FP8分发,降低计算成本:

  1. 启用FP8模式:在调用通信接口时指定数据类型为FP8。
  2. 验证精度:运行测试脚本对比FP8与BF16的性能和精度差异:
    python tests/test_fp8.py
    
  3. 应用到生产:将FP8配置集成到现有训练或推理流程中。

功能4:资源控制与优化

调节SM数量以适配硬件:

  1. 查看硬件SM数量:使用nvidia-smi检查GPU的流处理器数量。
  2. 设置SM限制:在脚本中指定:
    deep_ep_set_sm_limit(32);  // 限制为32个SM
    
  3. 测试性能:调整SM数量后运行基准测试,找到最佳配置。

注意事项

  • 网络配置:DeepEP在InfiniBand网络上测试最优,RoCE需额外验证兼容性。
  • 自适应路由:仅低延迟内核支持此功能,普通内核启用可能导致死锁。
  • 集群调优:建议运行所有测试脚本(如tests/目录下),自动调整配置以适配你的集群。

通过以上步骤,你可以快速上手DeepEP,充分利用其在MoE模型中的通信优化能力。

未经允许不得转载:首席AI分享圈 » DeepEP:专为MoE模型优化通信效率的开源工具(DeepSeek 开源周第二天)
zh_CN简体中文