大模型训练三大并行怎么选:瓶颈驱动与气泡控制

数据并行、模型并行、流水线并行三个词经常被混着说。粗分一句就清楚:数据并行复制模型、拆分样本;模型并行拆模型本身;流水线并行按层分段,让数据像流水一样过设备。这篇讲三者的适用边界、混合并行的组合方式,以及一套按瓶颈做选择的流程。

三种并行的机理与代价

数据并行:每张卡持有完整模型副本,处理不同 mini-batch,再同步梯度。概念最直观,前提是模型装得进单卡。代价是梯度同步通信,卡数越多、网络越慢,同步开销占比越高。

模型并行:把层内计算或参数切到多卡,张量并行是典型——大矩阵乘法被拆开,设备间要交换中间结果。它让单层跨卡运行,但通信频繁,通常绑定高速互连(NVLink 级别)才划算;把高频同步的张量切到慢网络上,理论上能跑,实际大部分时间都在等。

流水线并行:不同设备负责不同层段,micro-batch 依次流过。它降低单卡持有的层数,代价是"气泡":前段设备算完了,后段还没接到数据,部分卡在空转。micro-batch 数量太少或各段负载不均,气泡率会明显上升。

数据并行:  GPU0 [完整模型+数据A]  GPU1 [完整模型+数据B]
模型并行:  GPU0 [模型一部分] <-> GPU1 [模型另一部分]
流水线并行:GPU0 [前几层] -> GPU1 [中间层] -> GPU2 [后几层]

一个补充维度:模型装不下单卡时,除了切模型还有状态分片(ZeRO 系列)这条路——把优化器状态、梯度甚至参数分片到各卡,模型副本不再完整驻留。很多"必须上模型并行"的场景,ZeRO-2/3 加数据并行就能解决,系统复杂度低一档。

真实训练都是混合并行

实际项目几乎不会单用一种:节点内用张量并行吃满 NVLink,节点间用数据并行或流水线并行扛网络延迟,模型再大再叠流水线。组合越多,调优和故障恢复越难——单卡问题容易复现,跨卡问题可能只在特定 batch、网络状态或负载组合下出现。所以大规模训练前,先用小模型短任务把通信、检查点、恢复流程全部走通,再放大规模。

跨卡排障还有一个高频坑:多卡训练报 NCCL 超时或 collective 通信挂起,多半不是算法问题,而是某张卡掉队(显存溢出被迫交换、CPU 预处理瓶颈)或网络配置(防火墙、IB 驱动)问题。排查时先看各卡显存占用是否均衡,再用小规模通信测试隔离网络因素。

选型流程:四个问题按序回答

  1. 模型能否放进单卡?放得下,数据并行大概率够用;放不下,才考虑模型切分、状态分片或降精度。
  2. 当前缺容量还是缺吞吐?缺容量优先解决"装得下",缺吞吐优先解决"跑得快"。
  3. 硬件互连是什么水平?节点内高速互连支持张量并行,跨节点慢网络只适合低频通信的并行方式。
  4. 计算与通信比例实测多少?用小规模实验测出来再定策略,不要按论文配置照抄。

判定标准落在两个数上:气泡率(流水线空闲时间占比)和计算通信比(有效计算时间与同步等待时间之比)。策略选择由瓶颈驱动,不是"用了更多并行类型"就更先进——最好的方案是在当前硬件拓扑上等待最少、团队维护得动的那个。

0

评论0

请先
显示验证码
没有账号?注册  忘记密码?