DualPipe 并行 本节摘要:DeepSeek-V3 在 2,048 张 H800 上训练,MoE 专家散落跨节点。跨节点专家 all-to-all 通信每 1 GPU 时算力对应 1 GPU 时通信,GPU 一半时间闲着。DualPipe(DeepSeek,2024 年 12 月)是双向流水线,把前向反向计算与它们触发的 all-to-all 通信重叠。气泡降、吞吐升,持有两份模型参数拷贝(名字里「双」的由来)在专家并行本就把专家摊薄后代价很小。本节是 Learn 型走读:DualPipe 到底做什么、四个分块组件、为何 8 流水线阶段 16 微批时正反两流互填空槽、以及 Sea AI Lab 的 DualPipeV 改进如何以略紧的气泡丢掉 2 倍参数复制。
本节摘要:DeepSeek-V3 在 2,048 张 H800 上训练,MoE 专家散落跨节点。跨节点专家 all-to-all 通信每 1 GPU 时算力对应 1 GPU 时通信,GPU 一半时间闲着。DualPipe(DeepSeek,2024 年 12 月)是双向流水线,把前向反向计算与它们触发的 all-to-all 通信重叠。气泡降、吞吐升,持有两份模型参数拷贝(名字里「双」的由来)在专家并行本就把专家摊薄后代价很小。本节是 Learn 型走读:DualPipe 到底做什么、四个分块组件、为何 8 流水线阶段 16 微批时正反两流互填空槽、以及 Sea AI Lab 的 DualPipeV 改进如何以略紧的气泡丢掉 2 倍参数复制。
阅读完本节,你应当能够:
在 2K H800 上训 671B MoE 模型遇三个叠加瓶颈:(1) 内存压力——每 GPU 持模型一片,8K 序列、61 层、128 头的激活内存巨大;(2) 流水线气泡——传统流水线并行(GPipe、1F1B)在等阶段输入或梯度时 GPU 闲,8 阶段时即使 1F1B 调度约 12% GPU 时是气泡;(3) 跨节点 all-to-all——带专家并行的 MoE 把专家散到节点,每次前向触发一次 all-to-all 把 token 派到专家、一次合并,2K GPU 时这易成 1:1 算力通信比。
每个有独立解:梯度检查点管内存、Zero Bubble(Sea AI Lab,2023)管气泡、专家并行通信核管 all-to-all。DualPipe 让它们协同:调度在单次前向反向块内重叠计算与通信,从流水线两端同时注入微批,用所得调度把 all-to-all 藏进计算窗口。报告结果:近消除流水线气泡,DeepSeek-V3 的 14.8T token 训练超 95% GPU 利用率。
把 N 层模型分到 P 设备,设备 i 持层 i*N/P 到 (i+1)*N/P-1。微批从设备 0 到 P-1 正向流,再从 P-1 到 0 反向流。每设备只能在前设备发来输出后开始正向阶段、在下游发来上游梯度后开始反向。GPipe(Huang 等 2019)一次调一个微批,浪费多数 GPU 时。1F1B(Narayanan 等 2021)为多微批交错前后向。Zero Bubble(Qi 等 2023)把反向拆成反向输入(B)与反向权重(W)两部分,调度填气泡。Zero Bubble 之后,流水线近紧。DualPipe 是下一步,在其上加两想法。
每个前向块拆四组件:注意力(Q/K/V 投影、注意力、输出投影)、all-to-all 派发(跨节点通信把 token 送专家)、MLP(MoE 专家计算)、all-to-all 合并(跨节点通信把专家输出带回)。反向块加每者的梯度版。DualPipe 调度使 all-to-all 派发与下一块的注意力计算并行、all-to-all 合并与再下一块的 MLP 计算并行——通信藏进计算窗口。
多数流水线调度从阶段 0 注入微批流向 P-1。DualPipe 从两端注入:阶段 0 看从那发起的正向微批,阶段 P-1 也看从那发起的正向微批,两流中间相遇。为此设备 i 必须同时持早流水线层 i 与晚流水线层 P-1-i——这是 DualPipe 名字里「双」的部分:每设备持两份它需服务的模型层拷贝(每方向一份)。DeepSeek-V3 规模下这是 2 倍参数复制代价,但因为专家并行本就把 MoE 专家摊得稀薄,非专家层复制两遍是小钱。两份拷贝间权重在反向后同步,这与数据并行的 all-reduce 类似。
DualPipe 报告「气泡近零」,但营销与实践有别。实践中 8 阶段 16 微批仍有少量气泡——填充与排空流水线时的瞬态、all-to-all 无法完全藏进计算时的残留。营销上「无气泡」指相对于 1F1B 的 12%、Zero Bubble 的几个百分点,DualPipe 把它压到低个位数百分比。关键不是零,是吞吐在 DeepSeek-V3 规模下超 95% GPU 利用率——这是业界前沿。
DualPipeV 是 Sea AI Lab 的改进。DualPipe 的 2 倍参数复制是它最贵的部分——虽在 MoE 下可承受,仍是显存。DualPipeV 丢掉双向:不再要求每设备持正反两份层,改用更精细的调度在单份参数上重叠。代价:专家并行不活跃时(如纯密集层阶段)气泡略大,因为无法用 all-to-all 藏。权衡是:省 2 倍参数复制换略紧气泡。对非 MoE 或专家并行不主导的模型,DualPipeV 常更优;对 DeepSeek-V3 这种专家并行主导的,DualPipe 的 2 倍复制本就便宜,原始 DualPipe 仍可取。
不重写分布式训练栈,而是写个调度模拟器,手动追踪 DualPipe 时序。
def dualpipe_forward_chunk(layer_idx, microbatch, schedule, clock): attn_end = do_attention(layer_idx, microbatch, clock) # 计算窗口 dispatch_end = all_to_all_dispatch(clock, attn_end) # 通信,可与下块注意力重叠 mlp_end = do_mlp(layer_idx, microbatch, dispatch_end) # 计算窗口 combine_end = all_to_all_combine(dispatch_end, mlp_end) # 通信,可与下块 MLP 重叠 return combine_end
def dualpipe_schedule(num_stages, num_microbatches): # 从阶段 0 和 P-1 同时注入微批,两流中间相遇 forward_from_left = [inject(stage=0, mb=i) for i in range(num_microbatches)] forward_from_right = [inject(stage=num_stages-1, mb=i) for i in range(num_microbatches)] # 每设备持层 i 与层 P-1-i,服务两方向 return timeline
def bubble_fraction(timeline, num_stages, num_microbatches): total_time = max(timeline.values()) compute_time = num_microbatches * num_stages * chunk_time * 2 # 正+反 return 1.0 - compute_time / (total_time * num_stages) # 对比:1F1B 8 阶段约 12%, DualPipe 应降到低个位数
模拟时记录每块的四组件时序,验证 all-to-all 派发确实与下块注意力重叠(时间窗重合)、合并与下块 MLP 重叠,而非串行排队。
DualPipe 是 DeepSeek 自研,集成进其训练栈。对比 Zero Bubble(Sea AI Lab,2023):Zero Bubble 把反向拆 B/W 填气泡但单方向注入,DualPipe 在其上加块分解(通信藏进计算)与双向注入(两流互填)。对比 GPipe/1F1B:气泡大得多。对比 Megatron-LM 的流水线:Megatron 用 1F1B 或交织,DualPipe 为 MoE 的 all-to-all 量身定制,密集模型收益小。DualPipeV(Sea AI Lab,2025)是公开改进,省 2 倍参数复制。
本节产出 outputs/skill-dualpipe-planner.md——一个技能,给定模型架构(MoE 与否)、阶段数、专家并行配置,推荐是否用 DualPipe vs DualPipeV vs Zero Bubble,算预期气泡占比与吞吐提升,给出双向注入的设备层分配方案。
(Easy) 扩展气泡计算器对比 GPipe、1F1B、Zero Bubble、DualPipe 在 8 阶段 16 微批下的气泡占比,量化 DualPipe 的增益。
(Medium) 手动追踪 4 阶段 8 微批的 DualPipe 调度,绘甘特图,验证正向反向两流如何互填空槽。
(Medium) 模拟 DualPipeV(单份参数、略紧气泡),对比 DualPipe 的气泡占比与内存占用,验证 MoE 下 DualPipe 的 2 倍复制可承受。
(Hard) 扩展块分解,让 all-to-all 派发与下块注意力精确重叠(而非串行),测端到端吞吐提升,验证通信藏进计算的机制。
(Hard) 在密集(非 MoE)模型上对比 DualPipe 与 Zero Bubble,验证 DualPipe 的优势主要来自 MoE 的 all-to-all 可藏——密集模型 all-to-all 少,DualPipe 收益小。
下一节,DeepSeek-V3 架构剖析:把第 14 节的六个旋钮全转再加四个(MLA、MTP、无辅助损失路由、DualPipe),671B 总参 37B 激活。