Azure Machine Learning 的分散式定型
在本文中,您將了解分散式訓練,以及 Azure Machine Learning 如何支援分散式訓練來建立深度學習模型。
在分散式訓練中,訓練模型的工作負載分散到多個迷你處理器分攤,稱為背景工作節點。 這些背景工作節點平行運作以加速模型訓練。 分散式訓練可用於傳統的機器學習模型,但更適用於需要大量計算和時間的工作,例如用於訓練深度神經網路的深度學習。
深度學習和分散式訓練
分散式訓練有兩個主要類型:資料平行處理和模型平行處理。 針對深度學習模型上的分散式訓練,Python 中的 Azure Machine Learning SDK 支援與 PyTorch 和 TensorFlow 的整合。 兩者都是熱門架構,採用資料平行處理原則進行分散式訓練,而且可以使用 Horovod 將計算速度最佳化。
針對不需要分散式訓練的機器學習模型,請參閱使用 Azure Machine Learning 訓練模型,以了解使用 Python SDK 訓練模型的不同方式。
資料平行處理原則
資料平行處理是實作兩種分散式訓練方法中最簡單的方式,且足以用於大部分的使用案例。
在此方法中,資料會分割成分割區,而分割區數目等於計算叢集或無伺服器計算中可用節點的總數。 模型會在其中每個背景工作節點中複製,而且每個節點會在自己的資料子集上運作。 請記住,每個節點都必須具備支援要訓練模型的能力,也就是整個模型必須適合每個節點。
下圖顯示這個方法。
每個節點都會個別計算其訓練範例的預測和已標記輸出之間的誤差。 接著,每個節點都會根據誤差來更新其模型,而且必須將其所有變更傳達給其他節點,以更新其對應的模型。 背景工作角色節點必須在批次計算結束時同步模型參數或梯度,以確保其訓練的是一致的模型。
模型平行處理
在模型平行處理中 (也稱為網路平行處理),模型會分割成不同部分,並且可以在不同的節點中同時執行,而且每一個部分都會在相同的資料上執行。 此方法的可擴縮性取決於演算法的工作平行處理程度,而且比資料平行處理的實作更複雜。
在模型平行處理中,背景工作節點只需要同步共用參數,通常是針對每個向前或向後傳播步驟進行一次同步。 此外,較大的模型也不會有問題,因為每個節點都是在相同訓練資料的模型子區段上運作。