# GPU故障处理
在Kubernetes的环境中，GPU资源的管理复杂度高、故障诊断和恢复难度大，且宕机成本高。当某个GPU资源出现故障时，CCE集群会迅速上报，并根据事件信息提供单GPU故障后自动隔离功能，此时其他正常的GPU可以继续提供服务，尽可能减少业务上的损失。本文将介绍GPU常见的异常事件、隔离结果以及对应的解决方案，以便您快速响应故障，最大限度地减少宕机时间，保障业务应用的连续性和高性能。
#### 前提条件
- 集群版本在v1.27及以上。
- 如需将GPU事件同步上报至AOM，集群中需安装[云原生日志采集插件](https://support.huaweicloud.com/usermanual-cce/cce_10_0416.html)，您可前往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插件隔离事件]。
 表1CCE AI套件（NVIDIA GPU）插件异常事件 
| 事件原因                                         | 详细信息                                                                                                                                                                                                                                                                                        | 描述                                                                                                                                                                                                                                                    | 隔离结果           | 是否触发Pod驱逐 （需要提前开启[故障GPU的Pod自动驱逐功能](https://support.huaweicloud.com/usermanual-cce/cce_10_1023.html)） | 故障解决方案                                                     |
|:---|:---|:---|:---|:---|:---|
| 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显存重映射行数查询异常]              |
| GPUMemoryError     | 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错误总数过高]         |
| GPUMemoryError     | 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错误] |
| GPUMemoryError     | GPUServerId=xxx; MemoryErrorType=PendingRetiredPages; Device=xxx; UUID=xxx; SN=xxx; Message=The device has pending retired pages.                                                                                                                                                        | **GPU设备存在待隔离页**：系统将自动监测GPU设备中是否存在待隔离页，存在内存页未被隔离时，可能导致内存不一致或错误。                                                                                                                                                                                         | 不隔离            | 否                                                                                                                                  | [GPU设备存在待隔离页]                |
| GPUMemoryError     | 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异常]         |
| GPUXidError              | GPUServerId=xxx; XidErrorType=FatalXidError; Xid=xxx; Device=xxx; UUID=xxx; SN=xxx; Message=The device will go unhealthy.                                                                                                                                                              | **GPU设备存在**严重的**Xid错误** ：此类严重的Xid错误，需要进行故障隔离，目前设置的Xid为74和79。默认设置的Xid为74和79，您可以根据需求自定义，具体请参见[配置Xid严重错误](https://support.huaweicloud.com/usermanual-cce/cce_10_1023.html#cce_10_1023__section2062231714278)，仅需要修改"ENV_HEALTH_CHECK_XIDS"的"value"值即可。  | 隔离单点故障的GPU设备    | 是                                                                                                                                    | [GPU设备存在Xid错误]              |
| GPUXidError              | 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。默认设置的Xid为"13，31，43，45，68，137"，您可以根据需求自定义，具体请参见[配置Xid应用引发的错误](https://support.huaweicloud.com/usermanual-cce/cce_10_1023.html#cce_10_1023__section13478202712342)。 | 不隔离            | 是                                                                                                                                    | [GPU设备存在Xid错误]               |
| GPUXidError              | 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风扇的使用情况，风扇可能存在异常。                                                                                                                                                                                                         | 不隔离            | 否                                                                                                                                   | -                                                           |
| GPUHealthWarning                            | 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]的可用显存。
     ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
     由于GPU厂商的驱动程序，本身就会占用一定量的物理显存，量级在300MB左右，这属于正常现象。例如Tesla T4配套510.47.03，驱动程序默认会占用280MiB；而该显存占用与厂商的驱动程序版本也有一定相关性，例如535系列驱动比470系列占用更多。
     若发现GPU虚拟化的可用显存远小于GPU卡的物理显存，一般是因为存在一些非GPU虚拟化发放的容器，占用了显存。
     
  
  5. 通过[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)或kubectl命令，将目标节点的GPU负载排空。
  
  6. 执行**rmmod xgpu_km**，进行GPU虚拟化模块的删除。
  
  7. 通过[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)或kubectl命令，将目标节点的nvidia-gpu-device-plugin Pod进行删除。
  
  8. 等待nvidia-gpu-device-plugin Pod重建完成后，重新按照步骤[2]和步骤[3]进行结果核验。
   
 
 #### GPU Xid常见错误
Xid错误是NVIDIA驱动程序报告的异常，通过对Xid错误码的捕捉与分析，可以准确定位GPU硬件或驱动层面的故障，快速响应并排除故障。以下给出常见的Xid错误，更多详细信息可参考[Nvidia Xid Error](https://docs.nvidia.com/deploy/xid-errors/index.html)。
- 用户程序引起Xid错误：可能涉及程序错误或资源管理问题，具体请参见[表2 XID错误（用户程序）]。
   表2Xid错误（用户程序） 
  | 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。                                                                                                                   |
     
  
 
