【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代码后会提示输入监控间隔时间,即每隔几秒监控一次(这里我设置的是整秒,也根据需求改成非整秒),这里我选择每隔一秒监控一次。

03e0ee4b672d4e45801c8ba1055d48d6.png

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

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

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

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

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

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

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
1月前
|
JSON 算法 API
深度分析小红书城API接口,用Python脚本实现
小红书作为以UGC内容为核心的生活方式平台,其非官方API主要通过移动端抓包解析获得,涵盖内容推荐、搜索、笔记详情、用户信息和互动操作等功能。本文分析了其接口体系、认证机制及请求规范,并提供基于Python的调用框架,涉及签名生成、登录态管理与数据解析。需注意非官方接口存在稳定性与合规风险,使用时应遵守平台协议及法律法规。
|
1月前
|
JSON API 数据安全/隐私保护
【干货满满】分享微店API接口到手价,用python脚本实现
微店作为知名社交电商平台,其开放平台提供商品查询、订单管理等API接口。本文介绍如何通过微店API获取商品到手价(含优惠、券等),涵盖认证机制、Python实现及关键说明。
|
1月前
|
JSON API 数据格式
深度分析大麦网API接口,用Python脚本实现
大麦网为国内领先演出票务平台,提供演唱会、话剧、体育赛事等票务服务。本文基于抓包分析其非官方接口,并提供Python调用方案,涵盖演出列表查询、详情获取及城市列表获取。需注意非官方接口存在稳定性风险,使用时应遵守平台规则,控制请求频率,防范封禁与法律风险。适用于个人学习、演出信息监控等场景。
|
1月前
|
JSON API 开发者
深度分析阿里妈妈API接口,用Python脚本实现
阿里妈妈是阿里巴巴旗下营销平台,提供淘宝联盟、直通车等服务,支持推广位管理、商品查询等API功能。本文详解其API调用方法,重点实现商品推广信息(佣金、优惠券)获取,并提供Python实现方案。
|
1月前
|
API 数据安全/隐私保护 开发者
深度分析苏宁API接口,用Python脚本实现
深度分析苏宁API接口,用Python脚本实现
|
1月前
|
JSON API 数据安全/隐私保护
深度分析虾皮城API接口,用Python脚本实现
虾皮开放平台提供丰富的API接口,支持商品管理、订单处理及促销信息查询等功能。本文详解API认证机制与调用方法,基于Python实现商品价格及到手价获取方案,适用于电商数据分析与运营。
|
1月前
|
前端开发 Shell API
深度分析58同城API接口,用Python脚本实现
58同城为国内知名分类信息平台,涵盖房产、招聘、二手车等多领域。本文基于网页抓包与解析,分享其非官方接口的Python实现方案,分析核心接口特性与反爬应对策略,适用于数据学习与信息聚合。注意:非官方接口存在风险,使用需遵守平台规则。
|
2月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
755 0
|
2月前
|
存储 缓存 NoSQL
内存管理基础:数据结构的存储方式
数据结构在内存中的存储方式主要包括连续存储、链式存储、索引存储和散列存储。连续存储如数组,数据元素按顺序连续存放,访问速度快但扩展性差;链式存储如链表,通过指针连接分散的节点,便于插入删除但访问效率低;索引存储通过索引表提高查找效率,常用于数据库系统;散列存储如哈希表,通过哈希函数实现快速存取,但需处理冲突。不同场景下应根据访问模式、数据规模和操作频率选择合适的存储结构,甚至结合多种方式以达到最优性能。掌握这些存储机制是构建高效程序和理解高级数据结构的基础。
214 0

推荐镜像

更多