排查 GPU 虚拟机问题


本页面介绍如何解决在挂接了 GPU 的 Compute Engine 上运行的虚拟机的问题。

如果您尝试创建挂接了 GPU 的虚拟机但收到错误,请查看排查资源可用性错误以及排查创建和更新虚拟机的问题

使用 NVIDIA DCGM 排查 GPU 虚拟机问题

NVIDIA 数据中心 GPU 管理器 (DCGM) 是一套工具,用于管理和监控集群环境中的 NVIDIA 数据中心 GPU。

如果您想使用 DCGM 排查 GPU 环境中的问题,请满足以下条件:

  • 确保您为挂接到虚拟机的 GPU 型号使用最新推荐的 NVIDIA 驱动程序。如需查看驱动程序版本,请参阅推荐的 NVIDIA 驱动程序版本
  • 确保您已安装最新版本的 DCGM。如需安装最新版本,请参阅 DCGM 安装

诊断问题

当您运行 dcgmi 诊断命令时,诊断工具报告的问题会包含针对问题采取行动的后续步骤。以下示例展示了 dcgmi diag -r memory -j 命令的可操作输出。

{
  ........
   "category":"Hardware",
   "tests":[
      {
         "name":"GPU Memory",
         "results":[
            {
               "gpu_id":"0",
               "info":"GPU 0 Allocated 23376170169
bytes (98.3%)",
               "status":"Fail",
               ""warnings":[
                  {
                     "warning":"Pending page
retirements together with a DBE were detected on GPU 0. Drain the GPU and reset it or reboot the node to resolve this issue.",
                     "error_id":83,
                     "error_category":10,
                     "error_severity":6
                  }
               ]
            }
  .........

从上述输出代码段中,您可以看到 GPU 0 有因不可恢复错误而导致的待处理的页面弃用。输出提供了唯一的 error_id 以及有关调试问题的建议。对于此示例输出,建议您排空 GPU 并重新启动虚拟机。在大多数情况下,按照输出内容中此部分中的说明操作有助于解决问题。

创建支持请求

如果您无法按照 dcgmi 诊断运行的输出提供的指导来解决问题,可以创建支持请求。在创建支持请求时,您需要提供以下信息:

  1. 运行的命令和返回的输出。
  2. 相关日志文件,例如主机引擎和诊断日志。如需收集所需的日志文件,您可以运行 gather-dcgm-logs.sh 脚本。

    对于基于 Debian 和 RPM 的系统上的默认安装,此脚本位于 /usr/local/dcgm/scripts

  3. 对于 dcgmi diag 失败,请提供失败的插件的统计信息文件。统计信息文件使用以下命名惯例:stats_PLUGIN_NAME.json

    例如,如果 pcie 插件失败,请添加名为 stats_pcie.json 的文件。

  4. NVIDIA 系统信息和驱动程序状态。如需收集此信息,您可以运行 nvidia-bug-report.sh 脚本。

    如果问题是由其他 NVIDIA 依赖项而非 DCGM 本身的 bug 引起的,运行此脚本还有助于进行其他调试。

  5. 有关在失败之前对您的环境所做的任何近期更改的详细信息。

Xid 消息

创建挂接 GPU 的虚拟机后,您必须在 GPU 虚拟机上安装 NVIDIA 设备驱动程序,以便应用可以访问 GPU。但这些驱动程序有时会返回错误消息。

Xid 消息是 NVIDIA 驱动程序的错误报告,输出到 Linux 虚拟机的操作系统内核日志或事件日志中。这些消息位于 /var/log/messages 文件中。

如需详细了解 Xid 消息(包括潜在原因),请参阅 NVIDIA 文档

以下部分介绍了如何处理一些按最常见的类型分组的 Xid 消息:GPU 内存错误、GPU 系统处理器 (GSP) 错误和非法内存访问错误。

GPU 内存错误

GPU 内存是 GPU 上可用的内存,可用于临时存储数据。GPU 内存受纠错代码 (ECC) 保护,它可以检测和纠正单位错误 (SBE),以及检测并报告双位错误 (DBE)。

在 NVIDIA A100 GPU 发布之前,支持动态页面弃用。对于 NVIDIA A100 及更高版本的 GPU 版本(例如 NVIDIA H100),引入了行重新映射错误恢复功能。ECC 默认处于启用状态。Google 强烈建议您将 ECC 保持启用状态。

以下是常见的 GPU 内存错误及其建议的解决方法。

Xid 错误消息 解决方法
Xid 48: Double Bit ECC
  1. 停止工作负载。
  2. 删除重新创建虚拟机。如果错误仍然存在,请向 Cloud Customer Care 提交支持请求。
Xid 63: ECC page retirement or row remapping recording event
  1. 停止工作负载。
  2. 重置 GPU。
Xid 64: ECC page retirement or row remapper recording failure

该消息包含以下信息:

Xid 64: All reserved rows for bank are remapped
  1. 停止工作负载。
  2. 删除重新创建虚拟机。如果错误仍然存在,请向 Cloud Customer Care 提交支持请求。

如果您至少同时收到以下 Xid 消息中的两条:

  • Xid 48
  • Xid 63
  • Xid 64

该消息包含以下信息:

Xid XX: row remap pending
  1. 停止工作负载。
  2. 重置 GPU。通过重置 GPU,可以完成行重新映射和页面停用过程并修复 GPU。
Xid 92: High single-bit ECC error rate 在 GPU 驱动程序更正一个可更正的错误后,系统将返回此 Xid 消息,它不会影响您的工作负载。此 Xid 消息仅供参考。对此,您无需执行任何操作
Xid 94: Contained ECC error
  1. 停止工作负载。
  2. 重置 GPU。
Xid 95: Uncontained ECC error
  1. 停止工作负载。
  2. 重置 GPU。

GSP 错误

GPU 系统处理器 (GSP) 是一个在 GPU 上运行的微控制器,用于处理一些低级别的硬件管理功能。

Xid 错误消息 解决方法
Xid 119: GSP RPC timeout
  1. 停止工作负载。
  2. 删除重新创建虚拟机。如果错误仍然存在,请收集 NVIDIA 错误报告并向 Cloud Customer Care 提交支持请求。
Xid 120: GSP error

非法的内存访问错误

如果应用遇到非法内存访问问题,系统会返回以下 Xid:

  • Xid 13: Graphics Engine Exception
  • Xid 31: GPU memory page fault

非法内存访问错误通常是由于工作负载尝试访问已释放或超出范围的内存导致的。这可能是由于某些问题(例如对无效指针或出站数组的解引用)导致的。

如需解决此问题,您需要调试应用。如需调试应用,您可以使用 cuda-memcheckCUDA-GDB

在极少数情况下,硬件降级可能会导致返回非法内存访问错误。如需确定问题是否出在您的硬件上,请使用 NVIDIA 数据中心 GPU 管理器 (DCGM)。您可以运行 dcgmi diag -r 3dcgmi diag -r 4 来运行不同级别的测试覆盖范围和时长。如果您发现问题与硬件有关,请向 Cloud Customer Care 提交支持请求。

其他常见的 Xid 错误消息

Xid 错误消息 解决方法
Xid 74: NVLINK error
  1. 停止工作负载。
  2. 重置 GPU。
Xid 79: GPU has fallen off the bus

这意味着驱动程序无法与 GPU 通信。

重新启动虚拟机。

重置 GPU

某些问题可能需要您重置 GPU。如需重置 GPU,请完成以下步骤:

  • 对于 N1、G2 和 A2 虚拟机,请运行 sudo reboot 来重新启动虚拟机。
  • 对于 A3 虚拟机,请运行 sudo nvidia-smi --gpu-reset

如果重置 GPU 后错误仍然存在,您需要删除重新创建虚拟机

如果在删除并重新创建后错误仍然存在,请向 Cloud Customer Care 提交支持请求,将虚拟机移到修复阶段

后续步骤

查看 GPU 机器类型