本文最后更新于28 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
本篇聚焦 GPU 硬件健康诊断、资源监控与可观测体系建设,核心掌握DCGM 官方诊断工具、DCGM-Exporter 监控原理、K8s 环境下 Prometheus+Grafana GPU 监控栈部署。
一、NVIDIA DCGM 官方诊断工具
1. 工具概述
DCGM(Data Center GPU Manager)是 NVIDIA 官方推出的数据中心级 GPU 管理工具集,提供 GPU 行为监控、配置管理、健康诊断、策略监督能力,是 GPU 服务器运维、故障排查、新机验收的标准工具。
2. 安装步骤
# 1. 添加CUDA官方密钥
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb
dpkg -i cuda-keyring_1.0-1_all.deb
# 2. 更新源并安装
apt update
apt install -y datacenter-gpu-manager
# 3. 启动服务并设置开机自启
systemctl start nvidia-dcgm
systemctl enable nvidia-dcgm
3. 核心子命令与常用操作
| 子命令 | 功能 | 常用操作 |
|---|---|---|
discovery | 发现与查询 GPU 设备 | dcgmi discovery -l 列出所有 GPUdcgmi discovery --gpuid 0 -i a 查看单卡详细信息(型号、PCI ID、UUID、序列号、固件版本) |
topo | 查看 GPU 拓扑结构 | dcgmi topo --gpuid 0 查看 GPU 与其他卡的连接方式(PCIe 主机桥、PCIe 交换机、CPU 级链路) |
nvlink | 检查 NVLink 链路状态 | dcgmi nvlink -s 查看链路状态与错误计数状态标识:U正常 / D未建立 / X禁用 / _不支持 |
health | GPU 健康监控管理 | dcgmi health -s a 开启全部健康监控子系统dcgmi health -c 查看当前健康状态监控项:PCIe、NVLink、内存、SM、InfoROM、温度、电源、驱动 |
dmon | 实时指标监控 | dcgmi dmon -e 319,320 检查 ECC 错误dcgmi dmon -e 203,204 检查 GPU 利用率与显存带宽 |
diag | GPU 诊断与压测(面试高频) | 分 4 个诊断级别,逐级加深压力 |
4. DCGM 诊断级别
| 级别 | 检查内容 | 耗时 | 压力 | 适用场景 |
|---|---|---|---|---|
| Level 1 | GPU 存在性、驱动状态、CUDA 环境、基础通信检查 | 几秒 | 无 | 日常巡检、环境验证 |
| Level 2 | Level1 全部 + PCIe 检查、NVLink 检查、基础运算测试、显存检查 | 几十秒 | 轻度 | GPU 掉卡排查、驱动异常排查、节点交付验收 |
| Level 3 | Level2 全部 + SM 压力测试、显存压力测试、目标功耗测试、ECC 深度检查、运算正确性验证 | 3~10 分钟 | 高负载 | 新机交付验收、硬件故障深度排查、训练 / 推理异常定位 |
| Level 4 | 更深度的硬件稳定性、供电、显存劣化验证 | 更长 | 极限 | 疑难硬件故障、显存稳定性问题专项验证 |
生产环境最常用 Level 3 做新机压测与故障深度排查。
二、GPU 健康巡检 Shell 脚本
1. 定位
自动化批量执行 GPU 健康检查项,输出分级告警与日志报告,适合日常批量巡检、定时巡检场景。
2. 核心覆盖检查项
- 系统基础信息:OS 版本、内核、CPU、内存
- NVIDIA 驱动检查:驱动版本、CUDA 版本、模块加载状态
- GPU 基本信息:数量、型号、UUID、PCI 总线、BIOS 版本
- 健康状态:温度、功耗、风扇转速、性能状态(分级告警)
- 性能状态:GPU 利用率、显存利用率、显存使用量、计算模式
- 链路状态:PCIe 速率 / 宽度(是否降速)、NVLink 活动链路数
- 进程占用:运行中 GPU 进程的 PID、名称、显存占用
- DCGM 集成:调用 DCGM 做快速诊断
3. 特点
- 支持温度、利用率阈值自定义,分级告警(警告 / 临界)
- 自动生成详细日志报告与摘要文件
- 遇到关键错误立即退出,适合自动化流水线调用
三、K8s 集群 GPU 监控体系
1. 整体架构
采用标准云原生可观测栈:采集层 → 存储层 → 可视化层 → 告警层
- 采集层:DCGM-Exporter(GPU 硬件指标)、kube-state-metrics(K8s 对象指标)、cAdvisor(容器资源指标)
- 存储层:Prometheus 时序数据库
- 可视化层:Grafana 仪表盘
- 告警层:Alertmanager + 邮件 / 钉钉 / 企业微信通知
数据流向:GPU 硬件 → DCGM 服务 → DCGM-Exporter → Prometheus 采集存储 → Grafana 可视化 + 告警规则触发
2. Prometheus 部署(K8s 环境)
部署流程
- 创建
monitoring专用命名空间 - 用 ConfigMap 配置 Prometheus 抓取规则与全局参数
- 创建 ClusterRole 与 ServiceAccount,授予集群资源发现权限
- 部署 Prometheus Deployment,挂载配置与数据卷
- 通过 NodePort 类型 Service 暴露服务
核心配置
- 全局抓取间隔:
scrape_interval: 15s - 支持 Kubernetes 服务发现(
kubernetes_sd_configs),自动发现 Pod、Service、Endpoint 等监控目标
3. DCGM-Exporter(⭐)
定位
基于 DCGM API 开发的 Prometheus 指标导出器,将 NVIDIA GPU 的硬件指标转换为 Prometheus 标准时序格式,由 NVIDIA 官方维护;K8s 环境中以DaemonSet形式部署,每个 GPU 节点运行一个实例。
核心特点
- 覆盖 40 + 项 GPU 指标,维度全面
- 资源开销远低于循环调用 nvidia-smi
- 官方维护,与新 GPU 型号兼容性强
- 原生支持容器化与 K8s 编排,适配大规模集群
工作原理
- DCGM 通过 NVML 接口从 GPU 驱动采集硬件数据
- DCGM-Exporter 调用 DCGM API 读取指标,转换为 Prometheus 格式
- 通过 9400 端口的
/metrics接口暴露指标 - Prometheus 通过服务发现自动抓取所有节点的 GPU 指标
核心常用指标
| 指标名称 | 描述 | 单位 | 重要性 |
|---|---|---|---|
DCGM_FI_DEV_GPU_UTIL | GPU 核心利用率 | % | 高 |
DCGM_FI_DEV_FB_USED | 已使用显存 | MiB | 高 |
DCGM_FI_DEV_FB_FREE | 空闲显存 | MiB | 高 |
DCGM_FI_DEV_GPU_TEMP | GPU 核心温度 | °C | 高 |
DCGM_FI_DEV_POWER_USAGE | 当前实际功耗 | W | 高 |
DCGM_FI_DEV_XID_ERRORS | XID 错误计数 | 计数 | 高 |
DCGM_FI_DEV_UNCORRECTABLE_ERRORS | 不可纠正 ECC 错误 | 计数 | 高 |
DCGM_FI_DEV_CORRECTABLE_ERRORS | 可纠正 ECC 错误 | 计数 | 中 |
DCGM_FI_DEV_NVLINK_BANDWIDTH_TOTAL | NVLink 总带宽 | KB/s | 高 |
DCGM_FI_DEV_SM_CLOCK | SM 流处理器时钟 | MHz | 中 |
部署与集成
# 部署DaemonSet
kubectl apply -f dcgm-exporter.yaml
# Prometheus配置新增抓取任务
- job_name: 'dcgm-exporter'
kubernetes_sd_configs:
- role: endpoints
namespaces:
names: [default]
relabel_configs:
- source_labels: [__meta_kubernetes_service_name]
action: keep
regex: dcgm-exporter
4. Grafana 可视化
部署
以 Deployment+NodePort 方式部署,容器端口 3000 映射到节点端口 32000。
配置步骤
- 进入 Grafana → 连接 → 数据源 → 添加 Prometheus 数据源
- 填入 Prometheus 服务地址,保存并测试连通性
- 仪表板 → 导入 → 输入官方仪表盘 ID
12239 - 选择 Prometheus 数据源,点击导入,一键生成完整 GPU 监控面板
核心监控面板
GPU 温度、GPU 平均温度、功耗、SM 时钟频率、GPU 利用率、张量核心使用率、显存使用量、ECC 错误计数、NVLink 带宽。
5. 告警规则配置
典型 GPU 告警规则示例:
| 告警名称 | 触发条件 | 持续时间 | 严重级别 | 说明 |
|---|---|---|---|---|
| GPUHighUtilization | DCGM_FI_DEV_GPU_UTIL > 95 | 1m | warning | 利用率持续过高,可能存在算力瓶颈 |
| GPUHighTemperature | DCGM_FI_DEV_GPU_TEMP > 75 | 1m | warning | 温度过高,存在降频风险 |
| GPUMemoryNearlyFull | DCGM_FI_DEV_FB_FREE / DCGM_FI_DEV_FB_TOTAL * 100 < 5 | 1m | warning | 显存不足,可能出现 OOM |
| GPUXidErrors | delta(DCGM_FI_DEV_XID_ERRORS[5m]) > 0 | 即时 | critical | 驱动崩溃或 GPU 硬件链路异常 |
| GPUECCErrors | delta(DCGM_FI_DEV_UNCORRECTABLE_ERRORS[1h]) > 0 | 即时 | critical | 显存硬件故障,需立即处理 |
四、汇总
- GPU 服务器上线前的完整健康检查流程是什么? 答:先做基础检查:用
nvidia-smi确认 GPU 数量、温度、功耗、ECC 状态;用nvidia-smi topo -m检查拓扑;用nvidia-smi nvlink -s检查 NVLink 链路。再做深度验证:用dcgmi discovery确认设备信息完整;开启全量健康监控;运行dcgmi diag -r 3高级压力诊断,确保无硬件故障、无不可纠正 ECC、PCIe/NVLink 无降速。 - DCGM 诊断分几个级别,分别适用什么场景? 答:共 4 个级别。Level 1 无压力,用于日常巡检;Level 2 轻度压力,用于掉卡排查、节点验收;Level 3 满负载压力,用于新机交付、硬件故障深度排查;Level 4 极限深度,用于疑难显存、供电问题专项验证。
- DCGM-Exporter 的工作原理是什么? 答:DCGM-Exporter 基于 DCGM 服务,通过 NVML 接口采集 GPU 硬件指标,转换为 Prometheus 标准时序格式,通过 9400 端口暴露
/metrics接口。K8s 中以 DaemonSet 部署在每个 GPU 节点,Prometheus 通过服务发现自动抓取所有节点指标,实现集群级统一监控。 - XID 错误和 ECC 错误分别是什么,怎么处理? 答:
- XID 错误:驱动层面错误,通常由驱动崩溃、GPU 掉卡、PCIe 链路异常导致;出现增量 XID 时,优先排查驱动版本、Fabric Manager、PCIe 链路状态。
- ECC 错误:显存校验错误,分可纠正(CE)和不可纠正(UE);少量 CE 可记录基线观察,持续增长需排查显存劣化;UE 为严重硬件错误,需立即迁移业务,做硬件诊断,考虑 RMA 返修。
- GPU 监控的四大类核心指标是什么? 答:①运行性能:GPU 利用率、张量核心利用率、SM 时钟;②存储状态:显存使用率、已用 / 空闲量;③健康状态:温度、功耗、风扇转速;④错误计数:XID 错误、ECC 错误、NVLink 错误。