使用 管理 SageMaker HyperPod Slurm 叢集 AWS CLI - Amazon SageMaker AI

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

使用 管理 SageMaker HyperPod Slurm 叢集 AWS CLI

下列主題提供以 JSON 格式撰寫 SageMaker HyperPod API 請求檔案,並使用 AWS CLI 命令執行這些檔案的指引。

建立新的叢集

  1. 準備生命週期組態指令碼,並將其上傳至 S3 儲存貯體,例如 s3://sagemaker-amzn-s3-demo-bucket/lifecycle-script-directory/src/。下列步驟 2 假設指定的 S3 儲存貯體on_create.sh中有名為 的進入點指令碼。

    重要

    請務必將 S3 路徑設定為以 開頭s3://sagemaker-SageMaker HyperPod 的 IAM 角色AmazonSageMakerClusterInstanceRolePolicy連接 受管,允許存取具有特定字首 的 S3 儲存貯體sagemaker-

  2. 準備 JSON 格式的 CreateCluster API 請求檔案。您應該將執行個體群組設定為與您在 provisioning_parameters.json 檔案中設計的 Slurm 叢集相符,這些叢集會在建立叢集期間用來執行一組生命週期指令碼。如需詳細資訊,請參閱 使用生命週期指令碼自訂 SageMaker HyperPod 叢集。下列範本有兩個執行個體群組,以滿足 Slurm 叢集的最低需求:一個控制器 (前端) 節點和一個運算 (工作者) 節點。針對 ExecutionRoleAmazonSageMakerClusterInstanceRolePolicy請從 區段提供您使用 受管 建立的 IAM 角色 ARNSageMaker HyperPod 的 IAM 角色

    // create_cluster.json { "ClusterName": "your-hyperpod-cluster", "InstanceGroups": [ { "InstanceGroupName": "controller-group", "InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "s3://amzn-s3-demo-bucket-sagemaker/lifecycle-script-directory/src/", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster", // Optional: Configure an additional storage per instance group. "InstanceStorageConfigs": [ { // Attach an additional EBS volume to each instance within the instance group. // The default mount path for the additional EBS volume is /opt/sagemaker. "EbsVolumeConfig":{ // Specify an integer between 1 and 16384 in gigabytes (GB). "VolumeSizeInGB": integer, } } ] }, { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.p4d.xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "s3://amzn-s3-demo-bucket-sagemaker/lifecycle-script-directory/src/", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster" } ], // Optional "Tags": [ { "Key": "string", "Value": "string" } ], // Optional "VpcConfig": { "SecurityGroupIds": [ "string" ], "Subnets": [ "string" ] } }

    根據您透過生命週期指令碼設計叢集結構的方式,您可以在 InstanceGroups 參數下設定最多 20 個執行個體群組。

    對於Tags請求參數,您可以新增自訂標籤,以將 SageMaker HyperPod 叢集管理為 AWS 資源。您可以像在支援標記的其他 AWS 服務中新增標籤一樣,將標籤新增至叢集。若要進一步了解一般標記 AWS 資源,請參閱標記 AWS 資源使用者指南

    針對VpcConfig請求參數,指定您要使用的 VPC 資訊。如需詳細資訊,請參閱使用自訂 Amazon VPC 設定 SageMaker HyperPod

  3. 執行 create-cluster 命令,如下所示。

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

    這應該會傳回新叢集的 ARN。

描述叢集

執行 describe-cluster 以檢查叢集的狀態。您可以指定叢集的名稱或 ARN。

aws sagemaker describe-cluster --cluster-name your-hyperpod-cluster

在叢集的狀態變為 後InService,繼續下一個步驟。使用此 API,您也可以從執行其他 HyperPod API 操作擷取失敗訊息。

列出叢集節點的詳細資訊

執行 list-cluster-nodes 來檢查叢集節點的金鑰資訊。

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

這會傳回回應,而 InstanceId是您需要用來記錄 (使用 aws ssm) 的回應。

描述叢集節點的詳細資訊

執行 describe-cluster-node 以擷取叢集節點的詳細資訊。您可以從 list-cluster-nodes 輸出取得叢集節點 ID。您可以指定叢集的名稱或 ARN。

aws sagemaker describe-cluster-node \ --cluster-name your-hyperpod-cluster \ --node-id i-111222333444555aa

列出叢集

執行 list-clusters 以列出您帳戶中的所有叢集。

aws sagemaker list-clusters

您也可以新增其他旗標來篩選向下的叢集清單。若要進一步了解此命令在低層級執行的項目和其他用於篩選的旗標,請參閱 ListClusters API 參考。

更新叢集組態

執行 update-cluster 以更新叢集的組態。

注意

您可以使用 UpdateCluster API 從 SageMaker HyperPod 叢集縮減或移除整個執行個體群組。如需如何縮減或刪除執行個體群組的其他指示,請參閱 向下擴展叢集

  1. 建立 JSON 格式的UpdateCluster請求檔案。請務必指定要更新的正確叢集名稱和執行個體群組名稱。您可以變更執行個體類型、執行個體數量、生命週期組態進入點指令碼,以及指令碼的路徑。

    1. 針對 ClusterName,指定您要更新的叢集名稱。

    2. 針對 InstanceGroupName

      1. 若要更新現有的執行個體群組,請指定您要更新的執行個體群組名稱。

      2. 若要新增執行個體群組,請指定叢集中不存在的新名稱。

    3. 針對 InstanceType

      1. 若要更新現有的執行個體群組,您必須符合您最初指定給群組的執行個體類型。

      2. 若要新增執行個體群組,請指定您要設定群組的執行個體類型。

    4. 針對 InstanceCount

      1. 若要更新現有的執行個體群組,請指定對應至所需執行個體數量的整數。您可以提供較高或較低的值 (降至 0),以向上或向下擴展執行個體群組。

      2. 若要新增執行個體群組,請指定大於或等於 1 的整數。

    5. 對於 LifeCycleConfig,您可以在想要更新執行個體群組時同時變更 SourceS3UriOnCreat值。

    6. 針對 ExecutionRole

      1. 若要更新現有的執行個體群組,請繼續使用您在叢集建立期間連接的相同 IAM 角色。

      2. 若要新增執行個體群組,請指定您要連接的 IAM 角色。

    7. 針對 ThreadsPerCore

      1. 若要更新現有的執行個體群組,請繼續使用您在叢集建立期間指定的相同值。

      2. 若要新增執行個體群組,您可以從每個執行個體類型的允許選項中選擇任何值。如需詳細資訊,請搜尋執行個體類型,並參閱《Amazon EC2 使用者指南》中的 CPU 核心參考表中每個核心的有效執行緒和每個執行個體類型的每個 CPU 核心執行緒。 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cpu-options-supported-instances-values.html

    下列程式碼片段是您可以使用的 JSON 請求檔案範本。如需此 API 請求語法和參數的詳細資訊,請參閱 UpdateCluster API 參考。

    // update_cluster.json { // Required "ClusterName": "name-of-cluster-to-update", // Required "InstanceGroups": [ { "InstanceGroupName": "name-of-instance-group-to-update", "InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "s3://amzn-s3-demo-bucket-sagemaker/lifecycle-script-directory/src/", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster", // Optional: Configure an additional storage per instance group. "InstanceStorageConfigs": [ { // Attach an additional EBS volume to each instance within the instance group. // The default mount path for the additional EBS volume is /opt/sagemaker. "EbsVolumeConfig":{ // Specify an integer between 1 and 16384 in gigabytes (GB). "VolumeSizeInGB": integer, } } ] }, // add more blocks of instance groups as needed { ... } ] }
  2. 執行下列update-cluster命令來提交請求。

    aws sagemaker update-cluster \ --cli-input-json file://complete/path/to/update_cluster.json

更新叢集的 SageMaker HyperPod 平台軟體

執行 update-cluster-software,使用 SageMaker HyperPod 服務提供的軟體和安全性修補程式來更新現有叢集。針對 --cluster-name,指定要更新之叢集的名稱或 ARN。

重要

請注意,您必須先備份工作,才能執行此 API。修補程序會將根磁碟區取代為更新的 AMI,這表示先前存放在執行個體根磁碟區中的資料將會遺失。請務必將資料從執行個體根磁碟區備份至 Amazon S3 或 Amazon FSx for Lustre。如需詳細資訊,請參閱使用 SageMaker HyperPod 提供的備份指令碼

aws sagemaker update-cluster-software --cluster-name your-hyperpod-cluster

此命令會呼叫 UpdateClusterSoftware API。API 呼叫後,SageMaker HyperPod 會檢查叢集執行個體是否有較新的 DLAMI。如果需要 DLAMI 更新,SageMaker HyperPod 會更新叢集執行個體,以使用最新的 ,SageMaker HyperPod DLAMI並在您在叢集建立或更新期間指定的 Amazon S3 儲存貯體中執行生命週期指令碼。如果叢集已在使用最新的 DLAMI,SageMaker HyperPod 將不會對叢集進行任何變更或再次執行生命週期指令碼。SageMaker HyperPod 服務團隊會定期推出新的 SageMaker HyperPod DLAMI,以增強安全性並改善使用者體驗。我們建議您隨時更新至最新的 SageMaker HyperPod DLAMI。對於未來的 SageMaker HyperPod DLAMI 安全修補更新,請追蹤 Amazon SageMaker HyperPod 版本備註

提示

如果安全修補程式失敗,您可以依照 的指示執行 DescribeCluster API 來擷取失敗訊息描述叢集

注意

您只能以程式設計方式執行此 API。SageMaker HyperPod 主控台 UI 中未實作修補功能。

使用 SageMaker HyperPod 提供的備份指令碼

SageMaker HyperPod 提供指令碼,可在 Awsome 分散式訓練 GitHub 儲存庫1.architectures/5.sagemaker-hyperpod/patching-backup.sh中的 中備份和還原您的資料。指令碼提供下列兩個函數。

在修補之前將資料備份至 S3 儲存貯體

sudo bash patching-backup.sh --create <s3-buckup-bucket-path>

在您執行 命令後,指令碼會檢查squeue是否有佇列任務,如果佇列中沒有任務,則會停止 Slurm,備份 mariadb,並在 下定義的磁碟上複製本機項目LOCAL_ITEMS。您可以將更多檔案和目錄新增至 LOCAL_ITEMS

# Define files and directories to back up. LOCAL_ITEMS=( "/var/spool/slurmd" "/var/spool/slurmctld" "/etc/systemd/system/slurmctld.service" "/home/ubuntu/backup_slurm_acct_db.sql" # ... Add more items as needed )

此外,您可以將自訂程式碼新增至提供的指令碼,以針對您的使用案例備份任何應用程式。

修補後從 S3 儲存貯體還原資料

sudo bash patching-backup.sh --restore <s3-buckup-bucket-path>

向下擴展叢集

您可以縮減執行個體數量,或刪除 SageMaker HyperPod 叢集中的執行個體群組,以最佳化資源配置或降低成本。

您可以使用 UpdateCluster API 操作將執行個體從執行個體群組隨機終止為指定的數字,或使用 BatchDeleteClusterNodes API 操作終止特定執行個體,以縮減規模。您也可以使用 UpdateCluster API 完全移除整個執行個體群組。如需如何使用這些方法縮減規模的詳細資訊,請參閱向下擴展 SageMaker HyperPod 叢集

注意

您無法移除設定為 Slurm 控制器節點的執行個體。嘗試刪除 Slurm 控制器節點會導致錯誤碼為 的驗證錯誤NODE_ID_IN_USE

刪除叢集

執行 delete-cluster 以刪除叢集。您可以指定叢集的名稱或 ARN。

aws sagemaker delete-cluster --cluster-name your-hyperpod-cluster