0

0

DeepSeek 开源周第四弹:DualPipe 和 EPLB —— 优化并行策略

絕刀狂花

絕刀狂花

发布时间:2025-07-02 09:29:28

|

1001人浏览过

|

来源于php中文网

原创

欢迎回到 deepseek 开源周!今天是第 4 天,我们将深入探讨优化并行策略(optimized parallelism strategies)。如果你一直在关注 deepseek 的进展,你会知道这一周他们已经陆续推出了许多强大的开源工具。而今天,deepseek 带来了两项令人兴奋的创新:dualpipe 和 eplb,这两者旨在解决训练大型 ai 模型时的速度、效率和可扩展性问题。

DeepSeek 开源周第四弹:DualPipe 和 EPLB —— 优化并行策略
为什么优化并行策略至关重要?

在大模型训练中,计算与通信的效率瓶颈始终是开发者面临的重大挑战。例如:

流水线气泡问题:传统流水线并行中,GPU 常因等待前序计算或通信而处于空闲状态,导致资源浪费;负载不均衡:在专家并行(EP)架构中,不同 GPU 上的专家模块可能因任务需求不同而产生负载差异,影响整体训练速度;通信开销:跨节点数据传输的延迟会显著拖慢分布式训练的效率,尤其是在混合专家模型(MoE)中。

而 DeepSeek 发布的 DualPipe(一种双向流水线并行算法)和 EPLB(一种转为 MoE 设计的负载均衡器),极大优化了大规模 AI 训练的方式。

DualPipe:双向流水线并行算法

DualPipe 是在 DeepSeek-V3 技术报告中提出的一种创新性双向流水线并行算法。它通过实现前向和后向计算与通信阶段的完全重叠,减少了流水线中的空闲时间(即“气泡”),从而显著提升硬件资源的利用率。在传统的流水线并行方法中,前向和后向计算通常是串行进行的,这导致了资源的浪费和训练效率的降低。DualPipe 通过双向调度策略,使得前向和后向计算可以在不同的 GPU 上同时进行,实现了计算与通信的完全重叠。这种方法不仅提高了训练速度,还降低了内存峰值需求。

DeepSeek 开源周第四弹:DualPipe 和 EPLB —— 优化并行策略

上图展示了 DualPipe 在 8 个流水线阶段和 20 个微批次下的调度示意图。正向和反向的微批次在不同方向上对称分布,实现了计算与通信的完全重叠。

EPLB:专家并行负载均衡器

在混合专家(MoE)模型中,不同专家的负载可能会因输入数据的变化而不均衡,导致某些 GPU 过载,而其他 GPU 闲置。为了解决这一问题,DeepSeek 推出了专家并行负载均衡器(EPLB)。EPLB 通过复制高负载的专家,并采用启发式算法将这些复制的专家合理分配到各个 GPU 上,以实现负载的均衡分布。此外,EPLB 结合了 DeepSeek-V3 中的组内限制专家路由策略,尽量将同一组的专家放置在同一节点内,以减少跨节点的数据传输开销。

会译·对照式翻译
会译·对照式翻译

会译是一款AI智能翻译浏览器插件,支持多语种对照式翻译

下载

下面的代码演示了一个两层 MoE 模型的示例,每一层包含 12 个专家。每层引入 4 个冗余专家,总共 16 个副本放置在 2 个节点上,每个节点包含 4 个 GPU。

代码语言:javascript代码运行次数:0运行复制
import torchimport eplbweight = 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 = 16num_groups = 4num_nodes = 2num_gpus = 8phy2log, log2phy, logcnt = eplb.rebalance_experts(weight, num_replicas, num_groups, num_nodes, num_gpus)print(phy2log)# Output:# 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]])

由分层负载均衡策略生成的输出显示了以下专家复制与放置方案。

DeepSeek 开源周第四弹:DualPipe 和 EPLB —— 优化并行策略
DeepSeek 是怎么整合这一切的?

放眼全局,DeepSeek 正在构建一套完整的工具,旨在优化 AI 训练管道的各个层面。从 FlashMLA 在 Hopper GPU 上加速解码,到 DeepGEMM 优化矩阵运算,再到 DualPipe 和 EPLB 提供并行计算与负载均衡,这些工具共同组成了一套完善的 AI 训练优化策略。

本质上,DeepSeek 正在打造一个生态系统,在这个系统中,计算、通信和负载均衡完美协同工作。无论是训练小型模型还是扩展到超大规模模型,这些工具都能无缝集成到你的工作流程中,在每个阶段提升性能。

总结

开源周的第 4 天,DeepSeek 带来了 DualPipe 和 EPLB,两项专为大模型训练优化的并行策略。DeepSeek 所做的不仅仅是发布一些很酷的工具。他们正在为 AI 开发树立新的标准,向世界展示开源协作如何推动有意义的进步。通过使这些优化的并行策略对所有人可用,他们降低了进入尖端 AI 的门槛,即使是预算较小或基础设施有限的团队也能参与其中。

参考资料deepseek-ai/DualPipe:https://github.com/deepseek-ai/DualPipedeepseek-ai/eplb:https://github.com/deepseek-ai/eplb

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

557

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

395

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

756

2023.07.04

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

479

2023.09.01

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

494

2023.09.04

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

1071

2023.09.04

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

659

2023.09.12

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

554

2023.09.20

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

SQL优化与排查(MySQL版)
SQL优化与排查(MySQL版)

共26课时 | 2.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号