Pytorch 节省内存、显存的一些技巧
Pytorch中有一些节省内存、显存的技巧,我结合自己的经验以及如下网址所载内容进行描述:
技巧
inplace 操作
比如在relu或者LeakyRelu里面使用inplace,可以减少对内存的消耗;这种操作根据我个人的经验是比较有效的,尤其是在一些ResNet结构单元使用比较多的模型上;具体可以参考下文进行尝试:
- 比如ResNet 和 DenseNet 可以将 batchnorm 和relu打包成inplace,在bp时再重新计算。使用到了pytorch新的checkpoint特性,有以下两个代码。由于需要重新计算bn后的结果,所以会慢一些。
model1
model2
删除loss
每次循环结束时 删除 loss,可以节约很少显存,但聊胜于无。可见如下issue
issue
这个方案我没有使用过,不太好评价
降低计算的精度,比如float32 变为float16
这个是一个大杀器,基本上有减少内存尤其是显存消耗的模型,都可以这么做,我个人的经验是在CNN图像处理领域,这么做不会带来显著的模型质量的下降,这里给出一个英伟达的apex,根据参考文档作者的建议,这个是比较有效的工具。
apex
分清楚eval 和 requires_grad = False
对于不需要bp的forward,如validation 请使用 torch.no_grad , 注意model.eval() 不等于 torch.no_grad() 请看如下讨论
eval vs. no grad
关于这种操作的效果,我没有使用过,因此难以评论。
使用torch.cuda.empty_cache()
在确定的地方释放显存
Can we release GPU cache
这种方式我使用过,效果很棒
总结
我个人的使用经验是,如果你什么都不清楚的话,建议使用降低精度的方法试一试。
Pytorch 节省内存、显存的一些技巧相关推荐
- pytorch 优化GPU显存占用,避免out of memory
pytorch 优化GPU显存占用,避免out of memory 分享一个最实用的招: 用完把tensor删掉,pytorch不会自动清理显存! 代码举例,最后多删除一个,gpu显存占用就会下降,训 ...
- 内存 显存,cpu,GPU,显卡
内存 显存,cpu,GPU 1 硬件上的区别 1 内存条 2 cpu如下图: 3 显存:属于显卡的组成部分,主要负责存储GPU需要处理的各种数据: 4 GPU:在显卡上,属于显卡的芯片,又称图形处理单 ...
- 【NVIDIA】GeForce-GTX-1080Ti单算法服务内存显存占用
[NVIDIA]GeForce-GTX-1080Ti单算法服务内存显存占用 1.背景 2.关于Gunicorn 服务器 3.测试内存显存占用 3.1 使用1个工作进程 3.2 使用2个工作进程 3.3 ...
- 《南溪的目标检测学习笔记》——训练PyTorch模型遇到显存不足的情况怎么办(“OOM: CUDA out of memory“)
1 前言 在目标检测中,可能会遇到显存不足的情况,我们在这里记录一下解决方案: 2 如何判断真正是出现显存溢出(不是"软件误报") 当前需要分配的显存在600MiB以下, 例如: ...
- 显卡内存和计算机内存,显存和内存的关系和区别
显存和内存是什么关系?显存和内存有什么区别?接下来我们来讨论一下.通常说到显存和内存的时候,还会说一下缓存.存储,我们一起介绍一下. 1.显存 即显卡内存,也叫帧缓存,是用来存储显卡芯片处理过或者即将 ...
- Jetson TX2内存/显存
一.参考资料 CUDA for Tegra 知否,NVIDIA Jetson 产品显存到底多少? 二.重要概念 1. integrated GPU (iGPU) 集成显卡 2. discrete GP ...
- 不优雅地解决pytorch模型测试阶段显存溢出问题
在一次测试一个超分辨模型LESRCNN(作者提供了已训练好的模型)时,发生了CUDA out of memory的错误(虽然显卡有8G显存,但还是差了些): RuntimeError: CUDA ou ...
- 大型3d游戏资源加载三步曲(硬盘 内存 显存)
http://blog.csdn.net/fuzb/article/details/2084362 做过游戏的人都知道游戏的资源非常庞大,需要有一个好的后台预加载机制.现在一般都是再开一个I/O线程, ...
- pytorch训练时显存溢出
网络在前期可以正常训练,但训练几轮后就发生显存爆炸的问题,调整输入大小或者每次循环都清除显存 也无法解决问题,后来经过查询,是在对loss求和时,直接使用 tl += loss 可以看到,loss是张 ...
- pytorch如何查看显存利用情况
最近搞LSTM优化,但是显存利用率不稳定,想看一下LSTM的显存占用情况,搜罗了一通,发现一个不错的开源工具,记录分享一下. 首先上项目地址:https://github.com/Oldpan/Pyt ...
最新文章
- Petapoco 连接oracle11g 自动生成poco时遇到的问题
- 监控利器Zabbix之主动模式和被动模式
- office365中文版
- windows 技术篇-判断某个ip地址相对于自己的主机是内网ip还是外网ip实例演示
- boost::push_back相关的测试程序
- 1Boost之TCP,Client and Server
- 小米手环nfc门卡摸拟成功后不能开门_一键开门,7种解锁方式,绿米推出全自动智能锁...
- 渗透测试岗位面试题(渗透思路)
- Illustrator 教程,如何在 Illustrator 中创建颜色渐变?
- WLAN/WIFI信道列表 2020-11-23
- linux环境做路径左斜杠和右斜杠,不同操作系统下的路径分隔符—反斜杠与斜杠...
- 一名淘宝店长运营店铺靠谱指南
- Win10计算机窗口空白,windows10语言栏丢失怎么办?win10语言栏显示空白的解决办法...
- 百度地图API—简易操作
- va_list的用法
- 学习python需要多长时间?你知道吗?
- linux texlive 中文,[linux-004] texlive的安装以及用xetex和xelatex进行中文编辑
- 单片机中高四位和低四位的理解
- 帝国理工学院计算机刘宁,帝国理工学院 计算机(安全与可靠性)理学硕士
- 计算机的启动盘,Win7使用UltraISO制作U盘启动盘的方法
热门文章
- java身高体重源代码_(01-06)编写一个Java应用程序,输出自己的姓名、年龄、身高、籍贯等信息。要求答案中提供源代码及、运行结果的截图 答案:程序运行结果如下...
- Tomcat,Servlet,JSP之间是什么关系?
- Carson带你学Android:RxJava、Retrofit联合使用汇总(含实例教程)
- 2022中国智慧医疗领域最具商业合作价值企业盘点
- Oralce ERP中AP模块Vender银行信息查询语句
- 电路原理图(SCH)相关知识详解
- this.$nextTick() 学(cai)习(keng)
- VS Code + Tex Live + SumatraPDF配置LaTeX反向搜索(持续更新)
- C#WinFormRS232串口工具
- altium Designer使用方法大总结