当前位置: 首页 > article >正文

python监控显卡显存

文章目录

    • 内存监控
    • 进程监控
        • 获取进程pid
        • 管理进程pid的死活

内存监控

在工作组中,经常会遇到多人争抢显卡的情况,僧多肉少,所以可以做个监控显卡的头部程序,然后再调取主程序训练模型。
我们借用pynvml,没有安装的,可以使用下面命令直接安装:

pip install pynvml

下面使用pynvml可以查看显卡总共多少显存,剩余多少显存,以及已用多少显存。

import pynvml

pynvml.nvmlInit()
handle = pynvml.nvmlDeviceGetHandleByIndex(0) # 这里的0表示第一张显卡
meminfo = pynvml.nvmlDeviceGetMemoryInfo(handle)
print(meminfo.total/1024/1024/1024) # 输出第一张显卡的显存
print(meminfo.free/1024/1024/1024) # 输出第一张显卡的可用显存
print(meminfo.used/1024/1024/1024) # 输出第一张显卡的已用显存

我们如果想对显卡进行监控,可以使用下面的命令:

import pynvml

# 定义一个读取gpu显卡的函数,gpu为第几张显卡,free表示需要多少剩余显存
def test_gpu(gpu, free):
    pynvml.nvmlInit()
    handle = pynvml.nvmlDeviceGetHandleByIndex(gpu)
    meminfo = pynvml.nvmlDeviceGetMemoryInfo(handle)

    return meminfo.free/1024/1024/1024 < free

然后用while循环对显卡进行监控:

while test_gpu(1, 40):
	print("GPU memory < %dGB, wait 1 minut"%40)
    time.sleep(60)

当显卡的剩余显存大于40GB的时候,才可以执行下面的程序,否则将等待1分钟(可以根据自己情况设置)。
如果想要执行python程序文件,可以使用os库运行:

import os
os.system('python run.py')

进程监控

获取进程pid

既然要进程监控,就需要获得当前显卡上运行程序的进程pid,一张显卡上的进程个数可能是0,也可能是1,还有可能是N。没人用卡进程就是0,一个人用时1(tensorflow一般会将显存占完,不让其它新用户使用,pytorch则不是,用多少,占用多少),多人在用显卡则有N个进程。

import pynvml

pynvml.nvmlInit()
handle = pynvml.nvmlDeviceGetHandleByIndex(0) # 这里的0表示第一张显卡
gpu_ps = pynvml.nvmlDeviceGetComputeRunningProcesses(handle) # 获取该显卡上运行的程序,他是一个list

# 输出该显卡一共多少进程
print(len(gpu_ps))
# 输出第一个进程的pid
print(gpu_ps[0].pid)
# 将所有进程的pid
for gpu_p in gpu_ps:
	print(gpu_p.pid)

管理进程pid的死活

杀死进程可以借助psutil,当然,需要保证的时该pid是你自己的进程,不然无法管理。

import os, psutil

os.system("kill gpu_ps[0].pid")
print(psutil.pid_exists(gpu_ps[0].pid)) # 还在活着,输出True,死掉了输出False

http://www.kler.cn/news/156810.html

相关文章:

  • 基于yolov8-道路裂缝检测
  • zsh配置自定义快捷命令
  • 深度学习记录--初识向量化
  • 【C++ regex】C++正则表达式
  • STM32单片机项目实例:基于TouchGFX的智能手表设计(1)项目介绍及GUI界面基础
  • 应用于智慧工厂的AI边缘计算盒子+AI算法软硬一体化方案
  • Oracle(2-8)Configuring the Database Archiving Mode
  • Typora免费版安装教程(仅供学习)
  • 【vue】尚硅谷vue3学习笔记
  • Vue2学习笔记(事件处理)
  • 谈谈 .NET8 平台中对 LiteDB 的 CRUD 操作
  • 羊大师教你如何有效应对冬季流感,保护自己与家人
  • CRM实战:如何对商机阶段进行有效管理
  • 智能联动第三方告警中心,完美实现故障响应全闭环
  • 如何使用cpolar+Plex在Windows系统上搭建私人媒体影音站点公网可访问
  • 1+x网络系统建设与运维(中级)-练习3
  • 【蓝桥杯】翻硬币
  • 地方公派|商学院老师对口加拿大古德曼商学院访学交流
  • 微信小程序引入node_modules依赖
  • Android启动系列之进程杀手--lmkd
  • 数字法院大脑管理|助力实现司法数字化
  • jupyter notebook 添加环境与删除环境
  • 【数据结构】手撕排序NO.1
  • Android 获取屏幕方向,根据屏幕旋转角度判断屏幕实际方向
  • iOS代码混淆工具
  • css 修改滚动条样式,解决Windows浏览器中滚动条不美观问题
  • 分治—快速选择算法
  • Linux DataEase数据可视化分析工具本地部署与远程访问
  • 物流实时数仓ODS层——Mysql到Kafka
  • SpringBoot第56讲:SpringBoot集成文件 - 集成EasyExcel之Excel导入导出