DCGM 诊断

概述

NVIDIA 验证套件 (NVVS) 现在更名为 DCGM 诊断。从 DCGM v1.5 开始,将 NVVS 作为独立实用程序运行已被弃用,所有功能(包括命令行选项)均可通过 DCGM 命令行实用程序 ('dcgmi') 获得。为简洁起见,本文档的其余部分可能会交替使用 DCGM 诊断和 NVVS。

DCGM 诊断目标

DCGM 诊断旨在:

  1. 在生产环境中提供系统级工具,用于在部署工作负载之前评估集群的就绪水平。

  2. 提供多种运行模式:

    • 通过管理员或用户以纯文本交互方式运行。

    • 通过其他工具以易于解析的输出脚本化运行。

  3. 提供多个测试时间范围,以适应不同的准备情况或故障情况。

    • 一级测试用作就绪指标。

    • 二级测试在发生故障时用作尾声。

    • 三级和四级测试由管理员在事后分析时运行。

  4. 将以下概念集成到一个工具中,以发现部署、系统软件和硬件配置问题、基本诊断、集成问题和相对系统性能问题。

    • 部署和软件问题

      • NVML 库访问和版本控制

      • CUDA 库访问和版本控制

      • 软件冲突

    • 硬件问题和诊断

      • 待处理的页退役

      • PCIe 接口检查

      • NVLink 接口检查

      • 帧缓冲区和内存检查

      • 计算引擎检查

    • 集成问题

      • PCIe 重放计数器检查

      • 拓扑限制

      • 权限、驱动程序和 cgroups 检查

      • 基本功耗和热约束检查

    • 压力检查

      • 功耗和热压力

      • 吞吐量压力

      • 恒定的相对系统性能

      • 最大相对系统性能

      • 内存带宽

  5. 提供故障排除帮助

  6. 轻松集成到集群调度器和集群管理应用程序中

  7. 减少停机时间和失败的 GPU 作业

DCGM 诊断的范围之外

DCGM 诊断并非旨在:

  1. 提供全面的硬件诊断

  2. 主动修复问题

  3. 取代现场诊断工具。有关该过程,请参阅 https://docs.nvda.net.cn/deploy/hw-field-diag/index.html

  4. 促进任何 RMA 流程。有关这些程序,请参阅 https://docs.nvda.net.cn/deploy/rma-process/index.html

运行级别和测试

下表描述了 DCGM 诊断中每个级别运行的测试。

插件

测试名称

r1(短)
r2(中)
< 2 分钟
r3(长)
< 30 分钟
r4(超长)
1-2 小时

软件

软件

PCIe + NVLink

pcie

GPU 内存

内存

内存带宽

memory_bandwidth

诊断

diagnostic

定向压力

targeted_stress

定向功耗

targeted_power

内存压力

memtest

输入 EDPp

pulse

DCGM 诊断入门

命令行选项

各种命令行选项旨在控制常规执行参数,而对执行行为的详细更改包含在下一节中详述的配置文件中。

下表列出了 DCGM 诊断支持的各种选项。

短选项

长选项

参数

描述

-g

--group

groupId

要查询的设备组 ID。

--host

IP/FQDN

连接到指定的 IP 地址或完全限定域名。要连接到使用 -d(unix 套接字)启动的 host engine,请在 unix 套接字文件名前加上 unix:// 前缀。[默认值 = localhost]

-h

--help

显示用法信息并退出。

-r

--run

diag

运行诊断。(注意:编号较高的测试包含其下的所有测试。)

  • 1 - 快速(系统验证)

  • 2 - 中等(扩展系统验证)

  • 3 - 长(系统硬件诊断)

  • 4 - 扩展(更长时间运行的系统硬件诊断)

要运行的特定测试可以通过名称指定,多个测试可以逗号分隔列表的形式指定。例如,命令

dcgmi diag -r “pcie,diagnostic”

将同时运行 PCIe 和 Diagnostic 测试。

-p

--parameters

test_name.variable_name=variable_name

要为本次运行设置的测试参数。

-c

--configfile

full/path/to/config/file

配置文件的路径。

-f

--fakeGpuListfakeGpuList

诊断应在其上运行的 fake gpu 的逗号分隔列表。仅供内部/测试使用。不能与 -g/-i 一起使用。

-i

--gpuList

gpuList

诊断应在其上运行的 gpu 的逗号分隔列表。不能与 -g 一起使用。

-v

-verbose

显示每个测试的信息和警告。

statsonfail

仅在发生故障时输出统计信息文件

--debugLogFiledebug

文件

--statspath

插件统计信息路径

将插件统计信息写入给定路径,而不是当前目录

-d

--debugLevel

调试级别

调试级别(NONE、FATAL、ERROR、WARN、INFO、DEBUG、VERB 之一)。默认值:DEBUG。日志文件可以通过 –debugLogFile 参数指定。

-j

--json

以 json 格式打印输出。

--clocksevent-mask

指定应忽略哪些时钟事件原因。您可以提供逗号分隔的原因列表。例如,指定 'HW_SLOWDOWN,SW_THERMAL' 将忽略 HW_SLOWDOWN 和 SW_THERMAL 原因。或者,您可以指定忽略位掩码的整数值。对于位掩码,可以通过其位掩码的总和指定多个原因。例如,指定 '40' 将忽略 HW_SLOWDOWN 和 SW_THERMAL 原因。

有效的时钟事件原因及其对应的位掩码(在括号中给出)为:

  • HW_SLOWDOWN (8)

  • SW_THERMAL (32)

  • HW_THERMAL (64)

  • HW_POWER_BRAKE (128)

--throttle-mask

已弃用:请改用 --clocksevent-mask

--fail-early

为定向功耗、定向压力和 Diagnostic 测试启用提前失败检查。启用后,这些测试会在测试运行时每 5 秒检查一次故障(可以通过 –check-interval 参数修改),而不是在测试完成后执行单次检查。默认情况下禁用。

--check-intervalfailure

检查间隔

指定启用提前失败检查时,定向功耗、定向压力、SM 压力和 Diagnostic 测试应执行提前失败检查的间隔(以秒为单位)。默认值为每 5 秒一次。间隔必须介于 1 到 300 之间。

--iterations

迭代次数

指定要连续运行诊断的迭代次数。(必须大于 0。)

--ignore_rest

忽略此标志后面的其余标记参数。

配置文件

DCGM 诊断 (dcgmi diag) 配置文件是一个 YAML 格式的文本文件,用于控制各种测试和执行参数。

配置文件的通用格式如下所示:

version:
spec: dcgm-diag-v1
skus:
  - name: GPU-name
    id: GPU part number
    test_name1:
      test_parameter1: value
      test_parameter2: value
    test_name2:
      test_parameter1: value
      test_parameter2: value

H100 的标准配置文件如下所示:

version: "@CMAKE_PROJECT_VERSION@"
spec: dcgm-diag-v1
skus:
  - name: H100 80GB PCIe
    id: 2331
    targeted_power:
      is_allowed: true
      starting_matrix_dim: 1024.0
      target_power: 350.0
      use_dgemm: false
    targeted_stress:
      is_allowed: true
      use_dgemm: false
      target_stress: 15375
    sm_stress:
      is_allowed: true
      target_stress: 15375.0
      use_dgemm: false
    pcie:
      is_allowed: true
      h2d_d2h_single_pinned:
        min_pci_generation: 3.0
        min_pci_width: 16.0
      h2d_d2h_single_unpinned:
        min_pci_generation: 3.0
        min_pci_width: 16.0
    memory:
      is_allowed: true
      l1cache_size_kb_per_sm: 192.0
    diagnostic:
      is_allowed: true
      matrix_dim: 8192.0
    memory_bandwidth:
      is_allowed: true
      minimum_bandwidth: 1230000
    pulse_test:
      is_allowed: true

退出代码

dcgmi 命令行程序返回的退出代码与 dcgmReturn_t 枚举中的内部错误相匹配。但是,虽然这些是非正数(零表示成功),但退出代码是非负数,因此它们作为补码错误代码的无符号八位表示形式返回。例如,-1 将作为 255 返回。

此外,捕获的信号在返回代码中指示为 128 加上信号的值。

虽然理论上可以返回 dcgmReturn_t 中的任何值,但以下是当前在 dcgmi 及其模块中使用的值:

符号

描述

0

DCGM_ST_OK

成功

255

DCGM_ST_BADPARAM

传递给函数的参数错误

253

DCGM_ST_GENERIC_ERROR

通用的、未指定的错误

252

DCGM_ST_MEMORY

发生内存不足错误

251

DCGM_ST_NOT_CONFIGURED

设置未配置

250

DCGM_ST_NOT_SUPPORTED

功能不支持

249

DCGM_ST_INIT_ERROR

DCGM 初始化错误

248

DCGM_ST_NVML_ERROR

当 NVML 返回错误时

246

DCGM_ST_UNINITIALIZED

对象处于未定义状态

244

DCGM_ST_VER_MISMATCH

接收和理解的 API 之间的版本不匹配

243

DCGM_ST_UNKNOWN_FIELD

未知字段 ID

242

DCGM_ST_NO_DATA

没有可用数据

240

DCGM_ST_NOT_WATCHED

给定的字段 ID 未被缓存管理器更新

237

DCGM_ST_RESET_REQUIRED

GPU 需要重置

236

DCGM_ST_FUNCTION_NOT_FOUND

找不到请求的函数(仅绑定错误)

235

DCGM_ST_CONNECTION_NOT_VALID

与 host engine 的连接不再有效

233

DCGM_ST_GROUP_INCOMPATIBLE

所提供组的 GPU 彼此不兼容,无法执行请求的操作

232

DCGM_ST_MAX_LIMIT

已达到对象的最大限制

231

DCGM_ST_LIBRARY_NOT_FOUND

找不到 DCGM 库

227

DCGM_ST_REQUIRES_ROOT

当 host engine 以非 root 身份运行时,无法执行此操作

226

DCGM_ST_NVVS_ERROR

DCGM GPU 诊断已成功执行,但报告了错误。

225

DCGM_ST_INSUFFICIENT_SIZE

输入参数不够大

223

DCGM_ST_MODULE_NOT_LOADED

此请求由当前未加载的 DCGM 模块提供服务

221

DCGM_ST_GROUP_IS_EMPTY

此组为空,请求的操作在空组上无效

217

DCGM_ST_DIAG_ALREADY_RUNNING

诊断实例已在运行,在当前实例完成之前无法运行新的诊断。

215

DCGM_ST_DIAG_BAD_LAUNCH

启动 DCGM GPU 诊断时出错

209

DCGM_ST_CHILD_NOT_KILLED

在重试次数内无法杀死子进程

207

DCGM_ST_INSUFFICIENT_RESOURCES

没有足够的可用资源

205

DCGM_ST_NVVS_ISOLATE_ERROR

诊断返回一个错误,指示需要隔离

204

DCGM_ST_NVVS_BINARY_NOT_FOUND

在指定位置未找到 NVVS 二进制文件

203

DCGM_ST_NVVS_KILLED

NVVS 进程被信号终止

202

DCGM_ST_PAUSED

hostengine 和所有模块都已暂停

201

DCGM_ST_ALREADY_INITIALIZED

对象已初始化

198

DCGM_ST_NVVS_NO_AVAILABLE_TEST

NVVS 返回没有可用的测试 (NVVS_ST_TEST_NOT_FOUND)

143

信号 SIGTERM

程序已终止

131

信号 SIGQUIT

程序被要求退出

130

信号 SIGINT

程序被中断

129

信号 SIGHUP

通信链接已终止

随着创建更多插件,此列表可能会增长。

使用示例

自定义配置文件

可以使用 -c 选项覆盖默认配置文件。

$ dcgmi diag -r 2 -c custom-diag-tests.yaml

所需测试和参数包含在 custom-diag-tests.yaml 文件中。

测试和参数

在运行诊断时,可以直接指定特定的测试和参数。

$ dcgmi diag -r targeted_power -p targeted_power.target_power=300.0

迭代

DCGM 还支持使用 --iterations 选项在循环中运行测试套件。使用此选项可以增加测试的运行时长。

$ dcgmi diag -r pcie --iterations 3

日志记录

默认情况下,DCGM 将调试信息输出到存储在 /var/log/nvidia-dcgm/nvvs.log 下的日志中。

DCGM 还提供测试结果的 JSON 输出,这允许各种工具进行处理。

$ dcgmi diag -r pcie -j
...
{
  "category": "Integration",
  "tests": [
    {
      "name": "pcie",
      "results": [
        {
          "entity_group": "GPU",
          "entity_group_id": 1,
          "entity_id": 0,
          "info": [
            "GPU to Host bandwidth:\t\t13.53 GB/s",
            "Host to GPU bandwidth:\t\t12.05 GB/s",
            "bidirectional bandwidth:\t23.69 GB/s",
            "GPU to Host latency:\t\t0.791 us",
            "Host to GPU latency:\t\t1.201 us",
            "bidirectional latency:\t\t1.468 us"
          ],
          "status": "Pass"
        }
      ],
      "test_summary": {
        "status": "Pass"
      }
    }
  ]
}
...

插件概述

NVIDIA 验证套件由一系列插件组成,每个插件都旨在完成不同的目标。

部署插件

部署插件的目的是验证计算环境是否已准备好运行 CUDA 应用程序,并且能够加载 NVML 库。

先决条件

  • LD_LIBRARY_PATH 必须包含 CUDA 库的路径,对于 CUDA 的 X.Y 版本,通常是 /usr/local/cuda-X.Y/lib64,可以通过运行 export LD_LIBRARY_PATH=/usr/local/cuda-X.Y/lib64 来设置

  • Linux nouveau 驱动程序不得运行,并且应该被列入黑名单,因为它会与 NVIDIA 驱动程序冲突。

配置参数

目前没有。

统计输出

目前没有。

失败

如果发生以下情况,插件将失败:

  • 目标 GPU 的相应设备节点被操作系统(例如 cgroups)阻止,或者在当前用户没有 r/w 权限的情况下存在。

  • 无法加载 NVML 库 libnvidia-ml.so

  • 无法加载 CUDA 运行时库

  • 发现 nouveau 驱动程序已加载

  • 目标 GPU 上有任何页面正在等待退役

  • 目标 GPU 上有任何待处理的行重映射或失败的行重映射。

  • 当插件运行时,目标 GPU 上正在运行任何其他图形进程

诊断插件

概述

诊断插件是三级测试的一部分。它在将数据复制到帧缓冲区中的各个地址时执行大型矩阵乘法,并检查数据是否可以正确写入和读取。

此测试执行大型矩阵乘法;默认情况下,它将在 64 位、32 位和 16 位精度之间交替运行这些乘法。它还将遍历帧缓冲区,将值写入不同的地址,并确保值被正确写入和读取。

测试描述

此过程将通过让 GPU 消耗大量功率并在五分钟(默认情况下)内提供高吞吐量来对 GPU 施加压力。在此过程中,将监视 GPU 的所有标准错误(XID、温度违规、不可纠正的内存错误等)以及写入和读取数据的正确性。

支持的参数

下表列出了诊断插件的全局参数:

参数名称

类型

默认值

描述

max_sbe_errors

Double

这是 SBE 被视为错误的阈值。

test_duration

Double

180.0

这是测试应运行的时间,以秒为单位。

use_doubles

字符串

False

指示应使用双精度浮点数而不是单精度浮点数。

temperature_max

Double

30.0

这是测试期间允许的最大温度,以度为单位。

is_allowed

布尔值

False

这指示是否允许运行指定的测试。

matrix_dim

Double

2048.0

这是用于 S/Dgemm 的矩阵的起始维度。

precision

字符串


半精度 单精度 双精度

这是要使用的精度:半精度、单精度或双精度。

gflops_tolerance_pcnt

Double

0.0

这是低于平均值的百分比,低于此值时,gflops 将被视为错误。

示例命令

运行快速诊断

运行诊断 5 分钟

$ dcgmi diag -r 3 -p diagnostic.test_duration=300.0

运行诊断,如果最高温度超过 28 度则停止

$ dcgmi diag -r 3 -p diagnostic.temperature_max=28.0

运行诊断,矩阵运算的起始维度较小

$ dcgmi diag -r 3 -p diagnostic.matrix_dim=1024.0

运行诊断,如果 GPU 报告的 gflops 不在所有 GPU 平均 gflops 的 60% 以内,则报告错误

$ dcgmi diag -r 3 -p diagnostic.gflops_tolerance_pcnt=0.60

运行诊断,使用双精度

$ dcgmi diag -r 3 -p diagnostic.precision=double

失败条件

  • 如果在测试期间发生不可恢复的内存错误、温度违规或 XID,则测试将失败。

PCIe - GPU 带宽插件

概述

PCIe 插件的目的是对主机到 GPU 以及系统上 GPU 之间的通信施加压力。它检查 p2p(对等)的正确性、写入数据时的任何错误或重放,并且可以用于测量 GPU 和主机之间以及 GPU 之间带宽和延迟。

前提条件

子测试

该插件包含多个自测,每个自测都衡量带宽或延迟的不同方面。每个子测试都有一对 pinned/unpinned 或 p2p enabled/p2p disabled 的相同测试。Pinned/unpinned 测试在主机和 GPU 之间复制数据时使用 pinned 或 unpinned 内存。

如果可能,此插件将使用 NvLink 在 GPU 之间进行通信。否则,GPU 之间的通信将通过 PCIe 进行

每个子测试都用一个标签表示,该标签既用于指定子测试的配置参数,也用于输出子测试的统计信息。P2p enabled/p2p disabled 测试启用或禁用 GPU 直接相互写入和读取,而不是通过 PCIe 总线。

子测试标签

Pinned/Unpinned P2P 启用/P2P 禁用

描述

h2d_d2h_single_pinned

Pinned

设备 <-> 主机带宽,一次一个 GPU

h2d_d2h_single_unpinned

Unpinned

设备 <-> 主机带宽,一次一个 GPU

h2d_d2h_latency_pinned

Pinned

设备 <-> 主机延迟,一次一个 GPU

h2d_d2h_latency_unpinned

Unpinned

设备 <-> 主机延迟,一次一个 GPU

p2p_bw_p2p_enabled

P2P 启用

设备 <-> 设备带宽,一次一个 GPU 对

p2p_bw_p2p_disabled

P2P 禁用

设备 <-> 设备带宽,一次一个 GPU 对

p2p_bw_concurrent_p2p_enabled

P2P 启用

设备 <-> 设备带宽,并发,专注于 GPU 之间可能直接连接的 GPU 之间的带宽 -> 对于每个 (index / 2) 和 (index / 2)+1

p2p_bw_concurrent_p2p_disabled

P2P 禁用

设备 <-> 设备带宽,并发,专注于 GPU 之间可能直接连接的 GPU 之间的带宽 -> 对于每个 (index / 2) 和 (index / 2)+1

1d_exch_bw_p2p_enabled

P2P 启用

设备 <-> 设备带宽,并发,专注于 GPU 之间的带宽,每个 GPU 要么发送到索引高于自身的 GPU (l2r),要么发送到索引低于自身的 GPU (r2l)

1d_exch_bw_p2p_disabled

P2P 禁用

设备 <-> 设备带宽,并发,专注于 GPU 之间的带宽,每个 GPU 要么发送到索引高于自身的 GPU (l2r),要么发送到索引低于自身的 GPU (r2l)

p2p_latency_p2p_enabled

P2P 启用

设备 <-> 设备延迟,一次一个 GPU 对

p2p_latency_p2p_disabled

P2P 禁用

设备 <-> 设备延迟,一次一个 GPU 对

下表列出了 PCIe 插件的全局参数。

参数名称

类型

默认值

描述

test_pinned

布尔值

True

包括测试使用 pinned 内存的子测试。

test_unpinned

布尔值

True

包括测试使用 unpinned 内存的子测试。

test_p2p_on

布尔值

True

运行启用 GPU 之间对等 (P2P) 内存传输的相关子测试。

test_p2p_off

布尔值

True

运行禁用 GPU 之间对等 (P2P) 内存传输的相关子测试。

max_pcie_replays

Float

80.0

此插件持续期间每个 GPU 允许的最大 PCIe 重试次数。这基于 PCIe Gen 3.0 的预期重试率低于每分钟,假设此插件运行时间少于一分钟,并允许失败前重试 10 倍。

下表列出了 PCIe 插件特定子测试的参数。

参数名称

默认值

子测试

描述

min_bandwidth

0

h2d_d2h_single_pinned, h2d_d2h_single_unpinned, h2d_d2h_concurrent_pinned, h2d_d2h_concurrent_unpinned

此子测试必须达到的最小带宽,单位为 GB/s。

max_latency

100,000

h2d_d2h_latency_pinned, h2d_d2h_latency_unpinned

此子测试不能超过的延迟,单位为微秒。

min_pci_generation

1.0

h2d_d2h_single_pinned, h2d_d2h_single_unpinned

GPU 必须达到或超过才能通过此子测试的最小允许 PCI 代数。

min_pci_width

1.0

h2d_d2h_single_pinned, h2d_d2h_single_unpinned

GPU 必须达到或超过才能通过此子测试的最小允许 PCI 位宽。例如,16x = 16.0。

内存测试诊断

概述

从 2.4.0 开始,DCGM 诊断支持额外的 4 级诊断 (-r 4)。这些额外诊断中的第一个是 memtest。与 memtest86 类似,DCGM memtest 将使用各种测试模式来测试 GPU 内存。这些模式中的每一种都给出一个单独的测试,管理员可以启用和禁用它们。

测试描述

注意

测试运行时间是指在单个 A100 40gb GPU 上单次迭代的平均秒数。

Test0 [Walking 1 bit] - 此测试一次更改内存中的一位,以查看它是否转到不同的内存位置。它旨在测试地址线。运行时间:约 3 秒。

Test1 [Address check] - 每个内存位置都填充了自己的地址,然后进行检查,以查看每个内存位置中的值是否仍然与地址一致。运行时间:< 1 秒。

Test 2 [Moving inversions, ones&zeros] - 此测试使用 memtest86 中的移动反转算法,模式为全 1 和全 0。运行时间:约 4 秒。

Test 3 [Moving inversions, 8 bit pat] - 与测试 1 相同,但使用 8 位宽的“walking”1 和 0 模式。运行时间:约 4 秒。

Test 4 [Moving inversions, random pattern] - 与测试 1 相同的算法,但数据模式是随机数及其补码。总共使用 60 个模式。随机数序列在每次传递中都不同,因此多次传递可以提高有效性。运行时间:约 2 秒。

Test 5 [Block move, 64 moves] - 此测试移动内存块。内存使用每 8 字节反转的移位模式进行初始化。然后移动这些内存块。移动完成后,检查数据模式。运行时间:约 1 秒。

Test 6 [Moving inversions, 32 bit pat] - 这是移动反转算法的变体,它为每个连续地址将数据模式向左移动一位。为了使用所有可能的数据模式,在测试期间进行了 32 次传递。运行时间:约 155 秒。

Test 7 [Random number sequence] - 使用随机模式初始化 1MB 的内存块。这些模式及其补码用于对其余内存进行移动反转测试。运行时间:约 2 秒。

Test 8 [Modulo 20, random pattern] - 生成一个随机模式。此模式用于设置内存中每 20 个内存位置。其余内存位置设置为模式的补码。重复此操作 20 次,每次都将要设置模式的内存位置向右移动。运行时间:约 10 秒。

Test 9 [Bit fade test, 2 patterns] - 位衰减测试使用模式初始化所有内存,然后休眠 1 分钟。然后检查内存,以查看是否有任何内存位发生更改。使用全 1 和全 0 模式。运行时间:约 244 秒。

Test10 [Memory stress] - 生成一个随机模式,并启动一个大型内核以将所有内存设置为该模式。在前一个写入内核之后立即启动一个新的读取和写入内核,以检查内存中是否有任何错误,并将内存设置为补码。对于一个模式,此过程重复 1000 次。内核的编写旨在实现全局内存和 GPU 之间的最大带宽。运行时间:约 6 秒。

注意

默认情况下,Test7 和 Test10 交替运行 10 分钟。如果检测到任何错误,诊断将失败。

支持的参数

参数

语法

默认值

test0

boolean

false

test1

boolean

false

test2

boolean

false

test3

boolean

false

test4

boolean

false

test5

boolean

false

test6

boolean

false

test7

boolean

true

test8

boolean

false

test9

boolean

false

test10

boolean

true

test_duration

seconds

600

示例命令

运行 test7 和 test10 10 分钟(这是默认值)

$ dcgmi diag -r 4

串行运行每个测试 1 小时,然后显示结果

$ dcgmi diag -r 4 \
   -p memtest.test0=true\;memtest.test1=true\;memtest.test2=true\;memtest.test3=true\;memtest.test4=true\;memtest.test5=true\;memtest.test6=true\;memtest.test7=true\;memtest.test8=true\;memtest.test9=true\;memtest.test10=true\;memtest.test_duration=3600

运行 test0 一分钟 10 次,每分钟显示结果

$ dcgmi diag \
   --iterations 10 \
   -r 4 \
   -p memtest.test0=true\;memtest.test7=false\;memtest.test10=false\;memtest.test_duration=60

脉冲测试诊断

概述

脉冲测试是新的 4 级测试的一部分。脉冲测试旨在波动功耗,以在板上产生电流尖峰,以确保电源完全正常工作并能处理电流的宽幅波动。

测试描述

默认情况下,该测试运行具有高瞬态的内核,以便在流向 GPU 的电流中产生尖峰。默认参数已通过示波器测量验证,可产生最坏情况下的故障。

该测试迭代运行不同的内核,同时调整内部参数以确保产生尖峰;跨 GPU 的工作同步以对电源施加额外的压力。


参数

描述

默认值

test_duration

一次迭代花费的秒数。这不是测试将花费的确切时间。

60

patterns

指定脉冲测试应使用的逗号分隔的模式索引列表。有效索引取决于 SKU 的类型。Hopper:0-22 Ampere / Volta/ Ada:0-20

All

注意

在某些情况下,对于 DCGM 2.4 和 DCGM 3.0,用户在运行脉冲测试时可能会遇到以下问题

| Pulse Test | Fail - All |
| Warning | GPU 0There was an internal error during the t |
| | est: 'The pulse test exited with non-zero sta |
| | tus 1', GPU 0There was an internal error duri |
| | ng the test: 'The pulse test reported the err |
| | or: Exception raised during execution: Faile |
| | d opening file ubergemm.log for writing: Perm |
| | ission denied terminate called after throwing |
| | an instance of 'boost::wrapexcept<boost::pro |
| | perty_tree::xml_parser::xml_parser_error>' |
| | what(): result.xml: cannot open file ' |

当运行 GPU 诊断时,默认情况下,DCGM 会降低权限并使用(非特权)服务帐户来运行诊断。如果服务帐户没有对运行诊断的目录的写入访问权限,则用户可能会遇到此问题。总而言之,当以下两个条件都为真时,会发生此问题

  1. nvidia-dcgm 服务处于活动状态,并且 nv-hostengine 进程正在运行(并且未对 DCGM 的默认安装配置进行任何更改)

  2. 用户尝试运行 dcgmi diag -r 4。在这种情况下,dcgmi diag 连接到正在运行的 nv-hostengine(默认情况下在 /root 下启动),因此脉冲测试无法创建任何日志。

此问题将在 DCGM 的未来版本中修复。在此期间,用户可以执行以下任一操作来解决此问题

  1. 在运行 pulse_test 之前停止 nvidia-dcgm 服务

    $ sudo systemctl stop nvidia-dcgm
    

    现在运行 pulse_test

    $ dcgmi diag -r pulse_test
    

    诊断完成后,重新启动 nvidia-dcgm 服务

    $ sudo systemctl restart nvidia-dcgm
    
  2. 编辑 systemd 单元服务文件以包含 WorkingDirectory 选项,以便服务在 nvidia-dcgm 用户可写入的位置启动(确保在下面的示例中显示的目录 /tmp/dcgm-temp 已创建)

    [Service]
    
     ...
    
     WorkingDirectory=/tmp/dcgm-temp
     ExecStart=/usr/bin/nv-hostengine -n --service-account nvidia-dcgm
    
     ...
    

    重新加载 systemd 配置并启动 nvidia-dcgm 服务

    $ sudo systemctl daemon-reload
    
    $ sudo systemctl start nvidia-dcgm
    

示例命令

运行整个诊断套件,包括脉冲测试

$ dcgmi diag -r 4

仅运行脉冲测试

$ dcgmi diag -r pulse_test

仅运行脉冲测试,但频率较低

$ dcgmi diag -r pulse_test -p pulse_test.freq0=3000

仅以较低频率和较短时间运行脉冲测试

$ dcgmi diag -r pulse_test -p "pulse_test.freq0=5000;pulse_test.test_duration=180"

故障条件

  • 如果电源单元无法处理电流尖峰,则脉冲测试将失败。

  • 如果在测试期间发生无法恢复的内存错误、温度违规或 XID,它也会失败。

扩展实用程序诊断 (EUD)

从 DCGM 3.1 开始,扩展实用程序诊断或 EUD 作为新插件提供。安装后,它作为单独的测试套件提供,并且也包含在 DCGM 诊断的级别 3 和 4 中。EUD 提供各种测试,用于对 GPU 子系统执行以下检查

  • 确认 GPU 中的数值处理引擎

  • 与 GPU 之间数据传输的完整性

  • CUDA 程序可用的完整板载内存地址空间的覆盖率

支持的产品

EUD 支持以下 GPU 产品

  • NVIDIA V100 PCIe

  • NVIDIA V100 SXM2 (PG503-0201 和 PG503-0203)

  • NVIDIA V100 SXM3

  • NVIDIA A100-SXM-40GB

  • NVIDIA A100-SXM-80GB

  • NVIDIA A100-PCIe-80GB

  • NVIDIA A100 OAM (PG509-0200 和 PG509-0210)

  • NVIDIA A800 SXM

  • NVIDIA A800-PCIe-80GB

  • NVIDIA H100-PCIe-80GB

  • NVIDIA H100-SXM-80GB (HGX H100)

  • NVIDIA H100-SXM-96GB

  • NVIDIA HGX H100 4-GPU 64GB

  • NVIDIA HGX H100 4-GPU 80GB

  • NVIDIA HGX H100 4-GPU 94GB

  • NVIDIA HGX H800 4-GPU 80GB

  • NVIDIA L40

  • NVIDIA L40S

  • NVIDIA L4

EUD 仅在 R525 及更高版本的驱动程序分支上受支持。对其他产品和驱动程序分支的支持将在未来的版本中添加。

包含的测试

EUD 支持六种不同的测试套件,目标是不同类型的 GPU 功能

  • 计算 : 计算测试套件主要侧重于在 GPU 上使用不同的数值表示(整数、双精度浮点数等)运行矩阵乘法指令的测试。这些测试通常以两种不同的方式运行

    • 生成一致且稳定的功耗的静态恒定工作负载

    • 脉冲工作负载

    除了矩阵乘法测试外,还有几个杂项测试,侧重于练习与计算相关的其他功能(例如,指令测试、计算视频测试等)

  • 图形 : 图形测试套件侧重于测试 GPU 的 2D 和 3D 渲染引擎

  • 内存 : 内存测试套件验证 GPU 内存接口。内存套件中的测试验证 GPU 内存可以在正常运行和各种类型的压力下正常工作,而不会出现任何错误。

  • 高速输入/输出 (HSIO) : HSIO 测试侧重于验证 NVLink 和 PCIE 功能,主要侧重于数据传输测试

  • 杂项 : 杂项测试套件运行不属于任何其他类别的测试。此类别中的大多数测试都是板特定的测试,用于验证板上与 GPU 无关的项目,例如电压调节器编程或板配置。

  • 默认 : 默认测试套件在未显式指定其他测试套件时运行,并将运行来自每个其他测试套件的一个或多个测试

EUD 入门

注意

使用 EUD 时,以下先决条件适用

  • EUD 版本必须与系统上安装的 NVIDIA 驱动程序版本匹配。 更新 NVIDIA 驱动程序时,还必须将 EUD 更新到相应的版本。

  • 在运行 EUD 之前,应禁用多实例 GPU (MIG) 模式。要禁用 MIG 模式,请参阅 nvidia-smi 手册页

    $ nvidia-smi mig --help
    
  • 运行 EUD 时,不应使用任何 GPU 遥测(通过 NVML/DCGM API 或使用 nvidia-smi dmon/ dcgmi dmon)。EUD 与驱动程序大量交互,争用会影响测试并可能导致超时。

支持的部署模型

EUD 仅在以下部署模型中受支持

部署模型

描述

支持

裸机

直接在系统上运行,没有抽象层(即 VM、容器化等)

直通虚拟化(又名“完全直通”)

当 GPU 和 NvSwitch 都“直通”到 VM 时。VM 独占访问设备

  • 单租户 VM:是

  • 多租户 VM:是,无 NvLink

  • 从主机执行:否

共享 nvswitch

GPU 直通到 VM,但 NvSwitch 由服务 VM 拥有

  • 从 VM 执行:是

  • 从服务 VM 执行:否

  • 从主机执行:否

安装 EUD 软件包

使用 Linux 发行版风格的相应软件包管理器安装 NVIDIA EUD 软件包。

在此版本中,EUD 二进制文件通过 Linux 存档提供。按照以下步骤开始操作

  • 将存档解压到 /usr

  • 将所有权和组更改为 root

    $ sudo chown -R root /usr/share/nvidia \
       && sudo chgrp -R root /usr/share/nvidia
    
  • 现在继续运行 EUD

EUD 的文件应安装在 /usr/share/nvidia/diagnostic/

运行 EUD

在受支持的 GPU 产品上,默认情况下,DCGM 将运行 EUD 作为级别 3 和 4 的一部分,并具有两个单独的 EUD 测试配置文件

  1. 在运行级别 3 (dcgmi diag -r 3) 中,EUD 测试的运行时间少于 5 分钟(至少运行来自每个子测试套件的一个测试)

  2. 在运行级别 4 (dcgmi diag -r 4) 中,EUD 测试的运行时间约为 20 分钟(运行所有测试套件)

注意

上面提供的时间只是 EUD 测试的估计运行时间。-r 3-r 4 的总运行时间会更长,因为它们包含其他测试。

默认情况下,EUD 将报告第一个失败测试的错误并停止。有关详细信息,请参阅 run_on_error

EUD 也可以通过 dcgmi diag -r eud 与 DCGM 运行级别分开运行,它运行与级别 3 相同的一组测试

自定义选项

EUD 支持可选的命令行参数,可以在运行期间指定。

例如,要运行内存和计算测试

$ dcgmi diag -r eud -p "eud.passthrough_args='run_tests=compute,memory'"

-r eud 选项支持以下参数

选项

描述

eud.suite_level=4

启用完整的 EUD 测试配置文件(约 20 分钟),并允许使用 run_tests 参数自定义测试。如果未指定此选项,则使用默认的 EUD 测试配置文件(约 5 分钟)。

eud.passthrough_args

允许对 EUD 诊断测试进行其他控制。请参阅本文档后面的表格。

下表提供了 eud.passthrough_args 支持的其他控制参数

选项

描述

device=<n>

测试第 n 个设备

logfilename=<filename-path>[_%r_%s]

指定除默认值之外的唯一日志文件名。示例:logfilename=/var/log/mylogfile.log

%r 将评估为测试状态,并将为 PASS 或 FAIL %s 将评估为正在测试的设备之一的序列号。示例:logfilename=mylogfile_%r_%s.log

默认情况下,日志在 /usr/share/nvidia/diagnostic 下创建,前缀为 fielddiag

pciid=<w:x:y:z>

指定要测试的单个 GPU,其中 w、x、y 和 z 是十六进制数字。

  • w:PCI 域(必需)

  • x:PCI 总线

  • y:设备

  • z:功能

示例:pciid=0:2:0.0

pci_devices=<w:x:y.z>,…

指定要测试的 GPU 子集,其中 w、x、y 和 z 是十六进制数字。每个 GPU 地址以逗号分隔。示例:pci_devices=0002:03:00.0,0003:04:00.0,0004:05:00.0

run_tests=<test>,…

指定要运行的测试子集。每个测试都以逗号分隔,并且是以下测试之一

  • misc:杂项板级测试

  • memory:GPU 内存验证

  • graphics:3D 引擎验证

  • compute:计算引擎验证

  • hsio:高速 I/O(例如 NVLink)验证

  • all:运行所有测试(等效于 run_tests=misc,memory,graphics,compute,hsio)

如果未指定,则至少运行来自每个单独子测试的一个测试

示例:run_tests=misc,compute

topology_file=<file>

覆盖要使用的默认 NVSwitch 拓扑文件。如果此参数不存在,则将使用系统拓扑文件(由驱动程序安装到 /usr/share/nvidia/nvswitch/ 中),如果存在。

示例:run_tests=topology_file

run_on_error

如果存在此参数,即使请求的测试之一发生错误,EUD 也会继续运行,并且仅在完成所有请求的测试后才报告所有失败测试的错误。

如果未指定该选项,EUD 将报告第一个失败测试的错误并停止。

skip_nvlink

如果存在此选项,则将跳过所有 NVLink 接口的测试

日志记录

默认情况下,DCGM 将 EUD 的运行日志记录在 /tmp/dcgm 下,其中生成两个文件

  • dcgm_eud.log - 此纯文本文件包含 EUD 测试运行的 stdout 日志

  • dcgm_eud.mle - 此二进制文件包含 EUD 测试的结果

可以通过运行 /usr/share/nvidia/diagnostic 下的 mla 二进制文件将 MLE 文件解码为 JSON 格式输出。有关选项和生成的报告的更多信息,请参阅该目录中标题为“MLA JSON 报告解码”的文档。

CPU 扩展实用程序诊断 (CPU EUD)

从 DCGM 3.3.7 开始,CPU 扩展实用程序诊断或 CPU EUD 作为一项新测试提供。安装后,它作为单独的测试套件提供。DCGMI Diag CPU EUD 允许管理员测试和报告系统中潜在的问题。

支持的产品

CPU EUD 支持以下 Nvidia 产品

  • Nvidia Grace CPU

包含的测试

CPU EUD 支持三个不同的选项,目标是 CPU 功能的各个方面

  • CPU

    CPU 测试套件侧重于几个关键领域,以确保 CPU 的可靠性和性能。这包括旨在验证数据正确性、监视错误计数以及验证 CPU 在不同条件下的性能的测试。

  • 内存

    CPU EUD 的内存测试套件验证 CPU 内存接口。测试验证本地和远程 NUMA 内存节点,利用内存的全部大小,以确保内存可以正常工作,而不会出现错误,并具有高性能输出。

  • C2C / Clink

    利用远程内存测试来饱和 C2C / Clink 总线。

  • PCIE

    PCIE 测试套件通过检查链路功能并确保稳定的性能来验证 PCIE 接口,包括在主机和设备之间保持最佳运行的同时重新训练链路的能力。

  • 杂项

    杂项测试套件运行不属于任何其他类别的测试。此类别中的大多数测试都是系统特定的测试,用于验证 CPU(例如,CPU 插槽号、CPU 编号、CPU 最大/最小 MHz)和内存硬件的配置和功能,以确保正确识别和运行组件。

注意

默认情况下,CPU EUD 将运行来自每个其他测试套件的一个或多个测试(除非另有说明)。

CPU EUD 入门

安装 CPU EUD 软件包

使用 Linux 发行版风格的相应软件包管理器安装 Nvidia CPU EUD 软件包。

  • 检查已安装的软件包并删除输出中显示的所有软件包

    $ dpkg -l | grep cpueud
    // Example:
    // ii  cpueud-535                                        535.169-1  arm64  NVIDIA End-User cpueud
    // ii  cpueud-local-tegra-repo-ubuntu2204-535.169-mode1  1.0-1      arm64  cpueud-local-tegra repository configuration files
    
    $ sudo dpkg --purge <found packages>
    // Example:
    // $ sudo dpkg --purge cpueud-local-tegra-repo-ubuntu2204-535.169-mode1
    // $ sudo dpkg --purge cpueud-535
    
  • 安装本地 repo 软件包

    $ sudo dpkg -i cpueud-local-tegra-repo-ubuntu2204-$VERSION-mode1_1.0-1_arm64.deb
    // $VERSION: The version number of the package you are installing. Replace $VERSION with the actual version number of the package you're using.
    // Example:
    // $ sudo dpkg -i cpueud-local-tegra-repo-ubuntu2204-535.169-mode1_1.0-1_arm64.deb
    
  • 将密钥环文件复制到正确的位置,确切的复制命令将在 dpkg 命令的输出中。

    $ sudo cp /var/cpueud-local-tegra-repo-ubuntu2204-535.169/cpueud-local-tegra-FFCE45E1-keyring.gpg /usr/share/keyrings/
    
  • 更新 apt-get 并使用它安装 cpueud

    $ sudo apt-get update
    $ sudo apt-get install cpueud
    

EUD 的文件应安装在 /usr/share/nvidia/cpu/diagnostic/

运行 CPU EUD

语法
# dcgmi diag -r cpu_eud [options]

日志记录

默认情况下,DCGM 将 EUD 的运行日志记录在 /var/log/nvidia-dcgm/ 下,其中生成三个文件

  • dcgm_cpu_eud_stdout.txt - 此纯文本文件包含 CPU EUD 测试运行的 stdout 日志

  • dcgm_cpu_eud_stderr.txt - 此纯文本文件包含 CPU EUD 测试运行的 stderr 日志

  • dcgm_cpu_eud.log - 此文件是 CPU EUD 测试运行的加密日志

您还可以指定 cpu_eud.tmp_dir 来设置要存储日志文件的目录。

命令用法

默认

要以表格格式获取结果,请使用以下命令

# dcgmi diag -r cpu_eud
示例输出
  • 通过案例

Successfully ran diagnostic for group.
+---------------------------+------------------------------------------------+
| Diagnostic                | Result                                         |
+===========================+================================================+
|-----  Metadata  ----------+------------------------------------------------|
| DCGM Version              | 4.0.0                                          |
| Number of CPUs Detected   | 1                                              |
| CPU EUD Test Version      | eud.535.161                                    |
+-----  Hardware  ----------+------------------------------------------------+
| cpu_eud                   | Pass                                           |
|                           | CPU0: Pass                                     |
+---------------------------+------------------------------------------------+
  • 失败案例

Successfully ran diagnostic for group.
+---------------------------+------------------------------------------------+
| Diagnostic                | Result                                         |
+===========================+================================================+
|-----  Metadata  ----------+------------------------------------------------|
| DCGM Version              | 4.0.0                                          |
| Number of CPUs Detected   | 1                                              |
| CPU EUD Test Version      | eud.535.161                                    |
+-----  Hardware  ----------+------------------------------------------------+
| cpu_eud                   | Fail                                           |
|                           | CPU0: Fail                                     |
| Warning: CPU0             | Error : bad command line argument              |
+---------------------------+------------------------------------------------+
JSON 输出

要以 JSON 格式获取结果,请使用以下命令

# dcgmi diag -r cpu_eud -j

tests 中元素的 JSON 架构

{
  "$schema": "https://json-schema.fullstack.org.cn/schema#",
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity_group": {
            "type": "string"
          },
          "entity_group_id": {
            "type": "integer"
          },
          "entity_id": {
            "type": "integer"
          },
          "status": {
            "type": "string"
          },
          "info": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "error_category": {
                  "type": "integer"
                },
                "error_id": {
                  "type": "integer"
                },
                "error_severity": {
                  "type": "integer"
                },
                "warning": {
                  "type": "string"
                }
              },
              "required": [
                "error_category",
                "error_id",
                "error_severity",
                "warning"
              ]
            }
          }
        },
        "required": [
          "entity_group",
          "entity_group_id",
          "entity_id",
          "status"
        ]
      }
    },
    "test_summary": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string"
        },
        "info": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "warnings": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "error_category": {
                "type": "integer"
              },
              "error_id": {
                "type": "integer"
              },
              "error_severity": {
                "type": "integer"
              },
              "warning": {
                "type": "string"
              }
            },
            "required": [
              "error_category",
              "error_id",
              "error_severity",
              "warning"
            ]
          }
        }
      },
      "required": [
        "status"
      ]
    }
  },
  "required": [
    "name",
    "results",
    "test_summary"
  ]
}
示例输出
  • 通过案例

{
  "category": "Hardware",
  "tests": [
    {
      "name": "cpu_eud",
      "results": [
        {
          "entity_group": "CPU",
          "entity_group_id": 7,
          "entity_id": 0,
          "status": "Pass"
        },
        {
          "entity_group": "CPU",
          "entity_group_id": 7,
          "entity_id": 1,
          "status": "Skip"
        }
      ],
      "test_summary": {
        "status": "Pass"
      }
    }
  ]
}
  • 失败案例

{
  "category": "Hardware",
  "tests": [
    {
      "name": "cpu_eud",
      "results": [
        {
          "entity_group": "CPU",
          "entity_group_id": 7,
          "entity_id": 0,
          "status": "Fail",
          "warnings": [
            {
              "error_category": 7,
              "error_id": 95,
              "error_severity": 2,
              "warning": "Error : bad command line argument"
            }
          ]
        },
        {
          "entity_group": "CPU",
          "entity_group_id": 7,
          "entity_id": 1,
          "status": "Skip"
        }
      ],
      "test_summary": {
        "status": "Fail"
      }
    }
  ]
}

自动化 DCGM 诊断失败的响应

概述

基于 DCGM 诊断的自动化工作流程可以使站点更有效地处理 GPU 错误。可以使用 API 或解析 CLI 返回的 JSON 来获取用于确定错误严重性和潜在后续步骤的附加数据。除了简单地报告诊断期间发生的错误的易于理解的字符串之外,每个错误还包括一个特定的 ID、严重性和类别,这些在决定如何处理故障时可能很有用。

这些枚举的最新版本可以在 dcgm_errors.h 中找到。

错误类别枚举

DCGM_FR_EC_NONE

0

DCGM_FR_EC_PERF_THRESHOLD

1

DCGM_FR_EC_PERF_VIOLATION

2

DCGM_FR_EC_SOFTWARE_CONFIG

3

DCGM_FR_EC_SOFTWARE_LIBRARY

4

DCGM_FR_EC_SOFTWARE_XID

5

DCGM_FR_EC_SOFTWARE_CUDA

6

DCGM_FR_EC_SOFTWARE_EUD

7

DCGM_FR_EC_SOFTWARE_OTHER

8

DCGM_FR_EC_HARDWARE_THERMAL

9

DCGM_FR_EC_HARDWARE_MEMORY

10

DCGM_FR_EC_HARDWARE_NVLINK

11

DCGM_FR_EC_HARDWARE_NVSWITCH

12

DCGM_FR_EC_HARDWARE_PCIE

13

DCGM_FR_EC_HARDWARE_POWER

14

DCGM_FR_EC_HARDWARE_OTHER

15

DCGM_FR_EC_INTERNAL_OTHER

16

错误严重性枚举

DCGM_ERROR_NONE

0

DCGM_ERROR_MONITOR

1

DCGM_ERROR_ISOLATE

2

DCGM_ERROR_UNKNOWN

3

DCGM_ERROR_TRIAGE

4

DCGM_ERROR_CONFIG

5

DCGM_ERROR_RESET

6

错误枚举

严重性

类别

DCGM_FR_OK

0

DCGM_ERROR_UNKNOWN

DCGM_FR_EC_NONE

DCGM_FR_UNKNOWN

1

DCGM_ERROR_UNKNOWN

DCGM_FR_EC_NONE

DCGM_FR_UNRECOGNIZED

2

DCGM_ERROR_UNKNOWN

DCGM_FR_EC_NONE

DCGM_FR_PCI_REPLAY_RATE

3

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_PCIE

DCGM_FR_VOLATILE_DBE_DETECTED

4

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_VOLATILE_SBE_DETECTED

5

DCGM_ERROR_MONITOR

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_PENDING_PAGE_RETIREMENTS

6

DCGM_ERROR_RESET

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_RETIRED_PAGES_LIMIT

7

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_RETIRED_PAGES_DBE_LIMIT

8

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_CORRUPT_INFOROM

9

DCGM_ERROR_TRIAGE

DCGM_FR_EC_HARDWARE_OTHER

DCGM_FR_CLOCKS_EVENT_THERMAL

10

DCGM_ERROR_MONITOR

DCGM_FR_EC_HARDWARE_THERMAL

DCGM_FR_POWER_UNREADABLE

11

DCGM_ERROR_MONITOR

DCGM_FR_EC_HARDWARE_POWER

DCGM_FR_CLOCKS_EVENT_POWER

12

DCGM_ERROR_MONITOR

DCGM_FR_EC_HARDWARE_POWER

DCGM_FR_NVLINK_ERROR_THRESHOLD

13

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_NVLINK

DCGM_FR_NVLINK_DOWN

14

DCGM_ERROR_TRIAGE

DCGM_FR_EC_HARDWARE_NVLINK

DCGM_FR_NVSWITCH_FATAL_ERROR

15

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_NVSWITCH

DCGM_FR_NVSWITCH_NON_FATAL_ERROR

16

DCGM_ERROR_MONITOR

DCGM_FR_EC_HARDWARE_NVSWITCH

DCGM_FR_NVSWITCH_DOWN

17

DCGM_ERROR_MONITOR

DCGM_FR_EC_HARDWARE_NVSWITCH

DCGM_FR_NO_ACCESS_TO_FILE

18

DCGM_ERROR_CONFIG

DCGM_FR_EC_SOFTWARE_OTHER

DCGM_FR_NVML_API

19

DCGM_ERROR_MONITOR

DCGM_FR_EC_SOFTWARE_LIBRARY

DCGM_FR_DEVICE_COUNT_MISMATCH

20

DCGM_ERROR_CONFIG

DCGM_FR_EC_SOFTWARE_OTHER

DCGM_FR_BAD_PARAMETER

21

DCGM_ERROR_UNKNOWN

DCGM_FR_EC_INTERNAL_OTHER

DCGM_FR_CANNOT_OPEN_LIB

22

DCGM_ERROR_TRIAGE

DCGM_FR_EC_SOFTWARE_LIBRARY

DCGM_FR_DENYLISTED_DRIVER

23

DCGM_ERROR_CONFIG

DCGM_FR_EC_SOFTWARE_CONFIG

DCGM_FR_NVML_LIB_BAD

24

DCGM_ERROR_ISOLATE

DCGM_FR_EC_SOFTWARE_LIBRARY

DCGM_FR_GRAPHICS_PROCESSES

25

DCGM_ERROR_RESET

DCGM_FR_EC_SOFTWARE_OTHER

DCGM_FR_HOSTENGINE_CONN

26

DCGM_ERROR_MONITOR

DCGM_FR_EC_INTERNAL_OTHER

DCGM_FR_FIELD_QUERY

27

DCGM_ERROR_MONITOR

DCGM_FR_EC_INTERNAL_OTHER

DCGM_FR_BAD_CUDA_ENV

28

DCGM_ERROR_CONFIG

DCGM_FR_EC_SOFTWARE_CUDA

DCGM_FR_PERSISTENCE_MODE

29

DCGM_ERROR_CONFIG

DCGM_FR_EC_SOFTWARE_OTHER

DCGM_FR_LOW_BANDWIDTH

30

DCGM_ERROR_TRIAGE

DCGM_FR_EC_HARDWARE_PCIE

DCGM_FR_HIGH_LATENCY

31

DCGM_ERROR_TRIAGE

DCGM_FR_EC_HARDWARE_PCIE

DCGM_FR_CANNOT_GET_FIELD_TAG

32

DCGM_ERROR_MONITOR

DCGM_FR_EC_INTERNAL_OTHER

DCGM_FR_FIELD_VIOLATION

33

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_OTHER

DCGM_FR_FIELD_THRESHOLD

34

DCGM_ERROR_MONITOR

DCGM_FR_EC_PERF_VIOLATION

DCGM_FR_FIELD_VIOLATION_DBL

35

DCGM_ERROR_ISOLATE

DCGM_FR_EC_PERF_VIOLATION

DCGM_FR_FIELD_THRESHOLD_DBL

36

DCGM_ERROR_ISOLATE

DCGM_FR_EC_PERF_VIOLATION

DCGM_FR_UNSUPPORTED_FIELD_TYPE

37

DCGM_ERROR_TRIAGE

DCGM_FR_EC_INTERNAL_OTHER

DCGM_FR_FIELD_THRESHOLD_TS

38

DCGM_ERROR_ISOLATE

DCGM_FR_EC_PERF_THRESHOLD

DCGM_FR_FIELD_THRESHOLD_TS_DBL

39

DCGM_ERROR_ISOLATE

DCGM_FR_EC_PERF_THRESHOLD

DCGM_FR_THERMAL_VIOLATIONS

40

DCGM_ERROR_MONITOR

DCGM_FR_EC_HARDWARE_THERMAL

DCGM_FR_THERMAL_VIOLATIONS_TS

41

DCGM_ERROR_MONITOR

DCGM_FR_EC_HARDWARE_THERMAL

DCGM_FR_TEMP_VIOLATION

42

DCGM_ERROR_MONITOR

DCGM_FR_EC_HARDWARE_THERMAL

DCGM_FR_CLOCKS_EVENT_VIOLATION

43

DCGM_ERROR_MONITOR

DCGM_FR_EC_HARDWARE_OTHER

DCGM_FR_INTERNAL

44

DCGM_ERROR_TRIAGE

DCGM_FR_EC_INTERNAL_OTHER

DCGM_FR_PCIE_GENERATION

45

DCGM_ERROR_TRIAGE

DCGM_FR_EC_HARDWARE_PCIE

DCGM_FR_PCIE_WIDTH

46

DCGM_ERROR_CONFIG

DCGM_FR_EC_HARDWARE_PCIE

DCGM_FR_ABORTED

47

DCGM_ERROR_CONFIG

DCGM_FR_EC_SOFTWARE_OTHER

DCGM_FR_TEST_DISABLED

48

DCGM_ERROR_CONFIG

DCGM_FR_EC_SOFTWARE_CONFIG

DCGM_FR_CANNOT_GET_STAT

49

DCGM_ERROR_TRIAGE

DCGM_FR_EC_INTERNAL_OTHER

DCGM_FR_STRESS_LEVEL

50

DCGM_ERROR_TRIAGE

DCGM_FR_EC_PERF_THRESHOLD

DCGM_FR_CUDA_API

51

DCGM_ERROR_MONITOR

DCGM_FR_EC_SOFTWARE_CUDA

DCGM_FR_FAULTY_MEMORY

52

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_CANNOT_SET_WATCHES

53

DCGM_ERROR_MONITOR

DCGM_FR_EC_INTERNAL_OTHER

DCGM_FR_CUDA_UNBOUND

54

DCGM_ERROR_TRIAGE

DCGM_FR_EC_SOFTWARE_CUDA

DCGM_FR_ECC_DISABLED

55

DCGM_ERROR_CONFIG

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_MEMORY_ALLOC

56

DCGM_ERROR_TRIAGE

DCGM_FR_EC_SOFTWARE_OTHER

DCGM_FR_CUDA_DBE

57

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_MEMORY_MISMATCH

58

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_CUDA_DEVICE

59

DCGM_ERROR_TRIAGE

DCGM_FR_EC_SOFTWARE_CUDA

DCGM_FR_ECC_UNSUPPORTED

60

DCGM_ERROR_CONFIG

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_ECC_PENDING

61

DCGM_ERROR_MONITOR

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_MEMORY_BANDWIDTH

62

DCGM_ERROR_TRIAGE

DCGM_FR_EC_PERF_THRESHOLD

DCGM_FR_TARGET_POWER

63

DCGM_ERROR_TRIAGE

DCGM_FR_EC_HARDWARE_POWER

DCGM_FR_API_FAIL

64

DCGM_ERROR_TRIAGE

DCGM_FR_EC_SOFTWARE_OTHER

DCGM_FR_API_FAIL_GPU

65

DCGM_ERROR_TRIAGE

DCGM_FR_EC_SOFTWARE_OTHER

DCGM_FR_CUDA_CONTEXT

66

DCGM_ERROR_TRIAGE

DCGM_FR_EC_SOFTWARE_CUDA

DCGM_FR_DCGM_API

67

DCGM_ERROR_TRIAGE

DCGM_FR_EC_INTERNAL_OTHER

DCGM_FR_CONCURRENT_GPUS

68

DCGM_ERROR_CONFIG

DCGM_FR_EC_SOFTWARE_CONFIG

DCGM_FR_TOO_MANY_ERRORS

69

DCGM_ERROR_MONITOR

DCGM_FR_EC_SOFTWARE_OTHER

DCGM_FR_NVLINK_CRC_ERROR_THRESHOLD

70

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_NVLINK

DCGM_FR_NVLINK_ERROR_CRITICAL

71

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_NVLINK

DCGM_FR_ENFORCED_POWER_LIMIT

72

DCGM_ERROR_CONFIG

DCGM_FR_EC_HARDWARE_POWER

DCGM_FR_MEMORY_ALLOC_HOST

73

DCGM_ERROR_TRIAGE

DCGM_FR_EC_SOFTWARE_OTHER

DCGM_FR_GPU_OP_MODE

74

DCGM_ERROR_MONITOR

DCGM_FR_EC_SOFTWARE_CONFIG

DCGM_FR_NO_MEMORY_CLOCKS

75

DCGM_ERROR_MONITOR

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_NO_GRAPHICS_CLOCKS

76

DCGM_ERROR_MONITOR

DCGM_FR_EC_HARDWARE_OTHER

DCGM_FR_HAD_TO_RESTORE_STATE

77

DCGM_ERROR_TRIAGE

DCGM_FR_EC_SOFTWARE_OTHER

DCGM_FR_L1TAG_UNSUPPORTED

78

DCGM_ERROR_CONFIG

DCGM_FR_EC_SOFTWARE_OTHER

DCGM_FR_L1TAG_MISCOMPARE

79

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_ROW_REMAP_FAILURE

80

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_UNCONTAINED_ERROR

81

DCGM_ERROR_ISOLATE

DCGM_FR_EC_SOFTWARE_XID

DCGM_FR_EMPTY_GPU_LIST

82

DCGM_ERROR_CONFIG

DCGM_FR_EC_SOFTWARE_CONFIG

DCGM_FR_DBE_PENDING_PAGE_RETIREMENTS

83

DCGM_ERROR_RESET

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_UNCORRECTABLE_ROW_REMAP

84

DCGM_ERROR_RESET

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_PENDING_ROW_REMAP

85

DCGM_ERROR_RESET

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_BROKEN_P2P_MEMORY_DEVICE

86

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_PCIE

DCGM_FR_BROKEN_P2P_WRITER_DEVICE

87

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_PCIE

DCGM_FR_NVSWITCH_NVLINK_DOWN

88

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_NVLINK

DCGM_FR_EUD_BINARY_PERMISSIONS

89

DCGM_ERROR_TRIAGE

DCGM_FR_EC_SOFTWARE_EUD

DCGM_FR_EUD_NON_ROOT_USER

90

DCGM_ERROR_TRIAGE

DCGM_FR_EC_SOFTWARE_EUD

DCGM_FR_EUD_SPAWN_FAILURE

91

DCGM_ERROR_TRIAGE

DCGM_FR_EC_SOFTWARE_EUD

DCGM_FR_EUD_TIMEOUT

92

DCGM_ERROR_TRIAGE

DCGM_FR_EC_SOFTWARE_EUD

DCGM_FR_EUD_ZOMBIE

93

DCGM_ERROR_TRIAGE

DCGM_FR_EC_SOFTWARE_EUD

DCGM_FR_EUD_NON_ZERO_EXIT_CODE

94

DCGM_ERROR_TRIAGE

DCGM_FR_EC_SOFTWARE_EUD

DCGM_FR_EUD_TEST_FAILED

95

DCGM_ERROR_ISOLATE

DCGM_FR_EC_SOFTWARE_EUD

DCGM_FR_FILE_CREATE_PERMISSIONS

96

DCGM_ERROR_CONFIG

DCGM_FR_EC_SOFTWARE_CONFIG

DCGM_FR_PAUSE_RESUME_FAILED

97

DCGM_ERROR_TRIAGE

DCGM_FR_EC_INTERNAL_OTHER

DCGM_FR_PCIE_H_REPLAY_VIOLATION

98

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_PCIE

DCGM_FR_GPU_EXPECTED_NVLINKS_UP

99

DCGM_ERROR_TRIAGE

DCGM_FR_EC_HARDWARE_NVLINK

DCGM_FR_NVSWITCH_EXPECTED_NVLINKS_UP

100

DCGM_ERROR_TRIAGE

DCGM_FR_EC_HARDWARE_NVLINK

DCGM_FR_XID_ERROR

101

DCGM_ERROR_TRIAGE

DCGM_FR_EC_SOFTWARE_XID

DCGM_FR_SBE_VIOLATION

102

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_DBE_VIOLATION

103

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_PCIE_REPLAY_VIOLATION

104

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_PCIE

DCGM_FR_SBE_THRESHOLD_VIOLATION

105

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_DBE_THRESHOLD_VIOLATION

106

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_MEMORY

DCGM_FR_PCIE_REPLAY_THRESHOLD_VIOLATION

107

DCGM_ERROR_ISOLATE

DCGM_FR_EC_HARDWARE_PCIE

DCGM_FR_CUDA_FM_NOT_INITIALIZED

108

DCGM_ERROR_MONITOR

DCGM_FR_EC_SOFTWARE_CUDA

DCGM_FR_SXID_ERROR

109

DCGM_ERROR_ISOLATE

DCGM_FR_EC_SOFTWARE_XID

这些关系在 dcgm_errors.c 中进行了编纂。

一般来说,DCGM 非常确信严重性为 ISOLATE 和 RESET 的错误应立即处理。其他严重性可能需要更多特定于站点的分析、重新运行诊断或扫描 DCGM 和系统日志,以确定最佳行动方案。随着时间的推移收集和记录故障类型和速率可以使数据中心深入了解自动化处理 GPU 诊断错误的最佳方法。