GPU故障处理
前提条件
如需将GPU事件同步上报至AOM,集群中需安装云原生日志采集插件,您可前往AOM服务查看GPU插件隔离事件。
GPU插件隔离事件
当GPU显卡出现异常时,系统会将出现问题的GPU设备进行隔离,详细事件如表1所示。
事件原因 |
详细信息 |
描述 |
隔离结果 |
---|---|---|---|
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),联系对应的客服进行处理。
- GPU设备DBE错误与SBE错误总数过高
GPU驱动或GPU设备存在异常,请根据GPU设备所在的节点类型(ECS),联系对应的客服进行处理。
- GPU设备存在Uncorrectable ECC错误
- 登录GPU隔离事件发生的节点。
- 进入/usr/local/nvidia/bin目录,执行nvidia-smi -q命令。
若nvidia-smi命令不存在或执行失败,有可能是驱动安装未就绪导致,可以重新安装GPU驱动后,再重试。
- 观察执行结果中的ECC ERROR(发生ECC故障的记录)。
- Correctable Error:不会影响业务,不会触发GPU隔离。
- Uncorrectable Error:会导致业务中断,会触发GPU隔离。
- 若存在Uncorrectable Error,可以尝试通过以下手段恢复:
- 配置目标节点污点(taints),驱逐目标节点存量的业务负载。
- 重启目标节点。
- 若重启后仍有该现象,则需要收集nvidia-smi -q命令的输出,然后根据GPU设备所在的节点类型(ECS),联系对应的客服进行处理。
- NVML获取设备UUID异常
- 登录GPU隔离事件发生的节点。
- 进入/usr/local/nvidia/bin目录。
- 执行nvidia-smi,观察执行结果中的设备ID,例如:00:0D.0。
若nvidia-smi命令不存在或执行失败,有可能是驱动安装未就绪导致,可以重新安装GPU驱动后,再重试。
- 执行lspci | grep NVIDIA,观察执行结果中的设备ID。
- 比对上述两者结果,若存在不匹配的现象,收集两者输出结果,然后根据GPU设备所在的节点类型(ECS),联系对应的客服进行处理。
- GPU设备存在Xid错误
- 登录GPU隔离事件发生的节点。
- 执行dmesg -T | grep -i NVRM,观察结果输出。
- 假如存在Xid(PCI:0000:00:0x): xx格式的信息,则需要收集错误码,根据Nvidia Xid Error页面中确认详细原因。然后将详细原因和错误信息,根据GPU设备所在的节点类型(ECS),联系对应的客服进行处理。
- GPU虚拟化设备可用内存远小于GPU物理显存
- 登录GPU虚拟化节点。
- 执行/usr/local/nvidia/bin/nvidia-smi,观测目标GPU卡的物理显存,记录其序号。
- 执行cat /proc/xgpu/{GPU卡序号}/meminfo,注意替换命令中的{GPU卡序号}为步骤2获取的GPU卡序号,观测GPU虚拟化的可用显存。
- 比较步骤2和步骤3的可用显存。
由于GPU厂商的驱动程序,本身就会占用一定量的物理显存,量级在300MB左右,这属于正常现象。例如Tesla T4配套510.47.03,驱动程序默认会占用280MiB;而该显存占用与厂商的驱动程序版本也有一定相关性,例如535系列驱动比470系列占用更多。
若发现GPU虚拟化的可用显存远小于GPU卡的物理显存,一般是因为存在一些非GPU虚拟化发放的容器,占用了显存。
- 通过CCE控制台或kubectl命令,将目标节点的GPU负载排空。
- 执行rmmod xgpu_km,进行GPU虚拟化模块的删除。
- 通过CCE控制台或kubectl命令,将目标节点的nvidia-gpu-device-plugin Pod进行删除。
- 等待nvidia-gpu-device-plugin Pod重建完成后,重新按照步骤2和步骤3进行结果核验。