為什么以及如何使用多個GPU進行分布式訓練
大規模訓練AI模型的數據科學家或機器學習愛好者將不可避免地達到上限。當數據集大小增加時,處理時間可能會從幾分鐘增加到幾小時到幾天到幾周!數據科學家轉向包含多個GPU以及機器學習模型的分布式訓練,以在很短的時間內加速和開發完整的AI模型。
我們將討論GPU與CPU對機器學習的用處,為什么使用多個GPU進行分布式訓練最適合大型數據集,以及如何開始使用最佳實踐訓練機器學習模型。
為什么GPU適合訓練神經網絡?
訓練階段是構建神經網絡或機器學習模型中資源最密集的部分。神經網絡在訓練階段需要數據輸入。該模型基于數據集之間所做的更改,基于層中處理的數據輸出相關預測。第一輪輸入數據本質上形成了機器學習模型理解的基線;隨后的數據集計算權重和參數以訓練機器預測精度。
對于簡單或少量的數據集,等待幾分鐘是可行的。然而,隨著輸入數據量的增加,訓練時間可能會達到數小時、數天甚至更長。
CPU難以處理大量數據,例如對數十萬個浮點數的重復計算。深度神經網絡由矩陣乘法和向量加法等操作組成。
提高此過程速度的一種方法是使用多個GPU切換分布式訓練。基于分配給訓練階段的張量核心的數量,用于分布式訓練的GPU可以比CPU更快地移動過程。
GPU或圖形處理單元最初設計用于處理重復計算,為視頻游戲的圖形推斷和定位數十萬個三角形。再加上大內存帶寬和執行數百萬次計算的先天能力,GPU非常適合通過數百個epoch(或模型迭代)進行神經網絡訓練所需的快速數據流,非常適合深度學習訓練。
什么是機器學習中的分布式訓練?
分布式訓練承擔訓練階段的工作量并將其分布在多個處理器上。這些微型處理器協同工作以加快訓練過程,而不會降低機器學習模型的質量。由于數據被并行劃分和分析,每個微型處理器在不同批次的訓練數據上訓練機器學習模型的副本。
結果在處理器之間進行通信(當批次完全完成時或每個處理器完成其批次時)。下一次迭代或epoch再次從一個稍微新訓練的模型開始,直到它達到預期的結果。
在微型處理器(在我們的例子中是GPU)之間分配訓練有兩種最常見的方法:數據并行和模型并行。
數據并行
數據并行是數據的劃分并將其分配給每個GPU以使用相同的AI模型進行評估。一旦所有GPU完成前向傳遞,它們就會輸出梯度或模型的學習參數。由于有多個梯度,只有1個AI模型需要訓練,梯度被編譯、平均、縮減為單個值,最終更新模型參數,用于下一個epoch的訓練。這可以同步或異步完成。
同步數據并行是我們的GPU組必須等到所有其他GPU完成梯度計算,然后再平均并減少梯度以更新模型參數。一旦更新了參數,模型就可以繼續下一個epoch。
異步數據并行是GPU獨立訓練而無需執行同步梯度計算的地方。相反,梯度在完成時會傳回參數服務器。每個GPU不等待另一個GPU完成計算,也不計算梯度平均,因此是異步的。異步數據并行需要一個單獨的參數服務器用于模型的學習部分,因此成本更高一些。
在每一步之后計算梯度并對訓練數據進行平均是最耗費計算的。由于它們是重復計算,因此GPU一直是加速此步驟以達到更快結果的選擇。數據并行性相當簡單且經濟高效,但是有時模型太大而無法容納在單個微型處理器上。
模型并行
與拆分數據相比,模型并行性在工作GPU之間拆分模型(或訓練模型的工作負載)。分割模型將特定任務分配給單個工作人員或多個工作人員以優化GPU使用。模型并行可以被認為是一條人工智能裝配線,它創建了一個多層網絡,可以處理數據并行不可行的大型數據集。模型并行性需要專家來確定如何對模型進行分區,但會帶來更好的使用和效率。
多GPU分布式訓練更快嗎?
購買多個GPU可能是一項昂貴的投資,但比其他選擇要快得多。CPU也很昂貴,不能像GPU那樣擴展。跨多個層和多個GPU訓練機器學習模型以進行分布式訓練可提高訓練階段的生產力和效率。
當然,這意味著減少訓練模型所花費的時間,但它也使您能夠更快地產生(和重現)結果并在任何事情失控之前解決問題。在為您的努力產生結果方面,它是訓練數周與數小時或數分鐘訓練之間的差異(取決于使用的GPU數量)。
您需要解決的下一個問題是如何開始在機器學習模型中使用多個GPU進行分布式訓練。
如何使用多個GPU進行訓練?
如果您想使用多個GPU處理分布式訓練,首先要確定您是否需要使用數據并行性或模型并行性。該決定將基于數據集的大小和范圍。
您能否讓每個GPU使用數據集運行整個模型?或者在具有更大數據集的多個GPU上運行模型的不同部分是否會更省時?通常,數據并行是分布式學習的標準選項。從同步數據并行開始,然后深入研究模型并行或異步數據并行,其中需要單獨的專用參數服務器。
我們可以開始在您的分布式訓練過程中將您的GPU鏈接在一起。
根據您的并行決策分解您的數據。例如,您可以使用當前數據批次(全局批次)并將其劃分為八個子批次(本地批次)。如果全局批次有512個樣本并且您有8個GPU,則8個本地批次中的每一個都將包含64個樣本。
八個GPU或迷你處理器中的每一個都獨立運行本地批處理:前向傳遞、后向傳遞、輸出權重梯度等。
局部梯度的權重修改在所有8個微型處理器中有效地混合,因此一切都保持同步,并且模型已經過適當的訓練(當使用同步數據并行時)。
重要的是要記住,一個用于分布式訓練的GPU需要在訓練階段托管收集的數據和其他GPU的結果。如果您不密切注意,您可能會遇到一個GPU內存不足的問題。
除此之外,在考慮使用多個GPU進行分布式訓練時,收益遠遠超過成本!最后,當您為模型選擇正確的數據并行化時,每個GPU都會減少在訓練階段花費的時間、提高模型效率并產生更高端的結果。
尋找有關分布式訓練和其他機器學習主題的更多信息?
神經網絡是高度復雜的技術,僅訓練階段就可能令人生畏。通過利用和了解更多關于如何利用額外的硬件在更短的時間內創建更有效的模型,數據科學可以改變我們的世界!當您可以在數周和數月而不是數月和數年的時間內創建更有效的神經網絡時,用于分布式訓練的GPU非常值得初始投資。