起初程序在CPU上运行,报错RuntimeError: can't alloc,查了一下是内存分配问题,但是搜到解决这个问题的方法很少,用top指令查看内存使用情况,发现内存占用在以很快的速度增长,尝试安装内存管理相关的包,教程如下:https://discuss.pytorch.org/t/conv-module-in-forward-cant-alloc/94372/13,发现没有效果,尝试用del手动释放内存,依旧没有效果。
之后由于CPU上运行速度很慢,所以转移到GPU上跑程序,但依旧遇到显存不够的问题,CUDA RUN OUT OF MEMORY,很明显报错原因是因为显存不够,用nvidia-smi命令查看显存使用情况,也是显存占用在以很快的速度增长,搜到的教程大多都是在让减小batch_size或者减小图像尺寸,都尝试过了,虽然能多处理几张图像,但是还是会很快占用完全部的显存。
最终解决方案:加上with torch.no_grad()
with torch.no_grad():
det_features = self.network(input)
参考博客:https://segmentfault.com/a/1190000022589080,无比感谢这篇博客把我从苦海中解脱出来