故障处理
大规模GPU集群中故障是不可避免的。本文将介绍故障检测、诊断、恢复和预防的方法,帮助您构建高可用的训练基础设施。
预计阅读时间:50分钟·难度:中级
故障处理概述
在大规模集群中,硬件故障是常态而非例外。统计数据显示,在1000节点的集群中,每天都有较高概率发生硬件故障。
故障处理生命周期
预防阶段
降低故障发生概率,定期维护、监控预警
检测阶段
快速发现故障,实时监控、异常检测
诊断阶段
定位故障根因,日志分析、硬件诊断
恢复阶段
最小化业务影响,故障隔离、快速恢复
故障类型
GPU故障
| 故障类型 | 表现 | 严重程度 | 处理方式 |
|---|---|---|---|
| ECC单比特错误 | 内存位翻转 | 低 | 监控记录 |
| ECC双比特错误 | 不可纠正 | 高 | 隔离节点 |
| GPU掉卡 | 设备消失 | 高 | 更换硬件 |
| 过热保护 | 降频/关机 | 中 | 检查散热 |
| 电源异常 | 不稳定 | 高 | 更换电源 |
网络故障
- 链路断开:物理连接中断,需要检查线缆和交换机
- 丢包严重:网络拥塞或设备故障,需要排查网络设备
- 延迟异常:网络拥塞或路由问题,需要优化网络配置
- InfiniBand错误:端口状态异常、传输错误计数增加
存储故障
- 磁盘故障:磁盘损坏或性能下降
- 文件系统错误:文件系统损坏或权限问题
- 存储网络故障:存储网络连接问题
- 容量不足:存储空间耗尽
故障检测
故障检测是故障处理的第一步,需要建立完善的监控告警体系。
监控指标
| 监控项 | 检测方法 | 告警阈值 |
|---|---|---|
| GPU状态 | nvidia-smi | 掉卡/无响应 |
| ECC错误 | nvidia-smi -q -d ECC | DBE > 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小时。