训练一个大型AI模型与运行普通服务器程序有一个非常重要的区别:任务可能需要持续运行数天、数周甚至更长时间,而且一次训练通常涉及大量GPU同时参与计算。只要其中一个关键节点发生故障,就可能导致整个分布式训练作业停止。随着GPU数量增加,单个组件的可靠性会越来越难以直接代表整个集群的可靠性,因此Checkpoint、故障检测、作业恢复、网络冗余以及故障隔离逐渐成为AI基础设施不可缺少的组成部分。
需要注意的是,大规模集群的故障风险并不是简单的“呈指数级增长”。如果假设每个独立组件在某段时间内发生故障的概率为p,那么拥有N个组件时,至少一个组件发生故障的概率可以用1−(1−p)^N表示。在p较小的情况下,这个概率近似与N×p相关。因此,GPU、NIC、交换机、光模块、存储设备以及电源系统数量越多,整个系统在长时间运行窗口内遇到至少一次故障的机会就越高。对于需要连续运行很长时间的训练任务,时间因素同样重要。
一、为什么几千块GPU会放大普通硬件故障的影响
假设一个训练作业使用数千块GPU,每块GPU、网络设备和服务器节点都具有一定的瞬时故障概率。单个GPU可能非常可靠,但训练作业关心的不是“某一块GPU一年会不会坏”,而是“整个训练作业在连续运行数天以后是否能够不发生影响任务的故障”。
分布式训练进一步放大了这个问题。数据并行训练通常需要多个GPU周期性地交换梯度或其他状态信息,例如通过AllReduce完成梯度聚合。如果某个参与者在集体通信过程中失效,其他GPU可能无法继续完成当前通信操作。于是,一个局部GPU故障就可能从单节点问题变成整个训练作业的问题。
这也是为什么大型AI集群的可靠性不能只依靠更换更可靠的GPU。系统必须假设故障迟早会发生,然后设计在故障发生以后如何检测、停止、恢复和继续训练。
二、Checkpoint是训练容错最基础的机制
最常见的训练容错方法是周期性保存Checkpoint。Checkpoint通常不仅包含模型参数,还可能包括优化器状态、学习率调度器状态、训练步数以及随机数状态等。对于大型模型,优化器状态可能占用大量存储空间,因此Checkpoint本身也是一个需要认真设计的基础设施问题。
假设一个训练任务已经运行了10小时,在第9小时50分钟发生节点故障。如果最近一次Checkpoint是在第9小时40分钟,那么恢复以后最多只需要重新计算这一段时间的训练进度,而不是从头开始。
Checkpoint间隔存在明显的工程权衡。保存得过于频繁,会增加GPU训练之外的I/O、网络和存储压力;保存得过于稀疏,则意味着发生故障以后需要重新计算更多训练步骤。合理的Checkpoint策略应该根据训练速度、作业规模、故障率、Checkpoint大小、存储带宽以及允许的恢复时间确定,而不能简单规定一个固定的“每隔多少分钟保存一次”。
对于大规模训练,Checkpoint写入本身也可能成为系统瓶颈。如果数千个GPU同时向共享存储系统写入巨量状态,存储系统可能受到瞬时压力。因此实际系统经常需要采用分层Checkpoint、异步写入、分布式存储或者专门的Checkpoint管理机制,把训练计算和状态保存之间的相互影响降到合理范围。
三、恢复训练比保存Checkpoint更加复杂
有了Checkpoint并不意味着系统就真正具备容错能力。恢复时必须保证模型状态和训练状态一致。
例如,模型参数已经保存到某个Checkpoint,但优化器状态没有完整保存,恢复后虽然模型能够继续计算,训练轨迹却可能发生变化。对于Adam等优化器来说,动量和二阶统计量等状态本身就是训练状态的重要组成部分。因此,恢复设计必须明确哪些状态属于必须保存的持久化状态。
分布式训练还涉及数据读取位置。如果恢复以后重新使用完全不同的数据顺序,可能影响训练过程。因此数据加载器、随机数种子、训练step以及数据分片状态,都可能需要纳入恢复机制。
不同训练框架在容错方面提供的能力也不同。PyTorch本身提供Checkpoint机制以及Torch Distributed等分布式训练组件,但DistributedSampler主要负责数据分片和采样,并不等于一个完整的故障容错系统。AllReduce同样是分布式通信原语,而不是“某个GPU失效以后自动继续训练”的机制。真正的故障恢复通常还需要训练框架、作业调度系统、集群管理系统以及Checkpoint机制共同配合。
四、GPU之间的高速互联为什么影响故障处理
大型AI服务器通常需要GPU之间进行高速通信。NVIDIA平台可能使用NVLink、NVSwitch等GPU互联技术,而跨服务器通信则通常依赖高速网络,例如InfiniBand或基于RoCE的以太网。
这里需要区分计算互联和数据中心网络。NVLink发生故障,并不意味着整个网络可以像普通IP路由那样简单地重新选择一条备用路径。具体的故障处理能力取决于GPU拓扑、交换结构、通信库、硬件平台以及训练框架。
跨服务器的网络则可以通过多路径、链路冗余、交换机冗余以及路由机制提高可用性。对于RoCEv2环境,还需要关注拥塞控制、ECN、PFC、队列管理以及网络拓扑。对于InfiniBand环境,则有其自身的链路管理、路由和故障处理机制。
因此,大规模AI集群的网络容错不是简单地“准备一条备用网线”。训练通信通常具有极高的带宽和同步要求,网络中的丢包、拥塞、链路抖动甚至交换机异常,都可能表现为训练吞吐量下降或者集体通信阻塞。
五、真正困难的是静默错误而不是明显掉电
服务器直接断电比较容易发现,因为节点会从集群中消失。更加危险的是Silent Data Corruption,也就是计算结果发生错误,但系统没有立即报告硬件故障。
GPU计算、HBM显存、PCIe、网络以及存储系统都存在数据完整性问题需要考虑。现代服务器硬件通常已经提供ECC等错误检测和纠正机制,部分错误能够被硬件自动修正,并通过系统日志报告;无法纠正的错误则可能导致GPU或节点被标记为异常。
因此,大型AI基础设施需要监控GPU错误计数、ECC事件、Xid等GPU相关错误信息,以及PCIe、网络、存储和主机系统日志。对于训练任务,还可以通过Loss异常、梯度异常或者检查点校验发现部分更高层次的问题。
这与“在FP16和FP32之间传输就容易产生精度错误”是两个不同的问题。混合精度训练本身是经过专门设计的计算策略,FP16、BF16和FP32之间的数据转换不应被简单描述为网络传输错误。真正需要解决的是数值稳定性、梯度下溢或溢出以及通信和计算过程中的数据完整性问题。
六、MIG并不是通用的AI训练容错方案
NVIDIA MIG可以把支持的GPU划分为多个隔离的GPU实例,使不同工作负载能够共享一块物理GPU的计算资源和显存资源。它主要解决的是资源隔离和多租户利用率问题,而不是为大型分布式训练提供通用的节点级故障容错。
如果训练任务使用MIG实例,那么资源容量、显存带宽以及GPU计算资源都会受到实例配置影响,但不能简单地说“实例之间互相干扰导致训练变慢”。MIG的设计目标恰恰包括对资源进行硬件级隔离。实际性能仍然取决于GPU型号、MIG配置、工作负载以及通信模式。
对于需要完整GPU资源的大型训练任务,是否使用MIG应该根据调度和资源利用需求决定,而不是把MIG作为容错技术使用。
七、故障以后能不能直接把训练任务迁移到另一台机器
这是AI集群容错中非常容易被误解的地方。普通无状态Web服务可以把请求转移到另一台服务器,但训练任务具有大量运行中的状态。GPU显存中的模型参数、激活值、梯度以及优化器状态都可能属于当前计算过程的一部分。
因此,当一台GPU服务器突然失效时,系统通常不能简单地把“正在运行的任务”原封不动迁移到另一台服务器。更常见的恢复方式是由作业调度系统重新获得资源,然后从最近的Checkpoint重新启动训练。
是否能够做到更细粒度的故障恢复,则取决于训练框架和容错设计。例如某些弹性训练机制允许训练集群在参与者数量发生变化以后重新组织训练,但这需要训练算法本身支持,并不是所有模型和训练程序都可以无缝实现。
八、故障检测和资源调度必须形成闭环
真正的大规模AI集群通常需要多个层次的监控。GPU层负责发现显存ECC错误、GPU异常以及温度和功耗等问题;服务器层负责监控CPU、内存、PCIe、磁盘和电源;网络层负责监控链路、交换机、端口错误、拥塞和丢包;调度系统则负责判断节点是否应该继续接受新的训练任务。
一旦节点被判断为异常,调度器可以将其标记为不可用,避免新的训练任务继续部署到问题节点。对于正在运行的训练任务,则根据任务的Checkpoint和恢复策略重新安排资源。
这种机制的意义在于把“硬件坏了以后人工排查”变成自动化故障隔离。对于拥有数千甚至数万GPU的集群,如果每一次故障都需要管理员手工寻找机器、停止任务、重新配置环境和恢复训练,运维成本会迅速增加。
九、容错能力最终要用训练成本来衡量
容错机制本身也需要消耗资源。Checkpoint需要存储容量和I/O带宽,冗余网络和交换设备增加硬件成本,故障监控需要大量日志和指标,频繁保存状态还可能降低训练吞吐量。
因此,工程设计的目标并不是让系统做到绝对不会失败,而是在故障概率、恢复时间、计算损失和基础设施成本之间找到合理平衡。
一个非常重要的指标是Mean Time To Recovery,也就是平均恢复时间。对于大型训练任务而言,降低恢复时间有时比单纯降低故障发生概率更加经济。例如系统无法完全避免GPU或网络设备故障,但如果可以在较短时间内发现问题,并从最近Checkpoint自动恢复,那么一次硬件故障造成的计算损失就可以控制在较小范围。
与此同时,还应该关注Mean Time Between Failures以及单个训练作业的有效运行时间。对于一个需要连续运行数周的训练任务,即使单个节点非常可靠,也不能忽略整个集群在如此长时间窗口内发生故障的概率。
大规模AI训练的容错,本质上是一项跨越GPU、服务器、网络、存储、训练框架和调度系统的系统工程。随着GPU数量增加,问题并不是简单地变成“GPU越多越容易坏”,而是组件数量、运行时间和分布式同步机制共同提高了单次故障对整个训练作业的影响。
因此,一个成熟的AI训练平台应该默认故障最终会发生,并围绕故障检测、故障隔离、Checkpoint、状态恢复、资源重新调度和训练一致性建立完整机制。对于真正的大规模训练集群,可靠性并不意味着所有硬件永远正常,而是即使某个GPU、服务器、网络链路或者其他基础设施出现故障,整个训练系统仍然能够以可控的计算损失恢复运行。这种能力最终决定了昂贵GPU集群究竟能有多少时间真正用于有效训练。
AI 训练为什么需要容错机制,大规模 GPU 集群中的故障概率如何影响架构设计
图片说明:示意图 图片来源:Public Domain(公有领域)
喜欢这篇报道?
使用下面的功能,方便以后继续阅读和分享 MNewsTV
关于文章收藏
收藏不需要注册帐号,收藏信息仅保存在当前浏览器中。
删除收藏请进入「我的收藏」进行管理。
捐助(Paypal): https://www.paypal.me/observeccp 订阅中国观察电报 Telegram : https://t.me/s/ObserveCCP