DCGM 诊断
概述
NVIDIA 验证套件 (NVVS) 现在更名为 DCGM 诊断。从 DCGM v1.5 开始,将 NVVS 作为独立实用程序运行已被弃用,所有功能(包括命令行选项)均可通过 DCGM 命令行实用程序 ('dcgmi') 获得。为简洁起见,本文档的其余部分可能会交替使用 DCGM 诊断和 NVVS。
DCGM 诊断目标
DCGM 诊断旨在:
在生产环境中提供系统级工具,用于在部署工作负载之前评估集群的就绪水平。
提供多种运行模式:
通过管理员或用户以纯文本交互方式运行。
通过其他工具以易于解析的输出脚本化运行。
提供多个测试时间范围,以适应不同的准备情况或故障情况。
一级测试用作就绪指标。
二级测试在发生故障时用作尾声。
三级和四级测试由管理员在事后分析时运行。
将以下概念集成到一个工具中,以发现部署、系统软件和硬件配置问题、基本诊断、集成问题和相对系统性能问题。
部署和软件问题
NVML 库访问和版本控制
CUDA 库访问和版本控制
软件冲突
硬件问题和诊断
待处理的页退役
PCIe 接口检查
NVLink 接口检查
帧缓冲区和内存检查
计算引擎检查
集成问题
PCIe 重放计数器检查
拓扑限制
权限、驱动程序和 cgroups 检查
基本功耗和热约束检查
压力检查
功耗和热压力
吞吐量压力
恒定的相对系统性能
最大相对系统性能
内存带宽
提供故障排除帮助
轻松集成到集群调度器和集群管理应用程序中
减少停机时间和失败的 GPU 作业
DCGM 诊断的范围之外
DCGM 诊断并非旨在:
提供全面的硬件诊断
主动修复问题
取代现场诊断工具。有关该过程,请参阅 https://docs.nvda.net.cn/deploy/hw-field-diag/index.html。
促进任何 RMA 流程。有关这些程序,请参阅 https://docs.nvda.net.cn/deploy/rma-process/index.html。
运行级别和测试
下表描述了 DCGM 诊断中每个级别运行的测试。
插件 |
测试名称 |
r1(短)
秒
|
r2(中)
< 2 分钟
|
r3(长)
< 30 分钟
|
r4(超长)
1-2 小时
|
---|---|---|---|---|---|
软件 |
|
是 |
是 |
是 |
是 |
PCIe + NVLink |
|
是 |
是 |
是 |
|
GPU 内存 |
|
是 |
是 |
是 |
|
内存带宽 |
|
是 |
是 |
是 |
|
诊断 |
|
是 |
是 |
||
定向压力 |
|
是 |
是 |
||
定向功耗 |
|
是 |
是 |
||
内存压力 |
|
是 |
|||
输入 EDPp |
|
是 |
DCGM 诊断入门
命令行选项
各种命令行选项旨在控制常规执行参数,而对执行行为的详细更改包含在下一节中详述的配置文件中。
下表列出了 DCGM 诊断支持的各种选项。
短选项 |
长选项 |
参数 |
描述 |
---|---|---|---|
|
|
groupId |
要查询的设备组 ID。 |
|
IP/FQDN |
连接到指定的 IP 地址或完全限定域名。要连接到使用 -d(unix 套接字)启动的 host engine,请在 unix 套接字文件名前加上 |
|
|
|
显示用法信息并退出。 |
|
|
|
diag |
运行诊断。(注意:编号较高的测试包含其下的所有测试。)
要运行的特定测试可以通过名称指定,多个测试可以逗号分隔列表的形式指定。例如,命令 dcgmi diag -r “pcie,diagnostic” 将同时运行 PCIe 和 Diagnostic 测试。 |
|
|
test_name.variable_name=variable_name |
要为本次运行设置的测试参数。 |
|
|
full/path/to/config/file |
配置文件的路径。 |
|
|
诊断应在其上运行的 fake gpu 的逗号分隔列表。仅供内部/测试使用。不能与 |
|
|
|
gpuList |
诊断应在其上运行的 gpu 的逗号分隔列表。不能与 |
|
|
显示每个测试的信息和警告。 |
|
|
仅在发生故障时输出统计信息文件 |
||
|
文件 |
||
|
插件统计信息路径 |
将插件统计信息写入给定路径,而不是当前目录 |
|
|
|
调试级别 |
调试级别(NONE、FATAL、ERROR、WARN、INFO、DEBUG、VERB 之一)。默认值:DEBUG。日志文件可以通过 –debugLogFile 参数指定。 |
|
|
以 json 格式打印输出。 |
|
|
指定应忽略哪些时钟事件原因。您可以提供逗号分隔的原因列表。例如,指定 'HW_SLOWDOWN,SW_THERMAL' 将忽略 HW_SLOWDOWN 和 SW_THERMAL 原因。或者,您可以指定忽略位掩码的整数值。对于位掩码,可以通过其位掩码的总和指定多个原因。例如,指定 '40' 将忽略 HW_SLOWDOWN 和 SW_THERMAL 原因。 有效的时钟事件原因及其对应的位掩码(在括号中给出)为:
|
||
|
已弃用:请改用 |
||
|
为定向功耗、定向压力和 Diagnostic 测试启用提前失败检查。启用后,这些测试会在测试运行时每 5 秒检查一次故障(可以通过 –check-interval 参数修改),而不是在测试完成后执行单次检查。默认情况下禁用。 |
||
|
检查间隔 |
指定启用提前失败检查时,定向功耗、定向压力、SM 压力和 Diagnostic 测试应执行提前失败检查的间隔(以秒为单位)。默认值为每 5 秒一次。间隔必须介于 1 到 300 之间。 |
|
|
迭代次数 |
指定要连续运行诊断的迭代次数。(必须大于 0。) |
|
|
忽略此标志后面的其余标记参数。 |
配置文件
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
及其模块中使用的值:
值 |
符号 |
描述 |
---|---|---|
|
DCGM_ST_OK |
成功 |
|
DCGM_ST_BADPARAM |
传递给函数的参数错误 |
|
DCGM_ST_GENERIC_ERROR |
通用的、未指定的错误 |
|
DCGM_ST_MEMORY |
发生内存不足错误 |
|
DCGM_ST_NOT_CONFIGURED |
设置未配置 |
|
DCGM_ST_NOT_SUPPORTED |
功能不支持 |
|
DCGM_ST_INIT_ERROR |
DCGM 初始化错误 |
|
DCGM_ST_NVML_ERROR |
当 NVML 返回错误时 |
|
DCGM_ST_UNINITIALIZED |
对象处于未定义状态 |
|
DCGM_ST_VER_MISMATCH |
接收和理解的 API 之间的版本不匹配 |
|
DCGM_ST_UNKNOWN_FIELD |
未知字段 ID |
|
DCGM_ST_NO_DATA |
没有可用数据 |
|
DCGM_ST_NOT_WATCHED |
给定的字段 ID 未被缓存管理器更新 |
|
DCGM_ST_RESET_REQUIRED |
GPU 需要重置 |
|
DCGM_ST_FUNCTION_NOT_FOUND |
找不到请求的函数(仅绑定错误) |
|
DCGM_ST_CONNECTION_NOT_VALID |
与 host engine 的连接不再有效 |
|
DCGM_ST_GROUP_INCOMPATIBLE |
所提供组的 GPU 彼此不兼容,无法执行请求的操作 |
|
DCGM_ST_MAX_LIMIT |
已达到对象的最大限制 |
|
DCGM_ST_LIBRARY_NOT_FOUND |
找不到 DCGM 库 |
|
DCGM_ST_REQUIRES_ROOT |
当 host engine 以非 root 身份运行时,无法执行此操作 |
|
DCGM_ST_NVVS_ERROR |
DCGM GPU 诊断已成功执行,但报告了错误。 |
|
DCGM_ST_INSUFFICIENT_SIZE |
输入参数不够大 |
|
DCGM_ST_MODULE_NOT_LOADED |
此请求由当前未加载的 DCGM 模块提供服务 |
|
DCGM_ST_GROUP_IS_EMPTY |
此组为空,请求的操作在空组上无效 |
|
DCGM_ST_DIAG_ALREADY_RUNNING |
诊断实例已在运行,在当前实例完成之前无法运行新的诊断。 |
|
DCGM_ST_DIAG_BAD_LAUNCH |
启动 DCGM GPU 诊断时出错 |
|
DCGM_ST_CHILD_NOT_KILLED |
在重试次数内无法杀死子进程 |
|
DCGM_ST_INSUFFICIENT_RESOURCES |
没有足够的可用资源 |
|
DCGM_ST_NVVS_ISOLATE_ERROR |
诊断返回一个错误,指示需要隔离 |
|
DCGM_ST_NVVS_BINARY_NOT_FOUND |
在指定位置未找到 NVVS 二进制文件 |
|
DCGM_ST_NVVS_KILLED |
NVVS 进程被信号终止 |
|
DCGM_ST_PAUSED |
hostengine 和所有模块都已暂停 |
|
DCGM_ST_ALREADY_INITIALIZED |
对象已初始化 |
|
DCGM_ST_NVVS_NO_AVAILABLE_TEST |
NVVS 返回没有可用的测试 (NVVS_ST_TEST_NOT_FOUND) |
|
信号 SIGTERM |
程序已终止 |
|
信号 SIGQUIT |
程序被要求退出 |
|
信号 SIGINT |
程序被中断 |
|
信号 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 会降低权限并使用(非特权)服务帐户来运行诊断。如果服务帐户没有对运行诊断的目录的写入访问权限,则用户可能会遇到此问题。总而言之,当以下两个条件都为真时,会发生此问题
nvidia-dcgm
服务处于活动状态,并且nv-hostengine
进程正在运行(并且未对 DCGM 的默认安装配置进行任何更改)用户尝试运行
dcgmi diag -r 4
。在这种情况下,dcgmi diag
连接到正在运行的nv-hostengine
(默认情况下在/root
下启动),因此脉冲测试无法创建任何日志。
此问题将在 DCGM 的未来版本中修复。在此期间,用户可以执行以下任一操作来解决此问题
在运行 pulse_test 之前停止 nvidia-dcgm 服务
$ sudo systemctl stop nvidia-dcgm
现在运行
pulse_test
$ dcgmi diag -r pulse_test
诊断完成后,重新启动
nvidia-dcgm
服务$ sudo systemctl restart nvidia-dcgm
编辑
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 独占访问设备 |
|
共享 nvswitch |
GPU 直通到 VM,但 NvSwitch 由服务 VM 拥有 |
|
安装 EUD 软件包
使用 Linux 发行版风格的相应软件包管理器安装 NVIDIA EUD 软件包。
在此版本中,EUD 二进制文件通过 Linux 存档提供。按照以下步骤开始操作
将存档解压到
/usr
下将所有权和组更改为
root
$ sudo chown -R root /usr/share/nvidia \ && sudo chgrp -R root /usr/share/nvidia现在继续运行 EUD
安装本地 repo 软件包
$ sudo dpkg -i nvidia-diagnostic-local-repo-ubuntu2204-525.125.06-mode1_1.0-1_amd64.deb将密钥环文件复制到正确的位置,确切的复制命令将在 dpkg 命令的输出中。
$ sudo cp /var/nvidia-diagnostic-local-repo-ubuntu2204-525.125.06-mode1/nvidia-diagnostic-local-D95A57C6-keyring.gpg /usr/share/keyrings安装诊断程序。诊断程序的版本将与本地 repo 文件中指定的主版本匹配。
$ sudo apt update $ sudo apt install nvidia-diagnostic-525
安装本地 repo 文件,然后安装诊断程序。诊断程序的版本将与本地 repo 文件中指定的主版本匹配。
$ sudo rpm -i nvidia-diagnostic-local-repo-rhel8-525.125.06-mode1-1.0-1.x86_64.rpm $ sudo yum install nvidia-diagnostic-525
安装本地 repo 文件,然后安装诊断程序。诊断程序的版本将与本地 repo rpm 文件中指定的主版本匹配。
$ sudo rpm -i nvidia-diagnostic-local-repo-rhel8-525.125.06-mode1-1.0-1.x86_64.rpm $ sudo dnf install nvidia-diagnostic-525
安装本地 repo 文件,然后安装诊断程序。诊断程序的版本将与本地 repo rpm 文件中指定的主版本匹配。
$ sudo rpm -i nvidia-diagnostic-local-repo-rhel8-525.125.06-mode1-1.0-1.x86_64.rpm $ sudo zypper install nvidia-diagnostic-525
EUD 的文件应安装在 /usr/share/nvidia/diagnostic/
下
运行 EUD
在受支持的 GPU 产品上,默认情况下,DCGM 将运行 EUD 作为级别 3 和 4 的一部分,并具有两个单独的 EUD 测试配置文件
在运行级别 3 (
dcgmi diag -r 3
) 中,EUD 测试的运行时间少于 5 分钟(至少运行来自每个子测试套件的一个测试)在运行级别 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 测试配置文件(约 20 分钟),并允许使用 |
|
允许对 EUD 诊断测试进行其他控制。请参阅本文档后面的表格。 |
下表提供了 eud.passthrough_args
支持的其他控制参数
选项 |
描述 |
---|---|
|
测试第 n 个设备 |
|
指定除默认值之外的唯一日志文件名。示例: %r 将评估为测试状态,并将为 PASS 或 FAIL %s 将评估为正在测试的设备之一的序列号。示例: 默认情况下,日志在 |
|
指定要测试的单个 GPU,其中 w、x、y 和 z 是十六进制数字。
示例: |
|
指定要测试的 GPU 子集,其中 w、x、y 和 z 是十六进制数字。每个 GPU 地址以逗号分隔。示例: |
|
指定要运行的测试子集。每个测试都以逗号分隔,并且是以下测试之一
如果未指定,则至少运行来自每个单独子测试的一个测试 示例: |
|
覆盖要使用的默认 NVSwitch 拓扑文件。如果此参数不存在,则将使用系统拓扑文件(由驱动程序安装到 示例: |
|
如果存在此参数,即使请求的测试之一发生错误,EUD 也会继续运行,并且仅在完成所有请求的测试后才报告所有失败测试的错误。 如果未指定该选项,EUD 将报告第一个失败测试的错误并停止。 |
|
如果存在此选项,则将跳过所有 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
检查已安装的软件包并删除输出中显示的所有软件包。
$ sudo dnf list installed | grep cpueud // Example: // cpueud-535.aarch64 535.169-1 @cpueud-local-tegra-rhel9-535.169-mode1 // cpueud-local-tegra-repo-rhel9-535.169-mode1.aarch64 1.0-1 @@System $ sudo rpm -e <found packages> $ sudo dnf remove <found packages> // Example: // $ sudo rpm -e cpueud-535.aarch64 // $ sudo dnf remove cpueud-535.aarch64 // $ sudo rpm -e cpueud-local-tegra-repo-rhel9-535.169-mode1.aarch64 // $ sudo dnf remove cpueud-local-tegra-repo-rhel9-535.169-mode1.aarch64安装本地 repo 文件,然后安装诊断程序。确保诊断程序版本与本地 repo RPM 文件中指定的主版本匹配。
$ sudo yum install libxcrypt-compat $ sudo rpm -i cpueud-local-tegra-repo-rhel9-$VERSION-mode1-1.0-1.aarch64.rpm // $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 rpm -i cpueud-local-tegra-repo-rhel9-535.169-mode1-1.0-1.aarch64.rpm $ sudo dnf 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 诊断错误的最佳方法。