【Python】GPU内存监控脚本

简介: 【Python】GPU内存监控脚本

相信很多小伙伴在项目中,需要监控GPU的使用状态,打开任务管理器,你会发现可以显示GPU的运行状态,但是无法将这些数据保留下来,这里我制作了python脚本用于监控专用GPU的使用情况!我使用的显卡是NVIDIA GeForce GTX 1660 Ti。

(关注“测试开发自动化” 弓中皓,获取更多学习内容)

一、知识预备

任务管理器中的专用GPU内存和共享GPU内存的含义是什么呢?

(1)专用GPU内存

分为两种情况:独显(独立显卡)和 集显(集成显卡)

独显:是指单独的GPU PCIe卡,专有GPU内存就是指该GPU显卡上自带的内存,它只能够被GPU使用,而且带宽很高,延迟很小。

集显:BIOS把一部分内存在内存初始化后保留下来给GPU专用

(2)共享GPU内存

是操作系统Windows从系统内存中划出来,优先给GPU使用的内存

(3)GPU内存

GPU内存=专用GPU内存+共享GPU内存

二、python代码实现

#!/usr/bin/python
# -*- coding: utf-8 -*-
import time
import pynvml
from matplotlib import pyplot as plt
import matplotlib.backends.backend_tkagg
class GPUMonitor(object):
    def __init__(self, sleep_time):
        pynvml.nvmlInit()
        pynvml.nvmlSystemGetDriverVersion()
        self.GPUCounts = pynvml.nvmlDeviceGetCount()
        self.GPU_counts_list = [[]] * self.GPUCounts
        self.time = [[]] * self.GPUCounts
        self.sleep_time = sleep_time  # 秒
    def monitor(self):
        try:
            n = 0
            while True:
                GPUCount = 0
                # 读取GPU句柄
                handle = pynvml.nvmlDeviceGetHandleByIndex(GPUCount)
                # 读取GPU内存信息
                info = pynvml.nvmlDeviceGetMemoryInfo(handle)
                total = f'{(info.total / 1024 / 1024 / 1024):.2f}'
                used = f'{(info.used / 1024 / 1024 / 1024):.2f}'
                free = f'{(info.free / 1024 / 1024 / 1024):.2f}'
                print(self.logfile(">>>>>>正在监控第{}块GPU内存<<<<<<<\n"
                                   "脚本已运行{}秒\n专用GPU内存:{}G\n"
                                   "已使用专用CPU内存:{}G\n剩余专用GPU内存:{}G\n"
                                   .format(GPUCount, n, float(total), float(used), float(free))))
                self.GPU_counts_list[GPUCount].append(float(used))
                self.time[GPUCount].append(n)
                self.paint(self.time[0], self.GPU_counts_list[0])
                time.sleep(self.sleep_time)
                n += self.sleep_time
        except:
            plt.savefig("CPU内存使用量.png")
            pynvml.nvmlShutdown()
    def paint(self, x_list, y_list):
        plt.clf()
        plt.plot(x_list, y_list)
        plt.title("GPU Usage Monitoring")
        plt.ylabel("GPU dedicated memory /G")
        plt.xlabel("time/s")
        plt.pause(0.1)  # 暂停一秒
        plt.ioff()
    def logfile(self, text):
        with open('image.log', 'a+', encoding='utf-8') as f:
            t = time.strftime('%y-%m-%d %H:%M:%S')
            text = t + " " + text + '\n'
            f.write(text)
        f.close()
        return text
    def abnormal(self):
        length = len(self.GPU_counts_list[0])
        average = sum(self.GPU_counts_list)/length
        self.logfile("平均专用GPU占用为:{}G".format(average))
        plt.savefig("CPU内存使用量.png")
if __name__ == "__main__":
    while True:
        times = input("请输入监控间隔时间(整秒>0),按回车键开启监控:")
        if times.isdigit():
            if int(times) > 0:
                break
    a = GPUMonitor(int(times))
    try:
        a.monitor()
    except:
        plt.savefig("CPU内存使用量.png")

三、使用方法

(1)运行python代码后会提示输入监控间隔时间,即每隔几秒监控一次(这里我设置的是整秒,也根据需求改成非整秒),这里我选择每隔一秒监控一次。

(2)脚本启动后,会看到内存监控脚本已经开始运行,并在终端打印了监控信息;

(3)同时,能够显示实时的监控折线图信息;

(4)如果需要保存,点击(3)步中下方的的保存按钮即可。

(5)同时,也会生成存储监控信息的日志文件,供使用者查看。

如果对您有帮助,收藏+关注再走吧!!!

(关注“测试开发自动化” 弓中皓,获取更多学习内容)


相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
25天前
|
安全 网络安全 文件存储
思科设备巡检命令Python脚本大集合
【10月更文挑战第18天】
62 1
思科设备巡检命令Python脚本大集合
|
21天前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
120 68
|
5天前
|
存储 Python
Python自动化脚本编写指南
【10月更文挑战第38天】本文旨在为初学者提供一条清晰的路径,通过Python实现日常任务的自动化。我们将从基础语法讲起,逐步引导读者理解如何将代码块组合成有效脚本,并探讨常见错误及调试技巧。文章不仅涉及理论知识,还包括实际案例分析,帮助读者快速入门并提升编程能力。
23 2
|
7天前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
19 3
|
12天前
|
缓存 运维 NoSQL
python常见运维脚本_Python运维常用脚本
python常见运维脚本_Python运维常用脚本
17 3
|
12天前
|
数据采集 JSON 数据安全/隐私保护
Python常用脚本集锦
Python常用脚本集锦
15 2
|
13天前
|
运维 监控 应用服务中间件
自动化运维:如何利用Python脚本提升工作效率
【10月更文挑战第30天】在快节奏的IT行业中,自动化运维已成为提升工作效率和减少人为错误的关键技术。本文将介绍如何使用Python编写简单的自动化脚本,以实现日常运维任务的自动化。通过实际案例,我们将展示如何用Python脚本简化服务器管理、批量配置更新以及监控系统性能等任务。文章不仅提供代码示例,还将深入探讨自动化运维背后的理念,帮助读者理解并应用这一技术来优化他们的工作流程。
|
14天前
|
运维 监控 Linux
自动化运维:如何利用Python脚本优化日常任务##
【10月更文挑战第29天】在现代IT运维中,自动化已成为提升效率、减少人为错误的关键技术。本文将介绍如何通过Python脚本来简化和自动化日常的运维任务,从而让运维人员能够专注于更高层次的工作。从备份管理到系统监控,再到日志分析,我们将一步步展示如何编写实用的Python脚本来处理这些任务。 ##
|
1月前
|
Linux 区块链 Python
Python实用记录(十三):python脚本打包exe文件并运行
这篇文章介绍了如何使用PyInstaller将Python脚本打包成可执行文件(exe),并提供了详细的步骤和注意事项。
51 1
Python实用记录(十三):python脚本打包exe文件并运行
|
20天前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
自动化测试与脚本编写:Python实践指南
24 1