训练基础模型需要协调成百上千块 GPU 并行工作。本文介绍大规模分布式训练所需的基础设施、技术和实践步骤。
如何用大规模 GPU 集群训练基础模型?
什么是多节点 GPU 训练?
多节点训练把模型训练分布到多台机器(节点)上,每台机器配有多块 GPU。你不再只在一台 8 卡服务器上训练,而是把几十个乃至上百个节点连接在一起,从而能在合理的时间内训练出拥有数十亿参数的模型。这涉及使用数据并行、张量并行与流水线模型并行以及参数分片等并行策略,将模型和数据划分到各块 GPU 上,同时通过 NVLink 和 InfiniBand 这类高速互连来协调执行。
多节点训练为何重要
基础模型的参数规模已从数十亿增长到数万亿。在单个节点上训练这类模型是不可能的:模型装不进内存,训练也要耗上数月。多节点集群可以把训练时间从数月压缩到数天或数周,加快迭代周期并缩短上市时间。
转向分布式训练还意味着基础设施变得至关重要。糟糕的网络配置可能把 GPU 利用率卡在 40-50%;而在 100 个节点的集群中,硬件故障会变成常态事件,你必须在不丢失训练进度的前提下处理它们。分布式训练做得好不好,决定了你的模型能否成功训练,还是白白烧掉算力预算却毫无成果。
分布式训练如何运作
- 并行策略把工作拆分到各块 GPU 上。数据并行在每块 GPU 上复制完整模型,并把批次分给它们,简单但受限于内存。模型并行把模型本身拆分到多块 GPU 上,可以支持更大的模型,但需要精心协调。流水线并行把模型的层划分为多个阶段,让不同批次同时在不同阶段处理。大多数生产训练会把这几种方式结合使用。
- 网络互连负责在 GPU 之间传输梯度和激活值。在节点内部,NVLink 在 GPU 之间提供 900 GB/s 的带宽。在节点之间,InfiniBand 或 RoCE 网络通常为每个节点提供 400-800 Gb/s。网络延迟和带宽直接影响训练速度,网络开销每多一个百分点,就意味着损失一个百分点的 GPU 利用率。
- 检查点与容错会定期保存训练状态。在 100 个节点的集群中,硬件故障每天都会发生。每隔几百步向分布式存储写一次检查点,就能从最近一次保存点恢复。现代框架只需很少的代码就能支持自动保存检查点和恢复。
多节点训练能做什么
- 训练单节点装不下的模型:一个 70B 参数的模型,在混合精度下仅权重就需要约 140GB。再加上优化器状态和激活值,就需要 400-600GB,远超单节点容量。
- 把训练时间从数月缩短到数天:经过适当调优,从 8 块 GPU 扩展到 128 块 GPU 可带来 12-15 倍的加速。一次在单节点上需要 30 天的训练,在集群上 2-3 天即可完成。
- 更快地迭代模型架构:训练周期更短意味着可以做更多实验。无需等上数周才出结果,就能测试不同的架构、超参数或数据配比。
- 处理生产规模的数据集:加载和预处理 TB 级的训练数据需要分布式 I/O。配备并行存储的多节点集群,能够维持让 GPU 持续有数据可吃所需的吞吐量。
生产案例:训练 Qwen2.5-72B
在 B300 GPU 集群上训练 72B 参数模型,是分布式训练的真实写照。使用 16 个节点,每个节点 8 块 B300 GPU(共 128 块 GPU):
- 使用张量并行(TP=8)和流水线并行(PP=2)将模型分布到各 GPU 上。最优配置会因序列长度、批大小和互连性能而异。
- 经过适当的网络调优,达到 45-50% 的 MFU(模型 FLOPs 利用率)
- InfiniBand RDMA 在节点之间提供 6.4 TB/s 的聚合带宽
- 每 500 步向分布式存储写一次检查点
- 训练吞吐量:约 2,500 token/秒/GPU
常见问题包括:个别 GPU 上的 PCIe 总线错误导致节点掉线,NVLink 连接故障需要重置 GPU,以及梯度同步期间的网络拥塞需要调整交换机配置。
多节点训练入门
- 验证你的基础设施:使用
nvidia-smi nvlink状态检查和带宽测试,测试节点内 GPU 到 GPU 的带宽。使用ib_write_bw或类似工具验证节点间的网络吞吐量。开始训练之前,确保达到预期带宽。 - 配置你的分布式框架:为训练脚本设置正确的分布式初始化。以 PyTorch 为例:初始化进程组,设置用于 GPU 通信的 NCCL 后端,并在模型中配置张量/流水线并行。先用小模型测试。
- 实现检查点:配置向分布式存储自动写检查点,间隔由迭代时间和集群可靠性决定,在恢复时间与检查点开销之间取得平衡。测试从检查点恢复,确认故障后能在不丢失数据的情况下恢复。设置检查点清理,避免存储被占满。
- 运行扩展性测试:从 2 个节点开始,测量吞吐量和 GPU 利用率。然后扩展到 4、8、16 个节点,每一步都检查效率。目标是扩展效率 >80%(节点数翻倍应带来 >1.6 倍的加速)。在全规模训练之前先排查瓶颈。
- 监控你的训练任务:持续跟踪 GPU 利用率、内存使用和网络带宽。为节点故障、GPU 错误或指标异常下降设置告警。硬件出故障时,随时准备从检查点重启。
常见问题
如何判断我的集群配置是否正确?训练前先运行合成基准测试。节点内 GPU 带宽在 NVLink 上应达到 800+ GB/s。节点间带宽应达到 InfiniBand 规格的 80% 以上。如果实际训练显示 GPU 利用率 <70% 却没有明显的瓶颈,请检查网络配置和存储 I/O。
多节点训练中大多数故障的成因是什么?
- 硬件问题:GPU 内存错误、GPU 掉出总线(fell off the bus)、ECC 和 XID 错误、PCIe 总线故障、NVLink 掉线、GPU 温度/降频
- 网络问题:拥塞、交换机配置错误、RDMA 问题
- 存储问题:InfiniBand 连接问题、挂载和 MTU 配置错误、检查点写入超时、元数据服务器过载、磁盘故障
- 软件问题:驱动、VBIOS、固件不兼容,NCCL 配置错误
应该用数据并行还是模型并行?对于能装进单 GPU 内存的模型,从数据并行开始:它更简单,扩展性也好。当模型超出 GPU 内存时,使用张量/流水线并行。对于超大模型,两者结合:节点内用模型并行,节点间用数据并行。
