在深度学习和高性能计算环境中,GPU是核心资源。显存泄漏(Memory Leak)或功率过载不仅会影响当前任务的稳定性,还可能导致硬件损耗。本指南将介绍如何结合 Prometheus、Alertmanager 和 dcgm-exporter 来构建一套实时的 GPU 监控告警系统,专注于显存的快速增长和功率的异常升高。
1. 准备工作:安装 DCGM Exporter
dcgm-exporter(Data Center GPU Manager Exporter)是 NVIDIA 官方推荐的用于 Prometheus 的 GPU 指标收集器。它依赖于 NVIDIA DCGM 库。
安装步骤(以 Docker 为例,推荐方式):
您需要在宿主机上安装好 Docker 和 NVIDIA Container Toolkit。
docker run -d --rm --gpus all \n --name dcgm-exporter \n -p 9400:9400 \n nvidia/dcgm-exporter
运行成功后,您可以通过访问 http://your_host_ip:9400/metrics 看到大量的 **DCGM_FI_DEV_*** 指标。
2. 配置 Prometheus 抓取任务 (Scrape Job)
编辑您的 prometheus.yml 文件,添加一个新的抓取配置,指向 DCGM Exporter 运行的地址。
# prometheus.yml
scrape_configs:
- job_name: 'gpu_monitoring'
static_configs:
- targets: ['localhost:9400'] # 替换为 DCGM Exporter 的实际地址
重启 Prometheus 使配置生效。
3. 定义告警规则 (PromQL)
我们将创建两个核心告警规则:
1. 显存快速增长告警 (Potential Leak): 检测在短时间内显存使用量是否有显著的、非预期的增长(例如,在 10 分钟内增加超过 2GB)。
2. 高功率使用告警: 检测 GPU 功率使用量是否持续接近其设计限制(TDP)。
创建一个名为 gpu_alerts.yml 的文件,并在 Prometheus 配置中引用它。
3.1 显存增长告警 (Memory Leak Detection)
我们使用 DCGM_FI_DEV_FB_USED(帧缓冲区使用量,单位:字节)指标,通过比较当前平均值和 10 分钟前的平均值来检测增长率。
# gpu_alerts.yml
---
groups:
- name: gpu_health_alerts
rules:
- alert: GPUMemoryRapidGrowth
expr: |
(avg_over_time(DCGM_FI_DEV_FB_USED[10m]) - avg_over_time(DCGM_FI_DEV_FB_USED offset 10m [10m])) > 2 * 1024 * 1024 * 1024
for: 5m
labels:
severity: critical
annotations:
summary: "GPU {{ $labels.gpu }} 显存使用量在短时间内快速增长"
description: "GPU {{ $labels.gpu }} 显存({{ $labels.host }})在过去10分钟内增加了超过2GB。可能存在显存泄漏。当前使用量: {{ humanize($value) }}B"
3.2 功率异常告警 (High Power Usage)
使用 DCGM_FI_DEV_POWER_USAGE(功率使用量,单位:毫瓦)和 DCGM_FI_DEV_POWER_LIMIT(功率限制,单位:毫瓦)来计算功率使用率。
- alert: GPUHighPowerUtilization
expr: |
DCGM_FI_DEV_POWER_USAGE / DCGM_FI_DEV_POWER_LIMIT > 0.95
for: 1m
labels:
severity: warning
annotations:
summary: "GPU {{ $labels.gpu }} 功率使用率过高"
description: "GPU {{ $labels.gpu }} 功率({{ $labels.host }})持续高于95%的TDP限制。当前使用率: {{ $value | humanizePercentage }}"
4. 配置 Alertmanager
将 gpu_alerts.yml 文件加入到 Prometheus 配置中,然后确保 Prometheus 能够将警报发送给 Alertmanager。以下是 Prometheus 配置中引用规则文件的示例:
# prometheus.yml (片段)
rule_files:
- "gpu_alerts.yml"
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093'] # 替换为您的 Alertmanager 地址
5. 效果与操作
当显存使用量在检测窗口期(例如 10 分钟)内持续以高速率增长,且持续时间超过 for: 5m 的阈值时,Prometheus 将触发 GPUMemoryRapidGrowth 告警,并通过 Alertmanager 发送到配置的接收器(如邮件、Slack、Webhook等)。
关键指标说明:
| 指标名称 | 含义 | 单位 |
|---|---|---|
| DCGM_FI_DEV_FB_USED | 显存使用量 | 字节 (Bytes) |
| DCGM_FI_DEV_POWER_USAGE | 当前功率 | 毫瓦 (mW) |
| DCGM_FI_DEV_POWER_LIMIT | 功率限制(TDP) | 毫瓦 (mW) |
通过这种方式,您可以实时掌握 GPU 资源的健康状况,避免因潜在的显存泄漏或持续的超负荷运行导致服务中断或硬件寿命缩短。
汤不热吧