使用 MTDCGM 诊断 GPU
本指南介绍如何使用 dcgmi diag 检查 GPU、节点和系统部署状态,适用于节点上线前验证、故障定位和支持交接。故障正在发生时,请先执行 MT GPU 故障排查指南,再返回本指南运行 DCGM 诊断。
诊断可能占用 GPU、CPU、内存、PCIe/MTLink 和网络资源。一级诊断适合首次部署检查。二级及以上诊断只能在排空并隔离节点后执行。运行前请保存现场,不要在有业务作业时直接启动压力或硬件诊断。
快速运行一级诊断
节点已排空时,运行以下命令执行首次主动检查:
dcgmi diag -r 1 --debugLogFile ./dcgmi-diag.log
rc=$?
printf 'dcgmi exit code: %s\n' "$rc"
命令无法启动时,返回步骤 1:准备诊断环境。测试失败时,继续查看步骤 4:判定诊断结果。
步骤 1:准备诊断环境
1. 确认 Host Engine 和环境变量
dcgmi 必须连接正在运行的 mt-hostengine 或其他 MTDCGM 后台服务。启动 Host Engine 前,配置 MTDCGM 路径,并确认 MUSA Toolkit 动态库可以加载:
export PATH=/usr/local/mtdcgm/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/mtdcgm/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH}
如果您在启动 Host Engine 后才设置环境变量,请按 MTDCGM 安装指南重新确认服务和环境,再运行诊断。
2. 确认目标 GPU 和作业状态
运行以下只读查询,确认 GPU 可见:
mthreads-gmi --query
dcgmi discovery -l
开始诊断前,记录 GPU 数量、设备 ID、正在运行的进程和作业分配。使用 -i 指定 GPU 列表,使用 -g 指定 GPU 组。两者不能同时使用。
3. 保存诊断前状态
保存以下信息,以便比较诊断前后的状态:
date --iso-8601=seconds
hostname
uname -a
mthreads-gmi --query -f mthreads-gmi-before.log
dcgmi discovery -l
另外保留问题发生时间附近的内核日志、/var/log/mt-hostengine.log、XID 和应用日志。需要记录完整事件时,转到 MT GPU 故障排查指南的记录步骤。
步骤 2:选择诊断级别
高一级诊断包含低一级检查。实际耗时取决于 GPU 数量、型号、拓扑、测试参数和节点负载,表中时间不能用作调度超时值。
| 级别 | 用途 | 参考时间 | 运行条件 |
|---|---|---|---|
1 | 快速系统验证和部署检查 | 数秒 | 用作首次主动检查。 |
2 | 扩展系统验证 | 最长约 2 分钟 | 排空作业,确认 GPU 没有业务负载。 |
3 | 系统硬件诊断 | 长时间 | 排空并隔离节点,在维护窗口执行。 |
4 | 更长时间的系统硬件诊断 | 更长时间 | 仅在受控维护窗口执行。 |
一级诊断检查以下部署条件:
- MTML Library;
- MUSA Main Library;
- Permissions and OS Blocks。
二级及以上诊断可能执行 GPU Memory、PCIe、Targeted Power、Targeted Stress、Memtest 和 Memory Bandwidth 等测试。以 dcgmi diag 输出为准,不要根据 NVIDIA 的插件名称推断 MTDCGM 的支持范围。
步骤 3:运行诊断
1. 运行一级诊断
对所有 GPU 运行一级诊断,并保存加密调试日志:
dcgmi diag -r 1 --debugLogFile ./dcgmi-diag.log
只诊断 GPU 0:
dcgmi diag -r 1 -i 0
2. 运行更高级别诊断
节点排空并隔离后,再选择级别:
dcgmi diag -r 2 -i 0
dcgmi diag -r 3 -i 0
dcgmi diag -r 4 -i 0
不要在生产节点上直接试运行二级、三级或四级诊断。运行前,确认维护窗口、节点隔离方式、测试时长和中止流程。
3. 运行指定测试
如需组合指定测试,请先排空并隔离节点,再使用 -r 的测试名称形式,并运行 dcgmi diag -h 确认当前构建接受的名称:
dcgmi diag -r "mp stress,diagnostic" -i 0
mp stress 和 diagnostic 可能占用 GPU 资源。不要在有业务作业的生产节点上运行这些测试。
测试名称和可用参数可能随 GPU 型号、构建配置和测试插件变化。要设置测试参数时,使用 -p test_name.variable_name=value,并保留完整命令和参数。
4. 保存结构化结果和统计信息
使用 JSON 输出,或在测试失败时保存插件统 计信息:
dcgmi diag -r 1 -j > dcgmi-diag.json
dcgmi diag -r 1 --statsonfail --statspath ./dcgmi-stats
保存命令退出码:
dcgmi diag -r 1 --debugLogFile ./dcgmi-diag.log
rc=$?
printf 'dcgmi exit code: %s\n' "$rc"
其他常用选项:
| 选项 | 用途 |
|---|---|
-v | 显示每项测试的信息和警告。 |
--debugLogFile <file> | 保存加密调试日志。 |
--statspath <path> | 指定插件统计文件目录。 |
--iterations <n> | 连续运行多次诊断。 |
--host <IP/FQDN> | 连接指定的 Host Engine;仅在远程服务已配置时使用。 |
客户端输出不包含全部诊断信息。完整诊断和验证日志还可能位于 Host Engine 的诊断工作目录和日志目录中。
5. 中止正在运行的诊断
如果诊断影响节点响应、维护窗口结束或需要立即停止,请向运行诊断的 Host Engine 发送停止请求:
DCGMI_STOP_DIAG_HOSTNAME=localhost dcgmi diag
将 localhost 替换为实际 Host Engine 的主机名或地址。该请求会停止目标 Host Engine 上的诊断进程。中止后,请保存终端输出、Host Engine 日志和节点状态,再确认 GPU 进程和作业状态。
6. 不要复制当前不支持的 NVIDIA 参数
当前 MTDCGM 诊断命令行帮助将以下选项标记为不支持:
-c/--configfile;-f/--fakeGpuList;--train;--throttle-mask;--fail-early;--check-interval。
这些选项即使出现在 NVIDIA DCGM 文档中,也不能据此推断 MTDCGM 支持生成黄金基线、忽略节流原因或提前失败。