Straggler 与静默错误
同步训练里,九千九百九十九张卡都正常没用——一张慢卡拖住全体(straggler)。更阴险的是静默错误(silent data corruption):不报错、不崩溃,就是算错了——梯度悄悄劣化,loss 曲线看起来正常,模型质量却受损。两类坏点是大模型训练可靠性的核心敌人。
Straggler:慢的那一个决定整体
Section titled “Straggler:慢的那一个决定整体”straggler(掉队者)= 同步屏障上最慢的那个成员。同步训练的每一步(all-reduce、all-gather)都要等全体——一个节点慢 10%,全集群慢 10%(见拥塞同样的数学)。
straggler 的来源与特征:
| 来源 | 特征 | 检测 |
|---|---|---|
| 热降频(thermal throttling) | 散热差的节点持续降频 | SM clock 遥测 vs 集群分布(见功耗) |
| 网络慢(NIC 降速/抖动) | 该节点的 all-reduce 慢 | 通信时间按节点分解 |
| 硬件劣化(HBM/PCIe) | 持续慢但无报错 | 性能基线对比 |
| 数据不均 | 某些 rank 的数据大(变长、packing 不均) | 每 rank 的 step 时间分解 |
| 系统抖动(后台任务、页回收) | 间歇性慢 | 毛刺监控(见抖动) |
检测的核心是"按节点分解 step 时间":全集群的 step time 分布里,长尾的节点就是 straggler——把每个节点的 barrier 到达时间收集起来,最慢的 1% 节点就是嫌疑人。
处理三板斧:
- 确认:慢节点隔离重测(基准测试 vs 集群分布)
- 隔离:确认坏点后踢出(见训练容错的自动排除)
- 预防:锁频(消热降频)、性能基线(新节点入集群前测一遍)、数据均衡
静默错误:不报错的算错
Section titled “静默错误:不报错的算错”SDC(Silent Data Corruption):硬件算错了但不报任何错误。真实的诱因:
- 硅片缺陷(制造瑕疵,某些边缘条件算错)
- 电压/温度边缘(降频救不回来的边缘)
- 老化(长期高温后的退化)
SDC 的可怕之处:没有任何报错信号,只有结果不对。梯度悄悄错一点,loss 曲线看不出异常,训练几周后模型质量莫名劣化——排查方向完全错误。
Meta 的公开研究(Silent Data Corruptions at Scale)给出了真实规模:大规模集群里每年数千个 SDC GPU,且需要主动检测才能发现。
主动检测:算力换可信
Section titled “主动检测:算力换可信”SDC 没有报错,只能主动检测:
| 手段 | 原理 | 成本 |
|---|---|---|
| 训练中校验(结果 hash) | 定期对固定输入算一遍、对比 hash | 1% 算力 |
| 定期压力测试 | 非训练时段跑 SDC 检测套件(Meta 的 Fiji) | 维护窗口 |
| 同值重复算对比(对偶计算) | 关键层的部分计算重复算、对比结果 | 训练中 ~1–5% |
| ECC 与硬件自检 | 硬件层的保护(对显存有效,对计算无效) | 免费 |
训练中的轻量校验是性价比之王:每 N 步对固定输入跑一次小矩阵乘,对比 hash——1% 的算力换"及时发现坏卡"。
梯度健康的监控
Section titled “梯度健康的监控”SDC 之外的"软错误"(数值劣化)靠梯度监控发现:
| 指标 | 异常信号 |
|---|---|
| 梯度范数(每 rank) | 某个 rank 的梯度范数系统性偏移 → 该 rank 的计算/数据有问题 |
| 梯度范数突增/消失 | 精度问题(见混合精度)或数据问题 |
| loss 曲线的平台/跳变 | 学习率、数据、或坏点(见容错) |
| NaN/Inf 计数 | 任何非零都是信号 |
| 更新与参数的比值(update/param ratio) | 训练健康度的综合指标 |
per-rank 的梯度范数分布是定位"哪个 rank 有问题"的最直接手段:正常训练里各 rank 的梯度统计应一致(同 batch 分布下),系统性偏移的 rank 就是嫌疑人。
生产训练的可靠性组合:
- 锁频 + 温度监控(消热降频 straggler)
- 性能基线(新节点入集群前测,straggler 早发现)
- 按节点分解 step 时间(straggler 实时定位)
- 训练中轻量 SDC 校验(1% 算力,主动发现坏卡)
- per-rank 梯度统计(软错误定位)
- 自动隔离(确认坏点 → 踢出 → 检查点恢复)
- Straggler 拖住全体:一个节点慢 10%,全集群慢 10%;检测靠"按节点分解 step 时间",长尾节点是嫌疑人。
- straggler 三板斧:确认(隔离重测)→ 隔离(踢出)→ 预防(锁频 + 性能基线)。
- SDC 不报错只算错:每年数千个 SDC GPU(Meta 实测);没有信号,只能主动检测。
- 训练中轻量校验(固定输入 + hash 对比)用 1% 算力换及时发现的坏卡。
- per-rank 梯度范数分布是软错误的定位手段:系统性偏移的 rank 是嫌疑人。
- 组合拳:锁频 + 基线 + 分解 + SDC 校验 + 梯度统计 + 自动隔离。
- 故障恢复 — 下一章:发现之后的恢复
- 训练容错与弹性 — 恢复的训练侧
- 功耗、散热与机房约束 — 热降频的根源
- 拥塞、抖动与网络故障 — 网络侧的"慢点"