欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

深度学习框架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都不够用。。。
深度学习框架Pytorch使用笔记(不断更新)

  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左右,我还是不能同时在一张卡上跑几份代码,因为得按它的最高需求来分配显存。
深度学习框架Pytorch使用笔记(不断更新)
但大部分时候只有2G左右的显存了,神奇…