GPU 硬件指标完整监控方案
核心概念 GPU 硬件指标监控方案涵盖 nvidia-smi、DCGM、Prometheus + Grafana 等监控链路。
1. 核心基础:DCGM vs nvidia-smi 选型区分
1.1. nvidia-smi(单机临时排查,不适合集群持久监控)
底层基于NVML库,仅提供基础瞬时指标,适合开发调试手动查看:
# 实时刷新
nvidia-smi -n 1
# 持续监控
nvidia-smi dmon
短板:
- 无长期时序存储,无法看历史趋势;
- 仅暴露十几项基础指标,缺少XID硬件错误、NVLink带宽、Tensor Core利用率;
- 无法关联K8s Pod、命名空间、容器;
- 无标准Prometheus指标输出,无法做集群告警。
1.2. DCGM(NVIDIA Data Center GPU Manager,生产唯一标准)
英伟达官方数据中心GPU管理套件,企业级集群监控底层依赖
- 后台常驻守护进程
nv-hostengine持续采集200+深度硬件指标; - 支持硬件故障诊断、ECC校验、功耗管控、MIG虚拟卡管理;
- 提供Go/C API,配套
dcgm-exporter直接输出Prometheus格式时序指标; - 天然适配K8s,自动绑定Pod、GPU卡号、节点标签;
- 区分整机物理GPU与MIG虚拟GPU,支持vGPU(HAMi)场景监控。
1.3. 完整监控技术栈(K8s AI集群标准)
- 采集层:dcgm-exporter(DaemonSet,每GPU节点部署)
- 服务发现:ServiceMonitor(Prometheus Operator自动抓取9400端口/metrics)
- 存储层:Prometheus时序库
- 可视化:Grafana官方DCGM面板(ID:12239)
- 告警层:PrometheusRule + Alertmanager(邮件/钉钉/企业微信)
- 补充采集:HAMi-exporter(vGPU场景,单Pod显存/算力细分指标)
2. DCGM核心硬件指标分类(面试高频,分五大类)
2.1. 算力利用率指标(训练/推理性能判断)
| | | |
|---|---|---|
|Prometheus指标名|含义|运维关注点|
|DCGM_FI_DEV_GPU_UTIL|GPU SM整体利用率(0~100%)|长期<30%:算力空闲,资源浪费;100%持续高负载|
|DCGM_FI_PROF_SM_ACTIVE|SM活跃周期占比|比gpu_util更精准,区分空转与真实计算|
|DCGM_FI_PROF_PIPE_TENSOR_ACTIVE|Tensor Core利用率|LLM/Transformer训练偏低→未使用FP16/FP8加速|
|DCGM_FI_DEV_ENC_UTIL|视频编码单元占用|视频推理场景监控|
|DCGM_FI_DEV_DEC_UTIL|视频解码单元占用||
2.2. 显存指标(OOM崩溃核心监控)
| | | |
|---|---|---|
|指标|说明|告警阈值|
|DCGM_FI_DEV_MEM_USED|已使用显存(字节)|单卡>95%极易OOM,告警|
|DCGM_FI_DEV_MEM_FREE|空闲显存|配合计算Pod并发数调优|
|DCGM_FI_DEV_MEM_UTIL|显存带宽利用率|高带宽瓶颈:多卡通信/数据集IO慢|
|DCGM_FI_DEV_MEM_CLOCK|显存运行时钟|降频会大幅拖慢训练速度|
2.3. 热/功耗硬件健康指标(硬件损坏预警)
DCGM_FI_DEV_GPU_TEMP:GPU核心温度,阈值85℃预警,90℃严重降频DCGM_FI_DEV_POWER_USAGE:实时功耗(W),A100满载400WDCGM_FI_DEV_POWER_LIMIT:功耗上限,负载过高触发限频DCGM_FI_DEV_THROTTLE_REASONS:降频原因(过热/功耗/电源不足)
2.4. 硬件错误&故障指标(训练中途崩溃根因)
DCGM_FI_DEV_XID_ERRORS:GPU硬件XID错误计数(关键!)
- XID 13:显存损坏/OOM;XID 79:驱动崩溃;XID 31:NVLink故障
DCGM_FI_DEV_ECC_SBE_ERRORS:显存单比特纠错错误,持续上涨预示硬件故障DCGM_FI_DEV_ECC_DBE_ERRORS:双比特不可修复错误,直接下线显卡DCGM_FI_DEV_NVLINK_CRC_ERRORS:多卡训练NVLink链路CRC报错,通信异常
2.5. 拓扑&MIG/vGPU细分指标
DCGM_FI_DEV_NVLINK_TX_BYTES/RX:NVLink互联带宽,分布式训练通信瓶颈判断- MIG场景:自动区分每一个虚拟MIG实例独立指标
- HAMi补充指标:
Device_memory_desc_of_container单Pod占用显存(软vGPU专属)
3. 单机裸金属部署dcgm-exporter(测试环境)
# 官方镜像,挂载全部GPU,暴露9400端口
docker run -d \
--gpus all \
--net host \
--cap-add SYS_ADMIN \
-p 9400:9400 \
nvcr.io/nvidia/k8s/dcgm-exporter:3.3.6-3.1.8-ubuntu22.04
# 验证指标输出
curl http://127.0.0.1:9400/metrics
4. K8s集群标准部署(生产推荐,GPU Operator一键托管)
4.1. 方式1:NVIDIA GPU Operator 一体化部署(推荐)
GPU Operator会自动完成全套组件安装,无需单独维护dcgm-exporter、驱动、device-plugin:
- 自动部署dcgm-exporter DaemonSet,仅在带GPU标签节点调度;
- 内置ServiceMonitor,Prometheus自动发现9400指标端口;
- 统一管理MIG、分时切片、DCGM监控配置;
- 配套Grafana面板标签自动注入node、gpu、pod、namespace维度。
4.2. 方式2:独立DaemonSet部署dcgm-exporter(已有驱动环境)
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: dcgm-exporter
namespace: kube-system
spec:
selector:
matchLabels:
app: dcgm-exporter
template:
metadata:
labels:
app: dcgm-exporter
spec:
# 仅调度GPU节点
nodeSelector:
gpu: "true"
tolerations:
- key: gpu
operator: Equal
value: "true"
effect: NoSchedule
containers:
- name: dcgm-exporter
image: nvcr.io/nvidia/k8s/dcgm-exporter:3.3.6-3.1.8-ubuntu22.04
securityContext:
capabilities:
add: ["SYS_ADMIN"]
env:
# 开启K8s标签注入,指标带pod/ns/node/gpu_uuid
- name: DCGM_EXPORTER_KUBERNETES
value: "true"
ports:
- containerPort: 9400
name: metrics
4.3. ServiceMonitor 自动抓取指标(Prometheus Operator)
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: dcgm-exporter-monitor
namespace: monitoring
spec:
selector:
matchLabels:
app: dcgm-exporter
namespaceSelector:
matchNames: ["kube-system"]
endpoints:
- port: metrics
interval: 15s
path: /metrics
5. Grafana可视化面板配置
- 导入官方DCGM面板ID:12239
- 面板内置分层视图:
- 集群总览:全部节点GPU利用率、温度、故障卡统计;
- 单节点视图:每张GPU显存、功耗、XID错误趋势;
- Pod维度视图:按命名空间/LLM Agent服务聚合显存占用;
- MIG虚拟卡独立监控面板;
- 支持按
gpu_uuid、node、pod_name、namespace筛选过滤。
6. vGPU/MIG分片场景补充监控(HAMi环境)
DCGM仅采集物理GPU整机指标,无法区分单个Pod占用显存,需要额外部署HAMi-exporter:
- HAMi指标端口默认
31992,输出容器级细分指标:
- 单Pod占用虚拟显存、SM算力;
- vGPU分配限额、剩余可分配显存;
- 新增对应ServiceMonitor抓取HAMi metrics;
- 导入HAMi专属Grafana面板,查看每个LLM Agent推理实例资源占用。
7. 生产级Prometheus告警规则(直接复制使用)
groups:
- name: gpu-alert.rules
rules:
# 严重:GPU显存占用超过95%,极易OOM
- alert: GpuMemoryHigh
expr: DCGM_FI_DEV_MEM_USED / DCGM_FI_DEV_MEM_TOTAL > 0.95
for: 3m
labels:
severity: critical
annotations:
summary: "节点{{$labels.instance}} GPU{{$labels.gpu}}显存占用过高"
description: "显存使用率{{$value | humanizePercentage}},Pod:{{$labels.pod}}"
# 警告:GPU温度超85℃,过热降频
- alert: GpuTempHigh
expr: DCGM_FI_DEV_GPU_TEMP > 85
for: 5m
labels:
severity: warning
# 严重:GPU出现XID硬件错误
- alert: GpuXidError
expr: increase(DCGM_FI_DEV_XID_ERRORS[5m]) > 0
for: 1m
labels:
severity: critical
annotations:
summary: "GPU硬件XID错误,存在硬件损坏风险"
# 警告:长期算力闲置,资源浪费
- alert: GpuLowUtil
expr: avg_over_time(DCGM_FI_DEV_GPU_UTIL[30m]) < 20
for: 30m
labels:
severity: info
# 严重:dcgm-exporter采集中断,GPU无监控数据
- alert: DcgmExporterDown
expr: up{job="dcgm-exporter"} == 0
for: 1m
labels:
severity: critical
8. 常见故障排查(面试实操题)
- dcgm-exporter Pod启动失败
- 节点无GPU、缺少
gpu=true标签,nodeSelector过滤; - 宿主机NVIDIA驱动版本过低,不兼容DCGM;
- 未添加
SYS_ADMIN权限,无法读取硬件设备。
- Prometheus Target显示DOWN,抓不到指标
- 节点防火墙拦截9400端口;
- ServiceMonitor selector标签不匹配dcgm-exporter Pod;
- DaemonSet未使用
hostNetwork,容器端口无法访问宿主机GPU硬件。
- 指标无pod/namespace标签,无法区分业务负载
- 部署时未开启环境变量
DCGM_EXPORTER_KUBERNETES=true。
- 多卡分布式训练速度缓慢,无报错
- 查看
DCGM_FI_DEV_NVLINK_TX_BYTES,NVLink带宽极低,调度未做GPU拓扑亲和; - Tensor Core利用率指标偏低,模型未启用混合精度训练。
- 训练任务随机崩溃,无OOM日志
- 查看XID错误指标,存在ECC双比特错误,显卡硬件故障,需下线维修。
9. 面试高频问答总结
9.1. 为什么不用nvidia-smi做集群监控,必须DCGM?
- nvidia-smi仅瞬时查询,无持续时序采集;
- 缺少硬件错误、NVLink、Tensor Core深度指标,无法预判硬件故障;
- 不能自动关联K8s Pod、命名空间,无法按业务维度统计资源;
- 无标准化Prometheus输出,无法统一告警。
9.2. DCGM Exporter的采集端口、核心依赖、部署形态?
- 端口:9400;部署:DaemonSet,仅GPU节点调度;
- 底层依赖宿主机NVIDIA驱动、nv-hostengine;
- 依赖NVIDIA GPU Operator统一运维,自动注入K8s Pod标签。
9.3. MIG/HAMi vGPU场景监控有什么补充?
DCGM只能监控物理整机,HAMi exporter单独采集单容器/单MIG实例细分显存、算力指标,实现推理Agent实例级资源监控。
9.4. GPU最核心告警指标有哪些?
显存占用率、核心温度、XID硬件错误、NVLink通信错误、dcgm-exporter采集中断、长期低利用率。
9.5. 如何定位多卡训练通信瓶颈?
查看DCGM_FI_DEV_NVLINK_TX_BYTES/RX_BYTES带宽指标,带宽持续偏低说明GPU未调度到NVLink互联节点,拓扑亲和配置缺失。
关联文档