使用 開始使用 SageMaker HyperPod AWS CLI - Amazon SageMaker AI

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

使用 開始使用 SageMaker HyperPod AWS CLI

使用 HyperPod 的 AWS CLI 命令建立您的第一個 SageMaker HyperPod 叢集。

使用 Slurm 建立您的第一個 SageMaker HyperPod 叢集

下列教學課程示範如何建立新的 SageMaker HyperPod 叢集,並透過 SageMaker HyperPod 的AWS CLI 命令使用 Slurm 進行設定。遵循教學課程,您將建立具有三個 Slurm 節點的 HyperPod 叢集:my-controller-groupmy-login-groupworker-group-1

使用 API 驅動的組態方法,您可以使用 直接在 CreateCluster API 請求中定義 Slurm 節點類型和分割區指派SlurmConfig。這不需要單獨的provisioning_parameters.json檔案,並提供內建驗證、偏離偵測和per-instance-group FSx 組態。

  1. 首先,準備生命週期指令碼並將其上傳至 Amazon S3 儲存貯體。在叢集建立期間,HyperPod 會在每個執行個體群組中執行它們。使用下列命令將生命週期指令碼上傳至 Amazon S3。

    aws s3 sync \ ~/local-dir-to-lifecycle-scripts/* \ s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src
    注意

    S3 儲存貯體路徑應以字首 開頭sagemaker-,因為 SageMaker HyperPod 的 IAM 角色AmazonSageMakerClusterInstanceRolePolicy只允許存取以特定字首開頭的 Amazon S3 儲存貯體。

    如果您是從頭開始,請使用 Awsome 分散式訓練 GitHub 儲存庫中提供的範例生命週期指令碼。下列子步驟說明如何將範例生命週期指令碼下載並上傳至 Amazon S3 儲存貯體。

    1. 將生命週期指令碼範例的副本下載到本機電腦上的目錄。

      git clone https://github.com/aws-samples/awsome-distributed-training/
    2. 前往目錄 1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-config,您可以在其中找到一組生命週期指令碼。

      cd awsome-distributed-training/1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-config

      若要進一步了解生命週期指令碼範例,請參閱使用生命週期指令碼自訂 SageMaker HyperPod 叢集

    3. 將指令碼上傳到 s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src。您可以使用 Amazon S3 主控台或執行下列 Amazon S3 AWS CLI 命令來執行此操作。

      aws s3 sync \ ~/local-dir-to-lifecycle-scripts/* \ s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src
    注意

    使用 API 驅動的組態,您不需要建立或上傳provisioning_parameters.json檔案。Slurm 組態會在下一個步驟的 CreateCluster API 請求中直接定義。

  2. 準備 JSON 格式的 CreateCluster 請求檔案,並儲存為 create_cluster.json

    使用 API 驅動的組態,您可以使用 SlurmConfig 欄位指定每個執行個體群組的 Slurm 節點類型和分割區指派。您也可以使用 設定叢集層級 Slurm 設定Orchestrator.Slurm

    對於 ExecutionRole,請提供您使用 使用 SageMaker HyperPod 的先決條件 中受管 AmazonSageMakerClusterInstanceRolePolicy 建立的 IAM 角色的 ARN。

    { "ClusterName": "my-hyperpod-cluster", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "InstanceType": "ml.c5.xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Controller" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::<account-id>:role/HyperPodExecutionRole", "InstanceStorageConfigs": [ { "EbsVolumeConfig": { "VolumeSizeInGB": 500 } } ] }, { "InstanceGroupName": "my-login-group", "InstanceType": "ml.m5.4xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Login" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::<account-id>:role/HyperPodExecutionRole" }, { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.trn1.32xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Compute", "PartitionNames": ["partition-1"] }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::<account-id>:role/HyperPodExecutionRole" } ], "Orchestrator": { "Slurm": { "SlurmConfigStrategy": "Managed" } } }

    SlurmConfig 欄位:

    欄位 Description
    NodeType 執行個體群組的 Slurm 角色。有效值:ControllerLoginCompute
    PartitionNames 要指派運算節點的 Slurm 分割區 (Slurm partition)。僅適用於Compute節點類型。

    Orchestrator.Slurm 欄位:

    欄位 Description
    SlurmConfigStrategy 控制 HyperPod 如何管理 slurm.conf。有效值: Managed (預設)Overwrite、、 Merge

    SlurmConfigStrategy 選項:

    • Managed (建議):HyperPod 可完全管理和slurm.conf偵測未經授權的變更 (偏離偵測)。如果偵測到偏離,更新會失敗。

    • Overwrite:HyperPod 會在更新slurm.conf時覆寫,忽略任何手動變更。

    • Merge:HyperPod 會保留手動變更,並將其與 API 組態合併。

    新增 FSx for Lustre (選用):

    若要將 FSx for Lustre 檔案系統掛載到您的運算節點,請將 FsxLustreConfig新增至執行個體群組InstanceStorageConfigs的 。這需要自訂 VPC 組態。

    { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.trn1.32xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Compute", "PartitionNames": ["partition-1"] }, "InstanceStorageConfigs": [ { "FsxLustreConfig": { "DnsName": "fs-0abc123def456789.fsx.us-west-2.amazonaws.com", "MountPath": "/fsx", "MountName": "abcdefgh" } } ], "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::<account-id>:role/HyperPodExecutionRole" }

    新增 FSx for OpenZFS (選用):

    您也可以掛載 FSx for OpenZFS 檔案系統:

    "InstanceStorageConfigs": [ { "FsxOpenZfsConfig": { "DnsName": "fs-0xyz789abc123456.fsx.us-west-2.amazonaws.com", "MountPath": "/shared" } } ]
    注意

    每個執行個體群組最多可以有一個 FSx for Lustre 和一個 FSx for OpenZFS 組態。不同的執行個體群組可以掛載不同的檔案系統。

    新增 VPC 組態 (FSx 需要):

    如果使用 FSx,您必須指定自訂 VPC 組態:

    { "ClusterName": "my-hyperpod-cluster", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "InstanceType": "ml.c5.xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Controller" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::<account-id>:role/HyperPodExecutionRole" }, ], "Orchestrator": { "Slurm": { "SlurmConfigStrategy": "Managed" } }, "VpcConfig": { "SecurityGroupIds": ["sg-0abc123def456789a"], "Subnets": ["subnet-0abc123def456789a"] } }
  3. 使用下列命令建立叢集。

    aws sagemaker create-cluster --cli-input-json file://complete/path/to/create_cluster.json

    這應該會傳回所建立叢集的 ARN。

    { "ClusterArn": "arn:aws:sagemaker:us-west-2:111122223333:cluster/my-hyperpod-cluster" }

    如果您由於資源限制而收到錯誤,請確定您將執行個體類型變更為帳戶中具有足夠配額的執行個體類型,或遵循 SageMaker HyperPod 配額請求額外的配額。

    常見的驗證錯誤:

    錯誤 Resolution
    「叢集必須只有一個 InstanceGroup 與控制器節點類型」 確保只有一個執行個體群組具有 SlurmConfig.NodeType"Controller"
    「分割區只能指派給運算節點類型」 PartitionNamesControllerLogin 執行個體群組移除
    「FSx 組態僅支援自訂 VPC」 使用 FSx 時VpcConfig新增至您的請求
  4. 執行 describe-cluster 檢查叢集的狀態。

    aws sagemaker describe-cluster --cluster-name my-hyperpod-cluster

    回應範例:

    { "ClusterArn": "arn:aws:sagemaker:us-west-2:111122223333:cluster/my-hyperpod-cluster", "ClusterName": "my-hyperpod-cluster", "ClusterStatus": "Creating", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "InstanceType": "ml.c5.xlarge", "InstanceCount": 1, "CurrentCount": 0, "TargetCount": 1, "SlurmConfig": { "NodeType": "Controller" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<bucket>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" }, { "InstanceGroupName": "my-login-group", "InstanceType": "ml.m5.4xlarge", "InstanceCount": 1, "CurrentCount": 0, "TargetCount": 1, "SlurmConfig": { "NodeType": "Login" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<bucket>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" }, { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.trn1.32xlarge", "InstanceCount": 1, "CurrentCount": 0, "TargetCount": 1, "SlurmConfig": { "NodeType": "Compute", "PartitionNames": ["partition-1"] }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<bucket>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" } ], "Orchestrator": { "Slurm": { "SlurmConfigStrategy": "Managed" } }, "CreationTime": "2024-01-15T10:30:00Z" }

    在叢集的狀態變為 InService 之後,請繼續下一個步驟。叢集建立通常需要 10-15 分鐘。

  5. 執行 list-cluster-nodes 檢查叢集節點的詳細資訊。

    aws sagemaker list-cluster-nodes --cluster-name my-hyperpod-cluster

    回應範例:

    { "ClusterNodeSummaries": [ { "InstanceGroupName": "my-controller-group", "InstanceId": "i-0abc123def456789a", "InstanceType": "ml.c5.xlarge", "InstanceStatus": { "Status": "Running", "Message": "" }, "LaunchTime": "2024-01-15T10:35:00Z" }, { "InstanceGroupName": "my-login-group", "InstanceId": "i-0abc123def456789b", "InstanceType": "ml.m5.4xlarge", "InstanceStatus": { "Status": "Running", "Message": "" }, "LaunchTime": "2024-01-15T10:35:00Z" }, { "InstanceGroupName": "worker-group-1", "InstanceId": "i-0abc123def456789c", "InstanceType": "ml.trn1.32xlarge", "InstanceStatus": { "Status": "Running", "Message": "" }, "LaunchTime": "2024-01-15T10:36:00Z" } ] }

    InstanceId 是您的叢集使用者記錄 (aws ssm) 到其中所需的項目。如需記錄至叢集節點和執行 ML 工作負載的詳細資訊,請參閱SageMaker HyperPod 叢集上的任務

  6. 使用 AWS Systems Manager Session Manager 連線至您的叢集。

    aws ssm start-session \ --target sagemaker-cluster:my-hyperpod-cluster_my-login-group-i-0abc123def456789b \ --region us-west-2

    連線後,請確認 Slurm 已正確設定:

    # Check Slurm nodes sinfo # Check Slurm partitions sinfo -p partition-1 # Submit a test job srun -p partition-1 --nodes=1 hostname

刪除叢集並清理資源

在您成功測試了建立 SageMaker HyperPod 叢集之後,它會繼續以 InService 狀態執行,直到您刪除叢集為止。我們建議您任何使用隨需 SageMaker AI 容量建立的叢集,若未使用將其刪除,以避免根據隨需定價持續產生服務費用。在本教學課程中,您已建立由三個執行個體群組組成的叢集。請務必執行下列命令來刪除叢集。

aws sagemaker delete-cluster --cluster-name my-hyperpod-cluster

若要從用於本教學課程的 Amazon S3 儲存貯體中清除生命週期指令碼,請前往您在叢集建立期間使用的 Amazon S3 儲存貯體,並完全移除檔案。

aws s3 rm s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src --recursive

如果您已測試在叢集上執行任何模型訓練工作負載,也請檢查您是否已上傳任何資料,或您的任務是否已將任何成品儲存至不同的 Amazon S3 儲存貯體或檔案系統服務,例如 Amazon FSx for Lustre 和 Amazon Elastic File System。若要避免產生費用,請從儲存體或檔案系統刪除所有成品和資料。