View a markdown version of this page

在 Amazon SageMaker AI 中使用異質叢集設定訓練任務 - Amazon SageMaker AI

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

在 Amazon SageMaker AI 中使用異質叢集設定訓練任務

本節提供如何使用包含多個執行個體類型的異質叢集來執行訓練任務之說明。

開始之前,請注意下列事項。

  • 所有執行個體群組都共用相同的 Docker 映像和訓練指令碼。因此,您應該修改訓練指令碼,以偵測它所屬的執行個體群組,並相應地進行 fork 執行。

  • SageMaker AI 本機模式不相容於異質叢集功能。

  • 異質叢集訓練任務的 Amazon CloudWatch 日誌串流不會依執行個體群組分組。您需要從日誌中找出哪些節點在哪個群組中。

選項 1:使用 SageMaker Python SDK

請遵循有關如何使用 SageMaker Python SDK 為異質叢集設定執行個體群組的指示。

  1. 若要針對訓練任務配置異質叢集的執行個體群組,請使用 sagemaker.instance_group.InstanceGroup 類別。您可以為每個執行個體群組指定自訂名稱、執行個體類型,以及每個執行個體群組的執行個體數目。如需更多資訊,請參閱 SageMaker AI Python SDK 文件中的 sagemaker.instance_group.InstanceGroup。

    注意

    如需有關可用執行個體類型和可在異質叢集中設定的執行個體數目上限等詳細資訊,請參閱 InstanceGroup API 參考資料。

    下列程式碼範例說明如何設定兩個執行個體群組,這兩個執行個體群組包含兩個名為 instance_group_1 的 ml.c5.18xlarge 僅限 CPU 執行個體,以及一個名為 instance_group_2 的 ml.p3dn.24xlarge GPU 執行個體,如下圖所示。

    如何在 SageMaker 訓練任務中指派資料的概念性範例。

    上圖的概念性範例說明如何將預先訓練程序 (例如資料預先處理) 指派給 CPU 執行個體群組,並將預先處理的資料串流至 GPU 執行個體群組。

    from sagemaker.instance_group import InstanceGroup instance_group_1 = InstanceGroup( "instance_group_1", "ml.c5.18xlarge", 2 ) instance_group_2 = InstanceGroup( "instance_group_2", "ml.p3dn.24xlarge", 1 )
  2. 使用執行個體群組物件,設定訓練輸入頻道,並透過 sagemaker.inputs.TrainingInput 的 instance_group_names 引數,將執行個體群組指派給頻道。instance_group_names 引數會接受執行個體群組名稱的字串清單。

    下列範例顯示如何設定兩個訓練輸入頻道,並指派在上一個步驟範例中建立的執行個體群組。您也可以指定 Amazon S3 儲存貯體的 s3_data 引數路徑,讓執行個體群組為您的使用目的處理資料。

    from sagemaker.inputs import TrainingInput training_input_channel_1 = TrainingInput( s3_data_type='S3Prefix', # Available Options: S3Prefix | ManifestFile | AugmentedManifestFile s3_data='s3://your-training-data-storage/folder1', distribution='FullyReplicated', # Available Options: FullyReplicated | ShardedByS3Key input_mode='File', # Available Options: File | Pipe | FastFile instance_groups=["instance_group_1"] ) training_input_channel_2 = TrainingInput( s3_data_type='S3Prefix', s3_data='s3://your-training-data-storage/folder2', distribution='FullyReplicated', input_mode='File', instance_groups=["instance_group_2"] )

    如需 TrainingInput 引數的詳細資訊,請參閱以下連結。

  3. 使用 instance_groups 引數設定 SageMaker AI 估算器,如下列程式碼範例所示。instance_groups 引數接受 InstanceGroup 物件的清單。

    注意

    異質叢集功能可透過 SageMaker AI PyTorch 和 TensorFlow 架構估算器類別取得。系統支援的架構為 PyTorch v1.10 或較新版本,以及 TensorFlow v2.6 或較新版本。若要尋找可用架構容器、架構版本和 Python 版本的完整清單,請參閱 AWS 深度學習容器 GitHub 儲存庫中的 SageMaker AI Framework Containers。

    PyTorch
    from sagemaker.pytorch import PyTorch estimator = PyTorch( ... entry_point='my-training-script.py', framework_version='x.y.z', # 1.10.0 or later py_version='pyxy', job_name='my-training-job-with-heterogeneous-cluster', instance_groups=[instance_group_1, instance_group_2] )
    TensorFlow
    from sagemaker.tensorflow import TensorFlow estimator = TensorFlow( ... entry_point='my-training-script.py', framework_version='x.y.z', # 2.6.0 or later py_version='pyxy', job_name='my-training-job-with-heterogeneous-cluster', instance_groups=[instance_group_1, instance_group_2] )
    注意

    instance_type 與 instance_count 引數對和 SageMaker AI 估算器類別的 instance_groups 引數會相互排斥。對於同質叢集訓練,請使用 instance_type 和 instance_count 引數對。若要進行異質叢集訓練,請使用 instance_groups。

    注意

    若要尋找可用架構容器、架構版本和 Python 版本的完整清單,請參閱 AWS 深度學習容器 GitHub 儲存庫中的 SageMaker AI Framework Containers。

  4. 使用執行個體群組配置的訓練輸入頻道來設定 estimator.fit 方法,然後開始訓練任務。

    estimator.fit( inputs={ 'training': training_input_channel_1, 'dummy-input-channel': training_input_channel_2 } )

選項 2:使用低階 SageMaker API

如果您使用 AWS Command Line Interface 或 , 適用於 Python (Boto3) 的 AWS SDK 並想要使用低階 SageMaker APIs 向異質叢集提交訓練任務請求,請參閱下列 API 參考。