本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
SageMaker 最佳實務的分散式運算
這個最佳實務頁面介紹機器學習 (ML) 任務的各種分散式運算。本頁面的分散式運算一詞包含針對機器學習任務的分散式訓練,以及針對資料處理、資料產生、特徵工程和強化學習的平行運算。在本頁中,我們將討論分散式運算中常見的挑戰,以及 SageMaker 訓練與 SageMaker 處理中的可用選項。如需有關分散式運算的其他閱讀資料,請參閱分散式運算是什麼?
您可以將機器 AWS 學習工作設定為在多個節點 (執行個體)、加速器 (NVIDIA GPU、晶片) 和 vCPU 核心之間以分散式方式執行。透過執行分散式運算,您可以達成各種目標,例如加速運算作業、處理大型資料集或訓練大型 ML 模型。
下列清單涵蓋大規模執行 ML 訓練任務時可能面臨的常見挑戰。
-
您必須根據 ML 任務、要使用的軟體程式庫以及運算資源,決定如何分散運算。
-
未必所有 ML 任務都能直接發佈。此外,並非所有 ML 程式庫都支援分散式運算。
-
分散式運算未必會讓運算效率線性增加。特別是,您必須識別資料 I/O 和 GPU 間通訊是否有瓶頸或造成額外負荷。
-
分佈式運算可能會干擾數值程序,改變模型的準確度。特別是對於資料平行神經網路訓練而言,變更全域批次大小,同時縱向擴充至更大的運算叢集時,也必須相應調整學習速率。
SageMaker 提供分散式訓練解決方案,以減輕各種使用案例的挑戰。請從下列其中一個選項,選擇最適合您的使用案例:
主題
選項 1:使用支援分散式訓練的 SageMaker 內建演算法
SageMaker 提供內建演算法,您可以透過 SageMaker主控台或 SageMaker Python SDK 立即使用這些演算法。使用內建演算法,您不需要花時間進行程式碼自訂、不用了解模型的科學基礎,也不必在佈建的 Amazon EC2 執行個體執行 Docker。
SageMaker 內建演算法的子集支援分散式訓練。若要檢查您選擇的演算法是否支援分散式訓練,請見內建演算法相關一般資訊表格中的可平行化欄。部分演算法支援多執行個體分散式訓練,而其餘的可平行化演算法則支援單一執行個體中多個 GPU 的平行化,如同可平行化欄所示。
選項 2:在 SageMaker 受管理的訓練或處理環境中執行自訂 ML 程式碼
SageMaker 工作可以針對特定用例和框架實例化分佈式培訓環境。此環境充當 ready-to-use 白板,您可以在其中攜帶和運行自己的 ML 代碼。
如果您的 ML 程式碼使用深度學習架構
您可以使用適用於訓練的 Deep Learning Containers (DLC)
-
SageMaker 分散式訓練資料庫
SageMaker 分散式訓練程式庫針對神經網路資料平行處 AWS理和模型平行處理原則提出託管程式碼。 SageMaker 分散式訓練也隨附 SageMaker Python SDK 內建的啟動器用戶端,而且您不需要撰寫 parallel 啟動程式碼。若要深入了解,請參閱SageMaker的資料平行程度程式庫和SageMaker模型平行程式庫。
-
開放原始碼的分散式訓練程式庫
開放原始碼架構有自己的散佈機制,例如 DistributedDataParallelism (DDP) PyTorch
tf.distribute
或. TensorFlow 您可以選擇在 SageMaker-managed 架構容器中執行這些分散式訓練架構。例如,中用於訓練 MaskRCNN 的範例程式碼會 SageMaker示範如何在架構容器中同時使用 PyTorch DDP,以及如何在 SageMaker PyTorch 架構容器中同時使用 Horov od。 SageMaker TensorFlow
SageMaker 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 的星火,這是一個開源的分佈式計算框架的 Python 前端。 PySpark 已廣泛應用於大規模生產工作負載的分散式表格資料處理。如果您想要執行表格式資料處理程式碼,請考慮使用SageMaker 處理 PySpark 容器並執行 parallel 工作。您也可以使用 Amazon 工作 SageMaker 室經典版中的 SageMaker 培訓和 SageMaker 處理 API,parallel 執行資料處理任務,該 API 與 Amazon EMR
選項 3:撰寫您自己的自訂分散式訓練程式碼
當您向提交培訓或處理任務時 SageMaker, SageMaker 訓練和 SageMaker處理 API 會啟動 Amazon EC2 運算執行個體。您可以執行自己的 Docker 容器或在 AWS 受管理容器中安裝其他程式庫,在執行個體中自訂訓練和處理環境。有關 Docker 與 SageMaker 訓練的詳情,請參閱調整您自己的 Docker 容器以使用 SageMaker和使用您自己的演算法和模型建立容器。如需有關 Docker 與 SageMaker處理的詳細資訊,請參閱使用您自己的處理程式碼。
每個 SageMaker 訓練工作環境都包含一個配置檔案/opt/ml/input/config/resourceconfig.json
,且每個 SageMaker 處理工作環境都包含一個類似的組態檔案,位於/opt/ml/config/resourceconfig.json
。您的程式碼可讀取此檔案,尋找 hostnames
並建立節點間通訊。若要進一步了解 (包括 JSON 檔案的結構描述),請參閱分散式訓練組態和 Amazon SageMaker 處理如何設定您的處理容器。您也可以安裝和使用協力廠商的分散式計算程式庫,例如 Ray
您也可以使用「 SageMaker 訓練與 SageMaker 處理」來執行不需要工作者間通訊的自訂分散式計算。在運算文獻中,這些任務通常被描述為極度並行 或無共享。範例包括資料檔案的平行處理、在不同組態平行訓練模型,或在記錄集合執行批次推論。您可以使用 Amazon 輕鬆並行處理此類無共享用案例。 SageMaker當您在具有多個節點的叢集上啟動「 SageMaker 訓練」或「 SageMaker 處理」工作時, SageMaker 依預設會在所有節點上複寫並啟動訓練程式碼 (使用 Python 或 Docker)。透過S3DataDistributionType=ShardedByS3Key
在 SageMaker TrainingInput
API 的資料輸入設定中設定,可以透過設定來進行需要隨機散佈輸入資料到這類多個節點的工作。
選項 4:平行或依序啟動多個任務
您也可以將機器學習計算工作流程散佈至較小的 parallel 或循序運算工作,每個工作都由自己的 SageMaker 訓練或 SageMaker 處理工作表示。對於以下情況或任務,將任務拆分為多個任務可能有所助益:
-
每個子任務都有特定的資料頻道和中繼資料項目 (例如超參數、模型組態或執行個體類型) 時。
-
在子任務等級實作重試步驟時。
-
在工作負載過程改變子任務的組態時,例如進行增加批次大小訓練時。
-
需要執行比單一訓練任務所允許之訓練時間上限 (最多 28 天) 的 ML 任務時。
-
運算工作流程的不同步驟需要不同的執行個體類型時。
對於超參數搜尋的特定情況,請使用「SageMaker 自動模型調整」。 SageMaker 自動化模型調整是一種無伺服器參數搜尋協調器,根據可以是隨機、貝葉斯或的搜尋邏輯,代表您啟動多個訓練工作。 HyperBand
此外,若要協調多個訓練任務,您也可以考慮使用 Amazon Apache Airflow (MWAA) 和工作流程所支援的工作流程協調工具,例如SageMaker 管