主要观点总结
DeepSeek在开源周发布了两个工具(DualPipe、EPLB)及训练和推理框架的分析数据。其中DualPipe是双向pipeline并行算法,旨在消除训练中的流水线气泡,提高计算效率。EPLB是专家并行负载均衡器,旨在解决专家失衡问题。此外,DeepSeek还公开了训练和推理框架的分析数据,帮助社区理解通信-计算重叠策略和底层实现细节。此外,DeepSeek还推出了错峰优惠活动,降低API调用价格。
关键观点总结
关键观点1: DeepSeek发布两个工具和一个数据集
DeepSeek在开源周发布了DualPipe、EPLB以及训练和推理框架的分析数据。DualPipe是一种双向pipeline并行算法,旨在消除训练中的流水线气泡;EPLB是用于专家并行的负载均衡器,用于解决专家分配失衡问题。
关键观点2: DualPipe的工作原理
DualPipe允许不同部分并行工作,消除流水线中的低效,通过计算-通信重叠策略最大限度地减少流水线气泡。
关键观点3: EPLB的作用
EPLB是专家并行的负载均衡器,旨在解决不同GPU之间专家负载分配不均的问题。它通过智能分配专家来提高GPU利用率并最小化通信开销。
关键观点4: DeepSeek公开训练和推理框架的分析数据
DeepSeek公开了训练和推理框架的分析数据,帮助社区更好地理解通信-计算重叠策略和底层实现细节。这些数据是使用PyTorch Profiler捕获的,可以在浏览器中直接进行可视化。
关键观点5: DeepSeek的错峰优惠活动
DeepSeek推出了错峰优惠活动,在夜间空闲时段降低API调用价格。这一活动被网友称为“峰谷token”,并受到一些用户的欢迎。
正文
DeepSeek
的开源周已经进行到了第四天(前三天报道见文末「相关阅读」)。今天这家公司一口气发布了两个工具和一个数据集:DualPipe、EPLB 以及来自训练和推理框架的分析数据。
DeepSeek 表示,DualPipe 曾在 V3/R1 的训练中使用,是一种用于计算 - 通信重叠的双向 pipeline 并行算法。
EPLB 是为 V3/R1 打造的专家 - 并行负载均衡器。
而公布训练和推理框架的分析数据是为了帮助社区更好地理解通信 - 计算重叠策略和底层实现细节。
-
DualPipe 链接:https://github.com/deepseek-ai/DualPipe
-
EPLB 链接:https://github.com/deepseek-ai/eplb
-
计算分析链接: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 来收尾吗?
DualPipe 是在 DeepSeek-V3 技术报告中引入的一种创新的双向流水线并行算法。它实现了前向和后向计算 - 通信阶段的完全重叠,同时减少了流水线气泡。有关计算 - 通信重叠的详细信息,请参阅配置文件数据:https://github.com/deepseek-ai/profile-data
DualPipe 调度示例: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)来直接对其进行可视化。