DeepSeek开源周第四天:DualPipe&EPLB深度分析
deepseek开源周第四天,你需要的项目深度分析来了
今天是deepseek 开源周的第四天,deepseek带来了三个项目,全部都是关于V3/R1训练和推理相关的并行策略优化。

DualPipe是一种用于V3/R1训练中计算-通信重叠的双向流水线并行算法。而EPLB是用于V3/R1的专家并行负载均衡器。
最后一个profile-data主要是公开deepseek infra的训练和推理的分析数据,目前公开了训练和推理中Prefilling的分析数据,推理的Decoding分析数据还没有公开。
今天主要带来DualPipe和EPLB项目的分析,这两个都偏向于工程优化。
DualPipe
DualPipe在deepseek V3论文中有提到,是一种双向流水线并行通信的算法,主要用于优化大模型的数据交互和训练效率。

主要的核心特点:
-
计算与通信重叠 DualPipe的设计目标是最大化集群的计算性能,在前向传播和后向传播中实现计算与通信的完全重叠,减少传统流水线并行中的空闲等待时间。 在MoE模型的跨节点写作的专家并行(Expert Parallelism)尤其重要。
-
双向调度 DualPipe 是双向调度策略,主要是从流水线的两端同时输入,重复利用硬件资源。还设计了一个复杂但很高效的8步调度策略。
-
显存优化
DualPipe 将模型的最浅层(包括嵌入层)和最深层(包括输出层)部署在同一流水线级别(PP Rank),实现参数和梯度的物理共享,进一步提升内存效率

管道气泡和内存使用情况比较 (管道气泡,即空闲等待时间)

有兴趣可以具体去看代码,代码行数并不多,适合学习。
EPLB
EPLB (Expert Parallelism Load Balancer,专家并行负载均衡器)是主要用于优化MoE的分布式部署,方法是为保证MoE部分不同专家之间的负载均衡,会将共享专家和高负载的细粒度专家在集群的不同GPU做多个复制,让GPU把更多的热数据(发给共享专家的)跑起来。
EPLB在deepseek的论文中没有相应的介绍,它的代码也只有160行,非常的简洁。
主要的核心特点:
- 负载均衡优化
主要是复制高负载的专家(可以称为:冗余专家策略)并对专家分配进行启发式的调整,确保不同GPU之间的负载均衡。
- 分层负载均衡
采用三层结构:节点级→节点内专家复制→GPU分配,优先保证同一组的专家尽量分配到同一个节点,减少跨节点的数据传输,然后在每一层都保证负载均衡。这种应用在deepseek V3中的分组限制路由(Group-Limited Expert Routing)策略显著提升了分布式训练的效率。
- 动态调度策略
根据实际情况动态选择负载均衡策,预填充阶段使用分层策略和解码阶段使用全局策略
我们分别来看代码:
冗余专家策略
def replicate_experts(weight: torch.Tensor, num_phy: int): # 对负载较重的专家进行复制 for i in range(num_log, num_phy): redundant_indices = (weight / logcnt).max(dim=-1).indices phy2log[:, i] = redundant_indices logcnt[arangen, redundant_indices] += 1
**分层负载均衡**
- -
- -
- -
- -
- - ```
def rebalance_experts_hierarchical(): # Step 1: 将专家组打包到节点 tokens_per_group = weight.unflatten(-1, (num_groups, group_size)).sum(-1) group_pack_index, group_rank_in_pack = balanced_packing(tokens_per_group, num_nodes) # Step 2: 在节点内构建冗余专家 tokens_per_mlog = weight.gather(-1, mlog2log).view(-1, num_logical_experts // num_nodes) # Step 3: 将物理专家打包到GPU tokens_per_phy = (tokens_per_mlog / mlogcnt).gather(-1, phy2mlog)
动态调度策略
def rebalance_experts(): if num_groups % num_nodes == 0: # 使用分层策略 phy2log, phyrank, logcnt = rebalance_experts_hierarchical() else: # 使用全局策略 phy2log, phyrank, logcnt = replicate_experts()
有兴趣的同学可以去看具体的代码。
明天是deepseek开源周的最后一天,会不会放出一个重量级的开源项目呢,让我们拭目以待。
关注我,让我们一起猛学!
往期分析文章:
- [deepseek开源周第三天:DeepGEMM深度分析](https://mp.weixin.qq.com/s?__biz=MzAwNzc4MDgwNQ==&mid=2653126541&idx=1&sn=61bb2095ef386c9bfa8a83780c01d430&scene=21#wechat_redirect)
- [DeepSeek开源周第二天:DeepEP深度分析](https://mp.weixin.qq.com/s?__biz=MzAwNzc4MDgwNQ==&mid=2653126526&idx=1&sn=a65f1ebcd609553daf057a11423996f3&scene=21#wechat_redirect)
- [DeepSeek开源周第一天:FlashMLA 深度分析](https://mp.weixin.qq.com/s?__biz=MzAwNzc4MDgwNQ==&mid=2653126513&idx=1&sn=325c82d7c75a8ceb3f7bcfd63280d72e&scene=21#wechat_redirect)
- [开源周来袭:DeepSeek有哪些神秘技术即将公开?](https://mp.weixin.qq.com/s?__biz=MzAwNzc4MDgwNQ==&mid=2653126493&idx=1&sn=e0082b3ac23090cf9a363209f887c4e4&scene=21#wechat_redirect)
参考链接:
- https://github.com/deepseek-ai/DualPipe
- https://github.com/deepseek-ai/eplb
- https://github.com/deepseek-ai/profile-data