问题:
笔者最近在使用Anaconda中的Spyder做一些联邦学习的工作,在调试代码的过程中发现代码在运行后不会释放占用的内存(.detach()操作亦无法恢复),导致代码在运行几次后就会出现内存被吃满而强制退出的情形。
解决方案:
笔者首先搜集了几种可能的解决方案:
-
清空控制台ctrl + L
-
清空所有变量ctrl+Alt+R
-
重启Ipython内核ctrl+.
其中第三种方法最有效,会将之前占用的内存全部释放。
后面笔者重新考虑代码中的问题,最终发现是在对梯度进行处理的时候没有进行 .detach() 操作,导致梯度数据不断堆积,修改后问题得到比较好地解决。其中 .detach() 操作的原理可见这篇文章:pytorch中 .detach() 的用法