基于DCGM+Prometheus+Grafana的GPU监控方案


前言

基于DCGM(NVIDIA 数据中心GPU管理器)、Prometheus 和 Grafana 的GPU监控方案提供了一种全面的方式来跟踪和实时可视化GPU的使用和性能指标。通过DCGM收集详细的NVIDIA GPU遥测数据,并将其导出到Prometheus进行存储和处理,最后使用Grafana通过直观的仪表板展示这些数据,达到下图所示的效果。
在这里插入图片描述


一、指标导出器

1、DCGM:

NVIDIA 数据中心 GPU 管理器 (DCGM) 是一套工具,用于在集群环境中管理和监控 NVIDIA 数据中心 GPU。它包括主动运行状况监控、全面诊断、系统警报和治理策略,包括电源和时钟管理。它可以由基础设施团队独立使用,并轻松集成到 NVIDIA 合作伙伴的集群管理工具、资源调度和监控产品中。

快速开始:https://github.com/NVIDIA/DCGM#ubuntu-lts:

# 设置 CUDA 网络存储库元数据,GPG 密钥:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"

安装 DCGM:

sudo apt-get update 
sudo apt-get install -y datacenter-gpu-manager

启动 DCGM 服务:

#开机自启&立即启动
sudo systemctl --now enable nvidia-dcgm

查看是否启动:

dcgmi  -v

在这里插入图片描述

停止服务

sudo systemctl stop nvidia-dcgm

获取远程节点的信息

我在github上提了一个issue:Can DCGM achieve obtaining gpu information of another host? #133

在这里插入图片描述

默认情况下,nv-hostengine 只绑定到 127.0.0.1,因此它不会监听远程连接,也就是说无法从另一台机器获取本机信息。如果你想让它监听远程连接,需要在启动 nv-hostengine 时使用 -b 选项来指定它应该监听连接的 IP 地址。你也可以指定 -b ALL 让它监听所有网络接口上的连接。

# 停止服务
sudo systemctl stop nvidia-dcgm
# 监听所有网络接口
 sudo nv-hostengine  --service-account nvidia-dcgm -b ALL
 #获取其他节点信息
 dcgmi discovery --host 10.112.0.1 -l

在这里插入图片描述

2、 DCGM-Exporter

DCGM-Exporter 是一种基于 NVIDIA DCGM 的 Go API 的工具,允许用户收集 GPU 指标并了解工作负载行为或监控集群中的 GPU。DCGM Exporter 是用 Go 编写的,并在 HTTP 端点 (/metrics) 上公开 GPU 指标,用于监控 Prometheus 等解决方案。

快速开始:https://github.com/NVIDIA/dcgm-exporter?tab=readme-ov-file#quickstart

sudo docker run -it -d --gpus all --name dcgm -p 9400:9400 -p 9403:9403  -p 9405:9405 nvcr.io/nvidia/k8s/dcgm-exporter:3.3.0-3.2.0-ubuntu22.04 bash

进入docker:

docker start dcgm
docker exec -it dcgm  bash

收集多节点信息

  • -p 指定端口映射,默认端口号9400,将docker内的9400映射到主机内相同端口,即可在localhost:9400收集到数据,curl your-ip:9400/metrics 或者浏览器打开your-ip:9400/metrics有一系列指标说明成功收集到数据,这里增加另外两个端口映射是因为我这里有三台主机,采用每个节点启动nv-hostengine,并在收集节点上建立docker用于收集三个节点的数据的方式。
  • -a 指定数据发送的端口,
  • –r 指定数据来源,nv-hostengine用于在每个节点上发送数据,默认端口号5555
dcgm-exporter -a :9403 -r  "10.112.28.2:5555" 
dcgm-exporter -a :9405 -r  "10.112.57.233:5555" 
# 查看日志
cat /var/log/nv-hostengine.log

更改收集指标

https://github.com/NVIDIA/dcgm-exporter#changing-metrics

使用 dcgm-exporter,可以通过指定自定义 CSV 文件来配置要收集的字段。你可以在存储库中的 etc/default-counters.csv 下找到默认 CSV 文件,该文件将复制到您的系统或容器上的 /etc/dcgm-exporter/default-counters.csv,还可以使用 -f 选项指定自定义 csv 文件

dcgm-exporter -f /my-counters.csv

二、 Prometheus - From metrics to insight

Prometheus是一个开源的系统监控和警报工具包, 将其指标作为时间序列数据收集和存储,即指标信息与记录它的时间戳一起存储,以及称为标签的可选键值对。

下载链接:https://prometheus.io/download/

wget https://github.com/prometheus/prometheus/releases/download/v2.54.1/prometheus-2.54.1.linux-amd64.tar.gz
# 解压
tar -xzf prometheus-2.54.1.linux-amd64.tar.gz
# 打开
cd prometheus-2.54.1.linux-amd64.tar.gz

修改配置文件

nano prometheus.yml

按照prometheus这个示例添加job即可,包括名称和ip:port,如下图添加了DCGM_exporter,让其从localhost的三个端口获取数据(分别对应三个节点的信息,在docker内已经设置dcgm-exporter从各自的nv-hostengine收集信息)
在这里插入图片描述
启动服务:

./prometheus --config.file=./prometheus.yml

查看收集结果

浏览器打开your-ip:9090,9090为prometheus的默认端口,点击status-> targets可以查看各个job的工作状态,如图所示,dcgm-exporter在三个端口均正常工作,说明收集到三个节点的信息

在这里插入图片描述
点击graph,勾选use local time,在搜索框内输入要查询的指标,以DCGM_FI_DEV_GPU_TEMP(GPU温度)为例,点击execute查询,table是各个指标的收集结果(文本序列),而graph可以展示一段时间内的变化情况,下图为graph的展示,15min 内的 3个节点共6张GPU的温度变化。

在这里插入图片描述
虽然prometheus提供了可视化功能,但是通常与grafana结合来建立更加全面的仪表板。

三、Grafana仪表板展示

快速开始:https://grafana.com/grafana/download

在这里插入图片描述

选择版本及对应操作系统输入命令即可

sudo apt-get install -y adduser libfontconfig1 musl
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_11.2.2_amd64.deb
sudo dpkg -i grafana-enterprise_11.2.2_amd64.deb

确保Grafana服务已启动并且设置为开机启动,可以使用systemd来管理Grafana服务

sudo systemctl daemon-reload
# 设置开机启动
sudo systemctl enable grafana-server
sudo systemctl start grafana-server

检查Grafana服务的状态:

sudo systemctl status grafana-server

在这里插入图片描述

浏览器打开 your-ip:3000 进入登录界面,初始用户名与密码均为admin(grafana默认端口号3000)
在这里插入图片描述

导入数据源

  • 点击 home->connections->data sources ,再选择 右上角 add new data source 添加数据源。

在这里插入图片描述

  • 选择 prometheus , 输入名字和 server URL 即可,其他根据需求设置

在这里插入图片描述

  • 滑到最下面,点击save & test,出现绿框内容表示成功导入

在这里插入图片描述

创建仪表板

  • 直接点击绿框内的 building a dashboard 或 home->dashboards-> new dashboard来创建仪表板 ,可以直接导入别人已经创建好的,可以去grafana官网搜索相应的,这里提供一个DCGM-exporter 的 https://grafana.com/grafana/dashboards/12239-nvidia-dcgm-exporter-dashboard/
    在这里插入图片描述
  • 点击 import dashboard ,直接输入 仪表板对应ID ,点击load 即可 ,也可以在下面框内粘贴json文件加载
    在这里插入图片描述
  • 输入名字并选择数据源后 import 即可
    在这里插入图片描述
  • 正常的话,界面如下,
    在这里插入图片描述
  • 最上面的instance包含ip地址加端口号,对应prometheus配置文件中的targets,可以根据需要选择,展示部分或者全部。
    在这里插入图片描述
  • 仪表板中的每个部分为一个panel,可以直接拖动右下角来调整大小,点击右上角,view 全屏显示此panel,edit可以编辑,设置图的形状,添加指标等,remove移除在这里插入图片描述
  • 右上角 add 可以根据需要添加一个新panel
    在这里插入图片描述

更多仪表板

https://grafana.com/grafana/dashboards/
ID :12239,15117,12639(好像不能直接用,我这边没有信息,需要针对各个panel调整一下)

DCGM 是 NVIDIA Data Center GPU 管理工具的缩写,而 Prometheus 是一种用于监控和警报的开源工具。DCGM Prometheus 是将 DCGMPrometheus 集成,以便更好地监控和管理 NVIDIA GPU 在数据中心环境中的性能和健康状况。 DCGM 提供了许多功能,包括 GPU 温度、功耗、内存使用情况、性能指标等的监控。而 Prometheus 则是一种通过 HTTP 协议来收集和存储时间序列数据的工具,它允许用户通过灵活的查询语言来查询和分析这些数据。 将 DCGMPrometheus 集成,可以通过使用 Prometheus 提供的丰富的监控仪表板和警报系统来实时监控 GPU 的性能和健康状况。通过将 DCGM 的数据导出为 Prometheus 可以理解的格式,用户可以方便地将数据传输到 Prometheus 的存储数据库中,以进行持久化存储和长期分析。 使用 DCGM Prometheus,用户可以在数据中心中实时监控 GPU 使用情况,及时发现并处理 GPU 温度过高、功耗异常或内存使用超限等问题。此外,用户还可以设置警报规则,当 GPU 的性能或健康状况达到预定的阈值时,系统会自动发送警报通知用户,以便及时采取措施。 总的来说,DCGM Prometheus 结合了 DCGM 提供的 GPU 监控数据和 Prometheus 提供的强大查询和警报功能,为用户提供了一个全面的 GPU 监控和管理解决方案,帮助用户实时了解 GPU 的性能状况,保证数据中心的稳定和可靠运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pretend ^^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值