2017-07-03 44 views
1

我在Windows 7的后端tensorflow上使用Keras,NVIDIA Quadro M2000M GPU。GPU内存在顺序模型初始化后直接完成,并且在训练期间不会改变

当我初始化包含5个GRU,5个Dropout和1个密集层的模型时,GPU内存使用率跳转到4096MB的3800MB并保持在那里,直到我重新启动我的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')) 

My功能矩阵具有大小506x500x35(506个实施例中,500的序列长度和35层的功能)。批量大小设置为128.站点说明:我并不是说这是完美的功能矩阵或模型配置。

这里也GPU-Z的截图,其中i Spyder的重新启动,并开始了模型,直到第二纪元:

enter image description here

Model Summary

+0

加载到模型中的数据量是多少? –

+0

我们没有足够的信息来估计内存占用量。输入和图层有多大?您似乎也对GPU内存使用情况有误解。如果必要的数据和计算结果不在GPU内存中,则必须从其他地方取得,从而使训练过程更慢。 –

+0

对我来说看起来还不错,你似乎并没有在公交上洗牌数据。你可以运行'model.summary()'并且得到你的模型的参数数量吗?这样我们可以计算出这是否合理。 –

回答

2

默认TensorFlow分配整个GPU内存。

如果你想对GPU内存使用量的更好的控制,你可以使用这些方法:

  • per_process_gpu_memory_fraction配置选项,或
  • allow_growth配置选项。
+0

这工作,但我的主要问题是,当我与我的8个CPU运行相同的配置GPU不是更快?它是否通过小数据集进行了处理,所以没有太多可以并行化的东西? –

相关问题