【已解决】RuntimeError: CUDA out of memory. Tried to allocate 50.00 MiB (GPU 0; 4.00 GiB total capacity;

问题分析

        具体描述如下

RuntimeError: CUDA out of memory. Tried to allocate 50.00 MiB (GPU 0; 4.00 GiB total capacity; 682.90 MiB already allocated; 1.62 GiB free; 768.00 MiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

原因分析及解决办法

         这种问题,是GPU内存不够引起的解决可以参考下文:

        1、调小batch_size可以解决,建议成倍调小,直到可以运行为止

        2、定时清内存,比如:

import torch, gc

gc.collect()
torch.cuda.empty_cache()

        3、该段程序不计算参数梯度,加这个代码就可以了

with torch.no_grad():
     for batch in tqdm(dataloader):

        4、 如果还没解决就查看代码中是否存在一下代码(通常出现在main.py 或者数据加载的py文件中:

kwargs = {'num_workers': 6, 'pin_memory': True} if torch.cuda.is_available() else {}

        改成false就可以了。

pin_memory就是锁页内存,创建DataLoader时,设置pin_memory=True,则意味着生成的Tensor数据最开始是属于内存中的锁页内存,这样将内存的Tensor转义到GPU的显存就会更快一些。
主机中的内存,有两种存在方式,一是锁页,二是不锁页,锁页内存存放的内容在任何情况下都不会与主机的虚拟内存进行交换(注:虚拟内存就是硬盘),而不锁页内存在主机内存不足时,数据会存放在虚拟内存中。显卡中的显存全部是锁页内存,当计算机的内存充足的时候,可以设置pin_memory=True。当系统卡住,或者交换内存使用过多的时候,设置pin_memory=False。因为pin_memory与电脑硬件性能有关,pytorch开发者不能确保每一个炼丹玩家都有高端设备,因此pin_memory默认为False。
————————————————
版权声明:本文为CSDN博主「xiyou__」的原创文章

        不过,batchsize这个调整办法还是值得深究【已解决】RuntimeError: CUDA out of memory. Tried to allocate 50.00 MiB (GPU 0; 4.00 GiB total capacity;_第1张图片

【已解决】RuntimeError: CUDA out of memory. Tried to allocate 50.00 MiB (GPU 0; 4.00 GiB total capacity;_第2张图片

 完结撒花

【已解决】RuntimeError: CUDA out of memory. Tried to allocate 50.00 MiB (GPU 0; 4.00 GiB total capacity;_第3张图片

        看了这部分内容,我只能说是好建议

你可能感兴趣的:(Bugs(程序报错),人工智能,机器学习,python,django,计算机视觉,ubuntu,opencv)