我正在使用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并启动模型直到第二个时期:
答案 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