外观
分布式训练
内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。
一、为什么需要分布式训练?
| 挑战 | 说明 |
|---|---|
| 显存效率 | 175B 的 GPT-3 参数需 700GB 显存,梯度 700GB,Adam 优化器状态 1400GB,共需 2.8TB |
| 计算效率 | 单卡 A100 训练 GPT-3 约需 288 年 |
二、并行策略
2.1 数据并行(Data Parallelism, DP)
- 做法:数据集切分为多份,每张 GPU 分配到不同数据,每个进程有完整模型副本
- 关键:确保所有 GPU 上的梯度相同(AllReduce 规约操作)
- 优化:梯度分桶、计算与通信重叠、梯度累积跳过同步
| 优势 | 劣势 |
|---|---|
| 计算效率高,实现简单 | 显存效率低(每卡存完整模型) |
| 近乎线性扩展 | 梯度规约通信开销与模型大小正相关 |
2.2 流水线并行(Pipeline Parallelism, PP)
- 做法:层间划分,不同层分配到不同 GPU(前 3 层 GPU-0,后 3 层 GPU-1)
- 通信:点对点通信(P2P),成本最低
| 优势 | 劣势 |
|---|---|
| 通信成本最低 | 不减少单层中间激活的显存 |
| 单卡显存占用通常随 PP 度下降(显存效率提升) | GPU 利用率存在空闲气泡 |
2.3 张量并行(Tensor Parallelism, TP)
- 做法:层内划分,单层切分到不同 GPU 上分别计算不同部分
- 分类:行并行、列并行(按权重矩阵 A 的分块方式)
| 优势 | 劣势 |
|---|---|
| 成比例减少显存占用 | 通信频繁,计算效率低 |
| 减少单层中间激活的唯一方法 | 对 NVLINK 依赖强 |
2.4 三种并行对比总结
| 维度 | 数据并行 | 张量并行 | 流水线并行 |
|---|---|---|---|
| 显存效率 | 低 | 高 | 中 |
| 通信效率 | 中 | 低 | 高 |
| 实现难度 | 低 | 高 | 中 |
| 切分方式 | 数据切分 | 层内纵向切分 | 层间横向切分 |
2.5 3D 并行
DP + TP + PP 的组合。例如 Megatron-Turing NLG 530B:4 路 TP + 4 路 PP + 2 路 DP = 32 workers。
策略优先级:TP=8 充分利用 NVLINK → 优先 PP → 最后 DP
三、ZeRO 系列与 FSDP
ZeRO(零冗余优化器)
在执行逻辑上是数据并行,但可以达到模型并行的显存优化效果。
| 阶段 | 分片内容 | 每卡显存 |
|---|---|---|
| ZeRO-1 | 优化器状态 | 4× 降低 |
| ZeRO-2 | 优化器状态 + 梯度 | 8× 降低 |
| ZeRO-3 | 优化器状态 + 梯度 + 模型参数 | 与 DP 度线性降低 |
为什么还需要 3D 并行?
- 张量并行的通信量太高,只能限于节点内(有 NVLINK)
- 节点间张量并行 → GPU 利用率低至 5%
- 显卡数量增加到千量级时,ZeRO-3 明显不如 3D 并行
四、显存优化技术
| 技术 | 原理 |
|---|---|
| 重计算(Recomputation) | Activation Checkpointing / Gradient Checkpointing,时间换空间 |
| 卸载(Offload) | 参数/激活在 CPU 内存和 GPU 显存间动态转移,通信换显存 |
| 混合精度(BF16/FP16) | 降低 50% 显存,速度提升 2-4 倍;BF16 可避免计算溢出 |
五、训练框架选型
主流框架
| 框架 | 特点 |
|---|---|
| Megatron-LM | 张量并行,NVIDIA 出品 |
| DeepSpeed | ZeRO-DP,Microsoft 出品 |
| Colossal-AI | 高维模型并行(2D/2.5D/3D) |
| Alpa | 自动并行 |
| FSDP(PyTorch) | 类似 ZeRO-3,PyTorch 原生支持 |
选型建议
| 场景 | 推荐方案 |
|---|---|
| 大规模训练 | Megatron-LM + DeepSpeed(Megatron-Turing NLG 参考方案) |
| 7B 小模型 | DeepSpeed ZeRO(参考 Open-Llama 项目) |
| TPU 环境 | TPU + XLA + TensorFlow/JAX |
| GPU 环境 | GPU + PyTorch + Megatron-LM + DeepSpeed |
硬件条件与策略
| 条件 | 策略 |
|---|---|
| 单卡显存够 | 直接用 |
| 单卡显存不够 | Offload 到 CPU |
| 多卡显存够(模型能装进单卡) | DDP 或 ZeRO |
| 多卡显存不够 | TP 或 ZeRO 或 PP |
| 有 NVLINK | TP + PP + DP(3D 并行) |
| 无 NVLINK(穷人模式) | PP 为主,辅以 ZeRO-1 |
六、多机训练实践
常见问题与解决
| 问题 | 解决方案 |
|---|---|
| 多机训练效率不如单机 | 检查网络带宽(万兆网不够),提升至 800Gbps |
| 多机 NCCL 不通 | 配置 .deepspeed_env:NCCL_IB_DISABLE=1, NCCL_SOCKET_IFNAME=eth0 |
| DeepSpeed 找不到主机 | Hostfile 使用 IP 而非 hostname |
训练效率
- 多机训练效率与机器数成线性关系
- 多机训练的 loss 下降趋势与单机基本一致