DeepSeek 开源周第四弹:DualPipe 和 EPLB 的发布

新技术1周前发布 小马良
22 0

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

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 个微批情况下的表现。通过将反向微批与正向微批对称排列,简化了调度逻辑,同时实现了计算与通信的高效重叠。

DeepSeek 开源周第四弹:DualPipe 和 EPLB 的发布

2. EPLB:专家并行负载均衡器

EPLB(专家并行负载均衡器)是 DeepSeek 针对混合专家(MoE)架构设计的动态负载均衡工具,旨在优化 GPU 间的负载分布,提升训练效率。

核心特点

  1. 动态负载均衡

    • 基于 MoE 架构,通过冗余专家策略复制高负载专家。
    • 使用启发式分配算法优化 GPU 间的负载分布,确保资源利用率最大化。
  2. 分层与全局平衡结合

    • 分层负载均衡:适用于预填充阶段,优先在单个节点内实现负载管理,并将同一组的专家放置在同一节点上,以减少跨节点通信。
    • 全局负载均衡:适用于解码阶段,全局复制专家并将其分配到各个 GPU,支持更大规模的专家并行。
  3. 流量优化

    • 在平衡负载的同时,通过调整专家分布降低节点间通信数据量,从而提升整体训练效率。

算法细节

EPLB 提供了两种负载均衡策略:

  • 分层负载均衡:适合小规模专家并行场景(如预填充阶段)。
  • 全局负载均衡:适合大规模专家并行场景(如解码阶段)。

接口的核心函数为 eplb.rebalance_experts

实际部署

为了便于复现和部署,DeepSeek 在 eplb.py 文件中开源了完整的负载均衡算法。该算法基于估计的专家负载计算平衡的专家复制和放置计划,适用于多种场景。

DeepSeek 开源周第四弹:DualPipe 和 EPLB 的发布

配置文件数据分享

DeepSeek 还公开了来自其训练和推理框架的配置文件数据,帮助社区更好地理解通信-计算重叠策略和底层实现细节。这些数据通过 PyTorch Profiler 捕获,用户可以通过 Chrome 或 Edge 浏览器直接可视化。

训练配置

  • 展示了 DualPipe 中一对单独的前向和后向块的重叠策略。
  • 并行配置与 DeepSeek-V3 预训练设置一致:EP64、TP1、序列长度为 4K。

推理配置

  • 预填充阶段:采用 EP32 和 TP1,提示长度设置为 4K,每个 GPU 的批次大小为 16K 个标记。
  • 解码阶段:采用 EP128 和 TP1,提示长度为 4K,每个 GPU 的批次大小为 128 个请求。

 注意:解码期间的全对全通信不会占用 GPU SM,所有计算完成后才会等待通信完成。

© 版权声明

相关文章

暂无评论

none
暂无评论...