大模型学习笔记 08:数据并行、模型并行、流水线并行怎么选
看到数据并行、模型并行、流水线并行这些词时,最容易混在一起。我读这一节时先用一个很粗的区分把它们拆开:数据并行复制模型、拆分样本;模型并行拆模型本身;流水线并行按层分段,让数据像流水一样经过不同设备。
数据并行:复制模型,分摊样本
每张设备持有模型副本,处理不同 mini-batch,再同步梯度。它概念直观,适合模型本身能装进单卡、但希望增加吞吐的场景。代价是梯度同步通信;当模型副本和设备数增多,网络效率会变得关键。
模型并行:模型太大时拆开
模型并行把层内计算或参数切分到多张设备。例如张量并行会将大矩阵计算拆分,设备间需要交换部分结果。它能让单层跨卡运行,但会引入频繁通信,因此通常依赖较快的设备互连。
流水线并行:按层分段
不同设备负责模型的不同层,micro-batch 像流水线一样依次经过各段。它减少单卡需要持有的层数,但如果流水线段之间负载不均或 micro-batch 太少,部分设备会空闲,即流水线气泡。
数据并行:GPU0 [完整模型 + 数据A] GPU1 [完整模型 + 数据B]
模型并行:GPU0 [模型的一部分] <-> GPU1 [模型的另一部分]
流水线并行:GPU0 [前几层] -> GPU1 [中间层] -> GPU2 [后几层]
实际训练常采用混合并行:例如节点内用张量并行,节点间用数据或流水线并行。但复杂度也随之增加,调优时要同时看通信、负载平衡、显存和容错。
如何选择
先问模型是否能放入单卡,再看瓶颈是吞吐还是容量;然后测量设备互连与节点网络,最后用小规模实验观察计算与通信比例。策略选择应由瓶颈驱动,不要为了“用了更多并行类型”而增加系统复杂度。
并行策略本质上是数据和计算在设备之间怎么切。最好的方案不一定名字最多,而是能在当前硬件拓扑上少等待、团队也能稳定维护的方案。
数据并行最容易理解,但它有一个前提:每张卡都要放得下完整模型。模型超过单卡容量以后,就必须引入模型并行或参数分片。流水线并行还要处理“气泡”问题:前面的设备已经算完,后面的设备还没接到数据,部分时间就会闲着。
实际项目里通常是混合并行。比如同一台机器内部用张量并行,机器之间用数据并行;模型再大一些,还要叠加流水线并行。策略越复杂,调优和故障恢复越困难,所以我会先从最简单、最容易测量的方案开始,再根据瓶颈增加并行维度。
可以把选择过程想成先回答两个问题:模型是否能放进一张卡,和当前更缺容量还是更缺吞吐。如果模型能放下但训练太慢,数据并行可能已经够用;如果连一张卡都放不下,就要考虑模型切分、状态分片或降低精度。先确定约束,再谈并行形式,通常比先抄一份复杂配置更稳。
并行策略还会影响调试体验。单卡问题容易复现,跨卡问题可能只在特定 batch、网络状态或负载下出现。大规模训练前,最好用小模型和短任务验证通信、检查点和恢复流程。
硬件拓扑也会改变答案。同一台机器内的高速互连,和跨机器网络的带宽、延迟不是一回事。把需要频繁同步的张量切到慢网络上,理论上可行,实际却可能大部分时间都在等待。选并行策略时,我会把设备拓扑、显存容量和模型层结构放在一起看。
参考:《大规模语言模型:从理论到实践》,第 4 章 4.2 节,PDF 第 89-105 页。本文为学习整理与独立阐释。

浙公网安备 33010602011771号