DeepSeek开源周第四波:DualPipe、EPLB
今天DeepSeek带来的是:DualPipe、EPLB,DualPipe由梁文峰亲自参与开发。
DeepSeek官方介绍如下:
✅DualPipe - 一种双向管道并行算法,用于 V3/R1 训练中的计算通信重叠。
✅EPLB - 适用于 V3/R1 的专家并行负载均衡器
传送门:
https://github.com/deepseek-ai/DualPipe
https://github.com/deepseek-ai/eplb
deepseek还公开了来自训练和推理框架的分析数据:
https://github.com/deepseek-ai/profile-data
下面我们分别介绍一下DualPipe和EPLB:
一、DualPipe
简介: DualPipe 是一种创新的双向流水线并行算法,首次在 DeepSeek-V3 技术报告中提出。它实现了前向和后向计算与通信阶段的完全重叠,显著提升了大规模模型训练的效率和资源利用率,同时有效减少了流水线中的“气泡”现象。
核心创新:
计算与通信重叠:通过双向调度微批次数据,实现了计算与通信的完全重叠,大幅提高 GPU 利用率。
减少流水线气泡:优化排列功能模块,精确调控 GPU 资源分配,减少流水线中的气泡现象。
内存使用优化:尽管需要维护两份模型参数副本,但采用大规模梯度累积(EP),内存开销增加不显著。
实现细节:
功能模块划分:每个计算块被划分为四个功能模块,后向计算块进一步细分。
调度机制:双向流水线调度策略,从流水线两端同时输入微批次数据,确保高效通信。
为了直观展示DualPipe的调度方式,团队给出了一个8个并行级别(PP ranks)和20个微批次(micro-batches)的调度示例:
团队还将DualPipe与传统方法(1F1B、ZB1P)进行对比,结果让人眼前一亮!如下表所示:
二、EPLB(Expert Parallelism Load Balancer)
简介:EPLB 是一种用于专家并行(EP)的负载平衡器。在使用专家并行时,不同的专家被分配到不同的 GPU,EPLB 通过冗余专家策略和启发式打包方法,确保不同 GPU 之间的负载平衡。
核心创新:
冗余专家策略:复制高负载的专家,确保负载均衡。
启发式打包:将重复的专家分配到 GPU 上,减少节点间数据流量。
实现细节:
负载平衡算法:根据估计的专家负载计算平衡的专家复制和放置计划。
组有限专家路由:尽可能将同一组的专家放置在同一节点上,减少节点间数据流量。
DualPipe:只需Python和PyTorch 2.0+即可上手,运行python example.py
即可体验。
EPLB:官方给出的代码示例如下,展示如何用EPLB处理一个两层MoE模型:
import torch
import eplb
# 专家负载矩阵
weight = torch.tensor([[ 90, 132, 40, 61, 104, 165, 39, 4, 73, 56, 183, 86],
[ 20, 107, 104, 64, 19, 197, 187, 157, 172, 86, 16, 27]])
# 参数设置
num_replicas = 16# 总副本数
num_groups = 4 # 专家组数
num_nodes = 2 # 节点数
num_gpus = 8 # GPU总数
# 调用负载均衡算法
phy2log, log2phy, logcnt = eplb.rebalance_experts(weight, num_replicas, num_groups, num_nodes, num_gpus)
print(phy2log)
# 输出:
# tensor([[ 5, 6, 5, 7, 8, 4, 3, 4, 10, 9, 10, 2, 0, 1, 11, 1],
# [ 7, 10, 6, 8, 6, 11, 8, 9, 2, 4, 5, 1, 5, 0, 3, 1]])
联系入群|加微信89931668
免费DeepSeek教程与学习资料
请先 登录后发表评论 ~