使用keras训练CNN模型后无法释放GPU内存

时间:2019-06-06 12:02:36

标签: performance tensorflow keras gpu conv-neural-network

在以keras(2.2.4)和tensorflow(1.13.1)作为后端的Google Colab笔记本上,我正在尝试调整CNN,我使用了一个简单且基本的超参数表,并在其中运行测试一组循环。 我的问题是,每次迭代后我都无法释放GPU内存,Keras似乎无法自动释放GPU内存。因此,每当出现资源耗尽:内存不足(OOM)错误时, 我进行了一些挖掘,并尝试使用该功能,重新组合了为解决该问题而提出的不同解决方案(尽管对我不起作用)

for _ in hyper_parameters : 
    Run_model(_)
    reset_keras()

我的一组超级参数是:

IMG_SIZE = 800,1000,3
BATCH_SIZEs = [4,8,16]
EPOCHSs = [5,10,50]
LRs = [0.008,0.01]
MOMENTUMs = [0.04,0.09]
DECAYs = [0.1]
VAL_SPLITs = [0.1]

以及我用来释放GPU内存的功能:

def reset_keras():
    sess = get_session()
    clear_session()
    sess.close()
    sess = get_session()

    try:
        del model # this is from global space - change this as you need
    except:
        pass

    print(gc.collect()) # if it's done something you should see a number being outputted

    # use the same config as you used to create the session
    config = tf.ConfigProto()
    config.gpu_options.per_process_gpu_memory_fraction = 1
    config.gpu_options.visible_device_list = "0"
    set_session(tf.Session(config=config))

我唯一不完全了解的是“与创建模型时使用的配置相同”(第14行),因为在Keras中,我们没有明确选择特定的配置。 我经历了一次迭代,有时是两次,但是我不能超越。我已经尝试过更改batch_size,目前我无法负担性能更高的计算机。 我正在使用从 keras.utils.Sequence 继承的自定义图像生成器。 我使用这段代码监视GPU内存的状态:

import psutil
import GPUtil as GPU

def printmm():
    GPUs = GPU.getGPUs() 
    gpu = GPUs[0]
    process = psutil.Process(os.getpid())
    return(" Util {0:.2f}% ".format(gpu.memoryUtil*100))

print(printmm())

0 个答案:

没有答案