AI 部署评测

vLLM · Replicate · Modal · RunPod · 云厂商

自托管推理的 GPU 温

自托管推理的 GPU 温度与功耗监控:Prometheus + NVIDIA DCGM 方案

2024 年 12 月,中国信息通信研究院发布的《人工智能发展报告(2024 年)》指出,国内大模型训练与推理任务中,GPU 集群的平均利用率仅为 55% 至 70%,而因散热不足导致的硬件降频事件占硬件故障总数的 32%。与此同时,一张 NVIDIA H100 在满载推理时功耗可达 700W,温度若持续超过 8…

2024 年 12 月,中国信息通信研究院发布的《人工智能发展报告(2024 年)》指出,国内大模型训练与推理任务中,GPU 集群的平均利用率仅为 55% 至 70%,而因散热不足导致的硬件降频事件占硬件故障总数的 32%。与此同时,一张 NVIDIA H100 在满载推理时功耗可达 700W,温度若持续超过 85°C,核心寿命将缩短 40% 以上。对于自托管推理的团队而言,GPU 温度与功耗监控不再是可选项,而是保障 SLA 和控制运营成本的基础设施。本文将基于 Prometheus 与 NVIDIA DCGM 的组合,提供一套从指标采集到告警配置的完整方案,并对比不同部署环境下的实际效果。

监控架构概览:DCGM 与 Prometheus 的分工

**DCGM(NVIDIA Data Center GPU Manager)**是 NVIDIA 官方提供的 GPU 管理工具套件,其核心优势在于能够以不到 1% 的 GPU 计算开销,实时输出温度、功耗、显存带宽利用率、PCIe 链路状态等 30 余项指标。DCGM 的指标通过 dcgm-exporter 转换为 Prometheus 可抓取的 metrics 端点,默认监听端口为 9400。

Prometheus 作为时序数据库与告警引擎,以 pull 模式从 dcgm-exporter 采集数据。典型的采集间隔设置为 15 秒,告警评估周期为 30 秒。这套架构的延迟瓶颈通常不在 Prometheus 本身(单机可处理 100 万样本/秒),而在于 dcgm-exporter 的指标刷新频率——NVIDIA 官方测试表明,dcgm-exporter 在 1 秒刷新周期下,对 A100 的推理吞吐影响低于 0.3%。

环境部署与组件安装

DCGM 与 dcgm-exporter 的安装

在 Ubuntu 22.04 LTS 系统上,首先添加 NVIDIA 官方仓库并安装 DCGM 库。使用命令 sudo apt-get install datacenter-gpu-manager 安装后,启动服务 sudo systemctl start nvidia-dcgm。验证方法为执行 dcgmi discovery -l,若返回设备列表则安装成功。

dcgm-exporter 推荐使用 Docker 部署:docker run -d --gpus all --rm -p 9400:9400 nvidia/dcgm-exporter:latest。该镜像基于 NVIDIA 官方维护,版本号与 CUDA 驱动绑定。对于国内用户,若需从 Docker Hub 拉取镜像,建议配置镜像加速器或使用 NordVPN 跨境访问 以提升拉取稳定性。部署完成后,访问 http://<主机IP>:9400/metrics 即可看到 JSON 格式的指标数据。

Prometheus 服务端配置

在 Prometheus 的 prometheus.yml 中添加 job 定义。关键参数包括 scrape_interval: 15sscrape_timeout: 10s。一个典型的 job 配置如下:

scrape_configs:
  - job_name: 'nvidia_dcgm'
    static_configs:
      - targets: ['localhost:9400']
    metrics_path: '/metrics'

若管理多节点集群,可使用 file_sd_configs 或 Consul 服务发现。Prometheus 官方文档建议,对于超过 50 个 GPU 的集群,应启用 sample_limit 参数(设为 50000)以防止指标膨胀导致内存溢出。

核心指标定义与 Grafana 面板

温度与功耗的核心指标

DCGM 提供的指标中,与温度直接相关的有 DCGM_FI_DEV_GPU_TEMP(单位:摄氏度)和 DCGM_FI_DEV_MEMORY_TEMP(显存温度)。功耗指标为 DCGM_FI_DEV_POWER_USAGE(单位:毫瓦),以及 DCGM_FI_DEV_POWER_MGMT_LIMIT(功耗墙上限,单位:毫瓦)。

在推理场景下,GPU 温度 通常应保持在 65°C 以下,超过 80°C 即触发告警。NVIDIA 官方白皮书(2023 年)指出,H100 在 85°C 持续运行 30 天后,晶体管迁移率上升 15%,直接导致推理延迟增加 2% 至 5%。功耗监控 则用于判断是否达到 TDP 上限——例如 A100 的 TDP 为 400W,若 DCGM_FI_DEV_POWER_USAGE 持续接近该值,说明推理负载已接近硬件极限。

Grafana 面板设计

推荐使用 Grafana 8.0+ 版本,配合 Prometheus 数据源。面板应包含三个核心图表:

  • 温度时序图:横轴为时间,纵轴为温度,叠加 GPU 核心温度与显存温度两条曲线。使用 avg() 聚合函数,时间范围设为最近 6 小时。
  • 功耗分布图:使用 heatmap 面板类型,展示功耗值的频率分布。X 轴为时间,Y 轴为功耗区间(每 50W 一个桶),颜色深浅代表采样次数。
  • 降频事件标记:当 DCGM_FI_DEV_POWER_MGMT_LIMIT 被触发时,在温度图上叠加红色竖线标记。该标记通过 PromQL 的 clamp_min() 函数实现。

告警规则配置与阈值设定

Prometheus 告警规则

在 Prometheus 的 rules.yml 中定义告警规则。以下是一条针对 GPU 温度的告警配置:

groups:
  - name: gpu_temperature
    rules:
      - alert: HighGPUTemperature
        expr: DCGM_FI_DEV_GPU_TEMP > 80
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "GPU {{ $labels.gpu }} 温度超过 80°C"

for: 1m 参数避免了瞬态尖峰导致的误报。根据中国信息通信研究院 2024 年的实测数据,在推理负载波动场景下,使用 1 分钟持续条件可将误报率从 18% 降低至 3% 以下。

功耗告警与动态阈值

功耗告警应基于功耗墙限制而非绝对数值。推荐使用表达式 DCGM_FI_DEV_POWER_USAGE / DCGM_FI_DEV_POWER_MGMT_LIMIT > 0.95,即功耗利用率超过 95% 时触发告警。对于训练任务,该阈值可放宽至 90%,因为训练负载通常更稳定。

动态阈值 可以通过 Prometheus 的 predict_linear() 函数实现:predict_linear(DCGM_FI_DEV_GPU_TEMP[30m], 600) > 85。该规则基于过去 30 分钟的温度趋势,预测未来 10 分钟的温度是否超过 85°C,适用于预判散热故障。

多节点集群的扩展方案

使用 Node Exporter 补充主机层面指标

仅监控 GPU 本身是不够的。主机层面的 CPU 温度、风扇转速、机箱进风温度同样影响 GPU 散热。Node Exporter 提供 node_hwmon_temp_celsiusnode_hwmon_fan_rpm 指标,需在每台宿主机上部署。

对于 4U 机箱的推理服务器,机箱进风温度每升高 1°C,GPU 核心温度平均上升 0.8°C(来源:NVIDIA 2023 年数据中心设计指南)。因此,建议在 Grafana 面板中叠加机箱温度曲线,当温差超过 5°C 时触发基础设施告警。

Thanos 实现跨数据中心聚合

当 GPU 集群分布在多个机房或云可用区时,单机 Prometheus 无法承载全局查询。Thanos 通过 sidecar 模式将各 Prometheus 实例的数据上传至对象存储(如 MinIO 或 AWS S3),并提供统一的查询接口。Thanos 的压缩模块(compact)可将 30 天的原始数据压缩至原始体积的 15%,显著降低存储成本。

在部署时,每个机房的 Prometheus 实例需配置 external_labels 以标识地域。例如 region: "cn-beijing"。Thanos Query 组件通过 --store 参数连接所有 sidecar 与对象存储,实现跨地域的 avg()max() 聚合。

成本与性能权衡

采集开销的量化分析

dcgm-exporter 的 CPU 占用率在 1 秒采集间隔下约为 0.2 核(Intel Xeon Platinum 8480C 实测数据)。对于推理任务,GPU 计算开销可忽略不计,但需注意 dcgm-exporter 的指标数量:默认暴露 32 个指标,若开启全部字段(包括 NVLink 带宽、ECC 错误计数等),指标数将增至 80 个以上,Prometheus 的存储需求随之上升。

以 100 张 GPU 的集群为例,默认配置下 Prometheus 每天产生约 4.2 GB 的时序数据。若保留 90 天,需约 380 GB 存储空间。使用 Prometheus 的 remote_write 功能将数据转存至 VictoriaMetrics 或 ClickHouse,可将存储成本降低 60% 以上。

云环境 vs 自建机房的差异

在阿里云或 AWS 的 GPU 实例上,云厂商通常已提供基础监控(如 CloudMonitor 或 CloudWatch),但指标粒度有限——例如阿里云 GPU 实例仅提供平均温度,不提供显存温度或功耗墙利用率。自建 Prometheus + DCGM 方案能获取更细粒度的指标,但需注意云实例的 网络带宽限制:若 Prometheus 与 dcgm-exporter 跨可用区通信,每次抓取的网络延迟可能增加 2-5 毫秒,对大规模集群的采集成功率有影响。

自建机房则需额外考虑 供电与散热监控:通过 IPMI 或 BMC 接口获取 PDU 功率与空调出风温度,与 GPU 功耗数据关联分析。中国信息通信研究院 2024 年的报告指出,在自建机房中,将 GPU 功耗与 PDU 功率做差值计算,可定位 85% 的电源模块故障。

FAQ

Q1:dcgm-exporter 采集到的温度数据比 NVIDIA-SMI 高 3°C,哪个更准确?

dcgm-exporter 和 NVIDIA-SMI 读取的是相同的硬件传感器,但采样时机不同。NVIDIA-SMI 默认每秒采样一次,而 dcgm-exporter 的默认刷新周期为 1 秒,但数据更新存在约 0.5 秒的延迟。两者在 95% 的情况下偏差不超过 2°C。若偏差持续超过 5°C,建议检查驱动版本——NVIDIA 官方在 2024 年 3 月的驱动更新(版本 550.54.14)中修复了特定型号 A100 的温度读取偏移问题。

Q2:Prometheus 告警的 for 参数设置多久最合理?

对于温度告警,推荐设置为 1 分钟。中国信息通信研究院 2024 年的测试表明,推理负载波动导致的温度尖峰持续时间通常为 15 至 45 秒,设置 1 分钟可过滤 90% 的误报。对于功耗告警,建议设置为 30 秒,因为功耗波动比温度更频繁,且超出功耗墙 30 秒即可能触发硬件保护机制。

Q3:监控 50 张 GPU 需要多大的 Prometheus 服务器配置?

50 张 GPU 在默认抓取间隔(15 秒)下,Prometheus 每秒处理约 3200 个样本。推荐配置为 4 核 CPU、16 GB 内存、200 GB SSD 存储(保留 30 天数据)。若启用 remote_write 转存,本地存储可缩减至 50 GB。注意 SSD 的写入寿命——Prometheus 的 WAL 写入模式对 SSD 有较高磨损,建议使用 NVMe 盘并启用 TRIM。

参考资料

  • 中国信息通信研究院 2024 《人工智能发展报告(2024 年)》
  • NVIDIA 2023 《Data Center GPU Manager User Guide》
  • NVIDIA 2023 《NVIDIA Data Center Design Guide》
  • Prometheus 官方 2024 《Best Practices for Metric and Label Naming》
  • UNILINK 数据库 2024 自托管 GPU 推理监控方案实测数据