引言:训练大模型为什么这么难
训练一个百亿参数的模型,不仅是显卡问题,更是系统工程问题。当你需要协调数百张GPU共同工作时,每一个细节都可能成为瓶颈:网络带宽、显存占用、通信开销、节点故障……本文将带你完整理解LLM训练集群的构建。
1. 硬件选型:从单机到千卡集群
GPU选择
| 型号 | 显存 | FP16算力 | 互联 | 适用规模 |
|---|---|---|---|---|
| A100 80G | 80GB | 312 TFLOPS | NVLink 600GB/s | <100B |
| H100 80G | 80GB | 1000 TFLOPS | NVLink 900GB/s | 百亿级 |
| H200 141G | 141GB | 1000 TFLOPS | NVLink 900GB/s | 千亿级 |
| B200 | 192GB | 2500 TFLOPS | NVLink 1.8TB/s | 万亿级 |
网络拓扑
对于多节点训练,InfiniBand是必选。一个标准的8卡节点配置:
- 节点内:8张GPU通过NVLink全互联(900GB/s)
- 节点间:每节点8个InfiniBand端口(每个400Gbps)
- 拓扑:Fat-Tree或Dragonfly+
2. 分布式训练策略
Data Parallel(DP)
每个GPU保存完整模型副本,处理不同数据。简单但显存浪费严重,仅适合小模型。
FSDP(Fully Sharded Data Parallel)
PyTorch原生方案,将模型参数、梯度、优化器状态全部分片到各个GPU:
from torch.distributed.fsdp import FullyShardedDataParallel as FSDP
from torch.distributed.fsdp import MixedPrecision, ShardingStrategy
mp_policy = MixedPrecision(
param_dtype=torch.bfloat16,
reduce_dtype=torch.float32,
buffer_dtype=torch.bfloat16,
)
model = FSDP(
model,
sharding_strategy=ShardingStrategy.HYBRID_SHARD,
mixed_precision=mp_policy,
auto_wrap_policy=transformer_auto_wrap_policy,
)
DeepSpeed ZeRO
微软的方案,提供更精细的优化策略:
- ZeRO-1:仅分片优化器状态
- ZeRO-2:分片优化器状态 + 梯度
- ZeRO-3:分片优化器状态 + 梯度 + 参数
- ZeRO-Infinity:CPU/NVMe Offload,能训超大模型
3D并行:Megatron-LM
真正的千亿级训练需要三种并行的组合:
- Tensor Parallel:把单层切分到多个GPU
- Pipeline Parallel:不同层放到不同GPU
- Data Parallel:不同数据批次并行
例如训练GPT-175B时的常用配置:TP=8, PP=8, DP=12,总共768张GPU。
3. 通信优化
梯度累积 + 重叠计算
通过backward + reduce_scatter重叠,隐藏70%以上的通信时间:
for step in range(grad_accum_steps):
with model.no_sync() if step < grad_accum_steps - 1 else nullcontext():
loss = model(batch)
loss.backward()
混合精度训练
BF16作为计算精度,FP32作为主权重:
- 显存占用降低50%
- 计算速度提升2倍以上
- BF16比FP16更稳定(动态范围更大)
梯度累积优化
当显存不足以支持理想batch size时,使用梯度累积模拟大batch。注意配合no_sync()避免不必要的通信。
4. 故障恢复与容错
在我们训练某70B模型的实践中,1024卡集群每周出现2-3次硬件故障,没有完善的容错机制,训练根本无法持续。
核心实践
- 定期Checkpoint:每30分钟保存一次(异步Checkpoint节省时间)
- 弹性训练:使用TorchElastic自动处理节点故障
- Loss异常告警:训练过程中Loss飙升立即告警
- NaN保护:检测到NaN自动回滚到上一个Checkpoint
5. 成本优化策略
云端 vs 自建
| 方案 | 初始投入 | 月成本(8卡H100) | 适用场景 |
|---|---|---|---|
| AWS按需 | 0 | ~$60K | 短期实验 |
| AWS预留 | 0 | ~$30K | 1年以上 |
| 自建 | ~$300K | ~$8K (电费) | 长期大规模 |
| Spot实例 | 0 | ~$15K | 容错任务 |
关键省钱技巧
- 选对实例类型:训练用H100/H200,推理可以用L40S/A10G
- 错峰使用:夜间和周末GPU便宜30%以上
- 预留 + Spot混合:基础流量用预留,弹性用Spot
- 数据本地化:跨区域传输费用惊人
6. 监控与可观测性
必备监控指标:
- GPU利用率:<90%说明有瓶颈
- 显存占用:是否触及OOM边缘
- 网络带宽:通信是否成为瓶颈
- Loss曲线:训练是否稳定
- Tokens/sec:吞吐量
推荐工具栈:Prometheus + Grafana + Wandb
结语
从单机到集群,从训练到推理,构建LLM基础设施是一项需要长期积累的工作。每一次架构决策,都在性能、成本、可靠性之间寻找平衡点。希望本文能为你的探索之路提供一份地图。