深度学习框架Pytorch使用笔记(不断更新)

多卡训练

当一台机器上有多张卡可以使用时,我们希望能够在多张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都不够用。。。
在这里插入图片描述

  1. num_workers还是要大于0,不然时间难以承受
  2. 检查你的变量里是不是有保存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左右的显存了,神奇…

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页