今天是 DeepSeek 开源周的第四天。与前三天相比,今天的开源项目公布稍晚一些,让关注者们等待得略显焦急,不过等待的结果总是值得的!DeepSeek 今日公布了两项重要的开源内容:DualPipe(双向管道并行算法) 和 EPLB(专家并行负载均衡器)。

1. DualPipe:创新的双向流水线并行算法
DualPipe 是一种在 DeepSeek-V3 技术报告中首次引入的双向流水线并行算法,旨在通过优化计算与通信的重叠,显著减少训练过程中的空闲时间。
核心特点
-
双向重叠:DualPipe 实现了前向和后向计算与通信阶段的完全重叠,减少了传统流水线并行中的“气泡”问题。 -
流水线气泡优化:通过创新的调度策略,降低了因任务分配不均而导致的硬件资源浪费,提升了整体训练效率。
性能对比
以下是 DualPipe 与其他方法在流水线气泡和内存使用上的对比:
方法 | 气泡 | 参数 | 激活 |
---|---|---|---|
1F1B | (PP-1)(F+B) | 1×PP | ZB |
1P | (PP-1)(F+B-2W) | 1×PP | ZB |
DualPipe | (PP/2-1)(F&B+B-3W) | 2×PP+1 | F |
注释:
F:前向块执行时间 B:完整后向块执行时间 W:“权重后向”块执行时间 F&B:两个相互重叠的前向和后向块执行时间
实际应用
DualPipe 的调度示例展示了其在 8 个 PP 秩和 20 个微批情况下的表现。通过将反向微批与正向微批对称排列,简化了调度逻辑,同时实现了计算与通信的高效重叠。

2. EPLB:专家并行负载均衡器
EPLB(专家并行负载均衡器)是 DeepSeek 针对混合专家(MoE)架构设计的动态负载均衡工具,旨在优化 GPU 间的负载分布,提升训练效率。
核心特点
-
动态负载均衡: -
基于 MoE 架构,通过冗余专家策略复制高负载专家。 -
使用启发式分配算法优化 GPU 间的负载分布,确保资源利用率最大化。
-
-
分层与全局平衡结合: -
分层负载均衡:适用于预填充阶段,优先在单个节点内实现负载管理,并将同一组的专家放置在同一节点上,以减少跨节点通信。 -
全局负载均衡:适用于解码阶段,全局复制专家并将其分配到各个 GPU,支持更大规模的专家并行。
-
-
流量优化: -
在平衡负载的同时,通过调整专家分布降低节点间通信数据量,从而提升整体训练效率。
-
算法细节
EPLB 提供了两种负载均衡策略:
-
分层负载均衡:适合小规模专家并行场景(如预填充阶段)。 -
全局负载均衡:适合大规模专家并行场景(如解码阶段)。
接口的核心函数为 eplb.rebalance_experts
实际部署
为了便于复现和部署,DeepSeek 在 eplb.py
文件中开源了完整的负载均衡算法。该算法基于估计的专家负载计算平衡的专家复制和放置计划,适用于多种场景。

配置文件数据分享
DeepSeek 还公开了来自其训练和推理框架的配置文件数据,帮助社区更好地理解通信-计算重叠策略和底层实现细节。这些数据通过 PyTorch Profiler 捕获,用户可以通过 Chrome 或 Edge 浏览器直接可视化。
训练配置
-
展示了 DualPipe 中一对单独的前向和后向块的重叠策略。 -
并行配置与 DeepSeek-V3 预训练设置一致:EP64、TP1、序列长度为 4K。
推理配置
-
预填充阶段:采用 EP32 和 TP1,提示长度设置为 4K,每个 GPU 的批次大小为 16K 个标记。 -
解码阶段:采用 EP128 和 TP1,提示长度为 4K,每个 GPU 的批次大小为 128 个请求。
注意:解码期间的全对全通信不会占用 GPU SM,所有计算完成后才会等待通信完成。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...