MTDCGM 诊断指南
概述
Moore Threads Validation Suite(MTVS),即 MTDCGM Diagnostics,是 MTDCGM 提供的 GPU 诊断工具,由多个插件组成,涵盖部署检查、硬件诊断和压力测试。您可以在业务上线前检查系统健康状态,也可以在故障发生后辅助定位问题。MTVS 支持交互式和脚本式运行,并提供从基础环境检查到长时间压力测试的多个诊断级别。
如果故障正在发生,请先按照 GPU 故障排查 保留现场信息,再返回本文运行 MTDCGM 诊断。
适用范围
MTDCGM 诊断适用于以下场景:
- 在业务上线前验证系统环境和 GPU 状态;
- 根据需要执行快速检查、深度诊断或长时间压力测试;
- 通过交互模式手动诊断,或通过脚本模式集成集群调度和运维系统;
- 在 GPU 作业失败前发现潜在问题,降低作业失败率和停机时间。
以下场景不在 MTDCGM 诊断的适用范围内:
- 替代完整的现场故障排查和整机硬件诊断;
- 主动修复检测到的问题;
- 单独作为硬件返修、退换或节点重新上线的判定依据;
- 通过单次诊断结果排除间歇性故障。
前提条件
运行诊断前,请确认:
- 使用 root 权限运行诊断;
PATH包含 MTDCGM 命令路径,LD_LIBRARY_PATH包含 MUSA 和 MTDCGM 动态库路径。配置方法参见 安装 MTDCGM;dcgmi可以连接到正在运行的mt-hostengine或其他 MTDCGM 后台服务。
运行级别和测试
不同诊断级别包含的测试如下。以配备 8 块 S5000 GPU 的系统为例,r2、r3 和 r4 的参考时长分别约为 1 分钟、15 分钟和 30 分钟。
| 插件 | 测试名称 | r1(Short) | r2(Medium) | r3(Long) | r4(Extra Long) |
|---|---|---|---|---|---|
| Software | software | 是 | 是 | 是 | 是 |
| PCIe + MTLink | pcie | 是 | 是 | 是 | |
| GPU Memory | memory | 是 | 是 | 是 | |
| Targeted Stress | targeted_stress | 是 | 是 | ||
| Targeted Power | targeted_power | 是 | 是 | ||
| MTBandwidth | mtbandwidth | 是 | 是 | ||
| Memory Stress | memtest | 是 |
具体诊断时长取决于 GPU 数量、MUSA SDK 和固件版本、启用的插件及插件参数。请以目标环境中的实际运行时间为准;更换软件栈后应重新测量,不要直接沿用其他环境的时长。
快速入门
命令行参数
使用以下选项选择诊断对象、测试和输出方式:
| 短命令选项 | 长命令选项 | 参数 | 说明 |
|---|---|---|---|
-g | --group | groupId | 指定要查询的设备组 ID |
--host | IP/FQDN | 连接到指定的 IP 或 FQDN。对于 Unix 套接字,在文件名前加 unix:// 前缀。默认为 localhost | |
-h | --help | groupId | 显示帮助信息 |
-r | --run | diag | 运行诊断。编号更高的测试包含其下所有测试: 1:快速(系统验证,System Validation) 2:中等(扩展系统验证,Extended System Validation) 3:长时间(系统硬件诊断,System HW Diagnostics) 4:扩展(更长时间的系统硬件诊断,Longer-running System HW Diagnostics) |
-p | --parameters | test_name.variable_name=variable_name | 设置本次运行诊断所需的参数 |
-i | --gpuList | entityId | 逗号分隔的待运行 GPU ID 列表 |
-v | --verbose | 显示每个测试的信息和告警 | |
--statsonfail | 仅在失败时输出统计文件 | ||
--debugLogFile | debug file | 记录诊断的日志文件,默认 mtvs.log | |
--statspath | 将插件统计信息写入指定路径 | ||
-d | --debugLevel | debug level | 设置调试级别(NONE、FATAL、ERROR、WARN、INFO、DEBUG、VERB)。默认:DEBUG |
-j | --json | 以 JSON 格式输出诊断结果 | |
--iterations | iterations | 明确诊断要执行的迭代次数(必须大于 0) |
示例命令
测试和参数
以下命令指定 targeted_power 测试及其参数:
dcgmi diag -r targeted_power -p targeted_power.is_allowed=true\;targeted_power.target_power=300.0
迭代执行
使用 --iterations 设置测试套件的迭代次数:
dcgmi diag -r pcie --iterations 3
日志
默认日志保存在执行诊断命令或启动 mt-hostengine 的目录中。使用以下命令可以输出 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"
}
}
]
}
...
如何区 分命令失败、测试失败和 Skip,参见 FAQ 中的“诊断和故障处理”。
插件详情
MTVS 使用不同插件执行部署检查、硬件诊断和压力测试。下表概述各插件的主要用途:
| 插件 | 主要用途 |
|---|---|
| Deployment | 检查 MUSA 计算环境是否已准备就绪,以及 MTML 动态库能否正常加载 |
| PCIe - GPU 带宽 | 对主机与 GPU、GPU 与 GPU 之间的通信进行压力测试,并测量带宽与延迟 |
| GPU Memory | 验证 GPU 显存的完整性和读写功能,检测硬件故障和显存损坏 |
| Targeted Power | 使 GPU 功耗接近 TDP 并保持一段时间,验证 GPU 在功耗负载下能否正常工作 |
| Targeted Stress | 使 GPU 保持指定的性能和压力水平,验证持续负载下的稳定性 |
| Memtest | 使用多种测试模式检查 GPU 显存 |
| MTBandwidth | 测量单台主机中 GPU 的通信带宽 |
以下各节进一步说明插件的测试内容、参数和失败条件。
Deployment 插件
Deployment 插件用于检查 MUSA 计算环境是否已准备就绪,以及 MTML 动态库能否正常加载。
前置条件
-
LD_LIBRARY_PATH必须包含 MUSA 和 MTDCGM 的路径,可以执行如下命令:export LD_LIBRARY_PATH=/usr/local/musa/lib:${LD_LIBRARY_PATH}export LD_LIBRARY_PATH=/usr/local/mtdcgm/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH} -
如果要使用 MTDCGM 的二进制文件,如
dcgmi或mt-hostengine,则可以配置PATH环境变量:export PATH=/usr/local/mtdcgm/bin:${PATH}
失败条件
出现以下情况时,插件运行失败:
- 目标节点被操作系统阻塞(例如 cgroups)或当前用户缺乏读/写权限;
- 无法加载 MTML 库
libmtml.so; - 无法加载 MUSA 运行时库。
PCIe - GPU 带宽插件
PCIe 插件对主机与 GPU、GPU 与 GPU 之间的通信进行压力测试。测试会在写入数据时检查 P2P 正确性、错误和重放,并测量带宽与延迟。
子测试
插件包含多项带宽和延迟测试。子测试按 pinned/unpinned(页锁定/非页锁定)或 P2P enabled/P2P disabled(启用 P2P/禁用 P2P)成对配置,每对测试的内容相同。Pinned/unpinned 表示在主机与 GPU 之间复制数据时,分别使用页锁定或非页锁定内存。
MTLink 可用时,GPU 之间通过 MTLink 通信;未启用 MTLink 时,GPU 之间通过 PCIe 通信。
每个子测试都有一个标签(tag),用于指定配置参数和识别输出统计信息。
下表中,“子测试标签”列列出各子测试的标签;“配置”列说明子测试使用 pinned/unpinned 内存,或启用/禁用 P2P。P2P enabled/P2P disabled 测试分别启用或禁用 GPU 之间不经过 PCIe 总线的直接读写。
| 子测试标签 | 配置 | 说明 |
|---|---|---|
| h2d_d2h_single_pinned | Pinned | Device <-> Host Bandwidth,一次测试一个 GPU |
| h2d_d2h_single_unpinned | Unpinned | Device <-> Host Bandwidth,一次测试一个 GPU |
| h2d_d2h_latency_pinned | Pinned | Device <-> Host Latency,一次测试一个 GPU |
| h2d_d2h_latency_unpinned | Unpinned | Device <-> Host Latency,一次测试一个 GPU |
| p2p_bw_p2p_enabled | P2P Enabled | Device <-> Device Bandwidth,一次测试一组 GPU(2 个) |
| p2p_bw_p2p_disabled | P2P Disabled | Device <-> Device Bandwidth,一次测试一组 GPU(2 个) |
| p2p_bw_concurrent_p2p_enabled | P2P Enabled | Device <-> Device Bandwidth,直接相邻的两个 GPU 同时做带宽测试(dindex/2 和 index/2 + 1) |
| p2p_bw_concurrent_p2p_disabled | P2P Disabled | Device <-> Device Bandwidth,直接相邻的两个 GPU 同时做带宽测试(dindex/2 和 index/2 + 1) |
| 1d_exch_bw_p2p_enabled | P2P Enabled | Device <-> Device Bandwidth,每个 GPU 向比自己下标 +1 的 GPU(l2r)或下标 -1 的 GPU(r2l)同时做带宽测试 |
| 1d_exch_bw_p2p_disabled | P2P Disabled | Device <-> Device Bandwidth,每个 GPU 向比自己下标 +1 的 GPU(l2r)或下标 -1 的 GPU(r2l)同时做带宽测试 |
| p2p_latency_p2p_enabled | P2P Enabled | Device <-> Device Latency,一次测试一组 GPU(2 个) |
| p2p_latency_p2p_disabled | P2P Disabled | Device <-> Device Latency,一次测试一组 GPU(2 个) |
PCIe 插件支持以下全局参数:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
test_pinned | Bool | True | 是否包含锁定内存子测试 |
test_unpinned | Bool | True | 是否包含非锁定内存子测试 |
test_p2p_on | Bool | True | 是否以启用 P2P 运行子测试 |
test_p2p_off | Bool | True | 是否以禁用 P2P 运行子测试 |
max_pcie_replays | Float | 80.0 | 插件运行期间每块 GPU 的最大 PCIe 重放次数 |
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 | 最大延迟(微秒) |
示例命令
运行 PCIe 诊断:
dcgmi diag -r pcie
运行 PCIe 诊断,并设置 H2D 和 D2H 使用 pinned memory 时的最小带宽:
dcgmi diag -r pcie -p pcie.test_pinned=true\;pcie.h2d_d2h_single_pinned.min_bandwidth=50
GPU Memory 插件
概述
GPU Memory 插件用于验证 GPU 显存的完整性和功能,检测硬件故障以及显存损坏问题。
测试组成部分
Memory 诊断插件执行以下主显存测试:
- 目标:测试 GPU 显存分配和读写操作。
- 操作:
- 默认分配 GPU 显存的 75%;
- 使用 MUSA Kernel 向显存写入指定 pattern;
- 读回数据并验证;
- 依次使用 5 组测试 pattern:0x00、0xAA、0x55、0xFF、0x00。
支持的参数
GPU Memory 插件支持以下全局参数:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
is_allowed | Bool | true | 是否运行此测试 |
主显存测试支持以下参数:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
minimum_allocation_percentage | Double | 75.0 | 要分配的 GPU 显存最小百分比(0-100) |
示例命令
运行基础 Memory 测试:
dcgmi diag -r memory -p memory.is_allowed=true
设置 Memory 测试的最小显存分配比例:
dcgmi diag -r memory -p memory.minimum_allocation_percentage=50
失败条件
- 显存分配失败(
DCGM_FR_MEMORY_ALLOC):无法分配所需的最小显存; - 显存不匹配(
DCGM_FR_MEMORY_MISMATCH):写入数据与读回数据不一致。
Targeted Power 插件
概述
Targeted Power 属于 3 级及以上诊断。该插件使 GPU 功耗接近 TDP 并保持一段时间,用于验证 GPU 在功耗负载下能否正常工作。
测试组成部分
该插件依赖 MUSA,并使用根据经验确定的 GEMM 矩阵大小,在每块 GPU 上同时持续执行大型矩阵乘法,使 GPU 保持繁忙并维持高功耗。
支持的参数
Targeted Power 插件支持以下全局参数:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
test_duration | Double | 120.0 | 持续时间(秒) |
sustain_duration | Double | 120.0 | 达到目标功耗之后需要持续的时间(秒) |
target_power | Double | TDP - 1 | 目标功耗(瓦) |
target_power_min_ratio | Double | 75.0 | 通过所需的目标功耗最小百分比 |
use_dgemm | Bool | True | 使用 64 位精度而非 32 位 |
is_allowed | Bool | False | 是否运行此测试 |
示例命令
运行 10 分钟的 Targeted Power 测试:
dcgmi diag -r targeted_power -p targeted_power.is_allowed=true\;targeted_power.test_duration=600.0
运行 3 级诊断,以及 5 分钟的 Targeted Power 测试:
dcgmi diag -r 3 -p targeted_power.is_allowed=true\;targeted_power.test_duration=300.0
运行 Targeted Power,并将目标功耗设置为 200 W:
dcgmi diag -r targeted_power -p targeted_power.is_allowed=true\;targeted_power.target_power=200.0
运行 4 级诊断,跳过 Targeted Power:
dcgmi diag -r 4 -p targeted_power.is_allowed=false
使用单精度用例运行 Targeted Power 测试:
dcgmi diag -r targeted_power -p targeted_power.is_allowed=true\;targeted_power.use_dgemm=false
失败条件
- 如果测试期间的功耗未达到
target_power(默认为 TDP - 1)的target_power_min_ratio(默认为 75%),测试失败。
Targeted Stress 插件
概述
Targeted Stress 属于 3 级及以上诊断。该插件持续调度矩阵运算并调整工作负载,使 GPU 保持指定的性能和压力水平。
该插件按指定性能目标施加压力,而不是使 GPU 始终以最大压力运行,从而在受控条件下验证 GPU 的持续负载稳定性。