1. 什么是 DCGM
DCGM (Data Center GPU Manager) 是 NVIDIA 提供的一个用于数据中心 GPU 管理和监控的工具集,提供了以下功能:
- GPU 行为监控
- GPU 配置管理
- GPU 策略监督
- GPU 健康和诊断
- GPU 计费和进程统计
- NVSwitch 配置和监控
2. 安装 DCGM
2.1 安装 libnvidia-nscq
一般都是 NVLink 连接 GPU,可以通过 nvidia-smi topo -m
查看是否有 NVSwitch 字样输出判断是否需要安装。
- 如果有 NvSwitch 可能会查询不到相关信息
报错内容如下:
|
|
- 查看 NVIDIA 驱动版本
|
|
- 安装对应版本的 libnvidia-nscq
|
|
2.2 安装 DCGM
- 添加源
Ubuntu 20.04
|
|
Ubuntu 22.04
|
|
- 安装 DCGM
|
|
- 开启 DCGM 服务
|
|
也可以设置为开机自启
|
|
3. 命令行帮助
|
|
4. 设备管理
4.1 discovery 查看 GPU
|
|
|
|
4.2 topo 查看 GPU 拓扑
|
|
|
|
可以看到 GPU 0 与其他 GPU 都是通过 NVLink 连接。
4.3 nvlink 查看链路状态和错误计数
|
|
|
|
每张卡 18 个 NVLink 链路,每个链路的状态都是 Up 。
5. 组织与结构管理
5.1 group 管理分组
group 可以对 GPU 进行分组,便于对 GPU 进行监控和管理。
- 创建分组
|
|
如果重启 DCGM 服务,分组会丢失。
- 查看分组列表
|
|
|
|
- 将 GPU 添加到分组
这里将 GPU 0 和 GPU 1 添加到分组 production 中。
|
|
- 查看分组信息
|
|
|
|
5.2 fieldgroup 管理字段组
fieldgroup 用来创建和维护字段组,字段组是一些指标的集合,用于监控和统计。每个字段就是一个指标。
- 查看字段组列表
|
|
|
|
- 创建字段组
|
|
再次查看分组列表时,可以看到新创建的字段组。
|
|
6. 监控与统计
在监控和统计时,可以指定 GPU 卡或分组,指标也可以用 ID 或字段组来指定。
6.1 profile 性能指标
profile 提供了性能指标的收集和查询功能,需要配合 dmon
、stats
命令查看数据。
- 查看性能相关的指标
|
|
|
|
- 查看 group 或者指定 gpu 可用的指标
|
|
- 暂停和恢复采集
主要是给 nvprof, nsight compute, nsight systems 开发者使用的。
6.2 dmon 实时统计监控
- 查看可用的指标 ID
|
|
- 指定卡分组、指定指标 ID
|
|
|
|
- 指定卡分组、指定指标组
|
|
|
|
- 直接指定卡,查看指标
|
|
|
|
6.3 stats 进程统计信息
- 开启收集
|
|
- 查看进程的统计信息
|
|
- 查看所有进程的统计信息
|
|
- 停止收集
|
|
7. 健康与诊断
7.1 health 健康监控
- 查看健康监控项
|
|
|
|
- 开启全部监控
|
|
通过 dcgmi health -g 2 --clear
- 检查 DCGM 服务状态
|
|
|
|
为空时表示健康状态良好。
7.2 diag 诊断故障
主要提供了一下诊断功能:
- NVML 库、CUDA 库等环境完整性
- 用户对 GPU 设备的访问权限
- 驱动或进程冲突
- GPU 内存、InfoROM 等硬件组件状态
- 持久化模式、环境变量等配置
|
|
|
|
这里的 -r
有四个级别,1-4 分别对应不同的测试覆盖范围:
插件 | 测试名称 | r1(短)秒 | r2(中)< 2 分钟 | r3(长)< 30 分钟 | r4(超长)1-2 小时 |
---|---|---|---|---|---|
软件 | software | yes | yes | yes | yes |
PCIe + NVLink | pcie | yes | yes | yes | |
GPU 内存 | memory | yes | yes | yes | |
内存带宽 | memory_bandwidth | yes | yes | yes | |
诊断 | diagnostic | yes | yes | ||
有针对性的压力 | targeted_stress | yes | yes | ||
目标功率 | targeted_power | yes | yes | ||
NVB 带宽 | nvbandwidth | yes | yes | ||
内存压测 | memtest | yes | |||
输入 EDPp | pulse | yes |
诊断时,如果卡上有负载,可能会有一些 Warning 的告警输出。
8. 系统管理
8.1 config 配置管理
- 查看配置
|
|
|
|
- 设置配置
将功率限制在 499 W
|
|
使配置生效
|
|
- 查看配置
|
|
|
|
8.2 policy 策略管理
策略用于定义在特定事件发生时触发的操作,可以实现异常的自动处理。
- 查看策略列表
|
|
|
|
字段 | 含义 |
---|---|
Violation conditions | None → 没有设置违规触发条件(比如温度、功耗、ECC 错误等都没设) |
Isolation mode | Automatic → 隔离模式为自动,当 GPU 出现问题时,DCGM 会自动决定是否隔离(具体动作还要看是否设置了策略) |
Action on violation | None → 违规时不采取任何操作(例如不重置 GPU、不关机) |
Validation after action | None → 违规动作后不会做系统验证(比如温度或性能测试) |
Validation failure action | None → 验证失败时也不做任何动作 |
在默认配置下,DCGM 不会对 GPU 进行任何操作。
- 添加策略
动作可选值有,0 - 不执行动作;1 - 重置 GPU;
验证是在动作后执行的,0 - 不验证;1 - 检查 GPU 核心和显存基本健康;2 - 全面的显存和核心检查;3 - 全面的硬件检查。
动作和验证是成对的,例如,0,0 表示不执行任何动作和验证;1,2 表示重置 GPU 并执行全面的显存和核心检查。
|
|
当显卡温度超过 100 度时,DCGM 会执行 1,2 策略。
可选的触发条件,有 -e
ECC 双比特错误,-x
xid 错误,-p
PCIe replay 错误,-n
NVLink 错误,-T
温度,-P
功耗。
- 查看策略
|
|
此时,可以看到 group 2 中 GPU 0 的策略已经设置为: 当温度超过 100 度时,重置 GPU 并执行中等验证。
8.3 modules 查看加载的模块
|
|
|
|
模块名称 | 具体用途 |
---|---|
Core | GPU 发现枚举、基础 API 接口、度量数据收集基础、其他模块依赖基础 |
NvSwitch | 监控 NVSwitch 状态性能、管理多 GPU 高速互连、DGX/HGX 系统支持 |
VGPU | 监控 vGPU 实例资源、管理虚拟 GPU 配置、虚拟化环境性能数据收集 |
Introspection | DCGM 内部状态检查、调试故障排除、模块交互状态监控 |
Health | GPU 温度功耗风扇监控、硬件异常检测、健康报告警报、预测性维护 |
Policy | GPU 使用策略设置执行、功耗性能限制管理、资源配额访问控制 |
Config | GPU 配置参数管理、配置变更应用验证、配置备份恢复、批量配置 |
Diag | GPU 硬件测试执行、内存计算单元测试、诊断报告生成、故障定位 |
Profiling | GPU 性能指标收集、应用性能分析、PCIe 带宽监控、NVIDIA 事件度量 |
SysMon | CPU 内存网络监控、系统 GPU 关联监控、全栈性能分析、系统度量收集 |
有些模块可以按需动态加载、卸载,比如执行 dcgmi diag
命令时会自动加载 Diag
模块。
8.4 introspect 查看 DCGM 进程的资源占用
|
|
|
|
可以看到 Hostengine
进程的内存占用和 CPU 利用率。