刚刚!梁文锋亲自贡献:DeepSeek全面开源优化并行策略! by Datawhale
上周五,DeepSeek 发推说本周将是开源周(OpenSourceWeek),并将连续开源五个软件库。
就在刚刚,DeepSeek 开源周第四天,一口气开源了三个代码库。
DualPipe:是一种双向流水线并行算法,用于 V3/R1 训练中的计算-通信重叠;EPLB:用于 V3/R1 的专家并行负载均衡器;profile-data:训练和推理框架的分析数据。
DualPipe 通过重叠计算和通信来减少训练的空闲时间,EPLB 平衡了工作负载,使得几乎没有 GPU 闲置的情况,而公布 profile-data 是为了帮助社区更好地理解通信 - 计算重叠策略和底层实现细节。
- DualPipe 链接:https://github.com/deepseek-ai/DualPipe
- EPLB 链接:https://github.com/deepseek-ai/eplb
- profile-data 链接:https://github.com/deepseek-ai/profile-data
值得一提的是,在 DualPipe 的 GitHub 上,DeepSeek 创始人梁文锋位列开发者行列之中。
通俗理解三个代码库
技术语言可能不好理解,我们来看一下网友给出的比喻:
想象一下,训练一个庞大的语言模型就像指挥一个交响乐团。每个 GPU 就像一位音乐家,执行其分配的计算任务,而训练框架则充当指挥,保持一切完美同步。在典型设置中,音乐家们可能需要等待彼此,造成尴尬的停顿。这些延迟,被称为流水线气泡,会减慢整个过程。DualPipe 通过允许不同部分并行工作来消除这些低效,就像弦乐部演奏的同时铜管部也在排练。这种努力的重叠确保没有停机时间。有网友评价说,「DualPipe 不仅仅是另一种流水线并行实现。它解决的根本问题是标准流水线并行中固有的低效率。传统方法如 1F1B(一次前向,一次后向)甚至 Zero Bubble(ZB1P)都存在流水线气泡 —— 即各计算单元等待数据时的空闲时间。DualPipe 旨在实现前向和后向计算 - 通信阶段的完全重叠,最大限度地减少了这些气泡。」而关于 EPLB,我们可以这么理解:传统的数据并行就像给每个人一份整个项目的副本 —— 既浪费又缓慢。专家并行(EP),即每个专家驻留在不同的 GPU 上,如果可以平衡负载,则效率要高得多。EPLB 就是为了解决这种专家失衡问题而设计的。这不仅仅是分配专家;它是关于智能地分配它们,以最大限度地提高 GPU 利用率和最小化通信开销。到现在为止,DeepSeek 似乎已经把发布 V3、R1 模型时未公布的很多训练、部署细节也公开了出来。人们不仅可以在此基础上更好地使用 DeepSeek 模型,在使用其他大模型时也能获得助益。明天周五,是开源周的最后一天,DeepSeek 有可能用 R2 来收尾吗?DeepSeek官方介绍
接着,让我们看看 DeepSeek 对于三个项目的官方介绍。
DualPipe 是在 DeepSeek-V3 技术报告中引入的一种创新的双向流水线并行算法。它实现了前向和后向计算 - 通信阶段的完全重叠,同时减少了流水线气泡。有关计算 - 通信重叠的详细信息,请参阅配置文件数据:https://github.com/deepseek-ai/profile-dataDualPipe 调度示例:8 个 流水线并行(PP)级别和 20 个双向 micro-batch。反向的 micro-batch 与前向的 micro-batch 对称,因此图中省略了它们的 batch ID 。被共享的黑色边框包围的两个单元格具有相互重叠的计算和通信。有网友制作了 DualPipe 与其他两种方法 ——1F1B and ZB1P 的对比图: 𝐹 表示前向数据块的执行时间,𝐵 表示完整后向数据块的执行时间,𝑊 表示「权重后向」数据块的执行时间,𝐹&𝐵 表示两个相互重叠的前向和后向数据块的执行时间。DualPipe由Jiashi Li、Chengqi Deng、梁文锋创建和开发。更多信息请参见GitHub代码库。在使用专家并行(Expert Parallelism,EP)时,不同的专家被分配到不同的 GPU 上。由于不同专家的负载可能会根据当前工作负载而变化,保持不同 GPU 之间的负载平衡非常重要。正如 DeepSeek-V3 论文中所描述的,工程师们采用了冗余专家策略,复制高负载的专家。然后,DeepSeek 通过启发式方法将这些复制的专家打包到 GPU 上,以确保不同 GPU 之间的负载平衡。此外,得益于 DeepSeek-V3 中使用的组限制专家路由(group-limited expert routing),DeepSeek 工程师还尽可能地将同一组的专家放置在同一节点上,以减少节点间的数据传输。为了便于复现和部署,DeepSeek 在 eplb.py 中开源了部署的 EP 负载平衡算法。该算法根据估计的专家负载计算出一个平衡的专家复制和放置方案。请注意,预测专家负载的确切方法超出了本仓库的范围。一种常见的方法是使用历史统计数据的移动平均值。DeepSeek 公开分享了自身的训练和推理框架分析数据,以帮助社区更好地了解通信计算重叠策略和低级实现细节。该分析数据是使用 PyTorch Profiler 捕获的。下载后,人们可以通过在 Chrome 浏览器中导航到 chrome://tracing(或在 Edge 浏览器中导航到 edge://tracing)来直接对其进行可视化。训练配置文件数据展示了 DeepSeek 在 DualPipe 中针对一对单独的前向和后向块的重叠策略。每个块包含 4 个 MoE(专家混合)层。并行配置与 DeepSeek-V3 预训练设置一致:EP64、TP1 具有 4K 序列长度。并且为简单起见,在分析过程中不包括 PP 通信。在推理上,对于预填充,该配置文件采用 EP32 和 TP1(与 DeepSeek V3/R1 的实际在线部署一致),提示长度设置为 4K,每 GPU 的批大小为 16K 个 token。在预填充阶段,DeepSeek 使用两个 micro-batch 来重叠计算和全对全通信,同时确保注意力计算负载在两个微批次之间保持平衡 —— 这意味着同一个提示可以在它们之间拆分。对于解码,该配置文件采用 EP128、TP1 和 4K 的提示长度(与实际的在线部署配置非常接近),每个 GPU 的批处理大小为 128 个请求。与预填充类似,解码也利用两个 micro-batch 进行重叠计算和全对全通信。但是,与预填充不同,解码期间的全对全通信不占用 GPU SM:发出 RDMA 消息后,所有 GPU SM 都被释放,系统等待计算完成后全对全通信完成。DeepSeek 错峰优惠,半夜跑 AI 更省钱
除了持续开源,DeepSeek 官方在昨天和前天还宣布了两条重要消息:一是恢复 API 开放平台充值;二是北京时间每日 00:30 至 08:30 的夜间空闲时段,推出错峰优惠活动。

(利好夜猫子&歪果仁?)
官方 API 平台地址:
https://platform.deepseek.com/usage
一起“点赞”三连↓
原文链接