当前位置: 首页 > article >正文

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

目录

  • 前言
  • 一、指标导出器
    • 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调整一下)


http://www.kler.cn/a/349056.html

相关文章:

  • 前端布局与响应式设计综合指南(二)
  • 在线培训知识库+帮助中心:教育行业智慧学习的创新桥梁
  • SpringTask的学习
  • JavaSE——集合12:Map接口实现类—Properties
  • “我们为什么缺少科学精神”演讲内容拆解
  • 【网络安全】漏洞案例:提升 Self-XSS 危害
  • coze bot开发的最小实践
  • Linux系列-常见的指令(二)
  • 【ARM汇编速成】零基础入门汇编语言(ARM架构+汇编的实际应用)
  • 三子棋(C 语言)
  • Prometheus+Grafana 监控 K8S Ingress-Ningx Controller
  • Qt和c++面试集合
  • 任务计划程序重启应用程序
  • lccc总结
  • java真的正在越来越失去竞争力了吗
  • python基础——并发编程
  • 五、Linux之Vi和Vim编辑器
  • 第四十一章 创建安全对话 - 使用 SecurityContextToken
  • HTTP代理与HTTP协议的区别详解
  • MATLAB智能优化算法-学习笔记(5)——蚁群算法求解容量受限的车辆路径问题