当前位置: 首页 > article >正文

DeepSeek开源周,第四弹再次来袭,优化并行策略

图片


DualPipe:

图片

概述

  • DualPipe是DeepSeek-V3技术报告中介绍的一种创新的双向管道并行算法,能实现前向和后向计算通信阶段的完全重叠,还可减少管道气泡。如需了解计算通信重叠的详细信息,可参考性能分析数据。

调度示例

    • 给出了8个PP等级和两个方向20个微批次的DualPipe调度示例。因反向微批次与正向微批次对称,为简化说明省略了反向微批次的批次ID。由共享黑边框包围的两个单元格表示计算和通信相互重叠。

    管道气泡和内存使用情况比较

      • 1F1B方法

        表示为(PP - 1)(F + B),有1×参数,激活为PP,其中F表示正向块执行时间,B表示完全向后块执行时间。

      • ZB1P方法

        表示为(PP - 1)(F + B - 2W),有1×参数,激活为PP,W表示“权重反向”块执行时间。

      • DualPipe方法

        表示为(PP/2 - 1)(F&B + B - 3W),有2×参数,激活为PP + 1 ,F&B表示两个相互重叠的前向和后向块的执行时间。

      快速开始

        • 使用示例为“python example.py”。实际应用中,需针对特定模块实现定制的自定义方法overlapped_forward_backward。

        要求

          • 需使用PyTorch 2.0及以上版本。

          项目地址:https://github.com/deepseek-ai/DualPipe


          EPLB:

          图片

          概述

          • 作用

                在使用专家并行(EP)时,不同专家会被分配到不同的GPU上。由于不同专家的负载可能因当前工作负载而异,保持不同GPU的负载平衡很重要。DeepSeek - V3论文中采用冗余专家策略,即复制负载较重的专家,然后启发式地将复制后的专家分配到GPU上,以确保不同GPU间的负载平衡。此外,由于DeepSeek - V3使用了组限专家路由,还会尽量将同一组的专家放置到同一节点,以减少节点间的数据流量。

          • 开源情况

            为便于复现和部署,开源了部署在eplb.py中的EP负载均衡算法。该算法根据估计的专家负载计算平衡的专家复制和放置计划,预测专家负载的具体方法不在本仓库范围内,常见方法是使用历史统计数据的移动平均值。

          算法详情

          • 分层负载均衡策略
            • 适用情况

                          当服务器节点数量能整除专家组数量时使用,可利用组限专家路由。

            • 具体步骤

              先将专家组均匀分配到各个节点,确保不同节点负载平衡;然后在每个节点内复制专家;最后将复制后的专家分配到各个GPU,以保证不同GPU负载平衡。该策略可在预填充阶段,专家并行规模较小时使用。

          • 全局负载均衡策略
            • 适用情况

              其他情况时使用。

            • 具体步骤

              不考虑专家组,全局复制专家,然后将复制后的专家分配到各个GPU。该策略可在解码阶段,专家并行规模较大时采用。

          接口和示例

          • 主要函数

            负载均衡器的主函数是eplb.rebalance_experts。

          • 示例代码

            以一个两层MoE模型为例,每层包含12个专家,每层引入4个冗余专家,共16个副本放置在2个节点上,每个节点包含4个GPU。运行代码后,输出表示专家复制和放置计划,该输出由分层负载均衡策略生成。

          项目地址:https://github.com/deepseek-ai/eplb?tab=readme-ov-file


              DeepSeek Infra:

              图片

              概述

              • 公开分享训练和推理框架的分析数据,以帮助社区更好地理解通信 - 计算重叠策略及底层实现细节。分析数据使用PyTorch Profiler捕获,下载后可分别在Chrome浏览(chrome://tracing)或Edge浏览器(edge://tracing)中直接可视化查看。分析时模拟了绝对平衡的MoE路由策略。

              训练分析数据

              • 数据内容

                展示了DualPipe中一对单独的前向和后向块的叠加策略。每个块包含4个MoE层。

              • 并行配置

                与DeepSeek - V3预训练设置一致,即EP64、TP1,序列长度为4K。为简化分析,未包含PP通信。

              推理分析数据

              • 预填充阶段
                • 数据内容

                  分析数据采用EP32和TP1(与DeepSeek V3/R1实际在线部署一致),提示长度设为4K,每个GPU的批量大小为16K个标记。

                • 策略细节

                  预填充阶段使用两个微批次来重叠计算和全连接通信,并确保注意力计算负载在两个微批次间平衡(即同一提示可能在两个微批次间拆分)。

              • 解码阶段
                • 数据内容

                  采用EP128、TP1,提示长度为4K(与实际在线部署配置接近),每个GPU的批量大小为128个请求。

                • 策略细节

                  解码阶段同样使用两个微批次来重叠计算和全连接通信。但与预填充阶段不同,解码阶段的全连接通信不占用GPU SMs,即在发出RDMA消息后,所有GPU SMs被释放,系统在计算完成后等待全连接通信结束。关于全连接通信的具体实现可参考DeepEP。

              备注

              • 解码阶段的分析数据尚未准备好,即将发布。

              项目地址:https://github.com/deepseek-ai/profile-data


                http://www.kler.cn/a/565886.html

                相关文章:

              • < 自用文儿 > Gobuster 暴力扫描工具与 SecLists 安全测试词表集合
              • 【AI深度学习基础】NumPy完全指南入门篇:核心功能与工程实践(含完整代码)
              • 【大语言模型,数据向量化】向量化时使用本地HuggingFaceEmbeddings失败,调用embeddings时仍会去Huggingface下载的解决方法
              • DeepSeek后训练:监督微调和强化学习
              • Spring Data JPA 中的分页实现:从 BasePage 到 Pageable
              • 网络流算法: 最大流算法
              • 【无标题】ABP更换MySql数据库
              • Wireshark:自定义类型帧解析
              • SpringSecurity踢出指定用户
              • 【AIGC系列】5:视频生成模型数据处理和预训练流程介绍(Sora、MovieGen、HunyuanVideo)
              • SpringBoot 3.0微服务架构实战:从设计到部署
              • 【Blender】三、材质篇--3.4 凹凸感和置换形变
              • 如何使用useEffect模拟组件的生命周期?
              • Opencv 阈值与平滑处理
              • API网关相关知识点
              • 深度学习开源数据集大全:从入门到前沿
              • [文献阅读] DCEC - Deep Clustering with Convolutional Autoencoders
              • 在ubuntu 24.04.2 通过 Kubeadm 安装 Kubernetes v1.31.6
              • Web1、Web2 与 Web3 的核心区别
              • 钉钉宜搭智能车辆管理系统:AIoT与低代码融合的数字化解决方案