GPU内存在顺序模型初始化后直接填满,在训练期间不会更改

时间:2017-07-03 08:20:13

标签: memory tensorflow gpu keras spyder

我正在使用Keras,在Windows 7的后端张量流上使用NVIDIA Quadro M2000M GPU。

当我初始化包含5个GRU,5个Dropout和1个Dense图层的模型时,GPU内存使用量会跳到3800MB的4096MB并保持不变,直到我重新开始我的spyder会话。使用以下命令清除spyder中的会话:

K.clear_session()

不起作用。内存使用率保持在较高水平。

这样的模型分配GPU的这么多内存是否正常?我可以改变什么,以便可以正确使用内存使用情况?我想提高训练速度,我认为这种高内存使用会阻碍GPU充分发挥其潜力。

更新

我的模型看起来像这样:

model = Sequential()
layers = [1, 70, 50,100, 50,20, 1]

model.add(GRU(
        layers[1],
        #batch_size = 32,
        input_shape=(sequence_length, anzahl_features),
        return_sequences=True))
model.add(Dropout(dropout_1))
model.add(GRU(
        layers[2],
        #batch_size = 32,
        return_sequences=True))
model.add(Dropout(dropout_2))
model.add(GRU(
        layers[3],
        #batch_size = 32,
        return_sequences=True))
model.add(Dropout(dropout_3))
model.add(GRU(
        layers[4],
        #batch_size = 32,
        return_sequences=True))
model.add(Dropout(dropout_4))
model.add(GRU(
        layers[5],
        #batch_size = 32,
        return_sequences=False))
model.add(Dropout(dropout_5))
model.add(Dense(
         layers[6]))
model.add(Activation('sigmoid'))

我的要素矩阵的大小为506x500x35(506个示例,500个序列长度和35个要素)。批量大小设置为128.站点说明:我不是说这是完美的特征矩阵或模型配置。

这里还有GPU-Z的屏幕截图,我重新启动spyder并启动模型直到第二个时期:

enter image description here

Model Summary

2 个答案:

答案 0 :(得分:3)

默认情况下,TensorFlow会分配整个GPU内存。

如果您想更好地控制GPU内存使用率,可以使用以下方法:

  • per_process_gpu_memory_fraction配置选项或
  • allow_growth配置选项。

答案 1 :(得分:0)

让我只给出完整的代码,如何控制GPU上的内存使用情况:

    from keras.backend.tensorflow_backend 
    import set_session config = tf.ConfigProto() 

    config.gpu_options.per_process_gpu_memory_fraction = 0.9
    config.gpu_options.allow_growth = True set_session(tf.Session(config=config))

GPU速度训练可能取决于您的批处理大小,在CPU和GPU上是否相同。是否安装了cuda