本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
這個最佳實務頁面介紹機器學習 (ML) 任務的各種分散式運算。本頁面的分散式運算一詞包含針對機器學習任務的分散式訓練,以及針對資料處理、資料產生、特徵工程和強化學習的平行運算。本頁面討論分散式運算中常見的挑戰,以及 SageMaker 訓練和 SageMaker 處理可用的選項。如需有關分散式運算的其他閱讀資料,請參閱分散式運算是什麼?
您可以設定 ML 任務以跨多個節點 (執行個體)、加速器 (NVIDIA GPUs、 AWS Trainium 晶片) 和 vCPU 核心以分散式方式執行。透過執行分散式運算,您可以達成各種目標,例如加速運算作業、處理大型資料集或訓練大型機器學習 (ML) 模型。
下列清單涵蓋大規模執行機器學習 (ML) 訓練工作時可能面臨的常見挑戰。
-
您必須根據機器學習任 (ML) 務、要使用的軟體程式庫以及運算資源,決定如何分散運算。
-
未必所有機器學習 (ML) 任務都能直接分散。此外,並非所有機器學習 (ML) 程式庫都支援分散式運算。
-
分散式運算未必會讓運算效率線性增加。特別是,您必須識別資料 I/O 和 GPU 間通訊是否有瓶頸或造成額外負荷。
-
分散式運算可能會干擾數值程序及改變模型的準確度。特別是對於資料平行神經網路訓練而言,變更全域批次大小,同時縱向擴充至更大的運算叢集時,也必須相應調整學習速率。
SageMaker AI 提供分散式訓練解決方案,以減輕各種使用案例的挑戰。請從下列其中一個選項,選擇最適合您的使用案例。
主題
選項 1:使用支援分散式訓練的 SageMaker AI 內建演算法
SageMaker AI 提供內建演算法,您可以透過 SageMaker AI 主控台或 SageMaker Python SDK 隨插即用。使用內建演算法,您不需要花時間進行程式碼自訂、不用了解模型的科學基礎,也不必在佈建的 Amazon EC2 執行個體執行 Docker。
SageMaker AI 內建演算法的子集支援分散式訓練。若要檢查您選擇的演算法是否支援分散式訓練,請見內建演算法相關一般資訊表格中的可平行化欄。部分演算法支援多執行個體分散式訓練,而其餘的可平行化演算法則支援單一執行個體中多個 GPU 的平行化,如同可平行化欄所示。
選項 2:在 SageMaker AI 受管訓練或處理環境中執行自訂 ML 程式碼
SageMaker AI 任務可以針對特定使用案例和架構執行個體化分散式訓練環境。這個環境可當成現成可用的白板,在這裡導入及執行自己的機器學習 (ML) 程式碼。
如果您的機器學習 (ML) 程式碼使用深度學習架構
您可以使用適用於 SageMaker Training 的深度學習容器 (DLC)
-
SageMaker AI 分散式訓練程式庫
SageMaker AI 分散式訓練程式庫提議神經網路資料平行處理和模型平行處理的 AWS受管程式碼。SageMaker AI 分散式訓練也隨附內建於 SageMaker Python SDK 的啟動器用戶端,您不需要撰寫平行啟動程式碼。若要進一步了解,請參閱 SageMaker AI 的資料平行處理程式庫和 SageMaker AI 的模型平行處理程式庫。
-
開放原始碼的分散式訓練程式庫
開放原始碼架構有自己的分散機制,例如 PyTorch 中的 DistributedDataParallelism (DDP)
或 TensorFlow 中的 tf.distribute
模組。您可以選擇在 SageMaker AI 受管架構容器中執行這些分散式訓練架構。例如,在 SageMaker AI 中訓練 MaskRCNN的範例程式碼顯示如何在 SageMaker AI PyTorch 架構容器中同時使用 PyTorch DDP,以及在 SageMaker TensorFlow 架構容器中同時使用 Horovod 。
SageMaker AI ML 容器也隨附預先安裝的 MPI
GPU 上資料平行神經網路訓練注意事項
-
可適時擴充至多個 GPU 和多機平行處理
我們經常在多個 CPU 或多個 GPU 執行個體上執行神經網路訓練任務。每個 GPU 型執行個體通常都包含多個 GPU 裝置。因此,分散式 GPU 運算可在具有多個 GPU (單一節點多個 GPU 訓練) 的單一 GPU 執行個體進行,或是在每個 (多個節點多個 GPU 訓練) 有多個 GPU 核心執行個體的多個 GPU 執行個體進行。單一執行個體訓練較容易撰寫程式碼和偵錯,而且節點內部 GPU 至 GPU 的輸送量,通常比節點間 GPU 至 GPU 輸送量快。因此,最好先垂直擴充資料平行處理 (使用具有多個 GPU 的一個 GPU 執行個體),並視需要擴充至多個 GPU 執行個體。這可能不適用於 CPU 預算高的情況 (例如,資料預處理的龐大工作負載),以及多個 GPU 執行個體的 CPU 與 GPU 比例太低時。無論任何情況,您都必須根據自己的機器學習 (ML) 訓練需求和工作負載,實驗不同的執行個體類型組合。
-
監控收斂品質
訓練具有資料平行處理的神經網路時,增加 GPU 數目,同時保持每個 GPU 的小批次大小不變,會增加小批次隨機梯度下降 (MSGD) 處理程序的全域小批次大小。MSGD 的小批次大小已知會影響下降噪聲和收斂。為了在保持準確度的同時正確擴充,您必須調整其他超參數,例如學習速率 Goyal 等
(2017)]。 -
監控 I/O 瓶頸
隨著 GPU 數量增加,讀取和寫入儲存裝置的輸送量也應該隨之提高。確保您的資料來源和管道不會成為瓶頸。
-
視需要修改訓練指令碼
針對單 GPU 訓練撰寫的訓練指令碼必須修改,才能用於多個節點多個 GPU 訓練。在多數資料平行處理程式庫中,必須修改指令碼才能執行以下操作。
-
為每個 GPU 指派批次的訓練資料。
-
使用可在多個 GPU 處理梯度運算和參數更新的最佳化工具。
-
將檢查點的責任指派給特定主機和 GPU。
-
如果您的機器學習 (ML) 程式碼涉及表格式資料處理
PySpark 是 Apache Spark 的 Python 前端 (Apache Spark 屬於開放原始碼分散式運算架構)。PySpark 已被廣泛應用於大規模生產工作負載的分散式表格式資料處理。如果想執行表格式資料處理程式碼,請考慮使用 SageMaker Processing PySpark 容器並執行平行工作。您也可以在與 Amazon EMR
選項 3:撰寫您自己的自訂分散式訓練程式碼
當您將訓練或處理任務提交至 SageMaker AI 時,SageMaker Training 和 SageMaker AI Processing APIs啟動 Amazon EC2 運算執行個體。您可以在執行個體中自訂訓練和處理環境,方法是執行您自己的 Docker 容器,或在 AWS 受管容器中安裝其他程式庫。如需使用 SageMaker Training 的 Docker 詳細資訊,請參閱調整您自己的 Docker 容器以使用 SageMaker AI,以及使用您自己的演算法和模型建立容器。如需使用 SageMaker AI 處理之 Docker 的詳細資訊,請參閱使用您自己的處理程式碼。
每個 SageMaker 訓練任務環境都包含位於 的組態檔案/opt/ml/input/config/resourceconfig.json
,而每個 SageMaker 處理任務環境都包含位於 的類似組態檔案/opt/ml/config/resourceconfig.json
。您的程式碼可讀取此檔案,尋找 hostnames
並建立節點間通訊。若要進一步了解 (包括 JSON 檔案的結構描述),請參閱分散式訓練組態和 Amazon SageMaker Processing 如何設定處理容器。您也可以在 SageMaker AI 中安裝和使用第三方分散式運算程式庫,例如 Ray
您也可以使用 SageMaker Training 和 SageMaker Processing,執行不需要工作者間通訊的自訂分散式運算。在運算用語中,這些任務通常被描述為尷尬平行或無共享。範例包括資料檔案的平行處理、在不同組態平行計算的訓練模型,或在記錄集合執行批次推論。您可以使用 Amazon SageMaker AI 輕鬆地平行處理這類共用用途案例。當您在具有多個節點的叢集上啟動 SageMaker Training 或 SageMaker Processing 任務時,SageMaker AI 預設會複寫並在所有節點上啟動您的訓練程式碼 (在 Python 或 Docker 中)。需要在 SageMaker AI TrainingInput
API 的資料輸入組態S3DataDistributionType=ShardedByS3Key
中設定 ,以促進需要將輸入資料隨機分散到多個節點的任務。
選項 4:平行或循序啟動多個工作
您也可以將機器學習 (ML) 運算工作流程分配到較小的平行或循序運算任務,每個任務都由其自己的 SageMaker Training 或 SageMaker Processing 工作表示。對於以下情況或任務,將任務拆分為多個工作可能有所助益:
-
每個子任務都有特定的資料通道和中繼資料項目 (例如超參數、模型組態或執行個體類型) 時。
-
在子任務等級實作重試步驟時。
-
在工作負載過程改變子任務的組態時,例如進行增加批次大小訓練時。
-
需要執行比單一訓練工作所允許之訓練時間上限 (最多 28 天) 更長的機器學習 (ML) 任務時。
-
運算工作流程的不同步驟需要不同的執行個體類型時。
對於超參數搜尋的特定案例,請使用 SageMaker AI 自動化模型調校。SageMaker AI Automated Model Tuning 是無伺服器參數搜尋協調工具,可根據隨機、貝葉斯或 HyperBand 的搜尋邏輯,代表您啟動多個訓練任務。
此外,若要協調多個訓練任務,您也可以考慮工作流程協調工具,例如 SageMaker Pipelines