本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon 中的分散式訓練 SageMaker
SageMaker 提供分散式訓練程式庫,並支援各種深度學習任務的分散式訓練選項,例如電腦視覺 (CV) 和自然語言處理 ()NLP。透過 SageMaker的分散式訓練程式庫,您可以執行高度可擴展且符合成本效益的自訂資料平行處理,以及模型平行深度學習訓練任務。您也可以使用其他分散式訓練架構和套件,例如 PyTorch DistributedDataParallel (DDP)、torchrun
、 MPI(mpirun
) 和 參數伺服器。下一節提供基本分散式訓練概念的相關資訊。在整個文件中,說明和範例著重於如何使用 SageMaker Python 設定深度學習任務的分散式訓練選項SDK。
提示
若要了解機器學習 (ML) 訓練及處理任務的分散式運算的最佳實務,請參閱 SageMaker 最佳實務的分散式運算。
分散式訓練概念
SageMaker的分散式訓練程式庫使用以下分散式訓練術語和功能。
資料集和批次
-
訓練資料集:用於訓練模型的所有資料。
-
全域批次大小 :從每次反覆訓練資料集中選取的記錄數目,以傳送至叢集GPUs中的 。這是在每次反覆運算時計算梯度的記錄數。如果使用資料平行處理,則等於模型副本總數乘以每個副本批次大小:
global batch size = (the number of model replicas) * (per-replica batch size)
。在機器學習文獻,全域批次大小的單一批次通常被稱為小批次。 -
每個副本批次大小:使用資料平行處理時,這是傳送至每個模型副本的記錄數。每個模型副本都會對此批次執行向前和向後傳遞,以計算權重更新。在處理下一組每個副本批次之前,產生的權重更新會在所有副本之間同步 (平均)。
-
微型批次:小批次的子集,或者,如果使用混合模型和資料平行處理,則它是每個副本大小批次的子集。當您使用 SageMaker的分散式模型平行處理程式庫時,每個微型批次都會饋送至訓練管道 one-by-one,並遵循程式庫執行時間定義的執行排程。
訓練
-
Epoch:整個資料集的一個訓練週期。每個時期有多個反覆運算這很常見。您在訓練中使用的 Epoch 數量對於您的模型及案例來說是唯一的。
-
反覆運算:使用全域批次大小批次 (小批次) 訓練資料執行的單一向前和向後傳遞。訓練期間執行的反覆運算次數取決於全域批次大小和用於訓練的 Epoch 數量。例如,如果資料集包含 5,000 個範例,而您使用的全域批次大小為 500,則需要 10 次反覆運算才能完成單一 Epoch。
-
學習速率:影響權重根據模型計算誤差而變化的量的變數。學習速率對於模型的收斂能力以及收斂的速度及最佳化方面起著重要作用。
執行個體和 GPUs
-
執行個體 : AWS 機器學習運算執行個體
。這些也稱為節點。 -
叢集大小 :使用 SageMaker的分散式訓練程式庫時,這是執行個體數目乘以每個執行個體GPUs中的 數目。例如,如果您在訓練任務中使用兩個 ml.p3.8xlarge 執行個體,GPUs每個都有 4 個,則叢集大小為 8。雖然增加叢集大小可以縮短訓練時間,但必須最佳化執行個體之間的通訊;否則,節點之間的通訊可能會增加額外負荷,並導致訓練時間變慢。 SageMaker 分散式訓練程式庫旨在最佳化 Amazon EC2 ML 運算執行個體之間的通訊,進而提高裝置使用率並縮短訓練時間。
分散式訓練方案
-
資料平行處理:分散式訓練中的策略,其中訓練資料集在運算叢集GPUs中的多個 之間分割,由多個 Amazon EC2 ML 執行個體組成。每個 都GPU包含模型的複本、接收不同批次的訓練資料、執行向前和向後傳遞,以及與其他節點共用權重更新以進行同步,然後再繼續進行下一個批次,最後是另一個 Epoch。
-
模型平行處理:分散式訓練中的策略,其中模型在運算叢集GPUs中分割為多個,由多個 Amazon EC2 ML 執行個體組成。該模型可能很複雜,並且具有大量隱藏的層與權重,因此無法容納單一執行個體的記憶體。每個 都GPU承載模型的子集,透過該子集共用和編譯資料流程和轉換。在GPU利用率和訓練時間方面,模型平行處理的效率很大程度上取決於模型的分割方式,以及用於執行向前和向後傳遞的執行排程。
-
管道執行排程 (管道):管道執行排程決定進行計算 (微型批次) 的順序,以及在模型訓練期間跨裝置處理資料的順序。管道是實現模型平行處理的真正平行化,並透過同時對不同資料範例GPUs進行運算,克服因序列運算所導致效能損失的技術。如需進一步了解,請參閱管道執行排程。
進階概念
Machine Learning (ML) 從業人員在訓練模型時,通常會面臨兩項擴展挑戰:擴展模型大小和擴展訓練資料。雖然模型大小和複雜性可能會導致更高的準確性,但您可以適應到單一 CPU或 的模型大小有限制GPU。此外,擴展模型大小可能會導致更多的計算和更長的訓練時間。
並非所有模型都能夠很好處理訓練資料擴展,因為它們需要在記憶體中擷取所有訓練資料以進行訓練。它們只能垂直縮放,並擴展到越來越大的執行個體類型。在大多數情況下,擴展訓練資料會導致更長的訓練時間。
深度學習 (DL) 是一個特定的機器學習 (ML) 演算法系列,由多層人工神經網路組成。最常見的訓練方法是使用迷你批次隨機梯度下降法 (SGD)。在迷你批次 中SGD,模型會經過訓練,方法是以降低其錯誤的方向,對係數進行小型迭代變更。這些反覆運算是在訓練資料集的相同大小的子範本 (稱為小批次) 所進行。對於每個小批次,該模型在小批次的每個記錄中執行,測量其誤差並估計誤差的梯度。然後在小批次的所有記錄中測量平均梯度,並為每個模型係數提供更新方向。訓練資料集的一個完整傳遞稱為 Epoch。模型訓練通常包含數十到數百個 Epoch。Mini-batch SGD有幾個優點:首先,其迭代設計使得訓練時間在理論上與資料集大小呈線性。其次,在指定的小批次,每個記錄都由模型單獨處理,除了最終的梯度平均值之外,不需要記錄間通訊。因此,小批次的處理特別適合於平行化和分散式。
透過將小型批次的記錄分散到不同的運算裝置,以平行化SGD訓練稱為資料平行分佈訓練,這是最常用的 DL 分佈範例。資料平行訓練是一種相關的分散式策略,可以擴展小批次大小並更快處理每個小批次。但是,資料平行訓練帶來了額外的複雜性:必須使用來自所有工作人員的梯度來計算小批次梯度平均值並將其傳達給所有工作者,這一步驟稱為 allreduce,該步驟可以代表不斷增長的額外負荷,因為訓練叢集被擴展,如果實施不當或實施不當的硬體減法,也會大大減少訓練時間。
資料平行SGD仍然需要開發人員能夠在運算裝置中至少適配模型和單一記錄,例如單一 CPU或 GPU。當在自然語言處理 (NLP) 中訓練非常大型的模型,例如大型轉換器,或在高解析度影像上對模型進行分割時,可能會發生這種情況。分解工作負載的另一種方法是在多個運算裝置對模型進行分割,這種方法稱為模型平行分散式訓練。