如何清除Tensorflow-Keras GPU内存?

a9wyjsp7  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(522)

我在for循环中拟合模型,但我得到一个错误,即GPU的内存已满。我在Anaconda Spyder IDE中使用Keras。我的GPU是华硕GTX 1060 6GB。
我还使用了以下代码:K.clear_session()gc.collect()tf.reset_default_graph(),del custom_model但它们都不起作用。GPU属性显示的98%内存已满:

除了numba.cuda.close(),没有什么可以刷新GPU内存,但不允许我再次使用我的GPU。清除它的唯一方法是重新启动内核并重新运行我的代码。
我正在寻找任何脚本代码添加我的代码,让我使用我的代码在循环和明确的GPU在每一个循环。

1dkrff03

1dkrff031#

将模型创建和训练部分封装在一个函数中,然后使用子流程进行主要工作。训练完成后,子进程将终止,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))

相关问题