python小工具开发专题:gpu监控工具

需求来源

在压测显卡时能看到gpu的波动情况,并输出波动的范围、gpu卡的index、显存占用、显存总量。
直接在linux 无gui的命令行展示上述信息

实现思路

使用nvitop的gpu信息接口获取信息
借助python的三方库asciichart画图

代码

import asciichartpy as acp
import argparse
import time
from nvitop import Device
import sysparser = argparse.ArgumentParser()
parser.add_argument('-i', type=int, default=0, help="指定显卡的index")
args = parser.parse_args()# 获取服务器上的Device信息,返回是一个list
devices = Device.all()
target_device = None
for device in devices:if device.index == args.i:target_device = devicebreakif target_device is None:print(f"找不到指定 ID 为 {args.i} 的设备")exit()
# 打印显卡的名称
print(f'  - device name :    {target_device.name()}')
# 打印显卡的序号
print(f'  - device index:    {args.i}')
# 打印显卡温度
print(f'  - Temperature :    {target_device.temperature()} \u2103')
# 打印显卡的显存大小
print(f'  - Total memory:    {target_device.memory_total_human()}')
# 打印显卡的显存占用大小
print(f'  - Used memory :    {target_device.memory_used_human()}')
print('-' * 120)series = []# 通过device.gpu_utilization 获取gpu利用率
try:while True:utilization = target_device.gpu_utilization()series.append(utilization)time.sleep(1)  # 每秒获取一次利用率
except KeyboardInterrupt:# plot gpu infoprint(acp.plot(series, {'height': 10, 'min': 0, 'max': 100, 'color': '\033[32m'}))# remove 0 from seriesseries = [x for x in series if x != 0]# series = list(filter(lambda x: x != 0, series))if len(series) > 0:print("\n gpu useage range: {}%-{}%".format(min(series), max(series)))else:print("\n 检测到这张gpu上没有任务运行 \n gpu useage range: 0%-0%\n")sys.exit(0)

效果

开始测试gpu时,执行python plot_gpuinfo.py 运行脚本,测试结束时通过键盘ctrl+c退出监控

在这里插入图片描述

调研过的画图工具

asciichart:基于node js,也可以pip直接安装,无其他依赖
termplotlib:需要依赖gnuplot
bashplotlib:没有纵坐标的展示,只能画出散点图
plotille:体验不佳,每次刷新都重新绘图,图不直观,配置有点复杂
plotext:可以画图,纵坐标需要调整,图片样式有点突兀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/314842.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十大排序总结之——冒泡排序、插入排序

同样,这两几乎也是被淘汰了的算法,尽管它们是稳定的,但是时间复杂度没人喜欢,了解一下就好,没啥好说的,注意最后一句话就行了 一,冒泡排序 1. 算法步骤 共n-1趟,谁两敢冒泡就换了…

SMD NTC Thermistor NTC热敏电阻(贴片式)

热敏电阻器(Thermistor)是一种电阻值对温度极为灵敏的半导体元件,又可分为负温度系数(NTC)热敏电阻和正温度系数(PTC) NTC热敏电阻用于温度测量,温度控制,温度补偿等&…

机器学习笔记(四)初识卷积神经网络

前言 第一次写卷积神经网络,也是照着paddlepaddle的官方文档抄,这里简单讲解一下心得。 首先我们要知道之前写的那些东西都是什么,之前写的我们称之为简单神经网络,也就是简单一层连接输出和输出,通过前向计算和逆向…

【C++杂货铺】C++11新特性——可变参数模板

文章目录 一、可变模板参数相关概念的引入二、获取参数包中参数的个数三、递归函数方式展开参数包四、逗号表达式展开参数包五、可变模板参数的实际应用——emplace相关接口5.1 回顾一下 push_back 的三种用法5.2 emplace_back 使用方法介绍5.3 听说 emplace_back 可以提高效率…

Eureka注册及使用

一、Eureka的作用 Eureka是一个服务注册与发现的工具,主要用于微服务架构中的服务发现和负载均衡。其主要作用包括: 服务提供者将自己注册到Eureka Server上,包括服务的地址和端口等信息。服务消费者从Eureka Server上获取服务提供者的地址…

高性价比LDR6028Type-C转3.5mm音频和PD快充转接器

随着市面上的大部分手机逐渐取消了3.5mm音频耳机接口,仅保留一个Type-C接口,追求音质和零延迟的用户面临着一大痛点。对于这些用户,Type-C转3.5mm接口线的出现无疑是一大福音。这款线材在刚推出时就受到了手机配件市场的热烈欢迎,…

CocoaPods安装及‘__rvm_make -j8‘处理

CocoaPods是一个用Ruby写的、负责管理iOS项目中第三方开源库的工具,CocoaPods能让我们集中的、统一管理第三方开源库,为我们节省设置和更新第三方开源库的时间。 安装步骤 1.查看ruby版本 ruby -v 2.通过rvm来安装或升级Ruby,依次执行 cu…

git rebase(变基)应用场景

文章目录 git rebase(变基)应用场景1.git rebase -i HEAD~3 git rebase(变基)应用场景 使得提交记录变得简洁 现在我们模拟我们有多次提交记录,本地仓库有三条提交 整合成一条提交记录 1.git rebase -i HEAD~3 提交记录合并 HEAD~3合并三条记录 执行之后 然后把…

【C++学习】:命名空间、输入输出和缺省参数全面解析

🎥 屿小夏 : 个人主页 🔥个人专栏 : C入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. 命名空间1.1 为什么需要命名空间?1.2 命名空间的定义1.3 命名空间特性1…

HackTheBox - Medium - Linux - Encoding

Encoding 前言 经过10个月左右的网安自学,我想说的第一句话无疑是:感谢TryHackMe。当然,后续的HackTheBox&学院、CRTO等等,对我的帮助都很大。 许多师傅们都在年度总结,我也看了大家都收获很多,都很…

k8s基础架构

k8s基础架构 创建pod流程 (1)用户通过kubectl向api-server发起创建pod请求; (2)apiserver通过对应的kubeconfig进行认证,认证通过后将yaml中的po信息存到etcd; (3)Contr…

Android Studio xml布局代码补全功能失效问题

这里写目录标题 前言:问题描述原因分析:解决方案:1.更新 Android Studio 版本2.原版本解决XML补全失效 小结 前言: 在开发过程中,你可能遇到很多奇奇怪怪的问题。Android Studio 编译器出现问题也是常有的事情&#x…