深度学习框架Pytorch使用笔记(不断更新)
程序员文章站
2022-03-07 19:49:18
...
多卡训练
当一台机器上有多张卡可以使用时,我们希望能够在多张GPU上跑实验
torch.nn.DataParallel
显卡负载不均衡…(to be update)主卡比其他副卡占了将近2倍的显存
PyTorch分布式训练
没试过,还不会,但听说可以解决负载不均衡的问题
CPU 内存占用率不断增长
num_workers
当num_workers设为0时,CPU memory没有增长,但是取数据特别慢。在num_wokers = 8时,每秒钟能处理将近128张图片,但我把num_workers设置为0,每秒钟处理的图片数大概是8-10张,相差10倍多…
我遇到的问题是:
当num_workers大于0时,内存会渐渐增长,直到溢出(CPU memory leak), 120G都不够用。。。
- num_workers还是要大于0,不然时间难以承受
- 检查你的变量里是不是有保存list,根据pytorch官方人员的解答,其实不是真正的“内存爆掉”,而是python 语言设计的机制。
解决方法是:将list变量换成numpy array或者tensor
Python列表仅存储对对象的引用,这些对象分别保存在内存中。每个对象都有一个引用计数,因此列表中的每个项目都有一个引用计数。
Numpy数组(标准np类型)作为连续块存储在内存中,并且只有一个引用计数的一个对象。
强烈建议爆内存的伙伴可以看一下这里完整的讨论:
https://github.com/pytorch/pytorch/issues/13246
这并不是pytorch的问题,而是python 语言设计的机制。
节省显存
之前我不用的变量都是用del删掉,发现作用没有那么明显,但当在每次iteration后加入:
torch.cuda.empty_cache()
来清理无用的值,oh my god,变化很明显,能少将近5G的显存。
但感觉还是作用不大,因为显存一直在变化,它的峰值最高能达到9G,就算变化到2G左右,我还是不能同时在一张卡上跑几份代码,因为得按它的最高需求来分配显存。
但大部分时候只有2G左右的显存了,神奇…
推荐阅读
-
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
-
学习笔记|Pytorch使用教程25(Batch Normalization)
-
【TensorFlow实战Google深度学习框架】学习笔记(tensorflow入门)
-
深度学习零基础使用 PyTorch 框架跑 MNIST 数据集的第四天:单例测试
-
深度学习框架Pytorch——学习笔记(六)PyTorch实现L1,L2正则化以及Dropout
-
(pytorch-深度学习系列)pytorch避免过拟合-dropout丢弃法的实现-学习笔记
-
如何从0-1构建自己的”pytorch“(自己专属的深度学习框架)
-
荐 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---12.Hello Framewok框架初步使用介绍(测试)+未来计划展望
-
深度学习笔记第二门课 改善深层神经网络 第三周 超参数调试、Batch正则化和程序框架...
-
深度学习笔记--使用keras训练&保存&加载CNN模型