通过Prometheus对GPU集群进行监控以及搭建(小型集群)

一、本文用通用的「Prometheus+Grafana+DCGM对GPU集群进行监控

前置条件

  • 集群节点:所有 GPU 节点需安装 NVIDIA 驱动(418.x 以上)、Docker(可选,简化部署)。
  • 网络:所有节点网络互通,监控节点(部署 Prometheus/Grafana)能访问其他 GPU 节点的 9400 端口(DCGM 暴露端口)、9100 端口(Node Exporter 暴露端口)。

步骤 1:部署 NVIDIA DCGM-Exporter(采集 GPU 指标)

DCGM(Data Center GPU Manager)是 NVIDIA 官方工具,dcgm-exporter 负责将 GPU 指标转换为 Prometheus 可识别的格式,是 GPU 监控的核心采集组件。

方式 1:Docker 部署(推荐,无需配置依赖)
复制代码
# 在每个GPU节点执行(启动dcgm-exporter容器)
docker run -d \
  --gpus all \  # 挂载所有GPU
  --net="host" \  # 使用主机网络,避免端口映射问题
  --pid="host" \
  -v /etc/localtime:/etc/localtime:ro \  # 同步时间
  nvidia/dcgm-exporter:3.3.5  # 推荐稳定版本

# 验证是否成功:访问 http://节点IP:9400/metrics,能看到GPU指标(如dcgm_gpu_utilization)
curl http://localhost:9400/metrics
方式 2:二进制部署(无 Docker 场景)
复制代码
# 1. 安装DCGM
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.1-1_all.deb
dpkg -i cuda-keyring_1.1-1_all.deb
apt update && apt install -y datacenter-gpu-manager

# 2. 安装dcgm-exporter
apt install -y dcgm-exporter

# 3. 启动服务并设置开机自启
systemctl start dcgm-exporter
systemctl enable dcgm-exporter

# 验证:同Docker方式,访问9400端口

步骤 2:部署 Node Exporter(采集节点系统指标)

采集 CPU、内存、磁盘、网络等节点基础指标,与 GPU 指标联动分析(如 "GPU 利用率低但 CPU 满了" 可能是计算瓶颈在 CPU)。

Docker 部署(所有节点执行)
复制代码
docker run -d \
  --name node-exporter \
  --net="host" \
  --pid="host" \
  -v "/:/host:ro,rslave" \
  prom/node-exporter:v1.6.0 \
  --path.rootfs=/host \
  --collector.processes  # 可选:采集进程详情(如每个PID占用的资源)

# 验证:访问 http://节点IP:9100/metrics,能看到node_cpu_usage等指标
curl http://localhost:9100/metrics

步骤 3:部署 Prometheus(存储 + 拉取指标)

Prometheus 是时序数据库,负责从所有节点的 DCGM-Exporter 和 Node Exporter 拉取指标并存储,部署在「监控节点」(建议单独一台服务器,避免占用 GPU 资源)。

1. 编写配置文件 prometheus.yml
复制代码
global:
  scrape_interval: 15s  # 每15秒拉取一次指标(可根据需求调整)

scrape_configs:
  # 1. 监控Prometheus自身
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  # 2. 监控GPU节点(DCGM-Exporter)
  - job_name: 'gpu-cluster'
    static_configs:
      - targets: [
          '192.168.1.10:9400',  # 节点1的DCGM端口
          '192.168.1.11:9400',  # 节点2的DCGM端口
          '192.168.1.12:9400'   # 节点3的DCGM端口(按实际节点IP添加)
        ]

  # 3. 监控节点系统指标(Node Exporter)
  - job_name: 'node-cluster'
    static_configs:
      - targets: [
          '192.168.1.10:9100',
          '192.168.1.11:9100',
          '192.168.1.12:9100'
        ]
  1. Docker 部署 Prometheus

    挂载配置文件和数据目录(持久化存储指标)

    docker run -d
    --name prometheus
    --net="host"
    -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \ # 映射配置文件
    -v prometheus-data:/prometheus \ # 持久化数据
    prom/prometheus:v2.45.0
    --config.file=/etc/prometheus/prometheus.yml
    --storage.tsdb.retention.time=30d # 指标保留30天(按需调整)

    验证:访问 http://监控节点IP:9090,进入Prometheus UI,查询dcgm_gpu_utilization能看到GPU利用率

步骤 4:部署 Grafana(可视化监控面板)

Grafana 是开源可视化工具,通过配置 Prometheus 数据源,快速生成 GPU 集群监控大屏(支持自定义面板、告警配置)。

1. Docker 部署 Grafana
复制代码
docker run -d \
  --name grafana \
  --net="host" \
  -v grafana-data:/var/lib/grafana \  # 持久化面板配置
  -e GF_SECURITY_ADMIN_PASSWORD="your_password" \  # 管理员密码
  grafana/grafana:10.1.0

# 访问Grafana:http://监控节点IP:3000,用户名admin,密码为上面设置的your_password
2. 配置 Prometheus 数据源
  1. 登录 Grafana → 左侧「Configuration」→「Data Sources」→「Add data source」→ 选择「Prometheus」。
  2. 在「URL」中输入 http://监控节点IP:9090(Prometheus 地址),其他默认,点击「Save & Test」,显示「Data source is working」即成功。
3. 导入 GPU 监控面板(无需从零设计)

Grafana 社区有现成的 NVIDIA GPU 监控面板,直接导入即可:

  1. 左侧「Dashboards」→「Import」→ 输入面板 ID 12239(NVIDIA DCGM 官方面板,支持多 GPU、多节点监控)→ 点击「Load」。
  2. 选择之前配置的 Prometheus 数据源 → 点击「Import」,即可看到完整的 GPU 监控大屏(包含算力、显存、温度、节点状态等)
自定义面板(可选)

如果需要添加业务指标(如训练任务进度、模型名称),可在 Grafana 中添加「新面板」,使用 PromQL 查询:

  • GPU 算力利用率:avg(dcgm_gpu_utilization{job="gpu-cluster"}) by (instance)
  • 节点内存占用:100 - (avg(node_memory_available_bytes{job="node-cluster"}) by (instance) / avg(node_memory_total_bytes{job="node-cluster"}) by (instance) * 100)
  • 单个 GPU 显存占用:dcgm_gpu_memory_used_bytes{job="gpu-cluster",gpu="0"} / dcgm_gpu_memory_total_bytes{job="gpu-cluster",gpu="0"} * 100

步骤 5:部署 Alertmanager(告警通知,可选)

当 GPU 温度过高、显存溢出或节点离线时,自动发送告警(邮件、钉钉、企业微信),部署在监控节点。

1. 编写 Alertmanager 配置文件 alertmanager.yml
复制代码
global:
  resolve_timeout: 5m

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h  # 重复告警间隔
  receiver: 'dingtalk'  # 默认告警接收者

receivers:
- name: 'dingtalk'
  webhook_configs:
  - url: 'http://dingtalk-webhook-url'  # 钉钉机器人webhook地址(需提前创建)
    send_resolved: true  # 故障恢复时发送通知

# 定义告警规则
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - localhost:9093  # Alertmanager地址

# 在Prometheus中添加告警规则(修改prometheus.yml)
rule_files:
  - "alert_rules.yml"
2. 编写告警规则 alert_rules.yml
复制代码
groups:
- name: gpu_alerts
  rules:
  # GPU温度>85℃告警
  - alert: GPUHighTemperature
    expr: dcgm_gpu_temp_celsius > 85
    for: 5m  # 持续5分钟触发告警
    labels:
      severity: warning
    annotations:
      summary: "GPU温度过高"
      description: "节点 {{ $labels.instance }} 的GPU {{ $labels.gpu }} 温度为 {{ $value }}℃,超过85℃阈值"

  # GPU显存占用>95%告警
  - alert: GPUHighMemoryUsage
    expr: dcgm_gpu_memory_used_bytes / dcgm_gpu_memory_total_bytes > 0.95
    for: 3m
    labels:
      severity: critical
    annotations:
      summary: "GPU显存占用过高"
      description: "节点 {{ $labels.instance }} 的GPU {{ $labels.gpu }} 显存占用率为 {{ $value | humanizePercentage }},超过95%阈值"

  # 节点离线告警(Node Exporter无数据)
  - alert: NodeDown
    expr: up{job="node-cluster"} == 0
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "节点离线"
      description: "节点 {{ $labels.instance }} 已离线,无法采集指标"
3. Docker 部署 Alertmanager
复制代码
docker run -d \
  --name alertmanager \
  --net="host" \
  -v /path/to/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
  -v /path/to/alert_rules.yml:/etc/prometheus/alert_rules.yml \
  prom/alertmanager:v0.26.0

# 重启Prometheus加载告警规则
docker restart prometheus

四、企业级扩展方案(大型集群适配)

如果集群规模超过 50 节点,或需要高可用、多集群统一管理,可在基础方案上扩展:

1. 容器化部署(Kubernetes)

  • 用 K8s 的 DaemonSet 部署 DCGM-Exporter 和 Node Exporter,自动在所有 GPU 节点启动,无需手动逐个部署。
  • 用 StatefulSet 部署 Prometheus/Grafana,配合 PersistentVolume 实现数据持久化,支持主从备份(高可用)。
  • 插件推荐:nvidia-gpu-operator(自动部署 DCGM、监控指标采集,适配 K8s 集群)。

2. 指标增强:添加分布式训练监控

  • 监控多卡通信:部署 nvlink-exporter 采集 NVLink 带宽、延迟指标(适配 NVIDIA GPU 集群)。
  • 监控训练任务:集成 MLflowWeights & Biases,将 GPU 指标与训练进度(loss、epoch)关联,定位训练效率瓶颈。

3. 多集群统一监控

  • 用 Prometheus 联邦集群:每个子集群部署 Prometheus(采集本地指标),主集群 Prometheus 拉取所有子集群的指标,实现统一可视化。
  • 商业工具替代:使用 Datadog、New Relic 或阿里云 ARMS,支持自动发现 GPU 节点、预置监控模板、多维度告警,无需手动配置(适合无运维团队的企业)。

五、关键优化与注意事项

  1. 性能优化
    • 调整 Prometheus 拉取间隔(大型集群可设为 30s,减少网络压力)。
    • 开启 Prometheus 指标压缩(如启用 Snappy 压缩),降低存储占用。
  2. 权限控制
    • Grafana 配置用户角色(如只读用户、管理员),避免误操作面板。
    • 限制 Prometheus/DCGM 端口访问(仅允许监控节点和管理员 IP 访问)。
  3. 故障排查
    • 若 Grafana 看不到 GPU 指标:检查 Prometheus 是否能访问节点 9400 端口(telnet 节点IP 9400),DCGM-Exporter 是否正常运行(docker logs dcgm-exporter)。
    • 若指标缺失:确认 NVIDIA 驱动版本是否兼容 DCGM(需 418.x 以上),执行 nvidia-smi 验证 GPU 是否正常识别。

六、常用工具汇总

组件 作用 核心优势
NVIDIA DCGM-Exporter 采集 GPU 硬件指标 官方工具,指标全面、兼容性强
Node Exporter 采集节点系统指标(CPU / 内存 / 网络) 轻量、开源、适配所有 Linux 节点
Prometheus 存储时序指标、执行告警规则 高吞吐、支持 PromQL 查询
Grafana 可视化监控面板、配置告警 开源免费、面板丰富、操作简单
Alertmanager 告警分发(邮件 / 钉钉) 支持多接收者、故障恢复通知
nvidia-gpu-operator K8s 集群 GPU 监控自动化部署 自动适配 K8s、减少手动配置

通过以上方案,可实现 GPU 集群的全链路监控,从硬件状态到任务运行,再到异常告警,覆盖研发和生产场景的核心需求。中小型集群优先选择基础方案(Docker 部署),快速落地;大型集群可迁移到 K8s 或使用商业工具,提升可扩展性和稳定性。

相关推荐
杰克逊的日记3 小时前
中型 GPU 服务集群监控方案(10-50 节点)
人工智能·gpu算力·gpu监控
happy_king_zi8 小时前
RabbitMQ-Exporter 监控 TLS 加密的 RabbitMQ 集群
分布式·安全·rabbitmq·prometheus
梁正雄3 天前
6、prometheus资源规划
运维·服务器·服务发现·prometheus·监控
梁正雄3 天前
4、prometheus-服务发现k8s api-2
kubernetes·服务发现·prometheus
猫头虎5 天前
昆仑芯 X HAMi X 百度智能云 | 昆仑芯 P800 XPU/vXPU 双模式算力调度方案落地
人工智能·百度·开源·aigc·文心一言·gpu算力·agi
麦兜*7 天前
Spring Boot 应用 Docker 监控:Prometheus + Grafana 全方位监控
spring boot·后端·spring cloud·docker·prometheus
科技峰行者7 天前
华为发布Atlas 900 DeepGreen AI服务器:单机柜100PF算力重构AI训练基础设施
服务器·人工智能·华为·aigc·gpu算力
罗不俷8 天前
Prometheus 详解:从原理到实战,打造企业级云原生监控体系
云原生·prometheus
GMICLOUD9 天前
网易科技专访 GMI Cloud 创始人&CEO Alex Yeh:以“产品+布局+服务”构建全球竞争力
人工智能·科技·ai·gpu算力·agi·ai应用·ai基础设施