URL
- DualPipe code: https://github.com/deepseek-ai/DualPipe
- EPLB code: https://github.com/deepseek-ai/EPLB
TL;DR
DualPipe
是deepseek
提出的一种 流水线并行算法,和之间读过的 GPipe 和 PipeDream 类似,但DualPipe
的硬件利用率更高,空泡更少DPLB (Expert Parallelism Load Balancer)
是一种 专家并行负载均衡算法
Algorithm
DualPipe
DualPipe
的计算过程
DualPipe-v
的计算过程
上图是民间自己二创的 dualpipe-v 的计算过程,将 dualpipe 对半切开后效果更好,博客地址
DualPipe
核心特点
- 计算与通信重叠:
DualPipe
的设计目标是最大化集群设备的计算性能,通过在Forward
和Backward
阶段实现计算与通信的完全重叠,显著减少传统流水线并行中的 “空泡”(Pipeline Bubble
,即空闲等待时间)。这对于需要跨节点协作的专家并行(Expert Parallelism
)场景尤为重要。 - 双向调度:与传统的单向流水线并行不同,
DualPipe
采用双向调度策略,从流水线的两端同时输入微批次(Micro-batches
),充分利用硬件资源。这种方法在保持计算通信比例恒定的情况下,即使模型规模进一步扩大,也能维持接近零的通信开销。 - 高效扩展性:
DualPipe
针对跨节点的混合专家模型(MoE
)进行了优化,通过减少通信瓶颈,使得大规模分布式训练能够在相对有限的硬件资源(如H800 GPU
)上高效运行。 - 显存优化:
DualPipe
将模型的最浅层(包括嵌入层)和最深层(包括输出层)部署在同一流水线级别(PP Rank
),实现参数和梯度的物理共享,进一步提升内存效率。这种设计减少了高代价的张量并行(Tensor Parallelism
)需求。
EPLB
EPLB (Expert Parallelism Load Balancer)
是一种专家并行负载均衡算法,旨在解决专家并行中的负载不均问题- 很简单,仅有
160
行python
代码 - 核心思想是预估每个专家的负载,并根据负载设置专家拷贝和放置计划
Thoughts
DualPipe
实际上是deepseek
根据profile-data
分析空泡后做的一种流水线并行算法,而且用其强大的工程能力实现了SMs
通信耗时降低(实际上就是用PTX
编程把一部分SM
当做是全职的数据搬运工),这太crazy了Transformer
是一种重IO
轻计算的架构,在Hopper
硬件架构上,不改变SM
是不可能做到通信和计算完全重叠的,所以deepseek
做了非常底层的优化EPLB
作为一种专家并行负载均衡算法,虽然简单,但在实际应用中可以显著提升专家并行的效率