在大型语言模型(LLM)训练进入万亿参数时代,单一 GPU 内存已无法承载模型权重与激活值,分布式模型并行成为必然。NVIDIA 的 Megatron-LM 框架通过张量并行(Tensor Parallelism, TP)、流水线并行(Pipeline Parallelism, PP)与数据并行(Data Parallelism, DP)的 3D 混合策略,实现了在数千 H100 GPU 上高效训练 462B 参数模型,MFU 高达 47%。本文聚焦工程化实现,剖析核心机制、配置参数与落地清单,帮助 ML 工程师快速上手大规模 Transformer 训练。
张量并行(TP):处理宽层模型的核心
TP 将 Transformer 单层的权重矩阵(如注意力 QKV 投影、MLP 前馈)拆分到多个 GPU 上,每个 GPU 仅计算局部 shard,避免单卡内存爆炸。Megatron-LM 采用 column-parallel 和 row-parallel 线性层实现:
- Column-parallel Linear:输入 X(B, H)乘权重 W(H, 4H)时,将 W 按列拆分到 TP_size 个 GPU,每个 GPU 计算 Y_i = X * W_i(输出 B, 4H/TP_size),前向仅需 all-gather 合并。
- Row-parallel Linear:后续投影 Z = Y * V(V 按行拆分),每个 GPU 计算局部 Z_i,后向需 all-reduce 求和。
注意力机制中,Q/K/V 投影 column-parallel(头数按 TP 拆分),输出投影 row-parallel。这种设计确保每个 Transformer block 仅 2 次集体通信(all-gather + all-reduce),极大降低开销。
工程参数建议:
- TP_size:优先 2/4/8,必须整除注意力头数与 MLP hidden_size。宽模型(如 hidden_size>8192)用 8;窄模型用 4。
- 拓扑映射:TP 组限于单节点内 NVLink/NVSwitch,避免跨节点 all-reduce 延迟。
- 内存节省:TP 减小每卡参数量约 1/TP_size,但激活需通信合并,结合 FP8/BF16 进一步压缩。
证据显示,在 6144 H100 上,TP=8 的 462B 模型训练稳定 MFU 47%,“Our codebase efficiently trains models from 2B to 462B parameters across thousands of GPUs, achieving up to 47% Model FLOP Utilization (MFU) on H100 clusters.”(来源:Megatron-LM GitHub)。
流水线并行(PP):征服深层模型的利器
PP 将模型层栈分为 P 个连续 stage,每个 stage(含多层)置于 TP 组上,microbatch 沿 stage 流水前进 / 后向重叠(1F1B 调度),隐藏 bubble。
- Microbatch 调度:全局 batch 拆为 M 个 microbatch,M >> P 以填充 pipeline。Bubble 比例≈(P-1)/M。
- 激活传递:仅 stage 边界激活 send/recv,点对点通信容忍跨节点延迟。
工程参数建议:
- PP_size:层数 / 每 stage 层数,目标每 stage FLOPs 均衡(注意力层≈FFN 层 1.3 倍 FLOPs)。深模型(>100 层)用 16-32。
- Microbatch_size:每 GPU 1-4 seq(视 seq_len=4096),global_batch = microbatch * M * DP_size * TP_size * PP_size。
- 内存优化:激活 checkpointing(--checkpoint-activations),每 stage 内存减半,但重算代价≈20% 额外 FLOPs。
PP 跨节点映射优选环形拓扑(ring all-reduce 备选),与 TP 互补。
3D 混合并行:万亿参数的黄金配置
3D 策略下,总 GPU 数 = TP_size × PP_size × DP_size。设计原则:TP 控宽(intra-node)、PP 控深(inter-node)、DP 提吞吐(跨 rack,ZeRO 分片)。
示例配置(1024 H100,~1T 参数):
| 维度 | 大小 | 作用 | 通信范围 |
|---|---|---|---|
| TP | 8 | 层内 shard | 单节点 NVLink |
| PP | 16 | 层间流水 | 跨节点 InfiniBand |
| DP | 8 | 数据复制 | ZeRO-3 全分片 |
启动命令模板(Megatron-LM examples/pretrain_gpt.sh):
mpirun -np 1024 \
python pretrain_gpt.py \
--num-layers 128 --hidden-size 16384 --num-attention-heads 128 \
--tensor-model-parallel-size 8 \
--pipeline-model-parallel-size 16 \
--data-parallel-size 8 \
--micro-batch-size 1 --global-batch-size 1024 \
--seq-len 4096 \
--fp16 --activation-checkpointing \
--zero-stage 3 # ZeRO via DeepSpeed集成
性能调优清单:
- MFU 监控:目标 > 45%。低则检查:matmul 太小(TP 过大)、bubble 大(M<P*2)、net 饱和(nvidia-smi -q -d UTILIZATION)。
- 内存阈值:<85% GPU mem。OOM 时:减 microbatch、增 checkpoint、用 FP8(--fp8)。
- 通信重叠:--overlap-grad-reduce --tp-comm-overlap,默认 PP 重叠。
- 容错:--checkpoint-interval 1000 steps,分布式 checkpoint reshaping 支持 TP/PP 变更。
- 扩展性:弱 scaling(增模型 / GPU)MFU 升至 48%;强 scaling(定 batch 增 GPU)MFU 降至 42%,DP 主导。
常见陷阱与回滚:
- TP 不整除维度→padding 浪费,fallback TP=4。
- PP 不均衡→慢 stage 瓶颈,用 profiler(nsys)定位,重分 stage。
- 大 DP 下 ZeRO 通信峰值高,监控 p2p throughput,回滚小 DP + 大 global-batch accumulation。
MoE 扩展:加 EP_size,专家路由负载均衡 < 1.2 倍方差。
通过以上参数与策略,Megatron-LM 将万亿训练从概念落地生产。实际部署前,基准小规模(TP=1,PP=1)验证 config,再线性扩展。
资料来源:
(正文约 1250 字)