赞
踩
如果是训练时遇到该问题,说明模型的参数太多了,将模型的参数减少该问题就解决了,改小batch_size是不能解决的(我将batch_size设为1都没解决,而且报错时的内存数据都没变),因此,出现这个问题,应该有三个原因:
如果是测试时遇到该问题,在测试代码前面加上:with torch.no_grad():
with torch.no_grad():
# test process
若使用了上述两种方法还不成功,那么我们就需要手动释放那些已经不需要的进程(这些进程占据着GPU的资源)
我们在使用tensorflow+pycharm 或者PyTorch写程序的时候, 有时候会在控制台终止掉正在运行的程序,但是有时候程序已经结束了,nvidia-smi也看到没有程序了,但是GPU的内存并没有释放,这是怎么回事呢?
使用PyTorch设置多线程(threads)进行数据读取(DataLoader),其实是假的多线程,他是开了N个子进程(PID都连着)进行模拟多线程工作,所以你的程序跑完或者中途kill掉主进程的话,子进程的GPU显存并不会被释放,需要手动一个一个kill才行
,具体方法描述如下:
fuser -v /dev/nvidia*
具体操作步骤如下:
nvidia-smi
发现内存泄露问题,即没有进程时,内存被占用
fuser -v /dev/nvidia*
pmap -d PID
kill -9 PID
参考1:https://blog.csdn.net/weixin_38314865/article/details/105998844
参考2:https://www.jianshu.com/p/0d8ea6ca332a
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。