目录

一、pynvml库的简单使用

二、显存清理


在跑神经网络训练或者推理的时候,有的时候很有必要实时监测一下显存的状态。NVIDIA显卡在终端管理界面,使用命令:watch -n 3 nvidia-smi可以指定每隔几秒中来显示一下显卡信息。当然NVIDIA也是开发了python库,很方便的实时查看GPU信息。

一、pynvml库的简单使用

这个pynvml库是NVIDIA为自己家显卡开发的一个获取显卡当前信息的python包。我们一般比较关注的就是显卡实时的显存量信息、温度信息和电源信息,这个库都有相应的接口来实现实时查看的功能,非常方便。直接上代码:

pynvml.nvmlInit()#初始化
pynvml.nvmlDeviceGetCount()#设备数量
pynvml.nvmlDeviceGetHandleByIndex(i)#显卡句柄
pynvml.nvmlDeviceGetName(handle)#显卡名称
memo_info = pynvml.nvmlDeviceGetMemoryInfo(handle)#显存信息
memo_info.total#总显存
memo_info.free#空余显存
memo_info.used#已经使用的显存
pynvml.nvmlDeviceGetTemperature(handle, 0)#温度
pynvml.nvmlDeviceGetFanSpeed(handle)#风扇速度
pynvml.nvmlDeviceGetPowerState(handle)#电源状态
import torch
import pynvmlpynvml.nvmlInit()#初始化
#设备情况
deviceCount = pynvml.nvmlDeviceGetCount()
print('显卡数量:',deviceCount)
for i in range(deviceCount):handle = pynvml.nvmlDeviceGetHandleByIndex(i)gpu_name = pynvml.nvmlDeviceGetName(handle)print('GPU %d is :%s'%(i,gpu_name))#显存信息memo_info = pynvml.nvmlDeviceGetMemoryInfo(handle)print("GPU %d Memory Total: %.4f G"%(i,memo_info.total/1024/1024/1000) )print("GPU %d Memory Free: %.4f G"%(i,memo_info.free/1024/1024/1000))print("GPU %d Memory Used: %.4f G"%(i,memo_info.used/1024/1024/1000))#温度Temperature = pynvml.nvmlDeviceGetTemperature(handle, 0)print("Temperature is %.1f C" %(Temperature))#风扇转速speed = pynvml.nvmlDeviceGetFanSpeed(handle)print("Fan speed is ",speed)#电源状态power_ststus = pynvml.nvmlDeviceGetPowerState(handle)print("Power ststus", power_ststus)
#关闭
pynvml.nvmlShutdown()

结果如下:

二、显存清理

......
other codes
......
del(model)
torch.cuda.empty_cache()

有的时候需要程序运行过程中把显存清理掉,就可以采用上面的代码,完整代码如下:

import torch
import pynvml
from transformers import BertModeldef get_gpu_memory(handle):meminfo = pynvml.nvmlDeviceGetMemoryInfo(handle)free = meminfo.free/1024/1024/1000return freeif __name__ == "__main__":pynvml.nvmlInit()handle = pynvml.nvmlDeviceGetHandleByIndex(0)print('初始显存:%.4f G'%get_gpu_memory(handle))model = BertModel.from_pretrained('./output/training_patent_sbert-Chinese-BERT-wwm2019-10-09_10-42-20_with_20K_Trains/0_BERT/')device = torch.device('cuda:0')model.to(device)print('加载Bert模型后,剩余显存:%.4f G' % get_gpu_memory(handle))dummy_tensor_4 = torch.randn(370, 60, 510, 510).float().to(device)print('加载数据转到GPU上后,剩余显存:%.4f G'%get_gpu_memory(handle))# 然后释放dummy_tensor_4 = dummy_tensor_4.cpu()print('把GPU上的数据转移到CPU上,剩余显存:%.4f G'%get_gpu_memory(handle))torch.cuda.empty_cache()print('torch.cuda.empty_cache清理显存后,显存是:%.4f G' % get_gpu_memory(handle))del(model)print('del(model)清理显存后,显存是:%.4f G'%get_gpu_memory(handle))pynvml.nvmlShutdown()  # 最后关闭管理工具

结果如下:

观察显存变化,模型和数据放到GPU上会占用显存,data.cpu()并不会主动释放显存,需要使用torch.cuda.empty_cache()才能释放显存。然后这里是不能够把模型占用的显存释放出来,采用torch.cuda.empty_cache()和del(model)都没有生效。

今日的学习就到这里了。

实时监测GPU的显存和显存清理小功能学习相关推荐

  1. 常用的深度学习的linux代码(1.实时监测GPU情况2.当前正常使用的GPU情况3.杀掉特定某个进程4.杀掉特定某个进程)

    1.实时监测GPU情况 watch -n 1 nvidia-smi 2.当前正常使用的GPU情况 nvidia-smi 3.查看进程 ps -ef 杀掉特定某个进程 kill -9 PID 4.lin ...

  2. ubuntu实时监测显卡进程的方法

    个人微信公众号:AI研习图书馆,欢迎关注~ 深度学习知识及资源分享,学习交流,共同进步~ 1.引言 在使用GPU做计算时,比如深度学习网络训练的时候,我们可能希望能够实时检测显存的使用情况. 2.查看 ...

  3. 实时显示GPU的两种方法(灵机一动)

    实时显示GPU的两种方法(灵机一动) 文章目录 实时显示GPU的两种方法(灵机一动) 命令行CMD 实时显示GPU Jupyter Notebook 实时显示GPU 最近在跑程序的时候,我在想能不能实 ...

  4. 集显、独显、核显、SOC、POP、微型计算机树莓派的资料

    1.集显.独显.核显的概念与区别: 处理器集成显卡就是指集成在cpu内部的显卡,通常称为核心显卡(也叫APU),如Intel酷睿i3 i5 i7系列处理器以及AMD APU系列处理器中多数都集成了显卡 ...

  5. 台式计算机怎么看有没有开独显,怎么看是集显还是独显?台式电脑应该怎么选择...

    怎么看是集显还是独显?台式电脑应该怎么选择 在装机的时候我们经常会听到集显和独显,很多小白也并不知道集显和独显的区别,甚至都不知道怎么看自己的电脑是独显还是集显,下面电脑配置网就来为大家科普一下关于集 ...

  6. i5集显和独显的区别_集显核显独显有哪些区别 集显核显独显区别介绍【详解】...

    显卡是除处理器之外最受大家关心的硬件装备了,要是显卡配置不到位,其他再好都是浮云,而对于游戏玩家来说,显卡性能差的话更是影响游戏的运行,可折腾人了.今天小编为大家分享"集显".&q ...

  7. i5集显和独显的区别_【集显】集显和独显有什么区别,集显和核显区别_什么值得买...

    1,独显和集显的主要区别就是,独立显卡的性能是很强大的,有着很多集成显卡没有的东西 最基础的就是散热器,集成显卡在处理大型3D游戏的时候耗功很大,热量也大,而独立显卡有散热器,就能很好的发挥它的性能, ...

  8. 显著性检验 python_独显和集显的区别

    展开全部 1,独显和集显的主要区别32313133353236313431303231363533e78988e69d8331333366303062就是,独立显卡的性能是很强大的,有着很多集成显卡没 ...

  9. 买电脑时,独显和集显到底有什么区别呢?

    很多人在买电脑的时候就会纠结什么样的电脑适合我呢?独显的贵一点,集显会便宜一点,那我有必要买一个独显的呢? 下面和大家分享一下关于独显和集显的区别是什么?如有错误或不足还请指正! 1,独显和集显的主要 ...

最新文章

  1. 高并发下如何保证接口的幂等性?
  2. 检查当前ORACLE连接数
  3. HTML5新特性总结
  4. JavaSE_NIO_ByteBuffer
  5. 再窥--单链表和顺序存储
  6. 11.16-18 lsci、ipcs、ipcrm:清除ipc相关信息
  7. jqueryd登录异步请求 java,ajaxd的js和jquery实现
  8. 解决ng界面长表达式(ui-set)
  9. C++多线程编程 (1)
  10. levedb 导入 mysql_leveldb研究3-数据库日志文件格式
  11. 2021-0316:梦中明白在作梦
  12. Git的commit your changes or stash them before you can merge
  13. java wsdl文件生成_Spring Web Services 生成 WSDL 文件
  14. 2021公路水运工程试验检测考试大纲
  15. 2021-01-13事件对象
  16. SPECT/PECT成像原理
  17. 俄勒冈之旅_俄勒冈州立大学开源实验室主持160个项目
  18. java的格式控制符_C语言的格式控制符
  19. Centos7 安装Chrome浏览器
  20. 区块链的核心价值就在去中心化

热门文章

  1. 2021.12.28activiti
  2. 计蒜客 Python练习
  3. 电信L2-python考题1-完美字符串
  4. Java 笔试:常见题目总结,html5在移动端开发优势更明显
  5. 小吴学汇编之第二章--寄存器(2)
  6. [生存志] 第46节 秦穆公任贤霸西戎
  7. 清华大学计算机系九推,人工智能琴棋诗画样样精通,就问你怕不怕 | 清华大学计算机系智能体晚会...
  8. 功能强大漂亮的js图片相册,js点击小图显示大图
  9. 酒店三合一终端服务器,【MOXA NPort6650-32 三十二口三合一终端服务器价格_MOXA NPort6650-32 三十二口三合一终端服务器厂家】- 网络114...
  10. c 连接mysql批量存储数据库_C语言连接操作MySQL数据库的方法