故障处理

大规模GPU集群中故障是不可避免的。本文将介绍故障检测、诊断、恢复和预防的方法,帮助您构建高可用的训练基础设施。

预计阅读时间:50分钟·难度:中级

故障处理概述

在大规模集群中,硬件故障是常态而非例外。统计数据显示,在1000节点的集群中,每天都有较高概率发生硬件故障。

故障处理生命周期

预防阶段

降低故障发生概率,定期维护、监控预警

检测阶段

快速发现故障,实时监控、异常检测

诊断阶段

定位故障根因,日志分析、硬件诊断

恢复阶段

最小化业务影响,故障隔离、快速恢复

故障类型

GPU故障

故障类型表现严重程度处理方式
ECC单比特错误内存位翻转监控记录
ECC双比特错误不可纠正隔离节点
GPU掉卡设备消失更换硬件
过热保护降频/关机检查散热
电源异常不稳定更换电源

网络故障

  • 链路断开:物理连接中断,需要检查线缆和交换机
  • 丢包严重:网络拥塞或设备故障,需要排查网络设备
  • 延迟异常:网络拥塞或路由问题,需要优化网络配置
  • InfiniBand错误:端口状态异常、传输错误计数增加

存储故障

  • 磁盘故障:磁盘损坏或性能下降
  • 文件系统错误:文件系统损坏或权限问题
  • 存储网络故障:存储网络连接问题
  • 容量不足:存储空间耗尽

故障检测

故障检测是故障处理的第一步,需要建立完善的监控告警体系。

监控指标

监控项检测方法告警阈值
GPU状态nvidia-smi掉卡/无响应
ECC错误nvidia-smi -q -d ECCDBE > 0
温度温度传感器> 85°C
功耗功耗传感器异常波动
网络状态ibstat端口Down

检测工具

  • NVIDIA DCGM:GPU数据中心管理工具
  • Prometheus + Grafana:监控告警平台
  • IPMI:硬件监控接口
  • InfiniBand工具:ibstat、ibdiagnet

故障诊断

诊断流程

第一步:收集信息

错误日志、GPU日志、应用日志、监控数据

第二步:定位故障源

确认故障节点、确认故障设备、确认故障类型

第三步:分析根因

硬件老化、环境问题、驱动/固件问题、外部因素

第四步:影响评估

受影响任务、数据完整性、服务可用性

常用诊断命令

GPU诊断命令

  • nvidia-smi -q:详细GPU信息
  • nvidia-smi -q -d ECC:ECC错误统计
  • dmesg | grep -i nvidia:内核日志

网络诊断命令

  • ibstat:InfiniBand状态
  • ibping:网络连通性测试
  • ibdiagnet:网络诊断工具

故障恢复

恢复策略

节点隔离

将故障节点从调度中移除,防止新任务分配

任务迁移

将运行中的任务迁移到健康节点

检查点恢复

从最近的检查点恢复训练进度

弹性训练

动态调整参与训练的节点数量

弹性训练配置

PyTorch弹性训练配置示例

  • --nnodes=4:8:最小4节点,最大8节点
  • --nproc_per_node=8:每节点8进程
  • 支持节点动态加入和退出
  • 自动进行检查点保存和恢复

故障预防

预防措施

  • 定期维护:定期检查硬件状态,预防性更换老化部件
  • 环境监控:监控温度、湿度、电源稳定性
  • 软件更新:及时更新驱动、固件,修复已知问题
  • 容量规划:预留冗余资源,避免超负荷运行
  • 冗余设计:关键组件冗余,单点故障不影响整体

健康检查

检查项频率检查内容
GPU健康每天ECC错误、温度、性能
网络健康每小时连通性、错误计数
存储健康每天容量、IO性能
电源健康实时电压、电流、温度

最佳实践

1. 建立完善的监控告警

覆盖所有关键组件,设置合理告警阈值

2. 实施定期检查点

根据训练时间和成本设置合理的检查点间隔

3. 建立故障知识库

记录历史故障及处理方法,加速问题解决

4. 定期演练

模拟故障场景,验证恢复流程有效性

5. 持续优化

基于故障复盘不断改进预防和响应机制

故障恢复时间目标

建议设定明确的RTO(恢复时间目标)和RPO(恢复点目标)。对于大模型训练,建议RTO < 30分钟,RPO < 1小时。

----