我使用Keras构建了基于CNN结构的自动编码器模型,完成训练过程后,我的笔记本电脑具有64GB内存,但是我注意到至少还有1/3的内存被占用,对于GPU来说也是一样记忆也是。我没有找到释放内存的好方法,只能通过关闭Anaconda Prompt命令窗口和jupyter笔记本来释放内存。我不确定是否有人有好的建议。谢谢!
答案 0 :(得分:7)
要释放RAM内存,只需执行@nuric在注释中建议的del Variables
。
这比释放RAM内存要棘手。有人会建议您以下代码(假设您正在使用keras)
from keras import backend as K
K.clear_session()
但是,上面的代码并不适合所有人。 (即使您尝试使用del Models
,它仍然无法正常工作)
如果上述方法对您不起作用,请尝试以下方法(您需要先安装numba库):
from numba import cuda
cuda.select_device(0)
cuda.close()
其背后的原因是: Tensorflow只是为GPU分配内存,而CUDA负责管理GPU内存。
如果您用K.clear_session()
清除了所有图形后,CUDA出于某种原因拒绝释放GPU内存,则可以使用cuda库直接控制CUDA清除GPU内存。
答案 1 :(得分:0)
要清除RAM内存,只需按照Raven的建议删除变量即可。
但不幸的是,对于GPU cuda.close()
,它将在涉及GPU的未来步骤(例如模型评估)中引发错误。可用GPU内存的一种解决方法是将模型创建和训练部分包装在函数中,然后将子过程用于主要工作。训练完成后,子进程将终止,GPU内存将可用。
类似:
import multiprocessing
def create_model_and_train( ):
.....
.....
p = multiprocessing.Process(target=create_model_and_train)
p.start()
p.join()
或者您可以创建以下函数并在每次运行之前调用它:
from keras.backend.tensorflow_backend import set_session
from keras.backend.tensorflow_backend import clear_session
from keras.backend.tensorflow_backend import get_session
import tensorflow
import gc
# Reset Keras Session
def reset_keras():
sess = get_session()
clear_session()
sess.close()
sess = get_session()
try:
del classifier # this is from global space - change this as you need
except:
pass
print(gc.collect()) # if it does something you should see a number as output
# use the same config as you used to create the session
config = tensorflow.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 1
config.gpu_options.visible_device_list = "0"
set_session(tensorflow.Session(config=config))