簡體   English   中英

Keras中CPU和GPU的混合使用

[英]Mixture usage of CPU and GPU in Keras

我正在Keras上構建神經網絡,包括LSTM,Permute和Dense的多層。

LSTM似乎對GPU不友好。 所以我做了研究和使用

With tf.device('/cpu:0'):
   out = LSTM(cells)(inp)

但是根據我對with理解, withtry...finally塊,以確保執行清理代碼。 我不知道以下CPU / GPU混合使用代碼是否有效? 他們會加快訓練速度嗎?

With tf.device('/cpu:0'):
  out = LSTM(cells)(inp)
With tf.device('/gpu:0'):
  out = Permute(some_shape)(out)
With tf.device('/cpu:0'):
  out = LSTM(cells)(out)
With tf.device('/gpu:0'):
  out = Dense(output_size)(out)

您可能會在這里 tf.device是一個上下文管理器,它將默認設備切換為其在其創建的上下文(塊)中作為其參數傳遞的設備。 因此,此代碼應在CPU上運行所有'/cpu:0'設備,並在GPU

能否提高訓練速度的問題真的很難回答,因為這取決於您使用的機器-但是我不希望計算速度會更快,因為每次設備更改都會在GPU RAM和機器RAM之間復制數據。 這甚至可能減慢您的計算速度。

我使用2個LSTM和1個密集層創建了一個模型,並在我的GPU(NVidia GTX 10150Ti)中對其進行了訓練。這是我的觀察結果。

  1. 使用CUDA LSTM https://keras.io/layers/recurrent/#cudnnlstm
  2. 如果我使用非常小的批處理大小(2-10),則使用浴池大小有助於更多的GPU並行性;不使用GPU多核; 所以我用100作為批量
  3. 如果我在GPU上訓練我的網絡,並嘗試將其用於CPU上的預測,那么它可以在編譯和運行時正常運行,但是預測很奇怪。 就我而言,我也很樂意使用GPU進行預測。
  4. 對於多層LSTM,需要使用

這是一些示例片段

model = keras.Sequential()
model.add(keras.layers.cudnn_recurrent.CuDNNLSTM(neurons
                , batch_input_shape=(nbatch_size, reshapedX.shape[1], reshapedX.shape[2])
                , return_sequences=True
                , stateful=True))

TojoHere的答案之一需要被投票! 這個技巧使我的LSTM培訓速度提高了近10倍。 非常感謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM