簡體   English   中英

為什么Keras LSTM在CPU上比GPU快三倍?

[英]Why is Keras LSTM on CPU three times faster than GPU?

我使用Kaggle的這款筆記本來運行LSTM神經網絡。

我開始訓練神經網絡,我發現它太慢了。 它幾乎比CPU訓練慢三倍。

  • CPU perfomance:每個時期8分鍾;
  • GPU perfomance:每個時期26分鍾。

在此之后,我決定在Stackoverflow上找到這個問題的答案,並且我應用了CuDNNLSTM (僅在GPU上運行)而不是LSTM

因此,GPU性能每個時期僅變為1分鍾 ,模型的准確度降低3%。

問題:

1)有人知道為什么GPU在經典LSTM層中的工作速度比CPU慢嗎? 我不明白為什么會這樣。

2)為什么當我使用CuDNNLSTM代替LSTM ,訓練變得更快,模型的准確性會降低?

PS:

My CPU: Intel Core i7-7700處理器(8M高速緩存,高達4.20 GHz)

My GPU: nVidia GeForce GTX 1050 Ti(4 GB)

猜測它只是一個不同的,更好的實現,如果實現不同,你不應該期望相同的結果。

通常,在GPU上有效地實現算法很困難並且獲得最大性能需要特定於體系結構的實現。 因此,如果針對Nvidia GPU的特定實現與GPU的一般實現相比具有增強的性能,那就不足為奇了。 同樣也不足為奇的是,Nvidia會為加速他們的GPU代碼而不是一個致力於一般CNN實施的團隊吸收更多資源。

另一種可能性是后端使用的數據類型已從雙精度浮點數變為單半精度或甚至半精度浮點數。 較小的數據類型意味着您可以以准確性為代價更快地處理更多數字。 對於NN應用,這通常是可接受的,因為沒有單個數量需要對網絡特別准確以產生可接受的結果。

我今天遇到了類似的問題,發現了兩件可能對其他人有幫助的事情(這是一個回歸問題,數據集~2.1MM行,在4台P100 GPU的機器上運行):

  1. 在GPU機器上使用CuDNNLSTM層而不是LSTM層將適合時間從約13500秒減少到每個時期約400秒。
  2. 增加批量大小(~500到~4700)將每個時期減少到~130秒。

減少批量大小會增加損失和val損失,因此您需要做出關於您想要做出的權衡的決定。

在Keras中,使用CuDNN實現快速LSTM。

model.add(CuDNNLSTM(units, input_shape=(len(X_train), len(X_train[0])), return_sequences=True))

它只能在帶有TensorFlow后端的GPU上運行。

暫無
暫無

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

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