GPU 故障检测与自愈

最近更新时间:2026-01-14 14:48:43

我的收藏

操作场景

在 GPU 集群运行过程中,GPU 硬件可能出现各类故障,如 XID 错误、ECC 内存错误、温度过高、设备丢失等问题。这些故障如果不能及时发现和处理,可能导致训练任务失败、数据损坏甚至集群不稳定。
TKE 提供了完整的 GPU 故障检测与自愈解决方案,通过 Node Problem Detector(NPD) 组件实时检测 GPU 异常,并结合 Node-Healing 组件自动执行隔离、排空、重启等自愈操作,帮助您快速恢复 GPU 节点的正常运行状态,保障 AI 训练和推理任务的稳定性。

前提条件

已创建 TKE 集群,且集群中包含 GPU 节点。详情请参见 创建集群
集群 Kubernetes 版本 >= 1.18。
故障自愈功能仅作用于原生节点。

功能说明

GPU 故障检测能力

TKE 支持检测以下 12 种 GPU 故障类型:
故障类型
说明
GPUDeviceLost
GPU 设备丢失,无法被系统识别
GPUDoubleBitEccError
GPU 双位 ECC 错误,不可纠正的内存错误
GPUHighSingleBitEccError
GPU 单位 ECC 错误超过阈值
GPUInfoROMCorrupted
GPU InfoROM 损坏
GPUNvlinkError
NVLink 通信错误
GPUPCIeError
PCIe 接口异常
GPUPendingRetiredPages
GPU 待退役内存页
GPUPowerError
GPU 电源问题
GPURemappingRowsError
GPU 内存行映射错误
GPUTempError
GPU 温度过高
GPUXIDFatalError
GPU 致命 XID 错误
GPUXIDWarningError
GPU 警告 XID 错误

自愈策略说明

根据故障类型的不同,系统采用不同的自愈策略:
自愈策略
执行步骤
适用故障类型
完整自愈流程
隔离 → 排空 → 重启 → 解封
GPUDeviceLost、GPUNvlinkError、GPUPCIeError、GPUPendingRetiredPages、GPUXIDWarningError
仅隔离排空
隔离 → 排空
GPUDoubleBitEccError、GPUHighSingleBitEccError、GPUInfoROMCorrupted、GPUPowerError、GPURemappingRowsError、GPUTempError、GPUXIDFatalError
说明:
完整自愈流程:适用于软件或可恢复的硬件问题,重启后可自动恢复。
仅隔离排空:适用于严重硬件故障,需要人工介入检查和维修,系统仅执行隔离和排空操作,避免新任务调度到故障节点。

操作步骤

步骤1:安装 Node Problem Detector 组件

Node Problem Detector(NPD)是节点故障检测的基础组件,负责实时监控节点状态并上报异常。
1. 登录 容器服务控制台,在左侧导航栏中选择集群
2. 在集群列表中,单击目标集群 ID,进入集群详情页。
3. 选择左侧菜单栏中的组件管理,在组件管理页面单击新建
4. 新建组件管理页面中勾选 NodeProblemDetectorPlus
5. 单击完成即可创建组件。
安装完成后,NPD 组件会以 DaemonSet 方式运行在集群中的每个节点上,自动检测 GPU 相关故障并更新节点 Condition。

步骤2:安装 Node-Healing 组件

Node-Healing 组件负责根据检测到的故障执行自愈操作。
1. 在组件管理页面单击新建
2. 新建组件管理页面中勾选 Node-Healing
3. 单击完成即可创建组件。

步骤3:配置 GPU 节点自愈策略

安装组件后,需要创建 NodeHealer 资源来定义 GPU 节点的自愈策略。
1. 创建 NodeHealer 配置文件 gpu-node-healer.yaml
apiVersion: node.healing.tke.cloud.tencent.com/v1
kind: NodeHealer
metadata:
name: gpu-cluster-healer
spec:
nodeSelector:
matchLabels:
node-healing.tke.cloud.tencent.com/belong-to: gpu-cluster-healer
cloud.tencent.com/provider: tencentcloud
node.tke.cloud.tencent.com/accelerator-type: gpu
machineHealingTemplate:
name: "default-healing-template"
kind: "MachineHealingTemplate"
apiVersion: "node.healing.tke.cloud.tencent.com/v1"
unhealthyConditions:
- type: GPUXIDFatalError # GPU 致命错误
enableCheck: true
enableHealing: true
durationTime: "1m"
priority: 100
- type: GPUDeviceLost # GPU 设备丢失
enableCheck: true
enableHealing: true
durationTime: "5m"
priority: 80
nodeHealingPolicy:
maxHealConcurrency: 3
minNodeCoolingMinutes: 30
说明:
上述示例仅配置了两种典型 GPU 故障类型,您可以根据实际需求添加更多故障类型,完整的故障类型列表请参见 GPU 故障检测能力
2. 执行以下命令应用配置:
kubectl apply -f gpu-node-healer.yaml

步骤4:为 GPU 节点添加标签

NodeHealer 通过 nodeSelector 中定义的标签来选择需要自愈的节点。您需要为目标节点添加与配置文件中 nodeSelector.matchLabels 一致的标签。下述示例配置为例,执行以下命令为 GPU 节点添加标签:
kubectl label node <node-name> node-healing.tke.cloud.tencent.com/belong-to=gpu-cluster-healer
或批量为所有原生 GPU 节点添加标签:
kubectl label node \\
-l node.tke.cloud.tencent.com/accelerator-type=gpu \\
node-healing.tke.cloud.tencent.com/belong-to=gpu-cluster-healer
说明:
标签键值可自定义,只需确保节点标签与 NodeHealer 配置中的 nodeSelector.matchLabels 一致即可。

验证配置

查看 NodeHealer 状态

kubectl get nodehealer
预期输出:
NAME AGE
gpu-cluster-healer 1h

查看节点 Condition

kubectl get node <gpu-node-name> -o jsonpath='{.status.conditions}' | jq
如果 NPD 检测到 GPU 故障,会在节点 Condition 中显示对应的故障类型。

查看自愈任务

kubectl get healingtask -n kube-system
当触发自愈时,系统会自动创建 HealingTask 记录任务执行状态。

处理 GPU 硬件故障

对于严重的 GPU 硬件故障(如双位 ECC 错误、InfoROM 损坏等),系统仅执行隔离和排空操作,不会自动重启。您需要按以下流程人工处理:
1. 确认故障:在容器服务控制台查看节点状态,或通过 kubectl describe node 命令查看节点 Condition 和事件,确认具体的故障类型。
2. 检查 GPU 状态:登录节点,使用 nvidia-smi -q 命令检查 GPU 详细状态。
3. 联系维修:如确认为硬件故障,请 提交工单 联系腾讯云售后团队进行检查和更换。
4. 恢复节点:故障修复后,通过 kubectl uncordon 命令解除节点隔离,并移除自愈相关的 Taint。

配置说明

unhealthyConditions 参数说明

定义需要监控的故障类型及自愈行为:
参数
类型
说明
type
string
故障类型,完整列表请参见 Node-Healing 支持的故障类型
enableCheck
bool
是否启用检测。
enableHealing
bool
是否启用自愈。
durationTime
string
故障持续多长时间后触发自愈,格式如 1m5m
priority
int
优先级,数值越大优先级越高(0-100)。
durationTime 建议配置
故障类型
建议值
说明
严重硬件故障(ECC 错误、XID 致命错误等)
1m
快速响应,避免数据损坏。
一般硬件故障(设备丢失、NVLink 错误等)
5m
适当观察,避免误判。
可恢复问题(警告类错误)
10m
延长观察,可能自动恢复。

nodeHealingPolicy 参数说明

限流策略,防止大规模故障时集群雪崩:
参数
说明
建议值
maxHealNodesPerDay
每天最大自愈节点数
10-20
maxHealNodesPerHour
每小时最大自愈节点数
3-5
maxHealConcurrency
最大并发自愈数
2-3
minNodeCoolingMinutes
同一节点两次自愈的最小间隔(分钟)
30-60

常见问题

GPU 故障检测不生效?

1. 确认 NPD 组件已正确安装并运行:
kubectl get ds -n kube-system | grep node-problem-detector
2. 确认节点上的 NPD Pod 状态正常:
kubectl get pod -n kube-system -l app=node-problem-detector -o wide

自愈任务未触发?

1. 确认节点已添加与 NodeHealer 配置匹配的标签:
kubectl get node <node-name> --show-labels
2. 确认节点是原生节点(有 cloud.tencent.com/provider=tencentcloud 标签)。
3. 检查故障持续时间是否超过 durationTime 配置。
4. 检查是否被限流策略限制:
kubectl describe nodehealer gpu-cluster-healer

如何关闭某个节点的自愈?

移除节点上与 NodeHealer 配置匹配的标签即可,例如:
kubectl label node <node-name> node-healing.tke.cloud.tencent.com/belong-to-

相关文档