[英]Mixture usage of CPU and GPU in Keras
我正在Keras上構建神經網絡,包括LSTM,Permute和Dense的多層。
LSTM似乎對GPU不友好。 所以我做了研究和使用
With tf.device('/cpu:0'):
out = LSTM(cells)(inp)
但是根據我對with
理解, with
是try...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)中對其進行了訓練。這是我的觀察結果。
這是一些示例片段
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.