為什么需要分布式訓練?
大家有沒有想過這樣一個問題:即如何在擁有數百萬到數十億個參數的復雜模型上訓練TB級別的數據?這些模型的規??赡茏兊梅浅}嫶?,甚至在單個處理器的內存中無法容納。因此,采用傳統的方法來訓練這類模型是不切實際的。我們需要尋找其他解決方案來支持這種內存密集型的任務。分布式訓練就是其中之一。接下來,我們將更正式地探討它是什么,以及如何借助它來應對這些挑戰。
在深度學習領域中,當嘗試解決復雜的問題,涉及圖像、音頻或文本等內容時,通常需要使用復雜架構的模型,以獲得更好的性能。這些模型在訓練過程中可能需要計算 和存儲數百萬甚至數十億的更新權重參數,這可能導致顯存容量不足。此外,單卡的訓練需要經過很長的時間,在此期間可能出現訓練過程中斷的現象。
什么是分布式訓練?
數據并行
數據并行Data Parallelism(DP)
使用All-reduce算法時,所有的工作節點將它們的梯度發送到一個主節點,然后主節點執行規約操作。然而,這種方法主要存在兩個問題:
分布式數據并行(Distributed Data Parallelism )
Fig. Ring-Allreduce
模型并行(Model Parallelism)
我們已經討論了如何在多個設備上使用不同的數據塊來分發數據和訓練模型,通常情況下,這種方法是有效的且易于實現。然而,在一些不太常見的情況下,模型的規??赡軐τ谌魏螁蝹€節點來說都過于龐大,這時我們需要考慮模型并行性。模型并行主要分為兩種并行模式,一種是層間并行,通常被稱為管道并行(Pipeline Parallelism)
層間并行(Pipeline Parallelism)
層間并行是一種比較常見的模型并行方式,它的是在模型層與層之間進行切分,也被稱為inter-layer parallelism。顧名思義,就是把模型的不同層分別放到多個GPU上。如下圖所示,一個四層的模型如果使用層間并行分別在GPU 0和GPU 1上運行,每個GPU只需要按照先后順序存兩層即可。
層內并行(Tensor Parallelism)
促進信息化建設發展