显存爆炸和pin_memory
参考: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相关推荐
- 关于模型训练中显存占用过大的或直接报显存爆炸的解决方法
模型训练显存爆炸解决方法 在模型训练中,应该理解梯度.反向传播.图层.显存这些概念,在模型训练过程中,一般会分为训练+验证+测试 ,在这些过程中,一般在训练过程中会比较占用显存,因为涉及到反向传播,需 ...
- 一训练就显存爆炸?Facebook 推出 8 比特优化器,两行代码拯救你的显存
自从人们发现越大的模型性能越好后,神经网络模型的参数量就在越来越大的道路上一去不复返了.从XX-large到GPT3,再到5300亿参数的Megatron Turing-NLG,深度学习越来越像是只有 ...
- 一训练就显存爆炸?Facebook 推出 8 比特优化器,两行代码拯救你的显存!
文 | jxyxiangyu 编 | 小轶 "小夕,小夕!又出来了个 SOTA 模型!赶紧 follow !" 小夕看了看新模型的参数量, 然后看了看实验室服务器的几张小破卡. 小 ...
- 训练模型时候显存爆炸的一种可能性以及解决办法
转载:https://wstchhwp.blog.csdn.net/article/details/108405102 模型训练的时候,爆显存了,可以调整batch,对数据进行crop等等操作. 今天 ...
- GPU显存爆炸如何解决?
问题:在使用GPU训练网络时,出现RuntimeError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 11.17 GiB tot ...
- 模型测试时显存爆炸解决
with torch.no_grad():pass Reference:模型训练或测试时候显存爆掉(RuntimeError:CUDA out of memory)的几种可能及解决方案_洗千帆,还少年 ...
- Pytorch使用过程中显存爆炸解决办法
pytorch中的python对象占用空间很大,模型可以用.cuda()方法放在GPU上,临时的一个batch数据也在训练时放在GPU上进行计算,随着时间推移,显存占用指数倍增长,如果可以的话,把训练 ...
- PyTorch 测试阶段显存爆炸的一个解决方法
with torch.no_grad():output = self.model(lr)
- 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 ...
最新文章
- GlusterFS下如何修复裂脑文件?
- (十四)struts2的国际化
- if you want to go to ruiyuan fund
- 《移动项目实践》实验报告——Android调试与上线
- Soul回应赴美上市传闻:不是约会软件 没有确定的上市计划
- ansible+ssh自动化运维
- 经常用everything对硬盘有伤害吗?
- Raki的统计学习方法笔记0x9章:EM算法及其推广
- MFC笔记2.双击改变listctrl中的值
- qtp如何软件测试,QTP—Windows程序测试
- [转载]从KX、KR用户的购镜选择谈到K5和其他
- YIT-CTF—社工类
- 随笔misc:sd卡速率测试用例
- 多传感器融合的四种经典结构
- Intellij IDEA 创建资源文件夹 source folder
- 手机ufs2.1测试软件,都UFS 2.1了 你还不赶紧把TF卡扔掉!-手机评测
- 锂矿之龙战于野:天齐锂业
- linux内存双通道,两根内存就是双通道?太年轻
- linux下建立软链接
- 点击预览与按钮预览图片
热门文章
- 微盟2018校园招聘面试题学习
- php-fpm的pool,慢执行日志,定义open_basedir,进程管理
- 高通SDM450 Android9上调试RS485接口温湿度传感器调试介绍
- 微软与默克签署协议收购 Rosetta Biosoftware 资产,巩固在生命科学行业内的地位
- 矩形河道中心排放污染物浓度点源二维移流扩散MATLAB解析解计算
- Linux常用硬盘管理命令详解!
- SpringBoot自定义注解实现身份证号格式校验
- 国内数据库技术大牛:牛新庄博士自传(转)
- 详解pytorch实现猫狗识别98%附代码
- 为什么至少三个哨兵_Redis集群哨兵机制