目录
- 前言
- 一、指标导出器
- 1、DCGM:
- 获取远程节点的信息
- 2、 DCGM-Exporter
- 收集多节点信息
- 更改收集指标
- 二、 Prometheus - From metrics to insight
- 修改配置文件
- 查看收集结果
- 三、Grafana仪表板展示
- 导入数据源
- 创建仪表板
- 更多仪表板
前言
基于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调整一下)