Window系统显存不足时利用共享内存继续运行

存在问题

在进行实验过程中,时常碰到显存不足的问题,此时要么需要减小模型体积,要么减小batch-size大小,但这势必会对结果造成一定影响,此时我们可以使用GPU共享内存的方法来扩充显存。

解决方法

GPU有几个重要参数,GPU显存,GPU内存,其中GPU显存是实打实的显存,显存越大,意味着可运行的模型体积越大,所处理的数据量也就越大。而GPU内存=GPU显存+GPU共享内存,GPU共享内存是指在显存不足时,可以调度一定的内存来填充显存,以保证软件正常运行。

而在我们进行实验过程中,如果遇到显存不足的情况,就会报错显存溢出,从而终止运行,那么我们就可以考虑使用GPU的共享内存来继续保证程序运行,但需要注意的是这势必会使模型运行速度变慢。

但在有些情况下,我们只需要模型能够正常运行而不考虑它的运行速度,那么此时共享内存的作用便展现出来了。
事实上,这项技术是Window系统所专有的,此外,这个使用内存来充当显存的方法也是Nvida在最近的驱动中所提供的。

1.更新驱动

前面以及说了,这项功能是Nvidia最新的驱动中所提供的,在驱动程序 536.40 中,其实现了一种新方法,允许应用程序在耗尽 GPU 内存的情况下使用共享内存。这使得以前在 GPU 内存不足时崩溃的应用程序能够继续运行,尽管速度较低。当运行接近最大 GPU 内存以实现无缝转换时,会切换到使用共享内存。
这里我们为了方便,直接下载最新版本546.33。

可以去Nvidia官网下载,当然也可以直接在电脑的Nvidia设置中直接更新。这里博主就不再赘述了。

在这里插入图片描述

2.查找可执行文件

在更新驱动后,我们需要找到我们运行的exe文件,即当我们在运行python项目时的使用的是哪个python.exe文件。
我们可以通过打开任务管理器来查看运行的exe文件:

在这里插入图片描述

或者我们打开cmd控制台,输入nvidia-smi来查看当前显卡占用:

在这里插入图片描述

找到运行的exe文件后我们需要打开Nvida控制面板,在搜索中即可找到

3.修改配置

在这里插入图片描述

打开后按照如下步骤操作,事实上经过博主实验,在安装了最新的驱动后,不需要设置回退功能,即使用它默认的功能即可完GPU调用共享内存炼丹。

在这里插入图片描述

此时我们再次运行程序,将batch-size调大,此时就不会报显存溢出的错误了,打开任务管理器,可以看到我们的GPU内存已经跑满,同时共享内存也有占用:

在这里插入图片描述

总结

然而不幸的是,在使用了这种方式运行后,其虽然相当于扩充了显存,能够保证模型正常运行,但这也会造成运行速度大大减慢,博主在自己的程序上进行测试,速度差了十倍不止。

当然本身使用自己的笔记本完成所有实验也不太现实,因此这个方法能够帮助我们在本地调试程序就已经很不错了。

补充

先前只实验了一个模型,效果不太理想,后来在DN-DAB-Deformable-DETR模型的运行过程中,发现该模型此时已经占用了共享内存,但其速度还算可以,当然这也有其数据集较小的原因,只有7000多张图像,训练一个epoch大约花费40分钟左右,还是可以接受的。

在这里插入图片描述

  • 15
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭祥.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值