AI服务器GPU温度监控:用nvidia-smi和DCGM守住显卡温度线
AI服务器GPU温度监控要解决的是两件事:平时能随时看到每块卡的实时温度,异常升温时能自动发出告警。
最省事的起点是用 nvidia-smi 手动查看,长期运行则建议用 DCGM Exporter 把温度指标接入 Prometheus。
下面按从快到全的顺序讲清楚操作和排错。
先确认驱动和温度读数是否正常
在服务器上执行:
nvidia-smi
输出表格中 Temp 列就是 GPU 当前温度,Fan 列是风扇转速百分比。
如果命令报 NVIDIA-SMI has failed,先检查驱动是否加载:
lsmod | grep nvidia
没有输出说明驱动未加载,需要先解决驱动问题,温度监控无从谈起。
另外,数据中心卡(如 A100、H100)通常没有风扇转速读数,Fan 显示 N/A 属于正常现象,不要误判为故障。
用一条循环命令做临时盯温
需要短时间观察温度变化时,不必先搭监控系统:
nvidia-smi --query-gpu=index,temperature.gpu,utilization.gpu --format=csv -l 5
该命令每 5 秒输出一次每块卡的编号、温度和利用率,按 Ctrl+C 停止。
适合压测或跑训练任务时临时观察。
判断标准上,消费级卡长期高于 83℃、数据中心卡持续高于 85℃ 就应排查散热,而不是只把告警阈值调高。
部署 DCGM Exporter 采集温度指标
长期监控推荐用 NVIDIA 官方的 DCGM Exporter,它会把 GPU 温度、显存、功耗等指标以 Prometheus 格式暴露出来。
前提是服务器已安装 NVIDIA 驱动,且能正常运行 nvidia-smi。
用 Docker 启动的典型命令如下(镜像版本请按官方发布选择,不要照抄过时标签):
docker run -d --gpus all --rm \
-p 9400:9400 \
--name dcgm-exporter \
nvcr.io/nvidia/k8s/dcgm-exporter:latest
启动后验证指标是否可访问:
curl -s http://127.0.0.1:9400/metrics | grep DCGM_FI_DEV_GPU_TEMP
能看到 DCGM_FI_DEV_GPU_TEMP 开头的行,说明温度指标已经在暴露。
如果返回为空,先看容器日志:
docker logs dcgm-exporter
常见原因是驱动版本与镜像不匹配,或容器没有拿到 GPU 设备。
接入 Prometheus 并配置温度告警
在 Prometheus 的 prometheus.yml 中增加抓取任务:
scrape_configs:
- job_name: 'gpu'
static_configs:
- targets: ['127.0.0.1:9400']
重载配置后,在 Prometheus 界面查询 DCGM_FI_DEV_GPU_TEMP 确认有数据。
接着配置告警规则,例如温度超过 85℃ 持续 2 分钟触发:
groups:
- name: gpu-temp
rules:
- alert: GPUTemperatureHigh
expr: DCGM_FI_DEV_GPU_TEMP > 85
for: 2m
labels:
severity: warning
annotations:
summary: "GPU温度过高"
规则写好后用 promtool check rules 校验语法,再在 Prometheus 的 Alerts 页面确认规则已加载。
温度异常时的排查顺序
温度告警触发后,按以下顺序定位,不要一上来就调高阈值:
- 用
nvidia-smi看是单卡高温还是全部高温,单卡问题优先查该卡风扇和风道。 - 检查机箱进风温度和风扇策略,服务器可通过 IPMI 或 BMC 查看风扇转速。
- 确认是否有异常进程长期占满 GPU,用
nvidia-smi查看进程列表后结合业务判断。 - 数据中心卡无风扇读数时,重点看整机散热和机房环境温度,而不是盯着
Fan列。
常见疑问
nvidia-smi 显示的温度和 DCGM 指标不一致怎么办?
两者采样周期不同,短暂差异正常。
若长期偏差明显,先确认 DCGM Exporter 版本与驱动匹配,再对比同一时刻的读数。
没有风扇转速读数是不是监控坏了?
不一定。
部分数据中心 GPU 由整机风扇散热,本身不暴露转速,温度指标正常即可。
告警阈值设多少合适?
没有统一标准,应结合卡型号和机房环境设定。
一般建议先观察一周正常业务下的温度分布,再把阈值设在正常峰值之上、硬件风险线之下。
完成以上步骤后,你至少有了两层保障:nvidia-smi 用于快速人工检查,DCGM Exporter 加 Prometheus 告警用于无人值守。
后续如果温度频繁告警,优先从散热和任务调度入手,而不是反复放宽告警条件。