如何清除Tensorflow-Keras GPU内存?

Sep*_*ari 5 out-of-memory spyder keras tensorflow

我正在 for 循环中拟合模型,但收到一条错误消息,指出我的 GPU 内存已满。我在 Anaconda Spyder IDE 中使用 Keras。我的 GPU 是华硕 GTX 1060 6GB。

我还使用过以下代码:K.clear_session()gc.collect()tf.reset_default_graph()del custom_model 但它们都不起作用。GPU 属性表明 98% 的内存已满:

没有什么会刷新 GPU 内存,除了numba.cuda.close()但不允许我再次使用我的 GPU。清除它的唯一方法是重新启动内核并重新运行我的代码。

我正在寻找任何脚本代码来添加我的代码,允许我在 for 循环中使用我的代码并在每个循环中清除 GPU。

Abh*_*25t 2

将模型创建和训练部分封装在一个函数中,然后使用子流程来完成主要工作。训练完成后,子进程将终止,GPU 内存将释放。

就像是:

import multiprocessing

def create_model_and_train( ):
      .....
      .....

p = multiprocessing.Process(target=create_model_and_train) 
p.start() 
p.join()
Run Code Online (Sandbox Code Playgroud)

或者您可以创建以下函数并在每次运行之前调用它:

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))
Run Code Online (Sandbox Code Playgroud)