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

news2024/10/10 22:17:40

目录

  • 前言
  • 一、指标导出器
    • 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.coloradmin.cn/o/2203304.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[SAP ABAP] LIKE TABLE OF

LIKE TABLE OF语句是用来参照结构体(工作区)对象定义内表数据类型的语句 在SAP ABAP中有标准表&#xff0c;排序表和哈希表三种内表数据类型 *定义标准表 DATA: <ty_tab_standard_name> LIKE [STANDARD] TABLE OF <dtype> [WITH NON-UNIQUE KEY <k1 k2 ... kn…

Python自动给课本文字标注拼音

环境&#xff1a; Ubuntu20.04&#xff0c;ubuntu20.04自带python版本 3.8.10&#xff0c;pip的版本是 20.0.2 pip install pypinyin # 安装失败&#xff0c;检查更新pip确保pip是最新版本&#xff1a; pip install --upgrade pip 检查是否安装成功 pip show pypinyin pinyin…

【电路笔记】-求和运算放大器

求和运算放大器 文章目录 求和运算放大器1、概述2、反相求和放大器3、同相求和放大器4、减法放大器5、应用5.1 音频混合器5.2 数模转换器 (DAC)6、总结1、概述 在我们之前有关运算放大器的大部分文章中,仅将一个输入应用于反相或非反相运算放大器的输入。在本文中,将讨论一种…

Python从入门到高手6.1节-字符串的定义与编码

目录 6.1.1 理解字符串 6.1.2 字符串的类型名 6.1.3 字符的数字编码 5.1.4 常用的字符编码 6.1.5 字符串的默认编码 6.1.6 字符串的编码与解码 6.1.7 转义字符详解 6.1.8 对字符串进行迭代 6.1.9 大神薯条老师 6.1.1 理解字符串 在Python中使用英文引号括住的都是字符…

CAS存在的问题及在Java中的解决方式

CAS 介绍 CAS 可以保证对共享变量操作的原子性 CAS全称Compare And Swap&#xff0c;比较与交换&#xff0c;是乐观锁的主要实现方式。CAS在不使用锁的情况下实现多线程之间的变量同步。ReentrantLock内部的AQS和原子类内部都使用了CAS。 CAS算法涉及到三个操作数&#xff1a;需…

ICDE 2024最新论文分享|BEEP:容量约束下能够对抗异常干扰的航运动态定价系统

论文简介 本推文详细介绍了上海交通大学高晓沨教授和陈贵海教授团队发表在顶级学术会议ICDE 2024上发表的最新论文《Corruption Robust Dynamic Pricing in Liner Shipping under Capacity Constraint》&#xff0c;该论文的学生作者为胡永祎、李雪嫣、魏熙锴&#xff0c;合作…

Mac电脑word文档误删,4个方法快速恢复

对于使用Mac的用户来说&#xff0c;丢失重要的Word文档可能会为学习或工作带来严重的影响。不过&#xff0c;幸运的是&#xff0c;关于mac word 文档恢复方法还是有很多的&#xff0c;通常帮助Mac用户轻松找回丢失的word文档。接下来&#xff0c;小编将介绍一些在Mac上恢复丢失…

dayu_widgets-加载组件:MLoading和MLoadingWrapper

一、使用场景 点击按钮加载数据&#xff0c;但是查询数据需要一定的耗时&#xff0c;这段时间需要显示加载中的UI来进行遮罩。 二、使用效果 三、使用案例 # 学习笔记 MLoading控件 import asyncio from PySide2.QtWidgets import QWidget, QApplication, QVBoxLayout, QPus…

2024双十一究竟买什么比较好?为您精选五款双十一必购好物清单!

2024年的双十一购物狂欢节即将到来&#xff0c;许多人已经开始思考在这个一年一度的购物盛宴中究竟应该选购哪些商品。为了帮助大家更好地把握这次购物机会&#xff0c;我们精心为您挑选了五款双十一期间必购的好物清单&#xff0c;确保您能够买到物超所值的宝贝&#xff01; …

作业4-23

文章目录 标题1标题2 标题1 该不该好吧 标题2 写的PHP <?phpnamespace App\Http\Controllers;use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Validation\ValidatesRequests; us…

文心一言 VS 讯飞星火 VS chatgpt (366)-- 算法导论24.3 8题

八、给定带权重的有向图 G ( V &#xff0c; E ) G(V&#xff0c;E) G(V&#xff0c;E) &#xff0c;其权重函数为 w : E → ( 0 &#xff0c; 1 &#xff0c; 2. … &#xff0c; W ) w:E→(0&#xff0c;1&#xff0c;2.…&#xff0c;W) w:E→(0&#xff0c;1&#xff0c…

RK3568 buildroot系统在安装popt出错的问题

RK3568 buildroot系统在安装popt出错的问题 简介 使用 buildroot 系统给 RK3568 制作系统的时候,编译系统到 popt 这个组件时,编译出错 故障现象 gzip: popt-1.16.tar.gz: not in gzip format 上面的报错就是说 gzip 认为这个压缩包不是可以识别的格式 问题复现 我们进…

996是性价比最低的工作方式,没有之一!

不知道从什么时候开始&#xff0c;“996”工作制&#xff08;即每周工作从早9点至晚9点&#xff0c;持续6天&#xff09;已经从网络热梗&#xff0c;变成了不少企业和职场人的“工作常态”。 尤其是现如今职场中越来越频繁的裁员降薪&#xff0c;为了保住一份工作&#xff0c;…

浅入深出之了解常见的用户登录校验

文章目录 一、Cookie-Session认证校验流程缺点 二、Token校验流程缺点 三、JWT校验流程 四、JWT令牌的实践使用JWT组成引入依赖生成令牌 前言 在讲解这个问题之前&#xff0c;我们要先搞清楚基本的用户登录流流程。 用户在web登录页面填写登录信息前端发送登录信息到后端后端接…

[红队apt]CHM电子书攻击/电子教程攻击

免责声明:本文用于了解攻击者的攻击手法&#xff0c;切勿用于不法用途 前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要整理当初电子书的时代&#xff0c;利用电子书攻击的操作 CHM电子书简介 这个在当初普遍用于做教程课件&#xff0c;软件说明等应用。…

音频响度归一化 - python 实现

在处理音频样本时&#xff0c;往往我们的音频样本由于录制设备&#xff0c;环境&#xff0c;人发音的音量大小的不同影响&#xff0c;会造成音频响度不统一&#xff0c;分布在一个不同的响度值域上。为了让语音模型更好的学习音频特征&#xff0c;就有必要对音频的响度进行归一…

android中byte[] buf没有结束符,new String(buf)会不会出错?

答案是&#xff1a;不会 看例子&#xff1a; 这和c是不一样的&#xff0c;不需要特别的在字符串后面添加一个\0结束.

誉天教育十月新班启航:开启技能升级之旅,抢占未来先机!

安全HCIP 晚班 2024/10/8 存储HCIE 晚班 2024/10/10 Linux云计算架构师 晚班周末班 2024/10/14 云服务HCIP 周末班 2024/10/26 云计算HCIP 周末班 2024/10/26 RHCE 周末班 2024/11/2 数通HCIE直通车 晚班 2024/11/4 AI大模型HCIE 晚班 2024/11/11 数通HCIE直通车…

C# String 类型:那些你可能不知道的秘密

前言 嗨&#xff0c;大家好&#xff01; 今天咱们来聊一聊一个看似简单却充满玄机的话题 —— String 类型。 字符串应该是所有编程语言中使用最频繁的一种基础数据类型。 在 C# 中&#xff0c;String 可谓是特别的存在&#xff1a;它是引用类型&#xff0c;存储在托管堆中…

插件生成XML

目录 1.数据库配置 2.在pom.xml中添加插件 3.generator文件配置 1.数据库配置 # 数据库配置 spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncodingutf8&useSSLfalseusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc…