首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

DeepSeek开源计划第4天:三大代码库齐开源,推动V3/R1训练与推理技术革新

DeepSeek开源三大优化策略,网友称已打破最后封印

2月27日,DeepSeek开源周迎来第四弹,重磅开源三个代码库,引发业界广泛关注。

此次开源包括:DualPipe,一种用于V3/R1训练的双向流水线并行算法,旨在实现计算与通信的重叠;EPLB,V3/R1的专家并行负载均衡器,优化GPU资源利用率;profile-data,训练和推理框架的分析数据,方便开发者进行性能分析。

DualPipe通过计算和通信的并行执行,有效减少训练过程中的空闲时间。EPLB则专注于平衡工作负载,最大限度地避免GPU资源浪费。

值得一提的是,DualPipe的开发团队中,梁文峰参与其中

DeepSeek的此次开源举动,在开发者社区中赢得了高度赞誉,有开发者甚至称其“打开了最后的封印”,释放了大模型训练的潜力。

同时,DeepSeek团队的协作能力也受到了称赞。

当然,也有投资者开始关注此次开源对英伟达股价可能产生的影响。

01. DualPipe:高效的双向流水线并行算法

DualPipe是DeepSeek-V3技术报告中的亮点,是一种创新的双向Pipeline并行算法。它实现了前向和后向计算通信阶段的全面并行,并能有效减少流水线中的“气泡”现象。

例如,在双向并行处理中,8个PP列和20个微批的DualPipe调度可以实现计算和通信的重叠。

DualPipe通过优化,显著减少了流水线气泡,并降低了内存使用率。

其中,𝐹表示前向块的执行时间,B表示完全后向块的执行时间,W表示“权重后向”块的执行时间,𝐹&𝐵表示两个相互重叠的前向和后向块的执行时间。

开发者可以通过以下方式快速启动DualPipe:

需要注意的是,在实际应用中,开发者需要根据具体模块,实现一个定制的overlapped_forward_backward方法。

DualPipe要求PyTorch版本在2.0及以上。

02. EPLB:灵活的负载均衡算法

DeepSeek开源的另一个重要代码库是EPLB

在使用专家并行(EP)时,不同专家会被分配到不同的GPU上。由于各专家的负载可能存在差异,保持GPU间的负载均衡至关重要。DeepSeek-V3论文中提到,研究人员采用冗余专家策略,复制负载较重的专家,并将重复的专家分配到不同的GPU上,以实现负载均衡。

此外,DeepSeek-V3还使用了组限制专家路由,尽量将同一组的专家放置在同一节点上,以减少节点间的数据传输。

为了方便开发者使用,DeepSeek在eplb.py中开源了EP负载均衡算法。该算法基于对专家负载的估计,计算出一个均衡的专家复制和放置方案。

该负载均衡算法包含分层负载平衡和全局负载平衡两种策略,适用于不同的场景。

当服务器节点的数量可以被专家组的数量整除时,可以使用分层负载平衡策略。该策略首先将专家组均匀分配到节点上,然后复制专家,并将复制的专家分配到各个GPU上。分层负载均衡策略适用于专家并行规模较小的情况。

在其他情况下,可以使用全局负载平衡策略。该策略在全局范围内复制专家,并将复制的专家分配到GPU。该策略适用于专家并行度较高的解码阶段。

负载均衡器的主要功能是eplb.rebalance_experts。

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

03. DeepSeek Infra中的数据分析

此次开源的第三个代码库是DeepSeek训练和推理框架的分析数据

这些分析数据通过PyTorch Profiler捕获。开发者可以直接在Chrome或Edge浏览器中通过chrome://tracing (或 edge://tracing) 进行可视化。DeepSeek模拟了一种绝对平衡的MoE路由策略来进行性能分析。

训练配置文件数据展示了DualPipe中针对一对单独的向前和向后块的重叠策略。每个块包含4个MoE层。并行配置与DeepSeek-V3预训练设置一致:EP 64,TP 1,4K序列长度。为了简化分析,配置文件中不包含PP通信。

在推理过程中,对于预填充阶段,该配置文件采用EP 32和TP 1(与DeepSeek V3/R1的实际在线部署一致),提示长度设置为4K,每个GPU的批量大小为16 K令牌。为了实现计算和通信的重叠,DeepSeek使用了两个微批,并确保注意力计算负载在这两个微批之间保持平衡。

对于解码阶段,该配置文件采用EP 128,TP 1和4K的提示长度(与实际在线部署配置非常接近),每个GPU的批量大小为128个请求。与预填充类似,解码也使用了两个微批进行计算和全对全通信的重叠。但与预填充不同的是,解码期间的全对全通信不占用GPU SM:在发出RDMA消息后,所有GPU SM被释放,系统在计算完成后等待全对全通信完成。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OPPbwmHw42zseRWG9WflY8-Q0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券