如何清除Tensorflow Keras GPU内存?
我在for循环中拟合模型,但我得到一个错误,我的GPU内存已满。我在Anaconda Spyder IDE中使用Keras。我的GPU是华硕GTX 1060 6gb 我也使用过类似的代码:如何清除Tensorflow Keras GPU内存?,tensorflow,keras,out-of-memory,spyder,Tensorflow,Keras,Out Of Memory,Spyder,我在for循环中拟合模型,但我得到一个错误,我的GPU内存已满。我在Anaconda Spyder IDE中使用Keras。我的GPU是华硕GTX 1060 6gb 我也使用过类似的代码:K.clear\u session(),gc.collect(),tf.reset\u default\u graph(),del custom\u model,但它们都不起作用。 GPU属性显示,GPU 98%的内存已满: 除了numba.cuda.close()之外,没有任何东西会刷新GPU内存,但不允许
K.clear\u session()
,gc.collect()
,tf.reset\u default\u graph()
,del custom\u model,但它们都不起作用。
GPU属性显示,GPU 98%的内存已满:
除了numba.cuda.close()
之外,没有任何东西会刷新GPU内存,但不允许我再次使用GPU。清除它的唯一方法是重新启动内核并重新运行代码
我正在寻找任何脚本代码来添加我的代码,允许我在for循环中使用我的代码,并在每个循环中清除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))
您应该在问题中包含重现问题的代码。您是否在循环中创建模型?为什么呢?@SimonCaby因为我在计算噪音数据的准确性,我需要平均50倍的训练和测试结果。@MatiasValdenegro我代码的一部分:image\u input=input(shape=(224224,224,3))base\u model=Xception(input\u tensor=image\u input,include\u top=False,weights='imagenet')custom\u Xception\u model.compile(loss='classifical_crossentropy',optimizer='adadelta',metrics=['accurity'])hist=base_model.fit(X,Y,epochs=2)这是对keras的简单训练。我只需要在循环中使用它,并在每个循环的最后一个循环中清除GPU内存。好的。你不应该在循环中构建模型,而只是加载和训练权重。你不应该清除模型(还有记忆)。