更新时间:2025-06-30 GMT+08:00
分享

GPU故障处理

在Kubernetes的环境中,GPU资源的管理复杂度高、故障诊断和恢复难度大,且宕机成本高。当某个GPU资源出现故障时,CCE集群会迅速上报,并根据事件信息提供单GPU故障后自动隔离功能,此时其他正常的GPU可以继续提供服务,尽可能减少业务上的损失。本文将介绍GPU常见的异常事件、隔离结果以及对应的解决方案,以便您快速响应故障,最大限度地减少宕机时间,保障业务应用的连续性和高性能。

前提条件

  • 集群版本在v1.27及以上。
  • 如需将GPU事件同步上报至AOM,集群中需安装云原生日志采集插件,您可前往AOM服务查看CCE AI套件(NVIDIA GPU)插件隔离事件。

CCE AI套件(NVIDIA GPU)插件异常事件上报与隔离

当GPU显卡出现异常时,CCE AI套件(NVIDIA GPU)插件将上报异常事件,系统将根据事件信息隔离存在问题的GPU设备。GPU设备被隔离后,Kubernetes将无法重新分配该GPU资源,导致该GPU资源暂时不可用。故障解决后,GPU资源将恢复正常使用。关于CCE AI套件(NVIDIA GPU)插件的异常事件及隔离结果等信息,具体请参见表1 GPU插件隔离事件

表1 CCE AI套件(NVIDIA GPU)插件异常事件

事件原因

详细信息

描述

隔离结果

故障解决方案

GPUMemoryError

GPUServerId=xxx; MemoryErrorType=FailedRemappedRows; Device=xxx; UUID=xxx; SN=xxx; Message=The device has failed remapped rows, it will go unhealthy.

NVML显存重映射行数查询异常:行重映射用于处理内存故障,当行重映射失败时,将影响到GPU的内存访问。

隔离单点故障的GPU设备

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

GPUServerId=xxx; MemoryErrorType=OverThresholdRetiredPages; Device=xxx; UUID=xxx; SN=xxx; Message=The device has more than 60 retired pages caused by both multiple single bit ecc error and double bit ecc error, DBE error number: xxx, SBE error number: xxx, it will go unhealthy.

GPU设备DBE错误与SBE错误总数过高:当GPU设备的DBE(Double Bit Error)和SBE(Single Bit Error)错误总数超过预设阈值(>60)时,系统认为设备存在内存故障。

隔离单点故障的GPU设备

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

GPUServerId=xxx; MemoryErrorType=OverLimitSramEccErrors; Device=xxx; UUID=xxx; SN=xxx; Message=The device has more than xxx SRAM uncorrectable ecc errors count, it will go unhealthy.

GPU设备存在Uncorrectable ECC错误:当SRAM发生不可纠正的ECC错误(Uncorrectable ECC Error),且错误数量超过4次时,GPU设备将被认为处于异常状态。

隔离单点故障的GPU设备

GPU设备存在Uncorrectable ECC错误

GPUServerId=xxx; MemoryErrorType=PendingRetiredPages; Device=xxx; UUID=xxx; SN=xxx; Message=The device has pending retired pages.

GPU设备存在待隔离页:系统将自动监测GPU设备中是否存在待隔离页,存在内存页未被隔离时,可能导致内存不一致或错误。

不隔离

GPU设备存在待隔离页

GPUServerId=xxx; MemoryErrorType=InfoROMCorrupted; Device=xxx; UUID=xxx; SN=xxx; Message=InfoROM is corrupted.

GPU设备的infoROM损坏:infoROM是GPU显存的一块存储区域,当其损坏时,将影响GPU设备的正常运行。

不隔离

GPU设备的infoROM损坏

GPUXidError

GPUServerId=xxx; XidErrorType=GetUuidError; Xid=xxx; Message=Failed to determine gpu device uuid for Xid xxx, all devices will go unhealthy.

NVML获取设备UUID异常:NVML(NVIDIA Management Library)在解析驱动上报的Xid事件时,无法获取事件对应的GPU设备的UUID。这种错误并非某个Xid错误引起,可能是驱动、硬件或权限问题导致的。

隔离故障GPU节点的GPU设备

NVML获取设备UUID异常

GPUServerId=xxx; XidErrorType=FatalXidError; Xid=xxx; Device=xxx; UUID=xxx; SN=xxx; Message=The device will go unhealthy.

GPU设备存在严重的Xid错误:此类严重的Xid错误,需要进行故障隔离,目前设置的Xid为74和79。

隔离单点故障的GPU设备

GPU设备存在Xid错误

GPUServerId=xxx; XidErrorType=ApplicationXidError; Xid=xxx; Message=Event could be caused by an application error, not a device error.

GPU设备存在用应用程序引起的Xid错误:此类Xid错误通常不是设备问题,不用进行卡隔离。目前设置的Xid范围为:13,31,43,45,68,137。

不隔离

GPU设备存在Xid错误

GPUServerId=xxx; XidErrorType=OtherXidError; Xid=xxx; Device=xxx; UUID=xxx; SN=xxx; Message=The device may be unhealthy.

GPU设备存在其它常见的Xid错误:此类Xid错误可能是GPU设备、驱动等的异常,也可能是一些纠错信息的上报。

不隔离

GPU设备存在Xid错误

GPUHealthWarning

GPUServerId=xxx; HealthWarningType=GetFanStateError; Device=xxx; UUID=xxx; SN=xxx; Message=The device failed to get fan state.

GPU设备存在风扇异常: 无法正常读取到GPU风扇的使用情况,风扇可能存在异常。

不隔离

-

GPUServerId=xxx; HealthWarningType=GetPowerStateError; Device=xxx; UUID=xxx; SN=xxx; Message=The device failed to get power state.

GPU设备存在电源异常:无法正常读取到GPU电源的使用情况,电源可能存在异常。

不隔离

-

GPUNvmlError

GPUServerId=xxx; NvmlErrorType=GetDeviceHandleError; Device=xxx; UUID=xxx; SN=xxx; Message=The device cannot be reached through NVML, it may be unhealthy.

GPU设备无法与NVML通信:系统无法通过NVML 访问指定的GPU设备,GPU设备可能处于不健康状态。

不隔离

GPU设备无法和NVML通信

故障定位步骤

  • 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),联系对应的客服进行处理。
  • GPU设备存在待隔离页

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

    1. 登录GPU隔离事件发生的节点。
    2. 进入/usr/local/nvidia/bin目录,执行nvidia-smi -i <target gpu> -q -d PAGE_RETIREMENT命令。

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

    3. 观察执行结果中的Pending Page Blacklist。若为Yes,则确实存在待隔离页。您可尝试以下手段进行恢复:
      1. 配置目标节点污点(taints),驱逐目标节点存量的业务负载。
      2. 重新连接GPU,重新在该GPU上启动新的程序。

        若重新连接GPU不生效,可尝试重置GPU和重启节点。若重启后仍有该现象,则根据GPU设备所在的节点类型(ECS或BMS),联系对应的客服进行处理。

  • GPU设备的infoROM损坏

    GPU设备存在异常,请根据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错误

    基于不同类型的Xid错误,故障处理方案如下:

    • 严重的Xid错误:GPU设备存在异常,请根据GPU设备所在的节点类型(ECS或BMS),联系对应的客服进行处理。
    • 应用程序引起的Xid错误:您可以参考表2了解可能的故障原因,并检查相关程序是否存在问题。若问题仍未解决,请尝试重启程序以恢复GPU的正常功能。
    • 其它常见的Xid错误:基于事件上报的Xid错误码,您可以根据表3 其他Xid错误了解可能原因,并根据Xid报错说明尝试恢复GPU。若无法恢复,您可根据GPU设备所在的节点类型(ECS或BMS),联系对应的客服进行处理。
  • GPU设备无法和NVML通信

    GPU设备无法和NVML通信可能存在以下原因:

    • 设备的UUID与系统中实际有效的GPU卡不匹配。
    • GPU卡未正确连接电源,导致无法正常工作。
    • GPU卡在运行过程中突然掉卡,导致系统无法访问该设备。
    • GPU卡在运行过程中出现中断问题,可能是由于硬件故障或驱动程序异常所致。
    • 驱动程序检测到未知的硬件或软件错误,无法明确归类。

    您可根据GPU设备所在的节点类型(ECS或BMS),联系对应的客服进行处理

  • 其他常见问题:GPU虚拟化设备可用内存远小于GPU物理显存

    您需要对比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进行结果核验。

GPU Xid常见错误

Xid错误是NVIDIA驱动程序报告的异常,通过对Xid错误码的捕捉与分析,可以准确定位GPU硬件或驱动层面的故障,快速响应并排除故障。以下给出常见的Xid错误,更多详细信息可参考Nvidia Xid Error

  • 用户程序引起Xid错误:可能涉及程序错误或资源管理问题,具体请参见表2 XID错误(用户程序)
    表2 Xid错误(用户程序)

    Xid

    Xid报错说明

    13

    报错信息“GR: SW Notify Error”,表示GPU的图形引擎在运行过程中遇到问题,可能是用户程序越界(概率较大)、非法指令和寄存器、硬件(概率较小)等原因导致的。

    31

    报错信息“FIFO: MMU Error”,表示GPU在处理内存访问或命令队列时遇到问题,可能是应用程序的非法地址访问(概率较大)、驱动和硬件(概率较小)等原因导致的。

    43

    报错信息“Reset Channel Verif Error”,可能是用户程序出错导致的。

    45

    报错信息“OS: Preemptive Channel Removal”,表示GPU上的任务被强制终止,可能是用户程序中止、GPU重置或系统信号(如Control-C或Sigkill)导致的。

    68

    报错信息“NVDEC0 Exception”,表示在处理视频解码时发生异常,可能是硬件或驱动的原因,也可能是用户程序的原因。

    137

    报错信息“NVLink FLA privilege error”,表示远程MMU报告故障,可能是应用程序级别的原因,也可能是驱动程序或硬件的原因。

  • 其他Xid错误:通常与GPU硬件、驱动或系统配置故障相关,具体请参见表3
    表3 其他Xid错误

    Xid

    Xid报错说明

    32

    报错信息“PBDMA Error”,通常是PCI的质量问题,会影响GPU设备的正常使用。

    48

    报错信息“DBE (Double Bit Error) ECC Error”,表示GPU检测出不可修复的错误,需要重置GPU。

    63

    报错信息“ECC Page Retirement or Row Remapping”,表示当应用程序遇到GPU显存硬件错误时,NVIDIA自纠错机制会将会对错误的内存区域进行retire或者remap。并且相关的retirement和remapped信息会记录到infoROM中,后续再遇到相同问题时将不再报错。该报错信息一般不影响GPU设备的正常使用。

    64

    报错信息“ECC Page Retirement or Row Remapping”,与Xid 63的触发场景类似。Xid 63代表retirement和remapped信息成功记录到了infoROM,后续将不再报错。而Xid 64代表该记录操作失败,后续遇到相同问题将继续报错。该报错信息一般不影响GPU设备的正常使用。

    74

    报错信息“NVLink Error”,表示GPU间通过NVLink或NVSwitch连接时出现问题,会影响GPU设备的正常使用。

    79

    报错信息“GPU has fallen off the bus”,表示GPU掉卡,硬件故障。

    93

    报错信息“Non-fatal violation of provisioned InfoROM wear limit”,表示GPU的InfoROM(存储设备配置和状态信息的只读存储器)的写入次数接近或超过了预设的磨损限制,一般不会影响GPU设备的正常使用。

    94

    报错信息“Contained ECC error occurred”,表示GPU成功抑制不可纠正的ECC错误(Uncorrectable ECC Error),避免错误扩散到整个系统。该报错信息一般不影响GPU设备的正常使用。

    95

    报错信息“Uncontained ECC error occurred”,表示GPU未能抑制不可纠正的ECC错误,且运行在该GPU的所有程序都已经受到影响。

    110

    报错信息“Security fault error”,表示硬件故障。

    119

    报错信息“GSP RPC Timeout”,表示GPU系统处理器超时。如果持续发生,需要重启GPU或节点

    120

    报错信息“GSP Error”,表示GPU系统处理器报错。如果持续发生,需要重启GPU或节点

    121

    报错信息“C2C Link corrected error”,表示C2C NVLink发生错误但已被纠正。您可以在合适的时间重启GPU,保证连接长期稳定。

    140

    报错信息“ECC unrecovered error”,表示GPU驱动程序在GPU内存中观察到不可纠正错误,需要重置GPU。

相关文档