pytorch如何查看显存利用情况

news/2024/11/29 12:40:23/

最近搞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相加要低,按说要大一些才是,原因不明


http://www.ppmy.cn/news/409195.html

相关文章

查看显存使用情况:nvidia-smi

在装有nvidia驱动的机器终端输入nvidia-smi&#xff0c;可以查看显卡的状况&#xff0c;其输出界面如下&#xff1a; NVIDIA 系统管理接口 &#xff08;nvidia-smi&#xff09;是一个命令行实用程序&#xff0c;基于 NVIDIA 管理库 (NVML)&#xff0c;旨在帮助管理和监控 NVIDI…

查看和清除显存

深度学习训练过程中如果中断&#xff0c;很容易造成显存占用不释放的问题。做个记录&#xff0c;留着备用。 表现为报错&#xff1a; tensorflow.python.framework.errors_impl.InternalError: CUDA runtime implicit initialization on GPU:0 failed. Status: out of memory …

linux下显卡信息的查看

lspci | grep -i vga 这样就可以显示机器上的显卡信息&#xff0c;比如 [rootlocalhost conf]# lspci | grep -i vga 01:00.0 VGA compatible controller: nVidia Corporation Device 1081 (rev a1) 02:00.0 VGA compatible controller: nVidia Corporation GT215 [GeForce…

如何查看显存大小

开始——运行&#xff0c;然后输入dxdiag&#xff0c;然后回车&#xff0c;然后切换到显示标签&#xff0c;然后看估计内存总数就是你的显存大小另&#xff1a;在桌面上点右键&#xff0c;属性-设置-高级&#xff0c;进入里面&#xff0c;点“适配器”&#xff0c;这些就是显卡…

怎么看显存及显卡型号

原文地址&#xff1a; http://zt.ijinshan.com/ws_zmkxk.shtml 摘要&#xff1a;我们经常在尝试新游戏的时候看到游戏对显卡的要求。而显卡作为电脑显示性能至关重要的部分&#xff0c;也经常需要进行驱动的安装和更新。这些都需要我们了解自己的显卡。那么怎么看显卡型号及显存…

Linux如何查看显存

&#xff08;以下内容由参看资料总结而来&#xff0c;若有不对&#xff0c;望指出&#xff09; 用ctrlaltt打开终端&#xff0c;输入命令&#xff1a;lspci,得到如下&#xff08;部分&#xff09;&#xff1a; 00:1f.6 Signal processing controller: Intel Corporation 5 Ser…

查看显存和显卡

目录 查看显存1.window2.Linux 查看显卡1.window2.Linux 查看显存 1.window win键&#xff08;窗口键&#xff09;和R键&#xff0c;跳出运行窗口&#xff0c;在运行窗口输入dxdiag 2.Linux 输入命令 lspci或 lspci | grep -i vga得到如下结果 00:02.0 VGA compatible c…

easyui02(tree前端工作)

一.tree控件的使用 $(function(){ //加载树 $(#myTree).tree({ url:ctx/loadModuleServlet.do, onDblClick: function(node){ // alert(node.text); // 在用户点击的时候提示 //拿节点的子节点(…