DCGM Deep Dive
Data Center GPU Manager: what it is, what it isn't, when to use it, the commands, and plenty of practice.
1. DCGM in one sentence
2. What DCGM is NOT
Most failed DCGM questions come from answers that give DCGM a job it doesn't do. If an answer says DCGM does any of these, it's wrong:
| Task | DCGM? | Correct tool |
|---|---|---|
| Partition or resize disks, storage quotas | NO | BCM disk setup / Linux tools (parted, resize2fs), filesystem quotas |
| Provision OS images onto nodes | NO | Base Command Manager (BCM) |
| Schedule jobs, allocate GPUs to users | NO | Slurm, Kubernetes (DCGM can feed them health and stats) |
| Configure InfiniBand, pick NICs for NCCL | NO | NCCL env vars (NCCL_IB_HCA), Subnet Manager (UFM / OpenSM), ibstat |
| Configure or manage the NVSwitch fabric | NO | Fabric Manager (DCGM can monitor NVLink and NVSwitch errors) |
| Create or destroy MIG instances | NO | nvidia-smi mig (DCGM can monitor MIG instances) |
| Install GPU drivers / CUDA | NO | Package manager, BCM image, GPU Operator |
| Move data between GPUs | NO | NCCL |
| Reserve SSD space for "GPU memory offload" | NO | Not a real thing |
3. DCGM vs nvidia-smi vs other tools
| nvidia-smi | DCGM | |
|---|---|---|
| Scope | One node, interactive, point-in-time | Whole fleet, continuous, programmatic |
| Built on | NVML (NVIDIA Management Library) | NVML too, plus a lot on top |
| Monitoring | Snapshot (or simple polling with -l) | Low-overhead continuous field watches, history, profiling metrics |
| Diagnostics | None (just shows state) | Active stress diagnostics (dcgmi diag) |
| Health | Shows ECC counts, temperature | Background health watches with pass/warn/fail |
| Policies | None | Automatic actions on violations (notify, GPU reset) |
| Job accounting | Basic | Per-job GPU stats (dcgmi stats) |
| Integrations | Scripts | Prometheus/Grafana (DCGM Exporter), Kubernetes GPU Operator, Slurm prolog/epilog, BCM |
| Good for | "What is GPU 3 doing right now?" Setting power limits, MIG setup | "Are all 512 GPUs healthy? Which job overheated them? Is this GPU faulty?" |
Where DCGM sits next to the other NVIDIA tools
| Tool | One-line job |
|---|---|
| DCGM | GPU monitoring, health, diagnostics, policy, job stats |
| nvidia-smi | Query and configure GPUs on one node (including MIG) |
| Fabric Manager | Configure the NVSwitch / NVLink fabric inside a node |
| NCCL | Communication library that moves data between GPUs |
| BCM | Provision and manage the cluster (images, nodes, services) |
| Slurm / Kubernetes | Schedule workloads |
| UFM | Manage and monitor the InfiniBand fabric |
| Nsight Systems / Compute | Profile one application in detail (developer tool). See the Nsight guide. |
4. How DCGM is built
| Component | What it is |
|---|---|
nv-hostengine | The DCGM daemon. It runs on each GPU node, talks to the GPUs through NVML, and keeps watches and history. Usually run as the systemd service nvidia-dcgm. Listens on TCP port 5555 by default. |
dcgmi | The command-line tool admins use. Every command in this guide starts with dcgmi. |
| DCGM Exporter | Publishes DCGM metrics in Prometheus format (default :9400/metrics) for Grafana dashboards. Part of the Kubernetes GPU Operator. |
| libdcgm + bindings | C, Python, and Go APIs for building your own tools. |
| Standalone vs embedded mode | Standalone: clients connect to a running nv-hostengine (the normal setup). Embedded: an application loads DCGM directly in its own process. |
sudo systemctl enable --now nvidia-dcgm # start the host engine now and at boot
dcgmi discovery -l # quick test: does DCGM see the GPUs?
5. The 7 things DCGM does
Memorize these seven. Almost every DCGM exam question maps to one of them.
| # | Capability | What it means | Command |
|---|---|---|---|
| 1 | Discovery & groups | Find GPUs (and NVSwitches) and group them so later commands apply to many at once. | dcgmi discovery, dcgmi group |
| 2 | Telemetry / monitoring | Continuously sample fields: utilization, memory, temperature, power, clocks, ECC, PCIe/NVLink throughput, tensor core activity. | dcgmi dmon, DCGM Exporter |
| 3 | Health monitoring | Passive, low-cost background checks of subsystems (memory/ECC, PCIe, NVLink, thermal, power, InfoROM) that report pass, warn, or fail. | dcgmi health |
| 4 | Active diagnostics | Run stress tests on the GPU to find hardware faults. The GPU must be idle. | dcgmi diag |
| 5 | Policies | "When X happens (double-bit ECC error, XID, overheating, PCIe or NVLink errors), automatically notify and optionally reset the GPU." | dcgmi policy |
| 6 | Job statistics | Record GPU usage, energy, errors, and throttling per job. Often hooked into Slurm prolog/epilog. | dcgmi stats |
| 7 | Configuration management | Set and enforce GPU settings (power limit, ECC, compute mode, application clocks) for a group, and re-apply them after a GPU reset. | dcgmi config |
Also useful: dcgmi topo (GPU/PCIe/NVLink topology), dcgmi nvlink (NVLink status and errors), dcgmi profile (profiling metric groups, with pause/resume so Nsight can run).
6. Diagnostics in depth: dcgmi diag levels
This is the most-tested DCGM area. dcgmi diag -r <level> runs active tests. Higher levels run more tests for longer.
| Level | Name | Roughly how long | What it checks | Typical use |
|---|---|---|---|---|
-r 1 | Quick | Seconds | Software and deployment sanity: driver loaded, permissions, persistence mode, no conflicting processes, environment. | Before every job (Slurm prolog), quick sanity check |
-r 2 | Medium | About 2 minutes | Level 1, plus short hardware tests: PCIe/NVLink (pcie), a basic GPU memory test (memory), memory bandwidth (memory_bandwidth). | Quick hardware check, after maintenance |
-r 3 | Long | Tens of minutes | Level 2, plus stress: the diagnostic (GEMM) test, targeted stress, targeted power, NVBandwidth, NCCL tests. | Suspected faulty GPU, after a hardware swap, evidence for a vendor support case |
-r 4 | Extended | About an hour or more | Level 3, plus Memory Stress (memtest) and the pulse/power-transient test (pulse). | Burn-in / acceptance testing of new systems, hard-to-reproduce faults |
memtest) runs only at level 4 (current DCGM docs, run-level table). Older study material that predates level 4 may say level 3.Exact durations and test lists vary by DCGM version and GPU. For the exam, remember the ordering and the typical use.
dcgmi diag -r 1 # quick sanity check, all GPUs
dcgmi diag -r 3 -i 0,1 # long diag on GPUs 0 and 1 only
dcgmi diag -r 3 -g 2 # long diag on GPU group 2
dcgmi diag -r 3 -j # JSON output, for scripts and automation
dcgmi diag -r memtest # run a specific test by name (version-dependent)
-r 3 or -r 4 on a GPU that's running a customer job.dcgmi diag with dcgmproftester. dcgmi diag gives the official PASS/FAIL health verdict. dcgmproftester12 ships with DCGM, but it's only a load generator: it drives one profiling metric (for example -t 1004 for Tensor Core activity) so you can check that DCGM Exporter or Grafana reports it. It never says whether the GPU is healthy. For the full comparison with gpu-burn, see gpu-burn & dcgmproftester mastery.dcgmi diag -r 4 before every job" is wrong because it's far too slow. Per-job checks use -r 1 (or dcgmi health -c). Long levels are for suspected faults, burn-in, and acceptance testing.7. Health checks vs diagnostics vs policies
These three get confused constantly, and examiners know it.
Health (dcgmi health) | Diagnostics (dcgmi diag) | Policy (dcgmi policy) | |
|---|---|---|---|
| Type | Passive background watching | Active stress testing | Reactive rule engine |
| Load on GPU | Negligible | Heavy (GPU must be idle) | Negligible |
| Can run during jobs? | Yes | No | Yes |
| Answers the question | "Has anything bad happened to this GPU so far?" | "If I push this GPU hard, does it fail?" | "When something bad happens, what should be done automatically?" |
| Example | Health check shows a FAIL for memory after ECC errors | Level 3 diag fails the memory bandwidth test | On a double-bit ECC error, send a notification and reset the GPU |
Health commands
dcgmi group -c allgpus --default # group containing all GPUs (prints its ID, 2 for the first group you create)
dcgmi health -g 2 -s a # set (-s) watches on all (a) subsystems for group 2
dcgmi health -g 2 -c # check (-c) current health: Healthy / Warning / Failure
# subsystem letters for -s: p=PCIe m=memory i=InfoROM t=thermal/power n=NVLink a=all (others exist)
Policy commands
# Watch group 2 for: double-bit ECC (-e), PCIe errors (-p), XID errors (-x), NVLink errors (-n),
# temperature above 90°C (-T 90), power above 700W (-P 700)
# --set action,validation action: 0=none 1=GPU reset validation: 0=none 1=short diag 2=medium 3=long
dcgmi policy -g 2 --set 1,1 -e -p -x -n -T 90 -P 700
dcgmi policy -g 2 --get # show the current policy
dcgmi policy -g 2 --reg # register and listen: prints violations as they happen
8. XID errors: what DCGM watches for
An XID is an error code the NVIDIA driver writes to the kernel log (dmesg / journalctl -k) when something goes wrong with a GPU. DCGM can watch for them, include them in health results, trigger policies, and export them (DCGM_FI_DEV_XID_ERRORS).
| XID | Meaning (simplified) | Usually points to |
|---|---|---|
| 13 | Graphics engine exception | Often the application (bad memory access, kernel bug) |
| 31 | GPU memory page fault | Usually the application |
| 43 | GPU stopped processing | Application or driver |
| 48 | Double-bit ECC error (DBE) | Hardware: memory fault. Investigate and run diagnostics. |
| 63 / 64 | ECC page retirement / row remapping event (or failure) | Memory health. 64 (failure) is more serious. |
| 74 | NVLink error | NVLink / NVSwitch hardware or fabric |
| 79 | GPU has fallen off the bus | Hardware / PCIe / power: serious |
| 94 / 95 | Contained / uncontained ECC error | 95 (uncontained) needs a GPU reset |
Full Xid list with actions, plus ECC/row remapping, SXid, CUDA and NCCL errors: error codes guide.
9. Common real-world and exam scenarios
Read the scenario, decide which DCGM capability fits, then check the answer below it.
Answer: Slurm prolog runs
dcgmi diag -r 1 (or dcgmi health -c). If it fails, drain the node.Answer: Burn-in / acceptance:
dcgmi diag -r 3 or -r 4 on every node (plus NCCL tests for the network).dmesg shows XID 48. Is the GPU bad?Answer: Drain the node, check
dcgmi health -c, then run dcgmi diag -r 3 on that GPU. Keep the results as evidence for vendor support; DCGM diagnostics support a case but aren't the RMA process, which uses NVIDIA's field diagnostic.Answer:
dcgmi policy with -e (DBE) and an action such as GPU reset, registered with --reg or used through the API.Answer: DCGM Exporter → Prometheus → Grafana. In Kubernetes, the GPU Operator deploys DCGM Exporter for you.
Answer:
dcgmi stats: enable it, start/stop recording per job ID (often in prolog/epilog), then view per-job reports.Answer:
dcgmi dmon with profiling fields (SM active, tensor pipe active, DRAM active, PCIe/NVLink bytes). Low tensor activity with high PCIe wait usually means a data-loading bottleneck.Answer:
dcgmi config -g <group> --set -P 600. DCGM enforces group config, unlike a one-off nvidia-smi -pl.Answer: Look at DCGM fields for clock-throttle reasons, temperature, and power (
dcgmi dmon, the exporter, or job stats).Answer:
dcgmi nvlink -s (link status), dcgmi nvlink -e -g <gpuId> (error counters), and health watches with n. Configuring the fabric is Fabric Manager's job.10. Command cheat sheet
Setup and discovery
sudo systemctl enable --now nvidia-dcgm # start the DCGM host engine (nv-hostengine)
dcgmi -v # version
dcgmi discovery -l # list GPUs (and NVSwitches) DCGM can see
dcgmi topo --gpuid 0 # topology / affinity for GPU 0
Groups (most commands take -g <groupId>)
dcgmi group -l # list groups
dcgmi group -c mygpus # create an empty group (prints its ID)
dcgmi group -g 2 -a 0,1,2,3 # add GPUs 0-3 to group 2
dcgmi group -c allgpus --default # create a group containing all GPUs
dcgmi group -d 2 # delete group 2
Groups 0 (DCGM_ALL_SUPPORTED_GPUS) and 1 (DCGM_ALL_SUPPORTED_NVSWITCHES) are built in, so the first group you create usually gets ID 2. Use the ID that dcgmi group -c prints.
Monitoring
dcgmi dmon -l # list available field IDs
dcgmi dmon -e 203,252,150,155 # util, FB memory used, temp, power (live)
dcgmi dmon -e 1002,1004,1005 -d 1000 -c 10 # SM active, tensor active, DRAM active; 1 s interval, 10 samples
dcgmi dmon -i 0 -e 203 # only GPU 0
Health
dcgmi health -g 2 -s a # watch all subsystems
dcgmi health -g 2 -c # check health now
dcgmi health -g 2 -f # fetch current watch settings
Diagnostics
dcgmi diag -r 1 # quick (seconds)
dcgmi diag -r 2 # medium (minutes)
dcgmi diag -r 3 # long (tens of minutes)
dcgmi diag -r 4 # extended (hour+)
dcgmi diag -r 3 -i 0 -j # GPU 0 only, JSON output
Policies
dcgmi policy -g 2 --set 1,1 -e -x -p -n # on DBE / XID / PCIe / NVLink: reset + short diag
dcgmi policy -g 2 -T 90 -P 700 # thermal and power thresholds
dcgmi policy -g 2 --get # show policy
dcgmi policy -g 2 --reg # listen for violations
dcgmi policy -g 2 --clear # remove policy
Job statistics
dcgmi stats -g 2 -e # enable stats recording for group 2
dcgmi stats -g 2 -s job123 # start recording job "job123" (Slurm prolog)
dcgmi stats -x job123 # stop recording (Slurm epilog)
dcgmi stats -j job123 -v # verbose per-job report
Configuration
dcgmi config -g 2 --get # show config for group
dcgmi config -g 2 --set -P 600 # enforce 600 W power limit
dcgmi config -g 2 --set -e 1 # enable ECC (needs reset to take effect)
NVLink and profiling
dcgmi nvlink -s # NVLink link status for all GPUs
dcgmi nvlink -e -g 0 # NVLink error counters for GPU 0
dcgmi profile -l # list profiling metric groups
dcgmi profile --pause / --resume # pause DCGM profiling so Nsight can use the counters
Flags can differ slightly between DCGM versions. Run dcgmi <subcommand> --help on a real system.
11. Useful field IDs and exporter metrics
| Field ID | Exporter / API name | Meaning |
|---|---|---|
| 150 | DCGM_FI_DEV_GPU_TEMP | GPU temperature (°C) |
| 155 | DCGM_FI_DEV_POWER_USAGE | Power draw (W) |
| 203 | DCGM_FI_DEV_GPU_UTIL | GPU utilization % (coarse: "was any kernel running?") |
| 252 | DCGM_FI_DEV_FB_USED | Framebuffer (GPU memory) used |
| 230 | DCGM_FI_DEV_XID_ERRORS | Last XID error |
| 1001 | DCGM_FI_PROF_GR_ENGINE_ACTIVE | Graphics/compute engine active ratio |
| 1002 | DCGM_FI_PROF_SM_ACTIVE | Fraction of time SMs had work |
| 1004 | DCGM_FI_PROF_PIPE_TENSOR_ACTIVE | Tensor core activity (is AI math happening?) |
| 1005 | DCGM_FI_PROF_DRAM_ACTIVE | Memory bandwidth utilization |
| 1009 / 1010 | DCGM_FI_PROF_PCIE_TX/RX_BYTES | PCIe traffic |
| 1011 / 1012 | DCGM_FI_PROF_NVLINK_TX/RX_BYTES | NVLink traffic |
GPU_UTIL = 100% only means "a kernel was running." It doesn't mean the GPU is used efficiently. To judge real efficiency, look at the profiling fields (SM_ACTIVE, PIPE_TENSOR_ACTIVE, DRAM_ACTIVE). This is a favorite exam nuance. To check that these fields are wired up, generate a known load with dcgmproftester12 --no-dcgm-validation -t <fieldId> -d 60 (1002 SM_ACTIVE, 1004 PIPE_TENSOR_ACTIVE, 1005 DRAM_ACTIVE). See the gpu-burn & dcgmproftester guide.12. Sample outputs
What the commands in this guide print. Expand a command to see a typical result and what to check in it.
dcgmi -vShow DCGM client and host engine versions
Version : 4.2.3
Build ID : 7
Build Date : 2025-05-20
Build Type : Release
Commit ID : 0000aaaa1111bbbb2222cccc3333dddd4444eeee
Branch Name : rel_dcgm_4_2
CPU Arch : x86_64
Build Platform : Linux 4.15.0-180-generic #189-Ubuntu SMP Wed May 18 14:13:57 UTC 2022 x86_64
CRC : 00000000000000000000000000000000
Hostengine build info:
Version : 4.2.3
Build ID : 7
Build Date : 2025-05-20
Build Type : Release
Commit ID : 0000aaaa1111bbbb2222cccc3333dddd4444eeee
Branch Name : rel_dcgm_4_2
CPU Arch : x86_64
Build Platform : Linux 4.15.0-180-generic #189-Ubuntu SMP Wed May 18 14:13:57 UTC 2022 x86_64
CRC : 00000000000000000000000000000000What to look at: The client version and the 'Hostengine build info' version should match. If the hostengine block is missing or shows an error, nv-hostengine (the nvidia-dcgm service) isn't running or can't be reached on port 5555.
dcgmi discovery -lList GPUs and NVSwitches DCGM can see
8 GPUs found.
+--------+----------------------------------------------------------------------+
| GPU ID | Device Information |
+--------+----------------------------------------------------------------------+
| 0 | Current Name: NVIDIA H100 80GB HBM3 |
| | PCI Bus ID: 00000000:18:00.0 |
| | Device UUID: GPU-7c1e0000-0000-4000-8000-000000000000 |
+--------+----------------------------------------------------------------------+
| 1 | Current Name: NVIDIA H100 80GB HBM3 |
| | PCI Bus ID: 00000000:2A:00.0 |
| | Device UUID: GPU-7c1e0000-0000-4000-8000-000000000001 |
+--------+----------------------------------------------------------------------+
... (GPUs 2-6 trimmed)
| 7 | Current Name: NVIDIA H100 80GB HBM3 |
| | PCI Bus ID: 00000000:DB:00.0 |
| | Device UUID: GPU-7c1e0000-0000-4000-8000-000000000007 |
+--------+----------------------------------------------------------------------+
4 NvSwitches found.
+-----------+
| Switch ID |
+-----------+
| 0 |
| 1 |
| 2 |
| 3 |
+-----------+What to look at: A DGX H100 should report 8 GPUs and 4 NvSwitches. Fewer GPUs than installed (for example '7 GPUs found') means a GPU fell off the bus or the driver didn't load it, so check dmesg for Xid 79 before anything else.
dcgmi topo --gpuid 0Show GPU 0 topology and CPU affinity
+-------------------+------------------------------------------------------------------------------+
| GPU ID: 0 | Topology Information |
+===================+==============================================================================+
| CPU Core Affinity | 0 - 55, 112 - 167 |
+-------------------+------------------------------------------------------------------------------+
| To GPU 1 | Connected via eighteen NVLinks |
| To GPU 2 | Connected via eighteen NVLinks |
| To GPU 3 | Connected via eighteen NVLinks |
| To GPU 4 | Connected via eighteen NVLinks |
| To GPU 5 | Connected via eighteen NVLinks |
| To GPU 6 | Connected via eighteen NVLinks |
| To GPU 7 | Connected via eighteen NVLinks |
+-------------------+------------------------------------------------------------------------------+What to look at: On a DGX H100 every GPU pair is connected through NVSwitch with eighteen NVLinks. A pair shown only as connected via PCIe or a CPU-level link means NVLink or Fabric Manager is down, and GPU-to-GPU traffic will be far slower.
dcgmi group -lList DCGM groups
+-------------------+----------------------------------------------------------+
| GROUPS |
| 2 groups found. |
+===================+==========================================================+
| Groups | |
| -> 0 | |
| -> Group ID | 0 |
| -> Group Name | DCGM_ALL_SUPPORTED_GPUS |
| -> Entities | GPU 0, GPU 1, GPU 2, GPU 3, GPU 4, GPU 5, GPU 6, GPU 7 |
| -> 1 | |
| -> Group ID | 1 |
| -> Group Name | DCGM_ALL_SUPPORTED_NVSWITCHES |
| -> Entities | SWITCH 0, SWITCH 1, SWITCH 2, SWITCH 3 |
+-------------------+----------------------------------------------------------+What to look at: Groups 0 and 1 are built in, so the first group you create gets ID 2. If a later command fails with 'Cannot find group', list the groups and use the ID shown here.
dcgmi group -c allgpus --defaultCreate a group containing all GPUs
Successfully created group "allgpus" with a group ID of 2What to look at: Note the printed ID: every later -g option uses it. Without --default the new group is empty, and you add GPUs with 'dcgmi group -g <id> -a 0,1,2,3'.
dcgmi dmon -lList field IDs available to dmon
___________________________________________________________________________________
Long Name Short Name Field ID
___________________________________________________________________________________
driver_version DRVER 1
...
gpu_temp TMPTR 150
power_usage POWER 155
gpu_utilization GPUTL 203
fb_used FBUSD 252
xid_errors XIDER 230
...
gr_engine_active GRACT 1001
sm_active SMACT 1002
sm_occupancy SMOCC 1003
tensor_active TENSO 1004
dram_active DRAMA 1005
pcie_tx_bytes PCITX 1009
pcie_rx_bytes PCIRX 1010
nvlink_tx_bytes NVLTX 1011
nvlink_rx_bytes NVLRX 1012
(output trimmed)What to look at: Use this to find the numeric field ID for dmon -e and to match it with the short column name you'll see in dmon output. The 1001-1012 profiling fields are the ones that show real efficiency; 203 (GPUTL) only shows that a kernel was running.
dcgmi dmon -e 203,252,150,155Stream utilization, memory, temperature, power
#Entity GPUTL FBUSD TMPTR POWER
ID % MB C W
GPU 0 98 71680 58 412.6
GPU 1 98 71680 57 409.3
GPU 2 99 71680 59 415.0
GPU 3 98 71680 58 411.8
GPU 4 0 0 33 71.2
GPU 5 0 0 32 70.8
GPU 6 0 0 33 71.5
GPU 7 0 0 32 70.9
GPU 0 98 71680 58 413.1
...
(runs until Ctrl+C; add -c N to stop after N samples)What to look at: GPUs 0-3 show 98% utilization, but at about 410 W they're far below the 700 W an H100 draws under full load, which hints the job isn't really busy. Look for one GPU much hotter or drawing much less power than its peers; GPUTL alone can't tell you whether the work is efficient.
dcgmi dmon -e 1002,1004,1005 -d 1000 -c 10Sample SM, tensor, and DRAM activity
#Entity SMACT TENSO DRAMA
ID
GPU 0 0.312 0.081 0.124
GPU 1 0.305 0.079 0.121
GPU 2 0.318 0.084 0.127
GPU 3 0.309 0.080 0.122
GPU 4 0.000 0.000 0.000
GPU 5 0.000 0.000 0.000
GPU 6 0.000 0.000 0.000
GPU 7 0.000 0.000 0.000
GPU 0 0.297 0.077 0.119
...
(10 samples, 1000 ms apart)What to look at: Profiling fields are ratios from 0 to 1. Here SM active is about 0.3 and tensor active below 0.1 while GPUTL reads 98%, so the GPUs are mostly waiting (often on data loading). A well-fed training job usually shows SMACT above 0.8, and 'N/A' means profiling is paused or another tool holds the counters.
dcgmi health -g 2 -cCheck current health of group 2
+---------------------------+----------------------------------------------------------+
| Health Monitor Report |
+===========================+==========================================================+
| Overall Health | Failure |
| GPU ID: 3 | Failure |
| | Memory system: Failure |
| | - A volatile double-bit ECC error (count 1) was |
| | detected on GPU 3. Drain the GPU and reset it or |
| | reboot to clear. Pending row remap: yes. |
+---------------------------+----------------------------------------------------------+What to look at: Healthy output shows only 'Overall Health | Healthy'. Any Warning or Failure names the GPU and subsystem, and a memory Failure from a double-bit ECC error (Xid 48) is a hardware fault, so drain the node and run a level 3 diag. This check only reports on watches you set first with 'dcgmi health -g 2 -s a'.
dcgmi diag -r 1Quick software and deployment check
Successfully ran diagnostic for group.
+---------------------------+------------------------------------------------+
| Diagnostic | Result |
+===========================+================================================+
|----- Metadata ----------+------------------------------------------------|
| DCGM Version | 4.2.3 |
| Driver Version Detected | 570.133.20 |
| GPUs Tested | 0, 1, 2, 3, 4, 5, 6, 7 |
|----- Deployment --------+------------------------------------------------|
| Software | Pass |
+---------------------------+------------------------------------------------+What to look at: Level 1 only checks the software: driver, libraries, permissions, persistence mode, and conflicting processes. A Fail here usually names a running compute process or a missing library. A Pass says nothing about GPU memory or NVLink hardware.
dcgmi diag -r 3Long diagnostic with stress tests
Successfully ran diagnostic for group.
+---------------------------+------------------------------------------------+
| Diagnostic | Result |
+===========================+================================================+
|----- Metadata ----------+------------------------------------------------|
| DCGM Version | 4.2.3 |
| Driver Version Detected | 570.133.20 |
| GPUs Tested | 0, 1, 2, 3, 4, 5, 6, 7 |
|----- Deployment --------+------------------------------------------------|
| Software | Pass |
|----- Integration -------+------------------------------------------------|
| PCIe | Pass |
| NVBandwidth | Pass |
| NCCL Tests | Pass |
|----- Hardware ----------+------------------------------------------------|
| Memory | Fail - GPU 3 |
| Warning | GPU 3: A double-bit ECC error was detected |
| | (volatile DBE 1, pending row remap). Memory |
| | test failed. |
| Diagnostic | Pass |
|----- Stress ------------+------------------------------------------------|
| Memory Bandwidth | Fail - GPU 3 |
| Targeted Stress | Pass |
| Targeted Power | Pass |
+---------------------------+------------------------------------------------+What to look at: Read every row: a clean run is Pass on all tests, and any Fail names the GPU plus a Warning line with the reason. Keep this output as support evidence. It takes tens of minutes and loads the GPUs heavily, so run it only on a drained node.
dcgmi diag -r 3 -i 0 -jLong diagnostic on GPU 0, JSON output
{
"DCGM GPU Diagnostic" : {
"driver" : "570.133.20",
"gpu_ids" : "0",
"test_level" : 3,
"version" : "4.2.3",
"test_categories" : [
{
"category" : "Deployment",
"tests" : [ { "name" : "software", "results" : [ { "entity_id" : 0, "status" : "Pass" } ] } ]
},
{
"category" : "Hardware",
"tests" : [
{ "name" : "memory", "results" : [ { "entity_id" : 0, "status" : "Pass" } ] },
{ "name" : "diagnostic", "results" : [ { "entity_id" : 0, "status" : "Pass" } ] }
]
},
{
"category" : "Stress",
"tests" : [
{ "name" : "targeted_stress", "results" : [ { "entity_id" : 0, "status" : "Pass" } ] },
{ "name" : "targeted_power", "results" : [ { "entity_id" : 0, "status" : "Pass" } ] }
]
}
(output trimmed)
]
}
}What to look at: Scripts should parse the status of every test and treat anything other than Pass or Skip as a failure. A 'Fail' status has a matching warnings entry with the reason; this GPU passed everything.
dcgmi policy -g 2 --getShow the policy set on group 2
Policy information
+---------------------------+------------------------------------------------+
| allgpus | Policy Information |
+===========================+================================================+
| Violation conditions | Double-bit ECC errors |
| | PCI errors and replays |
| | Max temperature threshold - 90 |
| | Max power threshold - 700 |
| | XID errors |
| | NVLink errors |
| Isolation mode | Manual |
| Action on violation | Reset GPU |
| Validation after action | System validation (short) |
| Validation failure action | None |
+---------------------------+------------------------------------------------+What to look at: This is what 'dcgmi policy -g 2 --set 1,1 -e -p -x -n -T 90 -P 700' produces: action 1 means reset the GPU, validation 1 means run a short diag afterwards. If you want the evidence kept for a support case, the action should be None (--set 0,0), because a reset clears volatile error state.
dcgmi policy -g 2 --regListen for policy violations
Listening for violations.
Timestamp: Tue Nov 10 14:02:11 2026
A XID error has violated policy manager values.
XID error 48 detected on GPU 3 (00000000:5D:00.0)
...
(blocks until Ctrl+C)What to look at: Each violation prints with the GPU and the condition that fired. Xid 48 (double-bit ECC) or 79 (fell off the bus) point to hardware, while 13 and 31 are usually application bugs. Nothing printed means no violations yet, not that the policy is broken.
dcgmi stats -g 2 -e && dcgmi stats -g 2 -s job123Enable stats and start recording a job
Successfully started process watches.
Successfully started recording stats for job123.What to look at: Both lines must appear before the job starts (typically in the Slurm prolog). After the job ends, 'dcgmi stats -x job123' prints 'Successfully stopped recording stats for job123.' A report for a job that was never started comes back empty.
dcgmi stats -j job123 -vPer-job GPU usage report, verbose
Successfully retrieved statistics for job: job123.
+------------------------------------------------------------------------------+
| GPU ID: 0 |
+====================================+=========================================+
|----- Execution Stats ------------+-----------------------------------------|
| Start Time | Tue Nov 10 13:00:02 2026 |
| End Time | Tue Nov 10 13:41:05 2026 |
| Total Execution Time (sec) | 2463.12 |
| No. of Processes | 1 |
+----- Performance Stats ----------+-----------------------------------------+
| Energy Consumed (Joules) | 1391290 |
| Power Usage (Watts) | Avg: 564.8, Max: 698.1, Min: 88.2 |
| Max GPU Memory Used (bytes) | 73400320000 |
| SM Clock (MHz) | Avg: 1755, Max: 1980, Min: 1410 |
| Memory Clock (MHz) | Avg: 2619, Max: 2619, Min: 2619 |
| SM Utilization (%) | Avg: 91, Max: 100, Min: 0 |
| Memory Utilization (%) | Avg: 38, Max: 61, Min: 0 |
+----- Event Stats ----------------+-----------------------------------------+
| Single Bit ECC Errors | 0 |
| Double Bit ECC Errors | 0 |
| PCIe Replay Warnings | 0 |
| Critical XID Errors | 0 |
+----- Slowdown Stats -------------+-----------------------------------------+
| Due to - Power (%) | 0 |
| - Thermal (%) | 0 |
| - Reliability (%) | 0 |
| - Board Limit (%) | 0 |
| - Low Utilization (%) | 0 |
| - Sync Boost (%) | 0 |
+----- Overall Health -------------+-----------------------------------------+
| Overall Health | Healthy |
+------------------------------------+-----------------------------------------+
(the same block repeats for GPUs 1-7)What to look at: Use Energy Consumed for chargeback and the Event Stats for errors during the job. Non-zero Slowdown percentages (Thermal or Power) or any Double Bit ECC or Critical XID count mean the job ran on a degraded GPU.
dcgmi config -g 2 --getShow target vs current GPU config
+--------------------------+------------------------+------------------------+
| allgpus | | |
| Group of 8 GPUs | TARGET CONFIGURATION | CURRENT CONFIGURATION |
+==========================+========================+========================+
| Sync Boost | Not Specified | Disabled |
| SM Application Clock | Not Specified | **** |
| Memory Application Clock | Not Specified | 2619 |
| ECC Mode | Not Specified | Enabled |
| Power Limit | 600 | 600 |
| Compute Mode | Not Specified | Unrestricted |
+--------------------------+------------------------+------------------------+
**** Non-homogenous settings across group. Use with -v flag to see details.What to look at: After 'dcgmi config -g 2 --set -P 600' (which prints 'Configuration successfully set.'), the Power Limit target and current columns should both read 600. If they differ, the setting didn't apply. DCGM re-applies the target after a GPU reset, which a one-off nvidia-smi -pl does not.
dcgmi nvlink -sShow NVLink link status for all GPUs
+----------------------+
| NvLink Link Status |
+----------------------+
GPUs:
gpuId 0:
U U U U U U U U U U U U U U U U U U
gpuId 1:
U U U U U U U U U U U U U U U U U U
gpuId 2:
U U U U U U U U U U U U U U U U U U
gpuId 3:
U U U U U U U U U U U U U U U U U U
gpuId 4:
U U U U U U U U U U U U U U U U U U
gpuId 5:
U U U U U U U U U U U U U U U U U U
gpuId 6:
U U U U U U U U U U U U U U U U U U
gpuId 7:
U U U U U U U U U U U U U U U U U U
NvSwitches:
physicalId 8:
U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U
physicalId 9:
U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U
physicalId 10:
U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U
physicalId 11:
U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U
Key: Up=U, Down=D, Disabled=X, Not Supported=_What to look at: Every H100 should show 18 links, all U (Up). A D (Down) on any GPU or NVSwitch port means a failed link: check Fabric Manager and dcgmi nvlink -e for that GPU, and expect slower all-reduce inside the node.
dcgmi nvlink -e -g 0Show NVLink error counters for GPU 0
+-----------------------------+------------------------------------------------------+
| GPU ID: 0 | NVLINK Error Counts |
+-----------------------------+------------------------------------------------------+
|Link 0 | CRC FLIT Error => 0 |
|Link 0 | CRC Data Error => 0 |
|Link 0 | Replay Error => 0 |
|Link 0 | Recovery Error => 0 |
|Link 1 | CRC FLIT Error => 0 |
|Link 1 | CRC Data Error => 0 |
|Link 1 | Replay Error => 0 |
|Link 1 | Recovery Error => 0 |
...
|Link 17 | CRC FLIT Error => 0 |
|Link 17 | CRC Data Error => 0 |
|Link 17 | Replay Error => 0 |
|Link 17 | Recovery Error => 0 |
+-----------------------------+------------------------------------------------------+What to look at: All counters should be 0 or stay flat over time. Replay or Recovery errors that keep growing on one link point to a marginal NVLink or NVSwitch connection, which usually also shows up as Xid 74.
dcgmi profile --pausePause DCGM profiling to free counters
Successfully paused profiling.What to look at: While paused, profiling fields (1001-1012) read N/A in dmon and DCGM Exporter, so Nsight Compute can use the hardware counters. Run 'dcgmi profile --resume' (prints 'Successfully resumed profiling.') afterwards, or the dashboards stay blank.
13. Hands-on lab: simulated tickets
Three tickets on simulated DGX H100 nodes (8 GPUs and 4 NVSwitches each). You work as root on the node itself, the way you would for DCGM work:
- DCGM-101 on
dgx01: a user says job 5512 "is at 98% GPU utilization but still slow". Get the host engine running, group the job's GPUs, and use the right fields to find the real bottleneck without disturbing the job. - DCGM-202 on
dgx02: Slurm drained the node after an XID. Turn on health watches, tie the kernel XID to a GPU, run a targeted diagnostic, and collect the evidence vendor support asks for before anything resets the GPU. - DCGM-303 on
dgx03: set up the guardrails the cluster scripts expect: a policy that keeps evidence, an enforced power limit, per-job statistics, and a researcher's Nsight Compute session that needs DCGM to let go of the profiling counters.
dcgmi 4.x, nvidia-smi, and the kernel log, not exact copies. Each command advances time one step; long diagnostics finish in one step and say how long they'd really take. Up/Down recall history; Tab completes commands and files.Answer key for this ticket (spoilers)
One clean path; other orders work too. The checklist tracks results, not exact commands.
14. Trap detector: how to spot wrong DCGM answers
- Wrong layer. DCGM + disks / storage quotas / OS images / InfiniBand config / scheduling → wrong.
- Configure vs monitor. "DCGM configures the NVSwitch fabric" → wrong (Fabric Manager). "DCGM monitors NVLink errors" → right.
- MIG. "DCGM creates MIG instances" → wrong (
nvidia-smi mig). "DCGM monitors MIG instances" → right. - Diag level vs situation. Long diag (
-r 3/4) before every job → wrong. Quick (-r 1) for acceptance testing → wrong. - Diag on a busy GPU. "Run
dcgmi diag -r 3while the training job continues" → wrong. Drain first. - Health vs diag. Continuous low-overhead watching → health. Stress test to prove a fault → diag.
- Monitoring stack. Prometheus/Grafana for GPUs → DCGM Exporter, not nvidia-smi in a cron job.
- Per-job accounting →
dcgmi stats, notnvidia-smi. - Profiling one application's kernels in detail → Nsight, not DCGM. DCGM gives fleet-level profiling metrics.
- Made-up features ("DCGM storage policies," "DCGM network routing," "DCGM GPU memory swap to SSD") → wrong.