K8s集群GPU算力监控:用Prometheus暴露显存与利用率

GPU算力在K8s里为什么需要单独监控

Kubernetes默认只关心CPU和内存,GPU的显存占用、SM利用率、温度、功耗这些指标它看不到。
如果你只管了Pod调度成功,却不知道GPU跑没跑满、有没有卡在显存溢出,算力就是一笔糊涂账。
本文用NVIDIA官方维护的DCGM Exporter配合Prometheus,把每张卡的算力指标暴露出来,步骤面向零基础用户,照着做就能看到数据。

需要说明的是,DCGM Exporter只负责采集和暴露指标,它不负责调度GPU,也不改变你的训练任务。
适用前提是节点已装好NVIDIA驱动,且容器运行时能识别GPU。

动手前先确认三件事

  • 节点上执行nvidia-smi能正常列出GPU型号和驱动版本。
  • 已安装nvidia-container-toolkit,且容器运行时(containerd或Docker)配置了NVIDIA runtime。
  • 集群里已有Prometheus,能通过ServiceMonitor或静态配置抓取新target。

验证容器运行时是否就绪,可以在节点上跑一个官方测试镜像:

nvidia-ctk --version
ctr run --rm --gpus 0 nvcr.io/nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi

如果第二条命令报no such device或找不到GPU,先别急着往下走,问题出在运行时配置而不是Exporter。

用DaemonSet部署DCGM Exporter

推荐用Helm安装,版本号请以你实际拉取到的chart为准,不同版本values字段名可能不同。

helm repo add gpu-helm-charts https://nvidia.github.io/dcgm-exporter/helm-charts
helm repo update
helm install dcgm-exporter gpu-helm-charts/dcgm-exporter \
  --namespace monitoring --create-namespace

如果不用Helm,核心是让DaemonSet满足两点:

  • 挂载/run/nvidia/driver或/dev/nvidia*设备,具体路径取决于驱动安装方式。
  • 容器启动参数指向-f /etc/dcgm-exporter/dcp-metrics-included.csv,即采集指标清单。

部署后确认Pod落在有GPU的节点上:

kubectl -n monitoring get pods -o wide | grep dcgm
kubectl -n monitoring logs  --tail=50

日志里能看到Starting dcgm-exporter且没有Failed to initialize字样,说明采集端正常。

让Prometheus抓到指标

DCGM Exporter默认在9400端口暴露/metrics。
先手动验证:

kubectl -n monitoring port-forward svc/dcgm-exporter 9400:9400
curl -s localhost:9400/metrics | grep DCGM_FI_DEV_GPU_UTIL

能返回带数值的行,说明数据已经出来了。
接着在Prometheus里加抓取任务,如果用Prometheus Operator,创建ServiceMonitor:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: dcgm-exporter
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: dcgm-exporter
  endpoints:
    - port: metrics
      interval: 30s

应用后到Prometheus的Status > Targets页面,应该能看到dcgm-exporter的target状态为UP。

高频报错与避坑说明

Pod一直Pending:多半是节点选择器或污点没处理。
GPU节点常带nvidia.com/gpu污点,DaemonSet需要对应的toleration,否则调度不上去。

指标里只有部分GPU:检查节点是否混插了不同代际的卡,或驱动版本不一致。
DCGM对驱动版本有最低要求,版本过低会漏采部分字段。

重启后指标消失:
DaemonSet不会自动恢复被删除的采集容器,
确认你的部署方式带上了restartPolicy:
Always
(DaemonSet默认行为,
但自定义Pod模板时容易漏)。

显存指标和nvidia-smi对不上:DCGM采集有间隔,默认约1秒到30秒不等,瞬时峰值可能采不到。
对账时用同一时间窗口比较,不要拿单点值硬对。

怎么看结果才算验证通过

在Prometheus查询框里先查DCGM_FI_DEV_GPU_UTIL,能看到每张卡一条时间序列,值为百分比。
再查DCGM_FI_DEV_FB_USED(显存已用,单位MB),跟nvidia-smi输出对比,误差在采集间隔内属正常。

Grafana可以直接导入NVIDIA提供的DCGM Dashboard(ID以官方仓库当前提供的为准),导入后能看到利用率、显存、温度、功耗四类曲线。
如果曲线全是断点,回到Targets页面看抓取是否稳定,通常是网络策略或端口没放通。

常见疑问

必须用DCGM Exporter吗,能不能自己写脚本采集?
可以,但DCGM覆盖的字段更全,且由NVIDIA维护,省去自己解析nvidia-smi的兼容成本。自建脚本适合字段需求极少的场景。

一个Exporter能采集多节点吗?
不能。DCGM Exporter是DaemonSet,每个GPU节点跑一个实例,各自暴露本机指标,Prometheus按节点分别抓取。

指标保留多久合适?
由Prometheus的retention决定,跟Exporter无关。算力趋势分析一般保留15到30天,具体看存储容量。

没装Prometheus Operator怎么办?
在prometheus.yml的scrape_configs里加一段静态配置,target写各节点IP加9400端口,效果一样。

监控搭好后,GPU算力就有了可查、可对比的数据。
这套流程本身不涉及调度和配额,属于纯观测层,风险低,适合先在测试节点跑一遍再推到生产。

分享到:
上一篇
服务器K8s集群GPU算力CertificationOps:从节点准备到健康验证
下一篇
ChatGPT联网功能使用教程:开启、验证与常见问题处理
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意