4. 多GPU并行策略:数据并行、模型并行、流水线并行、混合并行
4.1 核心原理:并行维度的拆解
当单块GPU无法满足大模型的显存需求或算力需求时,我们需要将训练任务拆解到多块GPU上协同完成。拆解的核心在于回答两个问题:“数据怎么分”和“模型怎么分”。根据拆解维度的不同,形成了三种基础并行策略,以及它们的组合——混合并行。
- 数据并行(Data Parallelism, DP):每块GPU持有完整的模型副本,但只处理训练数据的一个分片。前向与反向计算各自独立完成,梯度计算完成后通过AllReduce通信在所有GPU间求平均,再同步更新参数。
- 模型并行(Model Parallelism, MP):将模型自身切分到多块GPU上。每块GPU只负责模型的一部分层或一部分参数。根据切分方式又分为层间并行(Pipeline Parallelism)和层内并行(Tensor Parallelism)。
- 流水线并行(Pipeline Parallelism, PP):是模型并行的一种特殊形式,按层(Layer)的边界将网络切分为多个阶段(Stage),每个Stage部署在一块或多块GPU上,数据以微批次(Micro-batch)形式在Stage间顺序流动。
- 混合并行(Hybrid Parallelism):在大规模集群(如数百上千卡)上,单一策略往往无法同时解决显存容量、通信带宽和计算效率问题,因此需要将DP、PP、TP(张量并行)甚至序列并行组合使用。
关键认知:数据并行解决“数据吞吐量”问题,模型并行解决“单卡显存放不下”的问题,流水线并行解决“层间串行导致的GPU空闲”问题,混合并行则是为了在超大规模场景下同时获得三种优势。
4.2 方法流程:如何选择与组合
在实际工程中,选择并行策略需要遵循一套决策流程,而不是凭经验随意组合。以下是一个典型的判断路径:
- 第一步:判断单卡显存是否足够容纳模型参数、梯度和优化器状态。如果足够,优先使用纯数据并行(DP),因为它实现最简单、通信开销最低。
- 第二步:如果单卡放不下,先尝试张量并行(TP),因为它将单个层的计算切分到多卡,避免了层间通信的串行等待,但TP需要高带宽的卡间连接(如NVLink),否则通信会成为瓶颈。
- 第三步:如果TP后仍然放不下,或TP通信代价过高,则叠加流水线并行(PP),将网络按层切分为多个Stage。PP的通信量远小于TP,但会引入“气泡”空闲。
- 第四步:当集群规模超过32卡时,通常采用混合并行:先按PP切分Stage,再在每个Stage内部使用TP,最后在整体上叠加DP。这就是业界常说的“3D并行”或“Megatron-Turing”模式。
工程经验:在8卡单机场景下,如果模型小于10B参数,通常使用纯DP即可;如果模型在10B~30B之间,推荐PP+DP;超过30B或单卡显存小于40GB时,才需要引入TP。TP对通信带宽要求极高,跨机(非NVLink)场景下慎用。
4.3 案例/场景:以GPT-3 175B为例
以训练GPT-3 175B模型为例,其参数量需要约350GB的FP16权重,加上梯度和Adam优化器状态(FP32),总显存需求超过1.2TB。单张A100 80GB显然无法容纳。业界典型的配置如下:
| 并行维度 | 配置值 | 作用 |
|---|---|---|
| PP(流水线并行) | 8 个 Stage | 将96层Transformer分为8段,每段12层 |
| TP(张量并行) | 8 路 | 每个Stage内部将注意力/FFN切到8卡 |
| DP(数据并行) | 64 路 | 64个模型副本并行处理不同数据批次 |
| 总GPU数 | 8 × 8 × 64 = 4096 | 对应一个完整的3D并行网格 |
在这个配置下,数据流遵循以下路径:
输入数据 → DP切分(64路) → 每个DP副本内部:
进入PP Stage 0(GPU 0~7) → 层内TP切分(8卡并行计算)
→ 输出激活传递给PP Stage 1(GPU 8~15) → ... → Stage 7输出
反向传播时,梯度沿PP反向流动,同时每个Stage内部TP做梯度AllReduce,
最后DP维度再做一次全局梯度同步。
常见误区:不要以为PP的Stage数越多越好。Stage数过多会导致每个Stage的计算量过小,通信和调度开销占比上升,气泡率增大。经验上,每个Stage至少应包含4~6层Transformer,且单Stage的计算时间应远大于通信时间。
4.4 误区/复盘:并行策略的典型错误
在实际部署中,以下错误最为常见,值得反复复盘:
- 误区一:盲目追求TP。TP虽然能降低显存,但其通信量是PP的数十倍。在千兆以太网或跨机场景下,TP的通信延迟会直接拖垮训练吞吐。正确做法是优先PP,TP仅在NVLink域内使用。
- 误区二:忽略优化器状态的显存占用。Adam优化器需要保存FP32的动量(momentum)和方差(variance),这部分显存是模型权重的8倍(FP32权重4字节×2 + 梯度4字节)。很多初学者只计算了模型权重,导致OOM。
- 误区三:PP的微批次数量设置不当。微批次(micro-batch)数量过少会导致气泡率上升;过多则会增加激活显存。一般建议微批次数量 ≥ 2×PP的Stage数,才能让流水线充分填充。
- 误区四:混合并行时通信域配置错误。例如将TP组跨机配置,或者将DP组配置在同一台机器内,导致通信拓扑与硬件拓扑不匹配,造成不必要的跨机流量。
复盘建议:在每次训练任务启动前,先绘制一张“并行策略-通信拓扑”对照表,明确每个通信组(TP组、PP组、DP组)包含哪些GPU、它们之间的物理连接是NVLink还是InfiniBand,再据此决定并行维度的顺序和大小。
最后需要强调的是,并行策略的选择不是一次性的。随着模型规模增长、集群拓扑变化或训练稳定性问题出现,需要重新评估DP/PP/TP的比例。建议在每次大规模训练前,使用小规模配置(如1/10的模型和1/10的数据)跑通流程并测量通信耗时占比,再逐步扩展到全量配置,避免在千卡集群上因策略错误而浪费大量资源。