2017-07-03 18 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不是更快?它是否通過小數據集進行了處理,所以沒有太多可以並行化的東西? –

相關問題