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被释放,系统在计算完成后等待全对全通信完成。
领取专属 10元无门槛券
私享最新 技术干货