AI服务器GPU功耗监控:用nvidia-smi和DCGM实时查看
AI 服务器 GPU 功耗监控的核心是两件事:先用 nvidia-smi 确认每块卡的实时功耗读数正常,再部署 DCGM Exporter 把功耗指标持续采集到 Prometheus,并配置阈值告警。
本文按这个顺序展开,适用于已装好 NVIDIA 驱动、能正常识别 GPU 的 Linux 服务器。
先确认功耗读数是否可信
在终端执行:
nvidia-smi --query-gpu=index,name,power.draw,power.limit,power.default_limit --format=csv
预期输出类似:
index, name, power.draw [W], power.limit [W], power.default_limit [W]
0, NVIDIA A100-SXM4-80GB, 72.35 W, 400.00 W, 400.00 W
power.draw 是当前功耗,power.limit 是当前生效的功耗上限。
如果 power.draw 显示 N/A,说明驱动或 GPU 状态异常,先解决驱动问题,不要急着装监控组件。
注意区分整卡功耗和单 GPU 功耗,多卡机器上每块卡要分别看。
部署 DCGM Exporter 采集功耗指标
DCGM Exporter 是 NVIDIA 官方提供的指标导出器,能把 GPU 功耗、温度、显存等指标以 Prometheus 格式暴露出来。
推荐用 Docker 运行:
docker run -d --gpus all --rm \
-p 9400:9400 \
--name dcgm-exporter \
nvcr.io/nvidia/k8s/dcgm-exporter:3.3.0-3.2.0-ubuntu22.04
启动后验证指标是否包含功耗:
curl -s localhost:9400/metrics | grep -i power
应能看到 DCGM_FI_DEV_POWER_USAGE 这类指标。
如果没有输出,检查容器日志:
docker logs dcgm-exporter
常见原因是驱动版本与镜像不匹配,或容器没有 --gpus all 权限。
接入 Prometheus 并设置功耗告警
在 Prometheus 的 prometheus.yml 中添加抓取任务:
scrape_configs:
- job_name: 'gpu'
static_configs:
- targets: ['服务器IP:9400']
重载配置后,在 Prometheus 界面查询 DCGM_FI_DEV_POWER_USAGE,确认能查到每块卡的功耗数据。
接着配置告警规则,例如功耗持续超过上限的 90% 时触发:
groups:
- name: gpu-power
rules:
- alert: GPUPowerHigh
expr: DCGM_FI_DEV_POWER_USAGE > 360
for: 5m
labels:
severity: warning
annotations:
summary: "GPU {{ $labels.gpu }} 功耗过高"
阈值要按实际卡的 power.limit 调整,不要直接照搬 360。
避坑与验证
- 不要只看整机功耗:机房 PDU 读数包含 CPU、内存、风扇,不能替代单卡功耗监控。
- 功耗读数波动大是正常的:负载变化时
power.draw会快速跳动,告警要加for持续时间,避免误报。 - 容器内看不到 GPU:确认已安装
nvidia-container-toolkit,并用docker run --gpus all测试。 - 验证方式:跑一个短时 GPU 压测,观察
nvidia-smi与 Prometheus 中DCGM_FI_DEV_POWER_USAGE是否同步上升,两者趋势一致说明采集链路正常。
如果 nvidia-smi 本身就读不到功耗,先回退检查驱动和 GPU 是否被系统识别,再处理监控组件。