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

需求来源

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

实现思路

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

代码

import asciichartpy as acp
import argparse
import time
from nvitop import Device
import sys

parser = 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 = device
        break

if 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 info
    print(acp.plot(series, {
   'height': 10, 'min': 0, 'max': 100, 'color': '\033[32m'}))
    # remove 0 from series
    series = [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:可以画图,纵坐标需要调整,图片样式有点突兀

相关推荐

  1. 【测试工具开发

    2024-01-02 11:54:02       38 阅读
  2. python之ftp工具

    2024-01-02 11:54:02       25 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-02 11:54:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-02 11:54:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-02 11:54:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-02 11:54:02       20 阅读

热门阅读

  1. 微信小程序canvas手写签字

    2024-01-02 11:54:02       32 阅读
  2. C:宏:编程风格:井号与define之间的空格

    2024-01-02 11:54:02       41 阅读
  3. 将jupyter转换为python文件

    2024-01-02 11:54:02       34 阅读
  4. LeetCode 20. 有效的括号

    2024-01-02 11:54:02       37 阅读
  5. Android 10.0 截屏流程

    2024-01-02 11:54:02       32 阅读
  6. Atlas Hook 导入 Hive 元数据

    2024-01-02 11:54:02       33 阅读
  7. KVM虚拟机部署K8S重启后/etc/hosts内容丢失

    2024-01-02 11:54:02       39 阅读
  8. 深入理解@Resource与@Autowired:用法与区别解析

    2024-01-02 11:54:02       37 阅读
  9. JDK下载地址

    2024-01-02 11:54:02       48 阅读
  10. GRU算法

    GRU算法

    2024-01-02 11:54:02      34 阅读