外观
大模型分布式训练全景解析
内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。
1. 训练大语言模型面临哪些问题?
训练大语言模型存在两大核心问题:
| 问题 | 说明 |
|---|---|
| 显存不够 | 175B参数的GPT-3需700GB参数 + 700GB梯度 + 1400GB优化器状态 = 2.8TB显存 |
| 计算太慢 | 用A100训练175B的GPT-3约需288年 |
2. 什么是点对点通信与集体通信?
| 通信方式 | 原理 | 优缺点 |
|---|---|---|
| 点对点通信 | 一个进程发送,一个进程接收 | 速度快、成本低 |
| 集体通信 | 多个进程发送,多个进程接收 | 速度慢、成本高 |
3. 什么是数据并行(Data Parallelism)?
将数据集切分为多份,每张GPU分配不同数据,每个进程拥有完整模型副本。
关键:保证所有GPU上的模型参数一致
- 初始化时同步模型参数(0号卡广播到其他卡)
- 反向传播后、优化器更新前,插入reduce通信规约梯度
相同初始化 + 相同梯度 → 相同模型参数
数据并行提升效率的方法
| 方法 | 说明 |
|---|---|
| 梯度分桶 | 集体通信在大张量上比小张量效率更高 |
| 计算与通信重叠 | 同桶内梯度计算完后即可开始通信 |
| 跳过梯度同步 | 梯度累加,减少通信频次 |
4. 什么是流水线并行(Pipeline Parallelism)?
层间划分,将不同层放到不同GPU上。如前3层在0号卡,后3层在1号卡。
5. 什么是张量并行(Tensor Parallelism)?
层内划分,切分一个独立的层到不同GPU上。对权重矩阵A分块,分为行并行和列并行。0号卡和1号卡分别计算某层的不同部分。
6. 三种并行方式对比
| 维度 | 数据并行 | 张量并行 | 流水线并行 |
|---|---|---|---|
| 显存效率 | 最低(每卡存完整模型) | 最高(成比例减少) | 中等(单卡显存随 PP 度下降) |
| 通信效率 | 中等 | 最低(频繁通信) | 最高(P2P通信) |
| 实现难度 | 最简单 | 最难(依赖模型结构) | 中等 |
显存效率排名: 张量并行 > 流水线并行 > 数据并行 通信效率排名: 流水线并行 > 数据并行 > 张量并行
7. 什么是3D并行?
3D并行 = 数据并行 + 张量并行 + 流水线并行。例如:4路TP + 4路PP + 2路DP = 32个workers。
参考: Megatron-Turing NLG 530B使用了3D并行方案。
8. 单卡/多卡/显存不足场景的策略选择
| 场景 | 策略 |
|---|---|
| 1张卡显存够 | 直接训练,nB模型微调需20nGB+显存 |
| N张卡显存够 | 数据并行(DP)加速 |
| 显存不够装完整模型 | 流水线并行(PP)分层加载 |
| PP推理时GPU空转 | 引入micro-batch流水线 |
| 超大模型预训练 | 3D并行(DP+TP+PP)不可或缺 |
9. 为什么有了ZeRO还需要3D并行?
| 考量 | 说明 |
|---|---|
| ZeRO的局限 | 张量并行虽更省显存,但通信量太高,只能限于节点内(需NVLink) |
| 大规模场景 | 千卡级别时,ZeRO-3明显不如3D并行(Megatron-LM2论文) |
| TP节点间 | 节点间TP会让GPU利用率低至5% |
10. 平民能否使用3D并行或ZeRO-3?
| 方案 | 适用性 | 原因 |
|---|---|---|
| 3D并行 | 不适合 | 需NVLink超高速连接 + 400Gb/s节点间网络 |
| 多机ZeRO-3 | 不适合 | 65B模型Zero3每步通信量195GB,万兆网下每步156s |
平民建议: 主要靠PP,再尝试ZeRO-1。没有NVLink且万兆网的情况下,TP和DP都受限。
11. 显存优化技术一览
| 技术 | 说明 |
|---|---|
| 重计算(Activation Checkpointing) | 用时间换空间,反向时重算前向结果 |
| 卸载(Offload) | 参数/激活在CPU和GPU间搬运,如ZeRO-Offload、ZeRO-Infinity |
| 混合精度(BF16/FP16) | 降低显存消耗,训练速度提升2-4倍 |
BF16 vs FP16: BF16计算时不易溢出;FP16输入数据超过65506时溢出产生Inf。
12. 常见分布式训练框架分类
| 类别 | 框架 | 说明 |
|---|---|---|
| 框架自带 | PyTorch DDP、TensorFlow等 | 框架内置分布式功能 |
| 框架扩展 | Megatron-LM(TP)、DeepSpeed(ZeRO)、Colossal-AI(高维MP)、Alpa(自动并行) | 基于PyTorch等扩展 |
13. 并行化策略选择指南
| 场景 | 推荐策略 |
|---|---|
| 单GPU显存够 | 直接用 |
| 单GPU显存不够 | offload到CPU |
| 单节点多卡显存够 | DDP或ZeRO |
| 单节点多卡显存不够 | TP或ZeRO或PP |
| 多节点通信快 | ZeRO或3D并行 |
| 多节点通信慢+显存少 | DP+PP+TP+ZeRO-1 |
7B级模型建议: 直接用DeepSpeed ZeRO,参考open-llama项目,无需3D并行。
14. 多机训练实践问题
| 问题 | 解决方法 |
|---|---|
| 多机训练比单机慢 | 网络带宽不足,调整带宽(如64Gps→800Gps) |
| deepspeed找不到主机 | Hostfile中使用IP而非hostname |
| 多机间NCCL不通 | 设置 NCCL_IB_DISABLE=1、NCCL_SOCKET_IFNAME=eth0、NCCL_P2P_DISABLE=1 |
结论: 多机训练效率与机器数成线性关系;ChatGLM在V100推理耗时比A800高约40%。