GPU 监控怎么做?DCGM Exporter、Prometheus 和 Grafana 运维入门
GPU 集群不能只靠 nvidia-smi 手工查看。本文解释 DCGM Exporter 如何暴露 GPU 指标,以及 Prometheus 告警和 Grafana 看板应该关注哪些数据。
CPU 高、内存满、磁盘爆,传统运维都有成熟监控。但 GPU 集群如果只靠登录节点执行 nvidia-smi,很快就会失控。AI 训练和推理任务对 GPU 利用率、显存、温度、功耗、错误数都很敏感,缺少监控就无法判断资源是否被浪费,也无法及时发现硬件异常。
NVIDIA 官方推荐在 Kubernetes 中使用 DCGM Exporter 采集 GPU Telemetry。DCGM Exporter 基于 NVIDIA DCGM,把 GPU 指标暴露为 Prometheus 可抓取的 /metrics 端点,并可接入 Grafana 展示。
GPU 监控要看哪些指标
基础指标:
- GPU 利用率。
- 显存使用量和显存利用率。
- GPU 温度。
- 功耗。
- SM 时钟、显存时钟。
- ECC 错误。
- XID 错误。
AI 平台还要关注:
- 每个 Pod 使用哪张 GPU。
- GPU 空闲但显存被占用。
- 多租户共享时同卡多个工作负载的利用率。
- 推理服务的 GPU 利用率和请求延迟是否匹配。
只有 GPU 利用率不够。显存、温度、错误数和 Pod 归属都很重要。
DCGM Exporter 怎么工作
DCGM Exporter 可以作为独立容器运行,也可以在 Kubernetes 中以 DaemonSet 方式运行在 GPU 节点上。它会通过 DCGM 收集指标,并暴露 HTTP /metrics。
典型检查命令:
kubectl get pods -A | grep dcgm
kubectl get svc -A | grep dcgm
kubectl logs -n <namespace> <dcgm-exporter-pod>
如果本地验证,可以访问指标端点:
curl http://<node-or-service>:9400/metrics | head
在生产环境中,通常使用 Prometheus Operator 的 ServiceMonitor 自动发现 DCGM Exporter。
告警怎么设计
不要一上来就做几十条告警。建议先做四类:
第一,GPU 温度过高。温度异常可能意味着机房散热、风扇或节点负载问题。
第二,GPU 长时间低利用率。训练任务申请 GPU 但几乎不用,可能是数据读取瓶颈或资源浪费。
第三,显存接近上限。推理服务显存持续高位,容易出现 OOM 或延迟抖动。
第四,硬件错误。ECC、XID、掉卡等错误要单独告警。
示例排查:
nvidia-smi
dmesg | grep -i nvidia
journalctl -k | grep -i xid
kubectl describe node <gpu-node>
Grafana 看板应该怎么分层
建议至少三层:
- 集群视图:总 GPU 数、整体利用率、空闲 GPU、异常 GPU。
- 节点视图:每台 GPU 服务器的温度、功耗、显存、错误。
- 工作负载视图:命名空间、Pod、模型服务和训练任务的 GPU 使用。
管理者看集群利用率,运维看节点健康,开发者看自己的任务。一个看板想满足所有人,往往会很乱。
常见问题 FAQ
有 GPU Operator 还需要单独部署 DCGM Exporter 吗?
NVIDIA 文档说明 DCGM 和 DCGM Exporter 通常会随 GPU Operator 默认部署。实际是否启用,要看安装参数和集群配置。
nvidia-smi 和 DCGM Exporter 有什么区别?
nvidia-smi 适合临时登录排查,DCGM Exporter 适合持续采集、告警和趋势分析。
GPU 利用率低一定是浪费吗?
不一定。推理服务可能低利用率但要求低延迟;训练任务低利用率则可能是数据加载或通信瓶颈。
监控 GPU 会不会影响性能?
正常采集开销很小。真正需要注意的是采集频率、指标数量和 Prometheus 存储压力。
参考资料
- NVIDIA GPU Telemetry: https://docs.nvidia.com/datacenter/cloud-native/gpu-telemetry/latest/index.html
- NVIDIA DCGM Exporter: https://docs.nvidia.com/datacenter/dcgm/latest/gpu-telemetry/dcgm-exporter.html
