Skip to content

核心概念 ​

训练可靠性工程有一套自己的概念体系:三态故障模型、ETTR 分解、checkpoint 三参数权衡、检测-定位-恢复闭环、热备池与可靠性预算。这些概念是后续架构与模块讨论的语言。

2.1 术语表 ​

术语定义备注
MTBF平均故障间隔(Mean Time Between Failures)可修复系统;常与 MTTF 混用
MTTF平均失效时间(Mean Time To Failure)不可修复部件(如单张 GPU 报废)
MTTR平均修复时间(Mean Time To Repair/Recovery)从故障发生到恢复训练的墙钟时间
可用率 AvailabilityMTBF / (MTBF + MTTR)稳态口径,不含回滚损失
ETTR有效训练时间占比有效训练时间 / 墙钟时间;训练侧的总账本
RPO恢复点目标最多丢失多少进度 → checkpoint 间隔上限
RTO恢复时间目标多久必须恢复训练 → 恢复链路时延预算
fail-stop / fail-slow / SDC见 2.2 三态模型发现难度递增
热备(hot/warm spare)预热待命、可即刻替换故障节点的备用节点池成本换 MTTR
Gang 调度所有 rank 必须同时就绪才能开训可用性按"最弱一环"计算

注意 Llama 3 与 Kokolis 论文口径差异:前者按"作业中断"统计(含计划内维护),后者按"硬件失效"统计。引用任何 MTBF 数字前先问三个问题:按设备还是按作业?含不含计划内事件?含不含 fail-slow?

2.2 三态故障模型 ​

用两家的一手数据给 taxonomy 上刻度。

Meta Llama 3(419 次非预期中断的分布,arXiv:2407.21783):GPU 类合计 58.7%(最大单一类别,含 GPU 本体、HBM3 显存、SRAM、板载系统处理器、热界面与传感器);网络(交换机/线缆)约 8.4%;软件依赖 bug 约 12.9%;其余为主机部件(NIC、SSD、电源、CPU、内存)与少量无法归因项。78% 的非预期中断归因于确认或疑似的硬件问题。

ByteDance ByteRobust(约 5.5 万起事故的分布,arXiv:2509.16293):CUDA 错误 36.1%、CPU 过载 11.0%、CPU OOM 10.1%、作业挂起 9.9%、代码/数据调整(人工)17.3%、磁盘不足 5.0%、MFU 下降 0.8%、NaN 0.3%。值得注意:17.3% 是"人工调整代码/数据"——大量"故障"其实是实验过程的一部分,平台要把这类中断与硬件中断分开统计,否则 MTBF 会被污染。

对比可见:Meta 的 GPU 占比过半,ByteDance 的 CUDA 错误(含用户代码触发)占三分之一且人工操作占近五分之一。故障 taxonomy 必须按"平台要为之负责的部分"裁剪,否则改进动作会打偏。

2.3 ETTR 分解:可靠性的总账公式 ​

一次故障周期由三段组成,ETTR 可以写成:

ETTR = MTBF / (MTBF + MTTR + 回滚损失)

MTTR     = 检测时间 + 恢复时间(替换节点 / 重调度 / 重启)
回滚损失 = 故障点到上个 checkpoint 的进度(期望为 checkpoint 间隔的一半)

这个公式是全部可靠性工程的杠杆清单:要么增大 MTBF(硬件筛选、burn-in、冗余设计),要么压缩 MTTR(快速检测、热备替换、in-process 恢复),要么压缩回滚损失(高频 checkpoint、in-memory checkpoint、每步 checkpoint)。

还可以再拆一步——MTTR 本身的生产实测拆解(TrainMover,arXiv:2412.12636,Table 1,8,192 卡作业全量重启):

阶段耗时占比压缩手段
停机与清理0.52 min7.7%快速失败路径
重新调度1.50 min23.1%热备免调度
checkpoint 加载1.56 min24.1%(占初始化 35.1%)in-memory checkpoint
NCCL 初始化1.09 min16.9%(占初始化 24.5%)两阶段 delta 建链
冷启动 warmup1.80 min27.8%(占初始化 40.4%)沙箱预热
合计6.47 min100%—

这张表解释了为什么成熟平台能把一次故障的恢复压到 1 分钟以内(ByteRobust 的热更新 46-65 秒,比全量 requeue 快 11.04 倍):四个阶段每个都有数量级可观的优化空间,叠加起来就是 6-7 倍。

2.4 Checkpoint 三参数权衡 ​

Checkpoint 策略由三个参数决定:间隔 T、开销 C、恢复点 RPO。三者互相拉扯:

  • T 越大:开销摊薄,但故障回滚损失越大(期望 T/2)。
  • T 越小:回滚损失小,但频繁 checkpoint 直接吃掉算力。
  • C 越小(异步、分层、差量):可以把 T 推到极限(ByteRobust 做到每步 checkpoint 开销 <0.9%)。

经典结论来自 Daly 公式与 CheckFreq(FAST'21):最优间隔 T* ≈ sqrt(2 · C · M)(C 为 checkpoint 开销、M 为 MTBF)。直觉是:最优回滚损失应该约等于 checkpoint 开销本身——两道成本打平。Mini Demo 场景 2 用 MTBF 7.9 小时、step 30 秒、全量阻塞 checkpoint 240 秒的参数做了校验:Daly 近似给出 123 步,对长程效率函数的网格精确搜索也得到 123 步(效率 87.45%);引入差量 checkpoint(开销降到 30%)后最优间隔缩短到 67 步、效率升到 92.18%。

工程上 checkpoint 形态有一个演进光谱:

形态开销特征恢复点代表
同步全量全作业阻塞,分钟级间隔大torch.save 时代
异步全量阻塞降 90%+,占带宽间隔可小PyTorch DCP async_save、CheckFreq 两阶段
分层(内存 + 本地 SSD + 远端)每步可接受接近每步Gemini(SOSP'23)、ByteRobust
差量/增量只写变化分片每步 + 周期全量差量 checkpoint(arXiv:2509.04084)
冗余(复制/纠删码)内存/带宽换零回滚零Gemini 远程副本、跨并行组备份(ByteRobust)

一个常被低估的问题:checkpoint 自己也是故障源。写坏一个 checkpoint(进程在写盘时被杀)比没有 checkpoint 更糟——成熟平台都要保证 checkpoint 原子性(先写临时目录 + rename)并保留最近 N 个版本、定期做恢复演练。

2.5 检测-定位-恢复闭环 ​

故障处理是一条流水线,每一段都有独立的工程学科:

  • 检测的敌人是时延:PyTorch 默认 NCCL 超时约 10 分钟(ByteRobust 实测口径甚至到 30 分钟),而 ByteRobust 的实时检测把 GPU 故障检测压到 10 秒、网卡 30 秒、OS 内核 2 秒。检测每慢一分钟, gang 作业里几千张卡就空转一分钟。
  • 定位的敌人是表象欺骗:大量硬件故障以 NCCL 网络错误的形式暴露(阿里巴巴 C4 的观察:约 82.5% 的错误虽然表现为 NCCL 报错,实际被约束在特定节点/设备上)。定位错了,替换的就是无辜节点,故障会跟着作业走。
  • 决策的关键是"替换 vs 修复"的权衡:Google 的 NSDI'24 方案把"硬件故障"细分为"换立方体重启"与"OCS 故障走容错路由(不停机、只付 0.5-8.6% 步时税)"两条路径(详见 Google 案例,本主题不展开)。
  • 恢复的上限由热备池决定:ByteRobust 按"同时故障数的 P99"配置热备(通常 2-4 台,灾难场景约 32 台且概率 <1%)——这是把二项分布写进容量规划的做法。

2.6 热备:用闲置换 MTTR ​

热备池(hot/warm spare)是"花钱省时间"的标准动作,规模由概率模型而非拍脑袋决定:设作业 N 个节点、单节点故障率 p,同时故障 k 台的概率服从二项分布,热备池容量取"覆盖同时故障数"的 P99 分位。ByteRobust 实测:9,600 卡规模 P99 只需 2-4 台热备,32 台同时故障的概率不到 1%。

热备必须"热"才有意义:ByteRobust 的热备节点常驻自检后休眠、故障时被"唤醒热更新"(46-65 秒完成替换),比全量重新排队(requeue)快 10.87 倍,距离理论最优(oracle)只差 5.19%。TrainMover 进一步把"热备预热"一般化——由于流水线并行里 rank 角色只有首/中/尾三种,一台预热的通用备机可以替换任意角色,只需补少量层差异。

代价也要记账:1%-6% 的算力常驻闲置(阿里巴巴备份池约为 GPU 的 6%,Meta 在 24K 卡集群里划 16K 给 Llama 3 也隐含了余量策略)。TrainMover 的账:32K 规模下,一台 20 秒完成替换的热备机,等效于多买约 2,400 张卡。

2.7 SDC:最危险的敌人 ​

静默数据损坏(Silent Data Corruption)指硬件给出错误结果但没有任何错误信号。三个一手事实刻画它的威胁:

  1. 它真实存在且能毁掉模型。ACL 2025《Understanding Silent Data Corruptions in LLM Training》首次用被云厂商自动化运维"清扫出生产环境"的真实不健康节点做对照实验(XLA 确定性执行隔离变量):SDC 在不同节点上影响不同,多数情况下对子模块计算的扰动很小,但足以让模型收敛到不同的最优、甚至引发训练 loss 尖刺——它不会因为"看起来在训练"而自愈。
  2. 它已经出现在最大的生产训练里。Llama 3 的 54 天中记录到 6 次 SDC(占非预期中断 1.4%)。
  3. 常规检测手段对它召回率有限。ByteRobust 报告 NVIDIA EUD(设备端确定性自检)对 SDC 的召回率只有约 70%,极端案例需要 8 小时离线压力测试才能复现。

SDC 的防线必须是纵深(第 5 章展开):ECC(HBM/SRAM 层)→ 生产前筛选(burn-in、EUD、确定性负载)→ 运行时冗余(双跑对比、集合通信校验)→ 事后统计(loss/grad-norm 尖刺、checkpoint 副本对比)。任何单层都会被绕过。

2.8 可靠性预算 ​

把可靠性当成一种"预算"来管理,是 SRE 思想在训练侧的落地:

预算的分配随规模变化:千卡集群 MTTR 是大头(可用率对 MTTR 极敏感),十万卡集群故障率本身也成为主战场——此时 burn-in、硬件筛选、RAS 设计(xAI Colossus 建设期决策的回响见 xAI 案例)与架构级故障隔离(DeepSeek 案例 中 DualPipe 对流水线故障域的切分思路)与运行时恢复同等重要。

小结 ​

核心概念一句话:训练可靠性 = 用 ETTR 记账,用三态模型(fail-stop / fail-slow / SDC)分类,用检测-定位-恢复闭环处理,用 checkpoint 三参数与热备池在两个时间维度(MTBF、MTTR)上买可靠性。下一章把这些概念组织成可落地的系统架构。

Released under CC-BY-SA-4.0 License.