更新时间:2024-04-25 GMT+08:00

GPU故障处理

前提条件

如需将GPU事件同步上报至AOM,集群中需安装云原生日志采集插件,您可前往AOM服务查看GPU插件隔离事件。

GPU插件隔离事件

当GPU显卡出现异常时,系统会将出现问题的GPU设备进行隔离,详细事件如表1所示。

表1 GPU插件隔离事件

事件原因

详细信息

描述

隔离结果

GPUMemoryError

Device=%s, UUID=%s, SN=%s has failed remapped rows; The device will go unhealthy.

NVML显存重映射行数查询异常

隔离单点故障的GPU设备

GPUMemoryError

Device=%s, UUID=%s, SN=%s has more than 60 retired pages caused by both multiple single bit ecc error and double bit ecc error, DBE error number: %d, SBE error number: %d; The device will go unhealthy.

GPU设备DBE错误与SBE错误总数过高(>60)

隔离单点故障的GPU设备

GPUMemoryError

Device=%s, UUID=%s, SN=%s has more than 4 SRAM uncorrectable ecc errors count; The device will go unhealthy.

GPU设备Uncorrectable ECC错误计数大于4

隔离单点故障的GPU设备

GPUXidError

Failed to determine gpu device uuid for Xid=%d; Marking all devices as unhealthy.

NVML获取设备UUID异常

隔离故障GPU节点的GPU设备

GPUXidError

Xid=%d on Device=%s, UUID=%s, SN=%s, the device will go unhealthy.

GPU设备存在Xid错误,Xid捕获范围为74和79

隔离单点故障的GPU设备

GPUHealthWarning

Device=%s, UUID=%s, SN=%s failed to get fan state.

GPU设备存在风扇异常

不隔离

GPUHealthWarning

Device=%s, UUID=%s, SN=%s failed to get power state.

GPU设备存在功率查询异常

不隔离

故障定位步骤

  • NVML显存重映射行数查询异常

    GPU驱动或GPU设备存在异常,请根据GPU设备所在的节点类型(ECS或BMS),联系对应的客服进行处理。

  • GPU设备DBE错误与SBE错误总数过高

    GPU驱动或GPU设备存在异常,请根据GPU设备所在的节点类型(ECS或BMS),联系对应的客服进行处理。

  • GPU设备存在Uncorrectable ECC错误
    1. 登录GPU隔离事件发生的节点。
    2. 进入/usr/local/nvidia/bin目录,执行nvidia-smi -q命令。

      若nvidia-smi命令不存在或执行失败,有可能是驱动安装未就绪导致,可以重新安装GPU驱动后,再重试。

    3. 观察执行结果中的ECC ERROR(发生ECC故障的记录)。
      • Correctable Error:不会影响业务,不会触发GPU隔离。
      • Uncorrectable Error:会导致业务中断,会触发GPU隔离。
    4. 若存在Uncorrectable Error,可以尝试通过以下手段恢复:
      1. 配置目标节点污点(taints),驱逐目标节点存量的业务负载。
      2. 重启目标节点。
      3. 若重启后仍有该现象,则需要收集nvidia-smi -q命令的输出,然后根据GPU设备所在的节点类型(ECS或BMS),联系对应的客服进行处理。
  • NVML获取设备UUID异常
    1. 登录GPU隔离事件发生的节点。
    2. 进入/usr/local/nvidia/bin目录。
    3. 执行nvidia-smi,观察执行结果中的设备ID,例如:00:0D.0。

      若nvidia-smi命令不存在或执行失败,有可能是驱动安装未就绪导致,可以重新安装GPU驱动后,再重试。

    4. 执行lspci | grep NVIDIA,观察执行结果中的设备ID。
    5. 比对上述两者结果,若存在不匹配的现象,收集两者输出结果,然后根据GPU设备所在的节点类型(ECS或BMS),联系对应的客服进行处理。
  • GPU设备存在Xid错误
    1. 登录GPU隔离事件发生的节点。
    2. 执行dmesg -T | grep -i NVRM,观察结果输出。
    3. 假如存在Xid(PCI:0000:00:0x): xx格式的信息,则需要收集错误码,根据Nvidia Xid Error页面中确认详细原因。然后将详细原因和错误信息,根据GPU设备所在的节点类型(ECS或BMS),联系对应的客服进行处理。
  • GPU虚拟化设备可用内存远小于GPU物理显存
    1. 登录GPU虚拟化节点。
    2. 执行/usr/local/nvidia/bin/nvidia-smi,观测目标GPU卡的物理显存,记录其序号。
    3. 执行cat /proc/xgpu/{GPU卡序号}/meminfo,注意替换命令中的{GPU卡序号}为步骤2获取的GPU卡序号,观测GPU虚拟化的可用显存。
    4. 比较步骤2和步骤3的可用显存。

      由于GPU厂商的驱动程序,本身就会占用一定量的物理显存,量级在300MB左右,这属于正常现象。例如Tesla T4配套510.47.03,驱动程序默认会占用280MiB;而该显存占用与厂商的驱动程序版本也有一定相关性,例如535系列驱动比470系列占用更多。

      若发现GPU虚拟化的可用显存远小于GPU卡的物理显存,一般是因为存在一些非GPU虚拟化发放的容器,占用了显存。

    5. 通过CCE控制台或kubectl命令,将目标节点的GPU负载排空。
    6. 执行rmmod xgpu_km,进行GPU虚拟化模块的删除。
    7. 通过CCE控制台或kubectl命令,将目标节点的nvidia-gpu-device-plugin Pod进行删除。
    8. 等待nvidia-gpu-device-plugin Pod重建完成后,重新按照步骤2和步骤3进行结果核验。