Pytorch中有一些节省内存、显存的技巧,我结合自己的经验以及如下网址所载内容进行描述:
技巧

inplace 操作

比如在relu或者LeakyRelu里面使用inplace,可以减少对内存的消耗;这种操作根据我个人的经验是比较有效的,尤其是在一些ResNet结构单元使用比较多的模型上;具体可以参考下文进行尝试:

  1. 比如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 节省内存、显存的一些技巧相关推荐

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

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

  2. 内存 显存,cpu,GPU,显卡

    内存 显存,cpu,GPU 1 硬件上的区别 1 内存条 2 cpu如下图: 3 显存:属于显卡的组成部分,主要负责存储GPU需要处理的各种数据: 4 GPU:在显卡上,属于显卡的芯片,又称图形处理单 ...

  3. 【NVIDIA】GeForce-GTX-1080Ti单算法服务内存显存占用

    [NVIDIA]GeForce-GTX-1080Ti单算法服务内存显存占用 1.背景 2.关于Gunicorn 服务器 3.测试内存显存占用 3.1 使用1个工作进程 3.2 使用2个工作进程 3.3 ...

  4. 《南溪的目标检测学习笔记》——训练PyTorch模型遇到显存不足的情况怎么办(“OOM: CUDA out of memory“)

    1 前言 在目标检测中,可能会遇到显存不足的情况,我们在这里记录一下解决方案: 2 如何判断真正是出现显存溢出(不是"软件误报") 当前需要分配的显存在600MiB以下, 例如: ...

  5. 显卡内存和计算机内存,显存和内存的关系和区别

    显存和内存是什么关系?显存和内存有什么区别?接下来我们来讨论一下.通常说到显存和内存的时候,还会说一下缓存.存储,我们一起介绍一下. 1.显存 即显卡内存,也叫帧缓存,是用来存储显卡芯片处理过或者即将 ...

  6. Jetson TX2内存/显存

    一.参考资料 CUDA for Tegra 知否,NVIDIA Jetson 产品显存到底多少? 二.重要概念 1. integrated GPU (iGPU) 集成显卡 2. discrete GP ...

  7. 不优雅地解决pytorch模型测试阶段显存溢出问题

    在一次测试一个超分辨模型LESRCNN(作者提供了已训练好的模型)时,发生了CUDA out of memory的错误(虽然显卡有8G显存,但还是差了些): RuntimeError: CUDA ou ...

  8. 大型3d游戏资源加载三步曲(硬盘 内存 显存)

    http://blog.csdn.net/fuzb/article/details/2084362 做过游戏的人都知道游戏的资源非常庞大,需要有一个好的后台预加载机制.现在一般都是再开一个I/O线程, ...

  9. pytorch训练时显存溢出

    网络在前期可以正常训练,但训练几轮后就发生显存爆炸的问题,调整输入大小或者每次循环都清除显存 也无法解决问题,后来经过查询,是在对loss求和时,直接使用 tl += loss 可以看到,loss是张 ...

  10. pytorch如何查看显存利用情况

    最近搞LSTM优化,但是显存利用率不稳定,想看一下LSTM的显存占用情况,搜罗了一通,发现一个不错的开源工具,记录分享一下. 首先上项目地址:https://github.com/Oldpan/Pyt ...

最新文章

  1. Petapoco 连接oracle11g 自动生成poco时遇到的问题
  2. 监控利器Zabbix之主动模式和被动模式
  3. office365中文版
  4. windows 技术篇-判断某个ip地址相对于自己的主机是内网ip还是外网ip实例演示
  5. boost::push_back相关的测试程序
  6. 1Boost之TCP,Client and Server
  7. 小米手环nfc门卡摸拟成功后不能开门_一键开门,7种解锁方式,绿米推出全自动智能锁...
  8. 渗透测试岗位面试题(渗透思路)
  9. Illustrator 教程,如何在 Illustrator 中创建颜色渐变?
  10. WLAN/WIFI信道列表 2020-11-23
  11. linux环境做路径左斜杠和右斜杠,不同操作系统下的路径分隔符—反斜杠与斜杠...
  12. 一名淘宝店长运营店铺靠谱指南
  13. Win10计算机窗口空白,windows10语言栏丢失怎么办?win10语言栏显示空白的解决办法...
  14. 百度地图API—简易操作
  15. va_list的用法
  16. 学习python需要多长时间?你知道吗?
  17. linux texlive 中文,[linux-004] texlive的安装以及用xetex和xelatex进行中文编辑
  18. 单片机中高四位和低四位的理解
  19. 帝国理工学院计算机刘宁,帝国理工学院 计算机(安全与可靠性)理学硕士
  20. 计算机的启动盘,Win7使用UltraISO制作U盘启动盘的方法

热门文章

  1. java身高体重源代码_(01-06)编写一个Java应用程序,输出自己的姓名、年龄、身高、籍贯等信息。要求答案中提供源代码及、运行结果的截图 答案:程序运行结果如下...
  2. Tomcat,Servlet,JSP之间是什么关系?
  3. Carson带你学Android:RxJava、Retrofit联合使用汇总(含实例教程)
  4. 2022中国智慧医疗领域最具商业合作价值企业盘点
  5. Oralce ERP中AP模块Vender银行信息查询语句
  6. 电路原理图(SCH)相关知识详解
  7. this.$nextTick() 学(cai)习(keng)
  8. VS Code + Tex Live + SumatraPDF配置LaTeX反向搜索(持续更新)
  9. C#WinFormRS232串口工具
  10. altium Designer使用方法大总结