如何清除 Tensorflow-Keras GPU 内存?

How to clearing Tensorflow-Keras GPU memory?

我在 for 循环中拟合模型,但出现错误,提示我的 GPU 内存已满。我在 Anaconda Spyder IDE 中使用 Keras。我的 GPU 是 Asus GTX 1060 6gb。

我也使用过如下代码:K.clear_session()gc.collect()tf.reset_default_graph()、del custom_model,但其中 none 行得通。 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))