【问题标题】:How to clearing Tensorflow-Keras GPU memory?如何清除 Tensorflow-Keras GPU 内存?
【发布时间】:2019-08-24 01:00:35
【问题描述】:

我在 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。清除它的唯一方法是重新启动内核并重新运行我的代码。

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

【问题讨论】:

  • 您应该在问题中包含重现问题的代码
  • 您是否在循环中创建模型?那为什么?
  • @SimonCaby 因为我正在计算噪声数据的准确性,我需要平均 50 次训练和测试结果。
  • @MatiasValdenegro 我的部分代码:image_input = Input(shape=(224, 224, 3)) base_model = Xception(input_tensor=image_input, include_top=False,weights='imagenet') custom_Xception_model.compile (loss='categorical_crossentropy',optimizer='adadelta',metrics=['accuracy']) hist = base_model.fit(X,Y,epochs=2) 用 keras 进行简单的训练。我只需要在循环中使用它,并在每个循环的最后一个清除 GPU 内存。
  • 好的。您不应该在循环中构建模型,而只是加载和训练权重。你不应该清除模型(和内存)。

标签: tensorflow keras out-of-memory spyder


【解决方案1】:

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

【讨论】:

  • 我认为reset_keras 函数适用于 tensorflow 1?因为对我来说它无法识别带有 tensorflow 2 的库。
  • @DaReal 是的 TF1
猜你喜欢
  • 2017-02-07
  • 2022-01-21
  • 2021-10-05
  • 2017-11-13
  • 2018-11-25
  • 1970-01-01
  • 2019-11-16
  • 1970-01-01
  • 2019-04-15
相关资源
最近更新 更多