大模型训练跑到几百张GPU规模时,硬件故障不是意外,是常态——一块显存出错、一次网络抖动,都可能让跑了几天的训练任务被迫重启。AMD联合PyTorch社区把单控制器分布式训练框架Monarch搬上了ROCm 7.0+,并拉上TorchFT(故障容错)和TorchTitan(训练引擎),在最多256张MI355GPU的集群上跑通了一套局部故障隔离、自动恢复的训练方案。故障发生时,出问题的那一组GPU自己重启、找健康的同伴要一份最新状态,其余节点照常训练,不用整体停下来等。

这套局部容错的逻辑,在CUDA阵营的Monarch上已经验证过。这次的实质进展,是ROCm软件栈证明自己也扛得住同样复杂的容错编排——这对长期被质疑"训练大模型工具链不如CUDA齐整"的AMD来说,是一块具体的短板补齐,而不是又多了一个训练脚本工具。

局部隔离恢复,比"整任务重启"省在哪

传统做法靠定期存checkpoint:训练一段时间就把模型状态写盘,出故障就全部重启,从最近一次存档接着跑。集群规模越大,出故障概率越高,每次重启意味着全体GPU陪着等,浪费的算力随规模线性增长。

Monarch的设计不同:每个训练副本是独立的actor,出故障只影响自己,其余副本不受影响、不停机。故障副本本地重启后,从存活的同伴副本那里拉取一份模型、优化器和调度器状态,重新加入协同——过程里确实还是有一次"同伴状态传输",只是省掉了全局checkpoint重载和整任务重启这两步。

两种故障应对方式 传统方式:全局重启 定期写全量checkpoint 一处故障,整任务重启 全体节点陪着空转等待 规模越大,重启越频繁 Monarch方式:局部隔离 故障副本本地重启 健康副本continue,不停机 从同伴副本拉取最新状态 恢复完成,重新加入quorum

具体的恢复流程分五步:Monarch负责编排进程和集群拓扑,四个副本各自跑一份TorchTitan训练任务;一旦某个GPU进程崩溃,Lighthouse服务捕获错误并通知TorchFT,健康副本继续按原有节奏做梯度同步;故障副本本地重启进程网格;系统挑一个存活副本当"donor",把模型、优化器、调度器状态传给它;同步完成后,新的quorum成立,四个副本重新一起训练。

故障恢复五步流程 4副本正常 训练同步 GPU崩溃 Lighthouse检测 健康副本 继续训练 故障副本 本地重启 同伴状态 传输后合流
故障隔离能省停机时间,但省不省钱,AMD还没给出答案。

工程上,这次迁移的关键是通过hipify_torch把CUDA代码转成HIP,链接RCCL替代NCCL,并在Rust层写了一个兼容模块,让HIP类型直接映射成CUDA同名类型,避免到处加条件分支。全部1171项测试通过,官方要求ROCm 7.0+才能跑完整功能。


谁该关注,谁还不必急着换赛道

验证做了两组:一组是16节点、128张MI300GPU的SLURM集群,跑Llama 3 8B,每180秒主动注入一次RCCL故障;另一组是32节点、256张MI355GPU的Kubernetes集群,规模更大但官方没公开故障注入的具体频率。

项目SLURM/MI300实验Kubernetes/MI355实验
GPU规模128张(16节点)256张(32节点)
训练任务Llama 3 8B未点名具体模型
故障机制每180秒注入一次RCCL故障未披露具体注入频率
存活参与者在8-16之间波动稳定在30-32之间
Loss表现与无故障基线基本一致从12平滑收敛到约4

这两组实验都是主动注入故障验证系统行为,不是生产环境里的真实故障;官方没有给出恢复耗时、吞吐损失或成本节省的具体数字,"训练更稳"目前更接近工程验证,还不是可以直接拿来做成本核算的结论。

  • 风险.目前的数据只证明系统能跑,没有证明它比传统checkpoint重启更省钱或更快,选型时不能直接套用官方叙述。

对已经在用AMD Instinct集群做大规模训练的平台团队,这是个值得评估接入的信号——至少多了一条局部容错的路径,不用每次故障都全局重启。但对还在CUDA和AMD之间做选型的团队,这次的验证更多说明ROCm"补上了一课",软件成熟度、实际吞吐和运维成本上是否追平CUDA生态,还需要更多独立于官方博客的数据来验证。