我已经多次体验过这种情况,并且无法完全调试它。每当我加载一些大型数据集,占用几个GB的RAM时,将其处理成一些机器学习模型(在这种特殊情况下,训练成TFIDF模型的大文档列表),直接在加载数据后,大多数我的记忆被消耗了(在这种情况下是79%),在我训练了TFIDF后,使用了更多(通常多1-2%)。
所以我决定删除数据集(使用del
),因为我只需要模型。即使在调用垃圾收集(使用gc.collect()
)之后,执行此操作也不会返回任何内存。此外,如果我用whos检查工作区中的内容(我使用ipython2.7),并逐个删除所有变量,则不返回任何内存。它只在我关闭进程时返回。
但是,当我挑选TFIDF模型时,关闭ipython并重新启动它,打开pickle并不会占用太多内存。
为什么没有(i)python2.7在删除变量后返回内存?为什么没有变量的ipython进程需要8.9GB的内存?