参考:https://zhuanlan.zhihu.com/p/117270644

训练模型训练一半时显存爆炸的问题解决:

pin_memory:表示要将load进来的数据是否要拷贝到pin_memory区中,其表示生成的Tensor数据是属于内存中的锁页内存区,这样将Tensor数据转移到GPU中速度就会快一些,默认为False。

通常情况下,数据在内存中要么以锁页的方式存在,要么保存在虚拟内存(磁盘)中,设置为True后,数据直接保存在锁页内存中,后续直接传入cuda;否则需要先从虚拟内存中传入锁页内存中,再传入cuda,这样就比较耗时了,但是对于内存的大小要求比较高。

即,先把dataset读到CPU上,然后GPU只读每个batch的数据,这样gpu就不会报内存不足了。

综上:当训练模型训练到一半时出现显存爆炸可以尝试将dataloader中的pin_memory设置成False.

补充:

pytorch中dataloader一次性创建num_workers个子线程,然后用batch_sampler将指定batch分配给指定worker,worker将它负责的batch加载进RAM,dataloader就可以直接从RAM中找本轮迭代要用的batch。如果num_worker设置得大,好处是寻batch速度快,因为下一轮迭代的batch很可能在上一轮/上上一轮...迭代时已经加载好了。坏处是内存开销大,也加重了CPU负担(worker加载数据到RAM的进程是进行CPU复制)。如果num_worker设为0,意味着每一轮迭代时,dataloader不再有自主加载数据到RAM这一步骤,只有当你需要的时候再加载相应的batch,当然速度就更慢。num_workers的经验设置值是自己电脑/服务器的CPU核心数,如果CPU很强、RAM也很充足,就可以设置得更大些,对于单机来说,单跑一个任务的话,直接设置为CPU的核心数最好。

显存爆炸和pin_memory相关推荐

  1. 关于模型训练中显存占用过大的或直接报显存爆炸的解决方法

    模型训练显存爆炸解决方法 在模型训练中,应该理解梯度.反向传播.图层.显存这些概念,在模型训练过程中,一般会分为训练+验证+测试 ,在这些过程中,一般在训练过程中会比较占用显存,因为涉及到反向传播,需 ...

  2. 一训练就显存爆炸?Facebook 推出 8 比特优化器,两行代码拯救你的显存

    自从人们发现越大的模型性能越好后,神经网络模型的参数量就在越来越大的道路上一去不复返了.从XX-large到GPT3,再到5300亿参数的Megatron Turing-NLG,深度学习越来越像是只有 ...

  3. 一训练就显存爆炸?Facebook 推出 8 比特优化器,两行代码拯救你的显存!

    文 | jxyxiangyu 编 | 小轶 "小夕,小夕!又出来了个 SOTA 模型!赶紧 follow !" 小夕看了看新模型的参数量, 然后看了看实验室服务器的几张小破卡. 小 ...

  4. 训练模型时候显存爆炸的一种可能性以及解决办法

    转载:https://wstchhwp.blog.csdn.net/article/details/108405102 模型训练的时候,爆显存了,可以调整batch,对数据进行crop等等操作. 今天 ...

  5. GPU显存爆炸如何解决?

    问题:在使用GPU训练网络时,出现RuntimeError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 11.17 GiB tot ...

  6. 模型测试时显存爆炸解决

    with torch.no_grad():pass Reference:模型训练或测试时候显存爆掉(RuntimeError:CUDA out of memory)的几种可能及解决方案_洗千帆,还少年 ...

  7. Pytorch使用过程中显存爆炸解决办法

    pytorch中的python对象占用空间很大,模型可以用.cuda()方法放在GPU上,临时的一个batch数据也在训练时放在GPU上进行计算,随着时间推移,显存占用指数倍增长,如果可以的话,把训练 ...

  8. PyTorch 测试阶段显存爆炸的一个解决方法

    with torch.no_grad():output = self.model(lr)

  9. PaddleOCR——申请显存不足【Allocate too much memory for the GPU memory pool, assigned 8000 MB】解决方案

    问题描述 E0724 02:41:05.436789 3160 analysis_predictor.cc:515] Allocate too much memory for the GPU memo ...

最新文章

  1. GlusterFS下如何修复裂脑文件?
  2. (十四)struts2的国际化
  3. if you want to go to ruiyuan fund
  4. 《移动项目实践》实验报告——Android调试与上线
  5. Soul回应赴美上市传闻:不是约会软件 没有确定的上市计划
  6. ansible+ssh自动化运维
  7. 经常用everything对硬盘有伤害吗?
  8. Raki的统计学习方法笔记0x9章:EM算法及其推广
  9. MFC笔记2.双击改变listctrl中的值
  10. qtp如何软件测试,QTP—Windows程序测试
  11. [转载]从KX、KR用户的购镜选择谈到K5和其他
  12. YIT-CTF—社工类
  13. 随笔misc:sd卡速率测试用例
  14. 多传感器融合的四种经典结构
  15. Intellij IDEA 创建资源文件夹 source folder
  16. 手机ufs2.1测试软件,都UFS 2.1了 你还不赶紧把TF卡扔掉!-手机评测
  17. 锂矿之龙战于野:天齐锂业
  18. linux内存双通道,两根内存就是双通道?太年轻
  19. linux下建立软链接
  20. 点击预览与按钮预览图片

热门文章

  1. 微盟2018校园招聘面试题学习
  2. php-fpm的pool,慢执行日志,定义open_basedir,进程管理
  3. 高通SDM450 Android9上调试RS485接口温湿度传感器调试介绍
  4. 微软与默克签署协议收购 Rosetta Biosoftware 资产,巩固在生命科学行业内的地位
  5. 矩形河道中心排放污染物浓度点源二维移流扩散MATLAB解析解计算
  6. Linux常用硬盘管理命令详解!
  7. SpringBoot自定义注解实现身份证号格式校验
  8. 国内数据库技术大牛:牛新庄博士自传(转)
  9. 详解pytorch实现猫狗识别98%附代码
  10. 为什么至少三个哨兵_Redis集群哨兵机制