最近搞LSTM优化,但是显存利用率不稳定,想看一下LSTM的显存占用情况,搜罗了一通,发现一个不错的开源工具,记录分享一下。

首先上项目地址:https://github.com/Oldpan/Pytorch-Memory-Utils

这里也有作者写的博客:https://oldpan.me/archives/pytorch-gpu-memory-usage-track

代码库就两个python文件modelsize_estimate.py 和 gpu_mem_track.py,需要先将这两个文件复制到自己的代码工程目录下

作者也给出了使用示例,如下:

import torchfrom torchvision import models
from gpu_mem_track import MemTrackerdevice = torch.device('cuda:0')gpu_tracker = MemTracker()         # define a GPU trackergpu_tracker.track()                     # run function between the code line where uses GPU
cnn = models.vgg19(pretrained=True).features.to(device).eval()
gpu_tracker.track()                     # run function between the code line where uses GPUdummy_tensor_1 = torch.randn(30, 3, 512, 512).float().to(device)  # 30*3*512*512*4/1024/1024 = 90.00M
dummy_tensor_2 = torch.randn(40, 3, 512, 512).float().to(device)  # 40*3*512*512*4/1024/1024 = 120.00M
dummy_tensor_3 = torch.randn(60, 3, 512, 512).float().to(device)  # 60*3*512*512*4/1024/1024 = 180.00Mgpu_tracker.track()dummy_tensor_4 = torch.randn(120, 3, 512, 512).float().to(device)  # 120*3*512*512*4/1024/1024 = 360.00M
dummy_tensor_5 = torch.randn(80, 3, 512, 512).float().to(device)  # 80*3*512*512*4/1024/1024 = 240.00Mgpu_tracker.track()dummy_tensor_4 = dummy_tensor_4.cpu()
dummy_tensor_2 = dummy_tensor_2.cpu()
gpu_tracker.clear_cache() # or torch.cuda.empty_cache()gpu_tracker.track()

使用也很简单,在你需要查看显存利用代码的上下添加gpu_tracker.track()即可

gpu_tracker.track()
cnn = models.vgg19(pretrained=True).to(device)  # 导入VGG19模型并且将数据转到显存中
gpu_tracker.track()

然后可以发现程序运行过程中的显存变化(第一行是载入前的显存,最后一行是载入后的显存)

At __main__ <module>: line 13                        Total Used Memory:472.2  Mb+ | 1 * Size:(128, 64, 3, 3)      | Memory: 0.2949 M | <class 'torch.nn.parameter.Parameter'>
+ | 1 * Size:(256, 128, 3, 3)     | Memory: 1.1796 M | <class 'torch.nn.parameter.Parameter'>
+ | 1 * Size:(64, 64, 3, 3)       | Memory: 0.1474 M | <class 'torch.nn.parameter.Parameter'>
+ | 2 * Size:(4096,)              | Memory: 0.0327 M | <class 'torch.nn.parameter.Parameter'>
+ | 1 * Size:(512, 256, 3, 3)     | Memory: 4.7185 M | <class 'torch.nn.parameter.Parameter'>
+ | 2 * Size:(128,)               | Memory: 0.0010 M | <class 'torch.nn.parameter.Parameter'>
+ | 1 * Size:(1000, 4096)         | Memory: 16.384 M | <class 'torch.nn.parameter.Parameter'>
+ | 6 * Size:(512,)               | Memory: 0.0122 M | <class 'torch.nn.parameter.Parameter'>
+ | 1 * Size:(64, 3, 3, 3)        | Memory: 0.0069 M | <class 'torch.nn.parameter.Parameter'>
+ | 1 * Size:(4096, 25088)        | Memory: 411.04 M | <class 'torch.nn.parameter.Parameter'>
+ | 1 * Size:(4096, 4096)         | Memory: 67.108 M | <class 'torch.nn.parameter.Parameter'>
+ | 5 * Size:(512, 512, 3, 3)     | Memory: 47.185 M | <class 'torch.nn.parameter.Parameter'>
+ | 2 * Size:(64,)                | Memory: 0.0005 M | <class 'torch.nn.parameter.Parameter'>
+ | 3 * Size:(256,)               | Memory: 0.0030 M | <class 'torch.nn.parameter.Parameter'>
+ | 1 * Size:(128, 128, 3, 3)     | Memory: 0.5898 M | <class 'torch.nn.parameter.Parameter'>
+ | 2 * Size:(256, 256, 3, 3)     | Memory: 4.7185 M | <class 'torch.nn.parameter.Parameter'>
+ | 1 * Size:(1000,)              | Memory: 0.004 M | <class 'torch.nn.parameter.Parameter'>At __main__ <module>: line 15                        Total Used Memory:1387.5 Mb

1387.5 – 472.2 = 915.3 MB,即显存占用情况,熟悉vgg19 的同学应该看出来,vgg19所有层的权重加起来大概是548M,这里却用了915.3M,将上面打印的报告打印的Tensor-Memory也都加起来算下来也差不多551.8Mb,和原始模型大小比较一致,但是两次打印的差值为什么要大这么多呢?

作者分析了原因:Pytorch在开始运行程序时需要额外的显存开销,这种额外的显存开销与我们实际使用的模型权重显存大小无关

大概可以理解。

下面是我的实验,模型是双层LSTM:

打印信息如下:


At train-mul.py line 172: main                        Total Tensor Used Memory:0.0    Mb Total Allocated Memory:0.0    Mb+ | 2 * Size:(180, 60)            | Memory: 0.0823 M | <class 'torch.nn.parameter.Parameter'> | torch.float32
+ | 1 * Size:(352504, 300)        | Memory: 403.40 M | <class 'torch.nn.parameter.Parameter'> | torch.float32
+ | 4 * Size:(240,)               | Memory: 0.0036 M | <class 'torch.nn.parameter.Parameter'> | torch.float32
+ | 4 * Size:(180,)               | Memory: 0.0027 M | <class 'torch.nn.parameter.Parameter'> | torch.float32
+ | 1 * Size:(11, 120)            | Memory: 0.0050 M | <class 'torch.nn.parameter.Parameter'> | torch.float32
+ | 2 * Size:(180, 160)           | Memory: 0.2197 M | <class 'torch.nn.parameter.Parameter'> | torch.float32
+ | 2 * Size:(1, 256)             | Memory: 0.0019 M | <class 'torch.nn.parameter.Parameter'> | torch.float32
+ | 2 * Size:(240, 80)            | Memory: 0.1464 M | <class 'torch.nn.parameter.Parameter'> | torch.float32
+ | 2 * Size:(256,)               | Memory: 0.0019 M | <class 'torch.nn.parameter.Parameter'> | torch.float32
+ | 1 * Size:(256, 160)           | Memory: 0.1562 M | <class 'torch.nn.parameter.Parameter'> | torch.float32
+ | 1 * Size:(11,)                | Memory: 4.1961 M | <class 'torch.nn.parameter.Parameter'> | torch.float32
+ | 2 * Size:(240, 300)           | Memory: 0.5493 M | <class 'torch.nn.parameter.Parameter'> | torch.float32
+ | 1 * Size:(256, 120)           | Memory: 0.1171 M | <class 'torch.nn.parameter.Parameter'> | torch.float32At train-mul.py line 177: main                        Total Tensor Used Memory:404.7  Mb Total Allocated Memory:405.3  Mb

所有tensor相加大概是408.88M,如下:

两次打印差值是405.3M-0M=405.3M

很奇怪,两次差值比tensor memory相加要低,按说要大一些才是,原因不明

pytorch如何查看显存利用情况相关推荐

  1. python查看显存占用情况以及使用numba.cuda释放显存

    一.python查看显存占用情况 # pip install pynvml def nvidia_info():nvidia_dict = {"state": True," ...

  2. ubuntu中显示本机的gpu_Ubuntu下实时查看Nvidia显卡显存占用情况和GPU温度

    一.查看Nvidia显卡显存占用情况 查看Nvidia显卡显存占用情况 nvidia-smi 效果如下: 显示的表格中: Fan: 风扇转速(0%–100%),N/A表示没有风扇 Temp: GPU温 ...

  3. Ubuntu下实时查看Nvidia显卡显存占用情况和GPU温度

    一.查看Nvidia显卡显存占用情况 查看Nvidia显卡显存占用情况 nvidia-smi 效果如下: 显示的表格中: Fan: 风扇转速(0%–100%),N/A表示没有风扇 Temp: GPU温 ...

  4. Python 查看显存大小

    背景:因为一些需求,需要在python程序中查看显存的占用情况. 1.安装NVML库 pip install nvidia-ml-py 2.使用 import pynvml pynvml.nvmlIn ...

  5. 什么软件测试显卡占用率,到底多少才算够 GTA5显存占用情况测试

    1GTA5显存情况占有测试 自由.不羁.快意恩仇.做想做却又不敢做的事,甚至是尽情舒展自己阴暗的一面,这就是GTA V当中所描绘的世界.也许其中的洛圣都并不真实存在,但R星所缔造的这片世界却又是那么的 ...

  6. pytorch 优化GPU显存占用,避免out of memory

    pytorch 优化GPU显存占用,避免out of memory 分享一个最实用的招: 用完把tensor删掉,pytorch不会自动清理显存! 代码举例,最后多删除一个,gpu显存占用就会下降,训 ...

  7. nvidia-smi每0.1s实时显示显存使用情况,且数字变化处有白底

    nvidia-smi每0.1s实时显示显存使用情况,且数字变化处有白底 watch -n 0.1 -d nvidia-smi     #每隔0.1秒刷新一次 当然别的命令也可以用watch

  8. amd显卡Linux查看显存,通过软件查看显存参数_显卡_显卡技术应用-中关村在线

    通过软件查看显存参数 说了这么多深奥的东西,相信各位读者也看腻了,所以接下来来点干货,我来教教DIY初学者如何查看显卡的显存参数.需要的软件就一个,那就是显卡最强检测软件--GPU-Z,这款软件可谓是 ...

  9. 计算机怎么看显卡内存容量,Win10系统显卡显存大小怎样查看?Win10查看显存大小的两种方法...

    对于十分关心电脑配置的用户而言,查看电脑显卡显存大小是一件非常必要的事情.那么,Win10系统电脑该怎样查看显卡显存大小呢?虽然现在有很多软件都可以直接查看,但是不使用软件查看才是真正的好方法.下面, ...

最新文章

  1. 个人网站第四次改版了
  2. 【转】深入浅出REST
  3. 10、mybatis参数处理
  4. RepositionBars的用法和参数分析
  5. 在jenkins上配置 sonar 两种方式的区别
  6. scrollHeight、clientHeight、offsetHeight、scrollTop等的定义以及图解
  7. 一个IT人的非典型职场十年 (5)
  8. 汽车电子嵌入式技术篇(一) -CRC-8和CRC-16算法
  9. Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38%
  10. PHP获取当前页面的完整URL
  11. MYSQL中日期与字符串间的相互转换
  12. VC下的人人对弈五子棋(dos)
  13. Strong-Convexity:强凸性
  14. 公开招聘网上报名系统+系统功能介绍—网上报名登陆入口
  15. 计算机毕业设计JAVA人民医院体检预约mybatis+源码+调试部署+系统+数据库+lw
  16. 解决虚拟机上ubuntu上安装搜狗拼音输入法无法使用的问题,系统是18.04的
  17. 80老翁谈人生(187):老翁为北大排名而自豪
  18. 【数据库】SQL Server的使用教程
  19. python爬虫简易到进阶实战篇——(1)
  20. 实战Kubernetes动态卷存储(NFS)

热门文章

  1. 小程序 点击item 自动居中 scroll-view scrollLeft
  2. spring security principal credentials authorities details authenticated
  3. 精简版WIN10 LTSB LTSC安装Microsoft Store
  4. 如何将ROS1和ROS2安装到同一个ubuntu系统中
  5. msf搜索漏洞模块及MSF模块查找
  6. 心一则技有余——【美】加尔·雷纳德 《演说之禅》 读书笔记
  7. 企业移动学习行业调研报告 - 市场现状分析与发展前景预测
  8. 天真,居然还有人认为java的参数传递方式是引用传递
  9. 十行Python代码写一个聊天机器人
  10. flutter 初体验 页面的跳转