从 Bit 到 AGI第七章:训练(Training)

分布式训练概览

从 Bit 到 AGI · 第七章:训练 · 数据并行、张量并行、流水线与 ZeRO

作者 David更新于 第 110 篇(共 186 篇)

分布式训练(Distributed Training)把一次 LLM 训练拆到多张 GPU、多台机器上。7B 可单机 8 卡;70B 全参数需 张量并行 + 流水线 + ZeRO;671B MoE 需 数百–数千卡。理解三种并行维度,才能读懂集群账单与故障日志。

直觉:大工程三种分工

  • 数据并行(DP):每人拿不同 batch,算完梯度平均——像 8 人各改 8 份作业,最后对答案。
  • 张量并行(TP):一层矩阵切成 8 块,各卡算一块——像一行方程 8 人各算几个未知数。
  • 流水线并行(PP):模型按层切,卡 0 算 1–10 层,卡 1 算 11–20 层——像工厂流水线。
图表加载中…

定义

策略切什么通信典型用途
DDP数据all-reduce 梯度7B 以下多卡
FSDP / ZeRO-2/3数据 + 分片 optimizer/权重reduce-scatter7B–70B 省显存
TP单层权重all-reduce / all-gather单层太大
PP层序列P2P 激活层数多、跨节点
EPMoE 专家all-to-allMoE 专用

3D 并行(Megatron-DeepSpeed):TP × PP × DP,例如 70B 用 TP=8, PP=4, DP=16 → 512 GPU。

例子 1:7B 预训练 1T token,512 GPU

配置数值
并行DP=512(无 TP/PP,7B 单层可单卡)
每卡 micro8192 token
全局 batch512 × 8192 ≈ 4.2M token/step
总 steps1T / 4.2M ≈ 238k
每 step 时间~1.2 s(含 all-reduce)
墙钟238k × 1.2s ≈ 79 小时 ≈ 3.3 天
总 GPU·小时512 × 79 ≈ 40,400

与单卡粗算 ~29k GPU·小时 比,多卡有 ~30% 通信 overhead——正常。

例子 2:70B 全参数 SFT,64× A100 80GB

配置数值
ZeRO-3 + TP=4 + PP=264 GPU
可训练 token batch~512k / step
500M token SFT~977 steps
每 step~8–15 s
墙钟~2–4 小时
GPU·小时~128–256

同数据 LoRA 7B 单卡:~6 GPU·小时——分布式是为全参大模型服务。

量化:通信瓶颈

互联带宽适合
NVLink 4.0~900 GB/s单节点 TP
InfiniBand HDR~200 Gb/s跨节点 DP/PP
以太网 25G~3 GB/s小模型 DP 勉强

TP 不要跨节点(延迟敏感);DP 可跨节点(all-reduce 可重叠计算)。

MoE Expert Parallel:token 路由到不同卡的专家,all-to-all 通信量 ∝ batch × hidden × top-k;DeepSeek-V3 训练需专门优化网络。

深入:弱扩展与故障恢复

Weak scaling:GPU 512→1024,ideal 墙钟减半;实际 often 1.3–1.5× 加速,因 all-reduce 占比上升。7B 1T token 在 512 GPU ~3.3 天,1024 GPU ~2.5 天 而非 1.65 天——规划 deadline 要留 30% slack。

故障:大 job MTBF 可能 每 48–72 小时 一卡坏。无 checkpoint 则丢整 job;有每 2000 step 存盘,最多丢 8B token ≈ 323 GPU·小时(512 卡)。Elastic training(torchrun max_restarts)+ 共享 filesystem checkpoint 是标配。

小团队 8 卡复现 7B 预训练 不现实 1T,但可 复现 10B token 验证 mix 与 hyperparam:10B / 4M = 2500 step,8 卡 ~2–3 天 / ~500 GPU·小时——足够看 loss 曲线是否与健康 1T run 同形。再决定是否砸 29k GPU·小时 全量。

TP 切分 attention 头:7B hidden=4096、head=32 时 TP=8 每卡 4 heads——实现复杂,7B 通常 不需要 TP;70B hidden=8192 则 TP=8 几乎必须。先 DP+ZeRO,OOM 再加 TP,最后 PP——这是 DeepSpeed 文档的推荐顺序。

动手试一试:DDP 最小例

import torch
import torch.distributed as dist
from torch.nn.parallel import DistributedDataParallel as DDP

def setup():
    dist.init_process_group("nccl")
    torch.cuda.set_device(int(os.environ["LOCAL_RANK"]))

# 每 rank 不同数据,梯度自动 all-reduce
model = DDP(model, device_ids=[local_rank])
loss = model(batch_local).loss
loss.backward()  # grad 已同步
optimizer.step()

生产用 torchrun --nproc_per_node=8 train.py 或 DeepSpeed deepspeed --num_gpus=8。

常见误区

  1. 「GPU 越多一定越快」 — 通信主导时 weak scaling 变差;512→1024 卡可能只快 1.3×。
  2. 「ZeRO 和 TP 二选一」 — 70B+ 常组合;ZeRO 省显存,TP 降单卡内存峰值。
  3. 「分布式 = 高可用」 — 一卡挂掉常整 job 停;需 torch elastic + 频繁 checkpoint。

小结

分布式 = DP / TP / PP / ZeRO / EP 组合;7B×1T 用 512 GPU DP 约 3 天 / 40k GPU·小时;70B SFT 64 卡 ~128–256 GPU·小时。第九章 GPU 章 补硬件视角。

下一篇:评估指标——loss 之外看什么。

延伸:Ring-AllReduce 与 pipeline bubble

Ring-AllReduce 是 DDP 梯度同步经典算法:N 卡通信量 与 N 无关(近似),适合 多机 DP。Pipeline Parallel 有 bubble(流水线空泡):micro-batch 数 mm 应 ≥ PP stages × 2 才填满,否则 GPU 空闲——70B PP=8 时常设 micro=32+,每 step 实际 forward 32× seq token,调 accum 时要计入。7B 纯 DP 无 bubble 问题。Cloud 跨 AZ 训练 带宽骤降,512 GPU job 可能 MFU 从 40% 跌到 15%——1T token 墙钟 ×2.5,多 ~44k GPU·小时 等价 waste;大 job 应用 同 AZ 集群 + RDMA。

本页目录