本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 管理 SageMaker HyperPod Slurm 叢集 AWS CLI
下列主題提供以 JSON 格式撰寫 SageMaker HyperPod API 請求檔案,並使用 AWS CLI 命令執行這些檔案的指引。
建立新叢集
-
準備生命週期組態指令碼,並將其上傳至 S3 儲存貯體,例如
s3://sagemaker-。下列步驟 2 假設在指定的 S3 儲存貯體中有名為amzn-s3-demo-bucket/lifecycle-script-directory/src/on_create.sh的進入點指令碼。重要
確定您將 S3 路徑設定為以
s3://sagemaker-開頭。SageMaker HyperPod 的 IAM 角色 已連接受管AmazonSageMakerClusterInstanceRolePolicy,允許存取特定字首為sagemaker-的 S3 儲存貯體。 -
準備 JSON 格式的 CreateCluster API 請求檔案。您應該將執行個體群組設定為與您在
provisioning_parameters.json檔案中設計的 Slurm 叢集相符,此檔案會在叢集建立期間用作執行一組生命週期指令碼的一部分。如需詳細資訊,請參閱 使用生命週期指令碼自訂 SageMaker HyperPod 叢集。下列範本有兩個執行個體群組,以符合 Slurm 叢集的最低要求:一個控制器 (主) 節點和一個運算 (工作) 節點。針對ExecutionRole,請從 SageMaker HyperPod 的 IAM 角色 區段提供您使用受管AmazonSageMakerClusterInstanceRolePolicy建立的 IAM 角色 ARN。// 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。 -
執行 create-cluster 命令,如下所示。
aws sagemaker create-cluster \ --cli-input-jsonfile://complete/path/to/create_cluster.json這應該會傳回新叢集的 ARN。
描述叢集
執行 describe-cluster 檢查叢集的狀態。您可以指定叢集的名稱或 ARN。
aws sagemaker describe-cluster --cluster-nameyour-hyperpod-cluster
在叢集的狀態變為 InService 之後,請繼續下一個步驟。使用此 API,您也可以從執行其他 HyperPod API 作業擷取失敗訊息。
列出叢集節點的詳細資訊
執行 list-cluster-nodes 來檢查叢集節點的金鑰資訊。
aws sagemaker list-cluster-nodes --cluster-nameyour-hyperpod-cluster
這會傳回一個回應,而 InstanceId 是您需要使用以記錄 (使用 aws ssm) 至其中的內容。
描述叢集節點的詳細資訊
執行 describe-cluster-node 以擷取叢集節點的詳細資訊。您可以從 list-cluster-nodes 輸出取得叢集節點 ID。您可以指定叢集的名稱或 ARN。
aws sagemaker describe-cluster-node \ --cluster-nameyour-hyperpod-cluster\ --node-idi-111222333444555aa
列出叢集
執行 list-clusters 以列出您帳戶中的所有叢集。
aws sagemaker list-clusters
您也可以新增其他旗標來篩選叢集清單。若要進一步了解此命令在低層級執行的項目和其他用於篩選的旗標,請參閱 ListClusters API 參考。
更新叢集組態
執行 update-cluster 以更新叢集的組態。
注意
您可以使用 UpdateCluster API 從 SageMaker HyperPod 叢集縮減規模或移除整個執行個體群組。如需如何縮減或刪除執行個體群組的其他指示,請參閱 縮減叢集。
-
建立 JSON 格式的
UpdateCluster請求檔案。確保您指定要更新的正確叢集名稱和執行個體群組名稱。您可以變更執行個體類型、執行個體數量、生命週期組態進入點指令碼,以及指令碼的路徑。-
針對
ClusterName,指定您要更新的叢集名稱。 -
針對
InstanceGroupName-
若要更新現有的執行個體群組,請指定您要更新的執行個體群組名稱。
-
若要新增執行個體群組,請指定叢集中不存在的新名稱。
-
-
針對
InstanceType-
若要更新現有的執行個體群組,您必須符合您最初指定給群組的執行個體類型。
-
若要新增執行個體群組,請指定您要透過其設定群組的執行個體類型。
-
-
針對
InstanceCount-
若要更新現有的執行個體群組,請指定對應至所需執行個體數量的整數。您可以提供更高或更低的值 (降至 0),以擴展或縮減執行個體群組。
-
若要新增執行個體群組,請指定大於或等於 1 的整數。
-
-
針對
LifeCycleConfig,您可以在想要更新執行個體群組時同時變更SourceS3Uri和OnCreate值。 -
針對
ExecutionRole-
如需更新現有的執行個體群組,請繼續使用您在叢集建立期間連接的相同 IAM 角色。
-
如需新增執行個體群組,請指定您要連接的 IAM 角色。
-
-
針對
ThreadsPerCore-
如需更新現有的執行個體群組,請繼續使用您在叢集建立期間指定的相同值。
-
如需新增執行個體群組,您可以從每個執行個體類型的允許選項中選擇任何值。如需詳細資訊,請搜尋執行個體類型,並參閱參考表中的每個核心的有效執行緒數欄,此參考表位於《Amazon EC2 使用者指南》的每個執行個體類型的 CPU 核心數和每個 CPU 核心的執行緒數中。
-
下列程式碼片段是您可以使用的 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 { ... } ] } -
-
執行下列
update-cluster命令以提交請求。aws sagemaker update-cluster \ --cli-input-jsonfile://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-nameyour-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-nameyour-hyperpod-cluster