pytorch报错RuntimeError: CUDA out of memory
最近我在复现一个大型代码,使用pytorch,总会出现报错CUDA out of memory
的情况。原作者同时使用了几个GPU来跑,而因为硬件条件限制,我们教研室只有一个GPU,所以我总会遇到下边的错误:
RuntimeError: CUDA out of memory. Tried to allocate 823.88 MiB (GPU 0; 7.93 GiB total capacity; 6.96 GiB already allocated; 189.31 MiB free; 10.26 MiB cached)
通过百度结合自身所用到的,总结了一些解决方法。
1、首先可能是因为Batch-size设置过大,所以改小Batch-size,我直接设置Batch-size=1
。
2、在测试时,就算Batch-size=1也还是会不停报错说CUDA out of memory,然后发现可能是因为number_workers大,于是我将其改小:默认改为10
3、也是在测试验证中常出现的,查看代码发现在测试时,梯度没有释放造成梯度累积,所以导致出现CUDA out of memory的错误。可以通过命令watch -n 0.1 nvidia-smi
来查看GPU使用情况。解决办法就是对代码进行修改,加入:
with torch.no_grad():
使用with torch.no_grad() 包含无需计算梯度的代码块。下图我在测试时加入此语句就不再报错。