Appearance
Distributed Training
分布式训练 指将深度学习模型的训练过程分散到多个计算设备(GPU/TPU/CPU)上并行执行。随着模型规模从百亿级到万亿级参数,单设备内存和计算能力已无法满足需求,分布式训练成为大模型训练的必选方案。
核心并行策略
1. Data Parallelism (数据并行)
将数据批次分割到多个设备,每个设备持有完整模型副本:
- 前向传播: 各设备独立计算前向传播和损失
- 梯度计算: 各设备独立计算梯度
- 梯度同步: 通过 AllReduce 操作平均梯度,各设备更新相同的模型
优点: 实现简单,适用于模型能放入单设备的场景 缺点: 每个设备复制完整模型,内存冗余;梯度同步产生通信开销
2. Model Parallelism (模型并行)
将模型参数分割到多个设备,每个设备处理部分计算:
- 层级分割: 将不同层放到不同设备
- 适用场景: 模型过大无法放入单个设备内存 缺点: 设备间通信频繁,利用率低
3. Tensor Parallelism (张量并行)
模型并行的细粒度形式,将单个层/张量的计算分割到多个设备:
- 列分割: 将权重矩阵按列切分,各设备计算部分输出
- 行分割: 将激活值按行切分
- 代表: Megatron-LM (NVIDIA) 实现的 Transformer 张量并行
优点: 层内并行度高,适合计算密集的注意力层 缺点: 设备间需频繁同步中间激活值
4. Pipeline Parallelism (流水线并行)
将模型按层分割到多个设备,微批次流水线化执行:
设备 1: [F1][F2][F3][B1][B2][B3] ← 泡沫 (Bubble)
设备 2: [F1][F2][F3][B1][B2][B3]
设备 3: [F1][F2][F3][B1][B2][B3]- GPipe: 微批次流水线 + 激活值重计算,减少内存
- PipeDream: 异步流水线,减少泡沫时间
- Zero Bubble Pipeline (2023): 前向-后向调度优化,理论上消除流水线泡沫
优点: 适合模型层数多、设备数量有限的场景 缺点: 流水线泡沫影响设备利用率
3D Parallelism
现代大模型训练通常组合三种并行策略:
| 并行类型 | 分割对象 | 解决的瓶颈 | 代表框架 |
|---|---|---|---|
| Data Parallelism | 数据 batch | 模型太大放不下 | PyTorch DDP |
| Tensor Parallelism | 单层参数 | 单节点内存/计算不足 | Megatron-LM |
| Pipeline Parallelism | 模型层 | 层数过多 | GPipe / DeepSpeed |
例如: GPT-3 (175B) 训练使用了数据并行 (跨节点) + 张量并行 (跨 GPU) + 流水线并行 (跨节点)。
通信与同步
关键通信原语
- AllReduce: 所有设备将本地梯度求和后分发给所有设备
- AllGather: 所有设备收集所有其他设备的张量片段
- ReduceScatter: 先求和再分散给各设备
通信优化
- Ring-AllReduce: 将梯度切分后沿环形拓扑传输,降低带宽压力
- Gradient Compression: 梯度量化、稀疏化减少通信量
- Overlap Communication: 将通信与计算重叠,隐藏延迟
关键论文
| 论文 | 作者 | 年份 | 核心贡献 |
|---|---|---|---|
| "Accurate, Large Minibatch SGD" | Goyal et al. | 2017 | ImageNet 1 小时训练,线性学习率缩放规则 |
| "Megatron-LM" | Shoeybi et al. | 2019 | 张量并行 + 流水线并行训练 Transformer |
| "GPipe" | Huang et al. | 2019 (Google) | 微批次流水线 + 重计算,证明大模型可扩展性 |
| "PipeDream" | Narayanan et al. | 2019 (MSR) | 异步流水线并行,减少泡沫 |
| "Zero Bubble Pipeline" | Qi et al. | 2023 | 前向-后向调度优化,理论消除泡沫 |
重要框架与工具
- PyTorch Distributed (DDP): 数据并行标准实现,Ring-AllReduce 梯度同步
- Horovod: Uber 开源分布式训练框架,支持 TensorFlow/PyTorch/MXNet
- NVIDIA NCCL: GPU 间通信优化库,提供高效的集合通信原语
- Ray Train: 分布式训练统一接口,支持多种后端
- DeepSpeed / FSDP: 与 3D 并行组合使用,解决内存瓶颈
与相关概念的关系
- Data Parallel vs Communication Cost: 梯度同步是瓶颈,大 batch 可减少同步频率但影响泛化
- Tensor Parallel vs Model Size: TP 将单节点内存瓶颈转化为节点间通信,适合层内计算密集
- Pipeline Parallel vs Throughput: PP 通过流水线提升吞吐量,但引入泡沫和激活值内存开销
- FSDP/ZeRO vs Memory: 与 3D 并行正交,解决优化器状态冗余问题
Sources
- Goyal et al., "Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour" (arXiv 2017)
- Shoeybi et al., "Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism" (2019)
- Huang et al., "GPipe: Easy Scaling with Micro-Batch Pipeline Parallelism" (arXiv 2019)
- Narayanan et al., "PipeDream: Generalized Pipeline Parallelism for DNN Training" (SOSP 2019)
- PyTorch Distributed Documentation