Skip to main content

基本简介

DCGM DiagnosticsNVIDIA Data Center GPU Manager中的主动式GPU诊断与验证工具,官方文档注明它源自NVIDIA Validation Suite(即NVVS)。当前推荐入口是dcgmi diag,独立运行的NVVS已不再作为主推方式持续维护。

它不是单纯读取GPU温度、功耗和利用率的监控命令,而是通过DCGMNVMLCUDA和一组诊断插件,对GPU、驱动、运行时、PCIeNVLink、显存、计算单元以及功耗与温度的稳定性进行主动测试。测试结果可以输出为终端文本、JSON和日志,便于接入巡检脚本、集群调度器或故障处理流程。

需要先明确它的边界:DCGM Diagnostics不是持续采集型监控系统,也不是完整硬件维修诊断或RMA判定流程。官方文档明确说明,它不负责主动修复问题,也不能替代现场硬件诊断工具。更合理的定位是:在GPU节点投入生产前、作业失败后、硬件更换后或维护窗口中,主动验证节点是否具备稳定运行AI训练、推理和HPC任务的条件。

DCGM Diagnostics的官方介绍地址:https://docs.nvidia.com/datacenter/dcgm/latest/user-guide/dcgm-diagnostics.html

主要解决的问题

AI算力集群中,很多GPU问题并不会在空闲状态下暴露。例如驱动和CUDA库版本不匹配、PCIe链路降速、NVLink通信异常、显存错误、功耗上不去、温度过高降频、NCCL集合通信异常等,只有在作业开始后才会表现为训练速度下降、任务失败、XID错误或节点重启。

DCGM Diagnostics主要解决以下问题:

  • 上线前验证:在新节点、新GPU或驱动升级后,验证软件栈、设备访问、显存和互联链路是否满足基本运行条件。
  • 作业失败后排障:在训练任务或推理服务失败后,快速判断问题更偏向软件部署、硬件链路、显存、功耗、温度还是通信层。
  • 性能和稳定性确认:通过矩阵计算、显存带宽、功耗和压力测试,发现单纯读取指标不容易暴露的降频、性能不达标和稳定性问题。
  • 集群自动化巡检:通过JSON输出、退出码、日志和命令行参数,把诊断结果接入节点准入、维护巡检或调度器健康检查流程。

显著优点

优点说明
官方工具链基于NVIDIA官方DCGM能力,能直接访问NVMLCUDAGPU健康字段。
主动诊断不只是查看指标,而是运行计算、传输、显存和功耗测试,用结果验证硬件和软件栈。
测试层级清晰-r 1-r 4覆盖从快速检查到长时间深度测试的不同场景,高层级会包含低层级检查。
插件化能力softwarepciememorydiagnostictargeted_powertargeted_stressmemtestpulse等插件覆盖多个故障域。
可配置可通过-p覆盖单项参数,也可通过YAML配置文件按GPU SKU设置阈值和是否允许运行某个测试。
易于自动化支持JSON输出、重复执行、提前失败、超时、日志和错误码处理,适合纳入集群运维流程。

常见问题及检测方式

DCGM Diagnostics的核心价值在于主动制造受控负载,再结合硬件计数器和运行时返回值,依据阈值判断问题。下面按常见故障域整理它的检测方式。

常见问题相关测试检测方式
软件部署异常software / Deployment检查NVMLCUDA RuntimeCUDA Main Library是否可加载,检查nouveau、设备节点、权限、cgroups、待退役页和行重映射状态。
PCIe链路问题pcie执行主机到设备、设备到主机、GPUP2P带宽和时延测试,并结合PCIe重放计数、最小代际、最小链路宽度和阈值判断链路质量。
NVLink互联异常pcie / nvbandwidth在支持的拓扑上运行GPU间通信带宽测试,观察P2P路径、带宽、时延和链路相关错误。
显存读写错误memory / memtest分配大比例显存,写入并回读固定数据模式;memtest进一步执行地址线、移动反转、随机数、位衰减等模式测试。
计算单元异常diagnostic运行矩阵乘法和显存遍历类负载,检查计算正确性、温度、不可纠正显存错误、XID错误和性能是否达标。
温度或功耗不稳定targeted_power / targeted_stress持续施加计算压力,使功耗或吞吐接近目标值,并监控温度、时钟、PCIe重放、单比特错误和XID
显存带宽不足memory_bandwidth使用类似STREAM TRIAD的带宽测试,比较实测带宽和配置阈值。
NCCL通信问题nccl_tests调用NCCL Tests二进制,检查集合通信测试的退出码和输出结果。
电源瞬态问题pulse通过短促高强度负载制造电流波动,验证系统电源是否能承受突发功耗变化。

测试层级

dcgmi diag -r既可以接收数字层级,也可以接收具体测试名称。数字层级适合标准化巡检,测试名称适合定向排障。

层级定位典型用途
-r 1快速检查节点上线前、作业启动前或故障后的初步筛查。
-r 2中等耗时检查作业失败后的更完整检查,适合每天或按需运行。
-r 3长时间硬件诊断新节点集成、硬件更换后、难复现故障的维护窗口排查。
-r 4扩展深度诊断包含更长时间、更高压力的测试,例如memtestpulse,应安排在维护窗口。

实践中,可以把-r 1作为准入前置检查,把-r 2用于日常巡检或失败后自动排查,把-r 3-r 4放在维护窗口中运行。原因是高层级测试会主动占用GPU资源,可能影响线上工作负载。

工具安装

参考官网文档:https://docs.nvidia.com/datacenter/dcgm/latest/user-guide/getting-started.html

DCGM DiagnosticsDCGM一起安装。安装前需要先确认主机已安装NVIDIA Datacenter Driver的受支持版本,并按官方文档配置对应发行版的软件源。官方安装说明要求选择与CUDA用户态主版本匹配的datacenter-gpu-manager-4-cudaX包,例如cuda12环境安装datacenter-gpu-manager-4-cuda12。如果节点上已经安装旧版datacenter-gpu-managerdatacenter-gpu-manager-config包,官方步骤会先删除旧包再安装新版datacenter-gpu-manager-4-cudaX包。

官方文档还列出了一些容易被忽略的前置条件:

  • 主机建议至少有16GB内存,CPU核心数不少于节点上的GPU数量。
  • NVSwitch系统需要额外安装并运行对应组件:Hopper及更早架构通常涉及Fabric ManagerNSCQBlackwell及更新架构涉及NVSDM
  • 官方安装示例默认安装推荐依赖;这些推荐依赖用于补齐开源DCGM本体之外的部分功能。
  • MaxwellPascalVolta架构GPU在使用R580驱动或CUDA 13用户态环境时,官方文档建议安装CUDA 12对应的DCGM包,而不是CUDA 13对应的包。

UbuntuDebian为例:

CUDA_VERSION=$(nvidia-smi -q | sed -E -n 's/CUDA Version[ :]+([0-9]+)[.].*/\1/p')

sudo systemctl list-unit-files nvidia-dcgm.service > /dev/null && \
sudo systemctl stop nvidia-dcgm

sudo dpkg --list datacenter-gpu-manager > /dev/null 2>&1 && \
sudo apt purge --yes datacenter-gpu-manager
sudo dpkg --list datacenter-gpu-manager-config > /dev/null 2>&1 && \
sudo apt purge --yes datacenter-gpu-manager-config

sudo apt-get update
sudo apt-get install --yes --install-recommends datacenter-gpu-manager-4-cuda${CUDA_VERSION}
sudo systemctl --now enable nvidia-dcgm
dcgmi discovery -l

常见发行版的安装命令如下,前提都是软件源已经按官方文档配置完成:

发行版安装命令
Ubuntu / Debiansudo apt-get install --yes --install-recommends datacenter-gpu-manager-4-cuda${CUDA_VERSION}
RHEL / CentOS / Rocky Linuxsudo dnf install --assumeyes --setopt=install_weak_deps=True datacenter-gpu-manager-4-cuda${CUDA_VERSION}
SLES / OpenSUSEsudo zypper install --no-confirm --recommends datacenter-gpu-manager-4-cuda${CUDA_VERSION}
Amazon Linux 2023sudo dnf install --assumeyes --setopt=install_weak_deps=True datacenter-gpu-manager-4-cuda${CUDA_VERSION}
Azure Linux 3.0sudo tdnf install --assumeyes --setopt=install_weak_deps=True datacenter-gpu-manager-4-cuda${CUDA_VERSION}

安装后建议启动nvidia-dcgm服务,它会运行nv-hostenginedcgmi diag通过该服务访问DCGM能力。dcgmi discovery -l可以用于确认DCGM是否识别到GPUSwitch实体。官方文档建议以root权限运行诊断,尤其是涉及压力、功耗、显存和设备访问的测试。

如果需要使用DCGM的多节点诊断能力,官方文档还提供了可选包datacenter-gpu-manager-4-multinode-cuda${CUDA_VERSION}。该插件仅支持CUDA 12或更高版本,并且要求所有参与多节点诊断的主机安装相同版本的插件包;单节点dcgmi diag日常诊断不需要安装这个可选包。

使用示例

快速检查当前节点

sudo dcgmi diag -r 1

适合在节点上线、驱动升级或作业失败后先跑一遍。如果失败,优先查看失败插件名称、错误码和/var/log/nvidia-dcgm/nvvs.log

输出JSON便于脚本解析

sudo dcgmi diag -r 2 -j

-j会把结果输出成JSON,适合被调度器、巡检系统或CI脚本解析。脚本中建议同时记录命令退出码和日志路径。

只运行指定测试

sudo dcgmi diag -r pcie,memory

当问题已经聚焦到某个故障域时,直接指定测试名称比跑完整层级更节省时间。多个测试名称可以用逗号分隔。

调整单个测试参数

sudo dcgmi diag -r targeted_power -p "targeted_power.target_power=300.0"

-p用于临时覆盖插件参数,格式通常是测试名.参数名=值。示例中的300.0只是演示值,生产环境应按具体GPU型号、散热条件和机房功耗策略设置。

重复运行并尽早失败

sudo dcgmi diag -r 3 --iterations 3 --fail-early --check-interval 5

--iterations适合排查间歇性问题。--fail-early会在长时间测试过程中周期性检查故障条件,--check-interval用于设置检查间隔。

使用自定义配置文件

sudo dcgmi diag -r 2 -c ./dcgm-diag.yaml

当同一集群中存在不同GPU SKU、不同散热条件或不同功耗策略时,建议使用配置文件统一管理阈值,而不是在命令行中堆叠大量-p参数。

多节点诊断

DCGM还有一个单独的多节点诊断功能,命令入口是dcgmi mndiag,不是dcgmi diag。它的目标是在head node上协调多个节点同步执行压力测试,验证跨节点互联、显存和计算能力。根据官方文档,当前多节点诊断支持的测试只有mnubergemm,支持版本为DCGM 4.3.0及以后,当前支持产品为GB200 NVLGB300 NVL

多节点诊断的前置条件更严格,至少要满足以下要求:

  • 所有参与节点都安装并配置OpenMPI
  • head node到所有参与节点都要有无密码SSH访问,而且head node上的私钥需要以未加密形式存放在磁盘上。
  • 所有参与节点必须使用相同的NVIDIA Driver版本。
  • 如果是多节点NVLink系统,还要先正确配置IMEX Channels,否则mnubergemm可能因为NCCL初始化失败而报错。

官方把多节点诊断的常用参数整理得很清楚:

参数作用
--hostList必填,列出要参与诊断的主机,格式可以是host_name:porthost_name:socket_address
--hostEngineAddress指定head nodehostengine地址,默认是localhost
-r / --run指定要运行的测试名,当前只有mnubergemm,也是默认值。
-p / --parameters传入测试参数,例如mnubergemm.time_to_run=600。多个参数用分号分隔。
-j / --jsonJSON格式输出结果。

几个简要示例:

dcgmi mndiag --hostList "node1;node2;node3"
dcgmi mndiag --hostEngineAddress 192.168.1.100 --hostList "node1:5000;node2;node3:unix:///tmp/dcgm.sock"
dcgmi mndiag --hostList "node1;node2" -p "mnubergemm.time_to_run=600" -j

这类多节点诊断适合用在大规模GPU集群联调、跨节点互联验证、整体压力测试和上线前验收,不适合和线上业务混跑。

配置方式

常用命令行参数

参数作用
-r指定测试层级或测试名称,例如13pcie,memory
-g指定DCGM中的GPU组。
-i指定实体,例如具体GPU编号。
-c指定YAML配置文件。
-p覆盖某个插件参数。
-j输出JSON结果。
--host连接远端nv-hostengine
--iterations重复执行诊断。
--timeout设置超时时间。
--ignoreErrorCodes忽略已知或预期的错误码,适合受控测试环境。

配置文件示例

官方配置格式使用spec: dcgm-diag-v1,可以按GPU SKU定义各插件的阈值和开关。下面是结构示例,阈值不能直接照搬到生产环境,必须结合具体GPU型号、驱动版本、机箱散热和历史基线确认。

version: "@CMAKE_PROJECT_VERSION@"
spec: dcgm-diag-v1
skus:
- name: H100 80GB PCIe
id: 2331
memory:
is_allowed: true
l1_is_allowed: true
diagnostic:
is_allowed: true
test_duration: 60.0
temperature_max: 90.0
pcie:
is_allowed: true
h2d_d2h_single_pinned:
min_pci_generation: 3.0
min_pci_width: 16.0

配置文件中常见的思路是:

  • 使用is_allowed控制某个插件是否允许在指定SKU上运行。
  • 使用temperature_maxmax_pcie_replaysmin_pci_generationmin_pci_width等参数表达机房和硬件基线。
  • targeted_powertargeted_stress等压力测试单独设定目标功耗、目标性能和持续时间。
  • NCCL相关测试,提前确认NCCL Tests二进制路径和集群通信环境。

环境变量与日志

配置项作用
NVVS_BIN_PATH指定nvvs二进制所在目录。
NVVS_PLUGIN_DIR指定诊断插件目录。
NVVS_HANGDETECT_DISABLE禁用挂起检测。
NVVS_HANGDETECT_EXPIRY_SEC设置挂起检测超时时间。
DCGM_NCCL_TESTS_BIN_PATH指定NCCL Tests二进制路径。
/var/log/nvidia-dcgm/nvvs.log默认诊断日志路径。

相似工具比较

工具定位适合场景短板
nvidia-smiGPU状态查询和管理命令快速查看驱动、显存、温度、功耗、进程、ECC等信息。主要是点查和管理,不会主动运行完整压力和正确性测试。
dcgm-exporterPrometheus指标导出器持续监控GPU利用率、温度、功耗、显存、错误计数和性能指标。更偏被动采集,不能单独证明节点在压力下稳定可用。
DCGM Diagnostics主动诊断和节点验证上线前准入、作业失败后排查、维护窗口深度测试。非连续监控,会占用GPU资源,高层级测试不适合和生产负载并行

监控场景下的优点

DCGM Diagnostics在监控体系中的价值不是替代dcgm-exporter,而是补齐“指标异常之后怎么验证”和“上线前怎么证明节点可用”这两个环节。常规监控可以告诉我们温度高、功耗低、XID出现或利用率异常,但不一定能证明根因;诊断工具可以进一步施加受控负载,把软件、链路、显存、计算、功耗和通信问题分域暴露出来。

它特别适合做三类自动化:

  • 准入检查:节点加入KubernetesSlurm或其他调度系统前,先运行-r 1或指定测试。
  • 告警后动作:当dcgm-exporter发现XIDECC、温度或链路异常后,自动触发定向诊断。
  • 维护巡检:在维护窗口运行-r 3-r 4,验证更深层的稳定性问题。

监控场景下的缺点

它不适合承担持续监控职责,原因包括:

  • 诊断测试是主动负载,会占用GPU、显存、PCIe和功耗预算。
  • 长时间压力测试可能干扰线上训练或推理任务。
  • 阈值需要结合实际硬件基线调优,不能把官方示例阈值无差别套到所有机型。
  • 某些插件和参数与GPU架构、SKU、驱动和部署方式相关,需要以当前版本官方文档和本机dcgmi diag --help为准。
  • 官方明确说明它不是完整硬件诊断、自动修复或RMA替代流程。

因此,推荐的组合是:dcgm-exporter负责持续采集和告警;nvidia-smi负责临时人工点查;DCGM Diagnostics负责上线前验证、告警后定向排查和维护窗口深度诊断。

常见问题

DCGM Diagnostics是免费工具还是收费工具?

DCGM Diagnostics本身不需要单独购买工具许可证,也不需要额外的商业授权密钥。它随DCGM一起分发,NVIDIA官方页面将DCGM描述为可独立使用、也可集成到集群管理、资源调度和监控产品中的工具套件;NVIDIA/DCGM源码仓库也标明项目源码采用Apache-2.0许可。

需要注意的是,这并不意味着”所有相关能力都不受任何商业条款约束”。实际生产使用仍受NVIDIA DriverGPU硬件支持范围和NVIDIA软件许可条款约束;企业级支持、DGX服务、云厂商托管服务、硬件维保和商业技术支持属于另外的商业服务范畴。

已有任务占用GPU时,还能同时运行诊断吗?

不建议在同一张正在承载生产任务的GPU上运行完整DCGM Diagnostics。原因是DCGM Diagnostics并不是纯读取指标的轻量探针,它包含会主动占用GPU、显存、PCIeNVLink和功耗预算的测试,例如targeted_powertargeted_stressmemtestpulsenvbandwidth。这些测试可能干扰正在运行的训练或推理任务,也可能因为已有业务负载导致诊断结果失真。

官方文档中也能看到相关约束:DCGM Diagnostics被定位为工作负载部署前的就绪度评估工具;nvbandwidth测试还明确包含运行前检查,如果当前MCUTIL超过10%,测试会失败。因此,生产环境中更稳妥的做法是把完整诊断放到节点准入、维护窗口、作业失败后隔离排查等场景中执行。

如果同一台主机上只有部分GPU被占用,可以使用-i指定空闲GPU,或者使用-g指定DCGM中的GPU组,只对空闲卡运行诊断。例如:

sudo dcgmi diag -r 1 -i 2

如果目标是在线观察运行中任务的健康状态,应优先使用dcgm-exporterPrometheusnvidia-smi等被动监控方式,而不是把完整dcgmi diag当作在线健康探针。

参考资料