2016-06-10 157 views
2

this TensorFlow tutorial中,您可以使用N個GPU將N個小批量(每個包含M個訓練樣本)分配給每個GPU並同時計算梯度。在TensorFlow中進行多GPU訓練的優勢是什麼?

然後,您對從N個GPU中收集的漸變進行平均並更新模型參數。

但這與使用單GPU來計算N * M個訓練樣本的梯度,然後更新參數的效果相同。

因此,我認爲唯一的優點是可以在相同的時間內使用更大尺寸的微型批次。

但是大型小批量一定更好嗎?

我以爲你不應該使用一個大型的小批量,爲了使優化更強大的鞍點。

如果大尺寸微型批次確實不是更好,爲什麼你會關心多GPU學習,甚至是多服務器學習?

(上面的教程是一個同步的訓練。如果是異步的訓練,然後我可以看到的優點,因爲參數將在不平均由每個GPU計算出的梯度來更新)

+0

較大的小批量不是更好,但也不是較小的小批量。批量大小的最佳選擇嚴重依賴於各種因素。 – Aenimated1

+0

假設由於VRAM尺寸的原因,每GPU有1000個採樣。假設最佳的最小批量爲2000。然後在這個同步多GPU設置中,使用兩個以上的GPU應該沒有任何優勢。對? – mp2893

+0

我認爲,相反,理論上(但不是實際上),您可以從2000個GPU中受益,每個GPU都可以計算單個示例的漸變。實際上,GPU開始使用相當多的並行性,但是我希望通過在(例如)4個GPU(每個負責計算每批500個樣本的梯度)之間分配計算來看到性能的提高。 – Aenimated1

回答

2

主要目的多-GPU學習是爲了讓您在更短的時間內訓練大型數據集。對於較大批量的小批量生產不一定更好,但至少您可以在更可行的時間內完成學習。

更準確地說,如果您使用異步SGD算法,那麼N個小批量不會以同步方式進行訓練。由於算法在使用多GPU時發生了變化,因此不等於在單GPU上使用MxN大小的小批量和SGD算法。

如果您使用同步多GPU訓練,好處主要是縮短時間。您可以使用M/N大小迷你匹配來保持有效的最小批量大小,當然由於較小的批量大小會導致更多開銷,因此可擴展性受到限制。大量計算節點上的數據交換和同步也是災難。

最後,爲了解決可擴展性問題,人們在同時使用大量GPU時轉向A-SGD。因此,您可能看不到有人在數百(甚至數十)個GPU上使用同步多GPU訓練。

+0

因此,在極端情況下,您擁有無限數量的GPU,您可以將整個訓練樣本分成小批量並將其分發給無限GPU。然後,平均由無限GPU計算出的梯度和更新參數將與「批量學習」完全相同。對此沒有任何隨機性。但這是可以的,因爲即使我們有非常大的訓練樣本,我們仍然可以在可行的時間訓練模型。我的理解是否正確? – mp2893

+0

我知道異步多GPU訓練是一個不同的故事。在這篇文章中,我關注同步多GPU訓練。 – mp2893

+0

@ mp2893,好吧,對於同步多GPU訓練,好處是時間減少。但是,您可以使用M/N大小的迷你匹配來保持有效的最小批量大小,當然可擴展性是有限的。 – kangshiyin

相關問題