gpu-computing

GPU 硬件指标完整监控方案

·15 分钟阅读·5890 字

GPU 硬件指标完整监控方案 的详细笔记

📋 目录

GPU 硬件指标完整监控方案

核心概念 GPU 硬件指标监控方案涵盖 nvidia-smi、DCGM、Prometheus + Grafana 等监控链路。

1. 核心基础:DCGM vs nvidia-smi 选型区分

1.1. nvidia-smi(单机临时排查,不适合集群持久监控)

底层基于NVML库,仅提供基础瞬时指标,适合开发调试手动查看:


# 实时刷新

nvidia-smi -n 1

# 持续监控

nvidia-smi dmon

短板:

  1. 无长期时序存储,无法看历史趋势;
  2. 仅暴露十几项基础指标,缺少XID硬件错误、NVLink带宽、Tensor Core利用率;
  3. 无法关联K8s Pod、命名空间、容器;
  4. 无标准Prometheus指标输出,无法做集群告警。

1.2. DCGM(NVIDIA Data Center GPU Manager,生产唯一标准)

英伟达官方数据中心GPU管理套件,企业级集群监控底层依赖

  1. 后台常驻守护进程nv-hostengine持续采集200+深度硬件指标;
  2. 支持硬件故障诊断、ECC校验、功耗管控、MIG虚拟卡管理;
  3. 提供Go/C API,配套dcgm-exporter直接输出Prometheus格式时序指标;
  4. 天然适配K8s,自动绑定Pod、GPU卡号、节点标签;
  5. 区分整机物理GPU与MIG虚拟GPU,支持vGPU(HAMi)场景监控。

1.3. 完整监控技术栈(K8s AI集群标准)

  1. 采集层:dcgm-exporter(DaemonSet,每GPU节点部署)
  2. 服务发现:ServiceMonitor(Prometheus Operator自动抓取9400端口/metrics)
  3. 存储层:Prometheus时序库
  4. 可视化:Grafana官方DCGM面板(ID:12239)
  5. 告警层:PrometheusRule + Alertmanager(邮件/钉钉/企业微信)
  6. 补充采集: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. 热/功耗硬件健康指标(硬件损坏预警)

  1. DCGM_FI_DEV_GPU_TEMP:GPU核心温度,阈值85℃预警,90℃严重降频
  2. DCGM_FI_DEV_POWER_USAGE:实时功耗(W),A100满载400W
  3. DCGM_FI_DEV_POWER_LIMIT:功耗上限,负载过高触发限频
  4. DCGM_FI_DEV_THROTTLE_REASONS:降频原因(过热/功耗/电源不足)

2.4. 硬件错误&故障指标(训练中途崩溃根因)

  1. DCGM_FI_DEV_XID_ERRORS:GPU硬件XID错误计数(关键!)
  • XID 13:显存损坏/OOM;XID 79:驱动崩溃;XID 31:NVLink故障
  1. DCGM_FI_DEV_ECC_SBE_ERRORS:显存单比特纠错错误,持续上涨预示硬件故障
  2. DCGM_FI_DEV_ECC_DBE_ERRORS:双比特不可修复错误,直接下线显卡
  3. DCGM_FI_DEV_NVLINK_CRC_ERRORS:多卡训练NVLink链路CRC报错,通信异常

2.5. 拓扑&MIG/vGPU细分指标

  1. DCGM_FI_DEV_NVLINK_TX_BYTES / RX:NVLink互联带宽,分布式训练通信瓶颈判断
  2. MIG场景:自动区分每一个虚拟MIG实例独立指标
  3. 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:

  1. 自动部署dcgm-exporter DaemonSet,仅在带GPU标签节点调度;
  2. 内置ServiceMonitor,Prometheus自动发现9400指标端口;
  3. 统一管理MIG、分时切片、DCGM监控配置;
  4. 配套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可视化面板配置

  1. 导入官方DCGM面板ID:12239
  2. 面板内置分层视图:
  • 集群总览:全部节点GPU利用率、温度、故障卡统计;
  • 单节点视图:每张GPU显存、功耗、XID错误趋势;
  • Pod维度视图:按命名空间/LLM Agent服务聚合显存占用;
  • MIG虚拟卡独立监控面板;
  1. 支持按gpu_uuidnodepod_namenamespace筛选过滤。

6. vGPU/MIG分片场景补充监控(HAMi环境)

DCGM仅采集物理GPU整机指标,无法区分单个Pod占用显存,需要额外部署HAMi-exporter:

  1. HAMi指标端口默认31992,输出容器级细分指标:
  • 单Pod占用虚拟显存、SM算力;
  • vGPU分配限额、剩余可分配显存;
  1. 新增对应ServiceMonitor抓取HAMi metrics;
  2. 导入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. 常见故障排查(面试实操题)

  1. dcgm-exporter Pod启动失败
  • 节点无GPU、缺少gpu=true标签,nodeSelector过滤;
  • 宿主机NVIDIA驱动版本过低,不兼容DCGM;
  • 未添加SYS_ADMIN权限,无法读取硬件设备。
  1. Prometheus Target显示DOWN,抓不到指标
  • 节点防火墙拦截9400端口;
  • ServiceMonitor selector标签不匹配dcgm-exporter Pod;
  • DaemonSet未使用hostNetwork,容器端口无法访问宿主机GPU硬件。
  1. 指标无pod/namespace标签,无法区分业务负载
  • 部署时未开启环境变量DCGM_EXPORTER_KUBERNETES=true
  1. 多卡分布式训练速度缓慢,无报错
  • 查看DCGM_FI_DEV_NVLINK_TX_BYTES,NVLink带宽极低,调度未做GPU拓扑亲和;
  • Tensor Core利用率指标偏低,模型未启用混合精度训练。
  1. 训练任务随机崩溃,无OOM日志
  • 查看XID错误指标,存在ECC双比特错误,显卡硬件故障,需下线维修。

9. 面试高频问答总结

9.1. 为什么不用nvidia-smi做集群监控,必须DCGM?

  1. nvidia-smi仅瞬时查询,无持续时序采集;
  2. 缺少硬件错误、NVLink、Tensor Core深度指标,无法预判硬件故障;
  3. 不能自动关联K8s Pod、命名空间,无法按业务维度统计资源;
  4. 无标准化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互联节点,拓扑亲和配置缺失。

关联文档

Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro