選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

使用 SageMaker AI 的分散式運算最佳實務

焦點模式
使用 SageMaker AI 的分散式運算最佳實務 - Amazon SageMaker AI

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

這個最佳實務頁面介紹機器學習 (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 Python SDK 中的專用 Python 模組,或透過 SageMaker APIs 搭配 AWS CLI、 進行協調AWS SDK for Python (Boto3)。SageMaker AI 提供機器學習架構的訓練容器,包括 PyTorchTensorFlowHugging Face TransformerApache MXNet。您有兩個選項可以為分散式訓練撰寫深度學習程式碼。

  • 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,因此您可以使用 mpi4py 平行處理進入點指令碼。當您在 SageMaker AI 受管訓練環境中啟動第三方分散式訓練啟動器或寫入臨機操作平行程式碼時,使用 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 和 整合的 Amazon SageMaker Studio Classic 中使用 SageMaker Training 和 SageMaker Processing APIs 平行執行資料處理任務AWS Glue。 Amazon SageMaker

選項 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 或 DeepSpeed。

您也可以使用 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 PipelinesAWS Step FunctionsAmazon Managed Workflows for Apache Airflow (MWAA) 和 SageMaker AI Workflows 支援的 Apache AirflowSageMaker

下一個主題:

Training Compiler

上一個主題:

故障診斷
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。