2017-08-25 229 views
0

当我通常从命令行运行python脚本时,例如python test.py,GPU内存将在脚本完成后立即释放。 在这个test.py脚本中,我只是加载了keras构建的模型来评估和预测一些数据。没有培训过程。但是,如果我打开我的'spyder',并在'spyder'中运行此脚本,结果会出现在'ipython'部分,但是随后我从命令行键入nvidia-smi,GPU内存不会释放。 所以,我试过的是关闭这个'ipython'内核并开始一个新的。但是我所有其他的变数都会丢失。 'spyder'的model.evaluate(x, y)之后有没有体面的方式释放GPU内存? 下面是一些屏幕截图: enter image description here如何在spyder中释放ipython中的keras中的GPU资源?

之前和“Spyder的”脚本运行后: enter image description here

+0

尝试运行'gc.collect()' – DJK

+0

@ djk47463,这个'gc'来自哪里?哪个模块? – StayFoolish

+0

该模块被命名为[gc](https://docs.python.org/2/library/gc.html),它是一个垃圾收集器,我相信它附带的Python安装 – DJK

回答

1

通常情况下,tensorflow后端将保留在GPU上的所有内存。它可能不会真正使用所有的内存,但是它会被其他程序占用,直到tensorflow后端被终止。因此,在nvidia-smi中,您将看到内存不会释放,甚至tensorflow已经释放了其框架中的前一个内存。

+0

,所以我怎么能释放记忆呢?因为我从ipython运行了一些测试命令,并且还从命令行运行了一些其他脚本。但是如果tensorflow后端不释放内存,那么我不能从命令行运行其他脚本。有什么建议么? – StayFoolish

+0

是的,你可以限制张量记忆。请检查[此链接](https://github.com/fchollet/keras/issues/1538) – Van