

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

# 使用 管理 SageMaker HyperPod EKS 叢集 AWS CLI
<a name="sagemaker-hyperpod-eks-operate-cli-command"></a>

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

**Topics**
+ [建立 SageMaker HyperPod 叢集](sagemaker-hyperpod-eks-operate-cli-command-create-cluster.md)
+ [擷取 SageMaker HyperPod 叢集詳細資訊](sagemaker-hyperpod-eks-operate-cli-command-cluster-details.md)
+ [更新 SageMaker HyperPod 叢集組態](sagemaker-hyperpod-eks-operate-cli-command-update-cluster.md)
+ [更新 SageMaker HyperPod 平台軟體](sagemaker-hyperpod-eks-operate-cli-command-update-cluster-software.md)
+ [存取 SageMaker HyperPod 叢集節點](sagemaker-hyperpod-eks-operate-access-through-terminal.md)
+ [縮減 SageMaker HyperPod 叢集](smcluster-scale-down.md)
+ [刪除 SageMaker HyperPod 叢集](sagemaker-hyperpod-eks-operate-cli-command-delete-cluster.md)

# 建立 SageMaker HyperPod 叢集
<a name="sagemaker-hyperpod-eks-operate-cli-command-create-cluster"></a>

了解如何使用 AWS CLI建立由 Amazon EKS 協作的 SageMaker HyperPod 叢集。

1. 建立 SageMaker HyperPod 叢集之前：

   1. 請確定您已啟動並執行現有的 Amazon EKS 叢集。如需如何設定 Amazon EKS 叢集的詳細說明，請參閱《Amazon EKS 使用者指南》**中的[建立 Amazon EKS 叢集](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)。

   1. 遵循[使用 Helm 在 Amazon EKS 叢集上安裝套件](sagemaker-hyperpod-eks-install-packages-using-helm-chart.md)中的指示安裝 Helm Chart。如果您建立 [Amazon Nova SageMaker HyperPod 叢集](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-hp-cluster.html)，您將需要單獨的 Helm Chart。

1. 準備生命週期組態指令碼並上傳至 Amazon S3 儲存貯體，例如 `s3://amzn-s3-demo-bucket/Lifecycle-scripts/base-config/`。

   為了快速入門，[https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/7.sagemaker-hyperpod-eks/LifecycleScripts/base-config/on_create.sh](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/7.sagemaker-hyperpod-eks/LifecycleScripts/base-config/on_create.sh)請從 AWS ome Distributed Training GitHub 儲存庫下載範例指令碼，並將其上傳至 S3 儲存貯體。您也可以包含額外的設定指示、一系列設定指令碼，或要在 HyperPod 叢集佈建階段期間執行的命令。
**重要**  
如果您建立僅連接受管 [https://docs.aws.amazon.com/sagemaker/latest/dg/security-iam-awsmanpol-cluster.html](https://docs.aws.amazon.com/sagemaker/latest/dg/security-iam-awsmanpol-cluster.html) 的 [SageMaker HyperPod 的 IAM 角色](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-role-for-hyperpod)，您的叢集可以存取具有特定字首 `sagemaker-` 的 Amazon S3 儲存貯體。

   如果您建立受限制的執行個體群組，則不需要下載和執行生命週期指令碼。反之，您需要執行 `install_rig_dependencies.sh`。

   執行 `install_rig_dependencies.sh` 指令碼的先決條件包括：
   + AWS 節點 (CNI) 和 CoreDNS 都應該啟用。這些是標準 EKS 附加元件，不受標準 SageMaker HyperPod Helm 管理，但可以在 EKS 主控台的附加元件下輕鬆啟用。
   +  在執行此指令碼之前，應先安裝標準 SageMaker HyperPod Helm Chart。

   `install_rig_dependencies.sh` 指令碼會執行下列動作：
   + `aws-node` (CNI)：已建立新的 `rig-aws-node` Daemonset；已修補現有的 `aws-node` 以避開 RIG 節點。
   + `coredns`：已轉換為適用於 RIG 的 Daemonset，以支援多 RIG 使用並防止過載。
   + training-operators：已使用 RIG Worker 污點容差和偏好非 RIG 執行個體的 nodeAffinity 進行更新。
   + Elastic Fabric Adapter (EFA)：已更新以容忍 RIG 工作者污點，並為每個區域使用正確的容器映像。

1. 準備 JSON 格式的 [CreateCluster](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCluster.html) API 請求檔案。針對 `ExecutionRole`，請從 [SageMaker HyperPod 的 IAM 角色](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-role-for-hyperpod) 區段提供您使用受管 `AmazonSageMakerClusterInstanceRolePolicy` 建立的 IAM 角色 ARN。
**注意**  
確保您的 SageMaker HyperPod 叢集部署在與 Amazon EKS 叢集相同的虛擬私有雲端 (VPC) 內。SageMaker HyperPod 叢集組態中指定的子網路和安全群組必須允許與 Amazon EKS 叢集的 API 伺服器端點進行網路連線和通訊。

   ```
   // create_cluster.json
   {
       "ClusterName": "string",
       "InstanceGroups": [{
           "InstanceGroupName": "string",
           "InstanceType": "string",
           "InstanceCount": number,
           "LifeCycleConfig": {
               "SourceS3Uri": "s3://amzn-s3-demo-bucket-sagemaker/lifecycle-script-directory/src/",
               "OnCreate": "on_create.sh"
           },
           "ExecutionRole": "string",
           "ThreadsPerCore": number,
           "OnStartDeepHealthChecks": [
               "InstanceStress", "InstanceConnectivity"
           ]
       }],
       "RestrictedInstanceGroups": [ 
         { 
            "EnvironmentConfig": { 
               "FSxLustreConfig": { 
                  "PerUnitStorageThroughput": number,
                  "SizeInGiB": number
               }
            },
            "ExecutionRole": "string",
            "InstanceCount": number,
            "InstanceGroupName": "string",
            "InstanceStorageConfigs": [ 
               { ... }
            ],
            "InstanceType": "string",
            "OnStartDeepHealthChecks": [ "string" ],
            "OverrideVpcConfig": { 
               "SecurityGroupIds": [ "string" ],
               "Subnets": [ "string" ]
            },
            "ScheduledUpdateConfig": { 
               "DeploymentConfig": { 
                  "AutoRollbackConfiguration": [ 
                     { 
                        "AlarmName": "string"
                     }
                  ],
                  "RollingUpdatePolicy": { 
                     "MaximumBatchSize": { 
                        "Type": "string",
                        "Value": number
                     },
                     "RollbackMaximumBatchSize": { 
                        "Type": "string",
                        "Value": number
                     }
                  },
                  "WaitIntervalInSeconds": number
               },
               "ScheduleExpression": "string"
            },
            "ThreadsPerCore": number,
            "TrainingPlanArn": "string"
         }
      ],
       "VpcConfig": {
           "SecurityGroupIds": ["string"],
           "Subnets": ["string"]
       },
       "Tags": [{
           "Key": "string",
           "Value": "string"
       }],
       "Orchestrator": {
           "Eks": {
               "ClusterArn": "string",
               "KubernetesConfig": {
                   "Labels": {
                       "nvidia.com/mig.config": "all-3g.40gb"
                   }
               }
           }
       },
       "NodeRecovery": "Automatic"
   }
   ```

   設定為建立與 EKS 叢集相關聯的新 SageMaker HyperPod 叢集時，請注意下列事項。
   + 您可以在 `InstanceGroups` 參數下設定最多 20 個執行個體群組。
   + 針對 `Orchestator.Eks.ClusterArn`，指定您要用作協調器之 EKS 叢集的 ARN。
   + 針對 `OnStartDeepHealthChecks`，新增 `InstanceStress` 和 `InstanceConnectivity` 以啟用 [深層運作狀態檢查](sagemaker-hyperpod-eks-resiliency-deep-health-checks.md)。
   + 針對 `NodeRecovery`，指定 `Automatic` 以啟用自動節點復原。當運作狀態監控代理程式發現問題時，SageMaker HyperPod 會取代或重新啟動執行個體 (節點)。
   + 對於 `Tags` 參數，您可以新增自訂標籤，以將 SageMaker HyperPod 叢集管理為 AWS 資源。您可以使用在支援標記的其他 AWS 服務中新增標籤的同一方式，將標籤新增至叢集。若要進一步了解一般標記 AWS 資源，請參閱[標記 AWS 資源使用者指南](https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html)。
   + 針對 `VpcConfig` 參數，指定 EKS 叢集中使用的 VPC 資訊。子網路必須是私有的。
   + 對於 `Orchestrator.Eks.KubernetesConfig.Labels`，您可以選擇指定要套用至節點的 Kubernetes 標籤。若要使用多執行個體 GPU (MIG) 啟用 GPU 分割，請使用所需的 MIG 設定檔新增`nvidia.com/mig.config`標籤。例如， 會使用 3g.40gb 分割區設定檔`"nvidia.com/mig.config": "all-3g.40gb"`設定所有 GPUs。如需 GPU 分割和可用設定檔的詳細資訊，請參閱 [在 Amazon SageMaker HyperPod 中使用 GPU 分割區](sagemaker-hyperpod-eks-gpu-partitioning.md)。

1. 執行 [create-cluster](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-cluster.html) 命令，如下所示。
**重要**  
搭配 `--cli-input-json` 參數執行 `create-cluster` 命令時，您必須在 JSON 檔案的完整路徑之前包含 `file://` 字首。需要此字首，以確保 將輸入 AWS CLI 辨識為檔案路徑。省略 `file://` 字首會造成剖析參數錯誤。

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

   這應該會傳回新叢集的 ARN。
**重要**  
您可以使用 [update-cluster](https://docs.aws.amazon.com//cli/latest/reference/ecs/update-cluster.html) 操作來移除受限制的執行個體群組 (RIG)。當 RIG 縮減至 0 時，將不會刪除 FSx for Lustre 檔案系統。若要完全移除 FSx for Lustre 檔案系統，您必須完全移除 RIG。  
移除 RIG 不會刪除服務受管 Amazon S3 儲存貯體中存放的任何成品。不過，您應該確保 FSx for Lustre 檔案系統中的所有成品在移除之前都完全同步到 Amazon S3。我們建議在任務完成之後等待至少 30 分鐘，以確保 FSx for Lustre 檔案系統中的所有成品完全同步到服務受管 Amazon S3 儲存貯體。
**重要**  
使用內建的隨需容量保留 (ODCR) 時，您必須使用相符 AZ ID 中的`OverrideVpcConfig`子網路設定 ，將執行個體群組對應至與 ODCR 相同的可用區域 ID (AZ ID)。  
關鍵：在部署之前驗證`OverrideVpcConfig`組態，以避免產生 ODCR 和隨需容量的重複費用。

# 擷取 SageMaker HyperPod 叢集詳細資訊
<a name="sagemaker-hyperpod-eks-operate-cli-command-cluster-details"></a>

了解如何使用 AWS CLI擷取 SageMaker HyperPod 叢集詳細資訊。

## 描述叢集
<a name="sagemaker-hyperpod-eks-operate-cli-command-describe-cluster"></a>

執行 [describe-cluster](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/describe-cluster.html) 檢查叢集的狀態。您可以指定叢集的名稱或 ARN。

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

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

## 列出叢集節點的詳細資訊
<a name="sagemaker-hyperpod-eks-operate-cli-command-list-cluster-nodes"></a>

執行 [list-cluster-nodes](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/list-cluster-nodes.html) 來檢查叢集節點的金鑰資訊。

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

這會傳回一個回應，而 `InstanceId` 是您需要使用以記錄 (使用 `aws ssm`) 至其中的內容。

## 描述叢集節點的詳細資訊
<a name="sagemaker-hyperpod-eks-operate-cli-command-describe-cluster-node"></a>

執行 [describe-cluster-node](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/describe-cluster-node.html) 以擷取叢集節點的詳細資訊。您可以從 list-cluster-nodes 輸出取得叢集節點 ID。您可以指定叢集的名稱或 ARN。

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

## 列出叢集
<a name="sagemaker-hyperpod-eks-operate-cli-command-list-clusters"></a>

執行 [list-clusters](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/list-clusters.html) 以列出您帳戶中的所有叢集。

```
aws sagemaker list-clusters
```

您也可以新增其他旗標來篩選叢集清單。若要進一步了解此命令在低層級執行的項目和其他用於篩選的旗標，請參閱 [ListClusters](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListClusters.html) API 參考。

# 更新 SageMaker HyperPod 叢集組態
<a name="sagemaker-hyperpod-eks-operate-cli-command-update-cluster"></a>

執行 [update-cluster](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-cluster.html) 以更新叢集的組態。

**注意**  
重要考量：  
您無法在建立叢集之後變更 HyperPod 叢集相關聯的 EKS 叢集資訊。
如果叢集上執行深層運作狀態檢查，此 API 將無法如預期運作。您可能會遇到錯誤訊息，指出正在進行深層運作狀態檢查。若要更新叢集，您應該等到深層運作狀態檢查完成。

1. 建立 JSON 格式的 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateCluster.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateCluster.html) API 請求檔案。確保您指定要更新的正確叢集名稱和執行個體群組名稱。對於每個執行個體群組，您可以變更執行個體類型、執行個體數量、生命週期組態進入點指令碼，以及指令碼的路徑。
**注意**  
您可以使用 `UpdateCluster` 從 SageMaker HyperPod 叢集縮減規模或移除整個執行個體群組。如需如何縮減或刪除執行個體群組的其他指示，請參閱 [縮減 SageMaker HyperPod 叢集](smcluster-scale-down.md)。

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

   1. 針對 `InstanceGroupName`

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

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

   1. 針對 `InstanceType`

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

      1. 若要新增執行個體群組，請指定您要透過其設定群組的執行個體類型。

   1. 針對 `InstanceCount`

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

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

   1. 對於 `LifeCycleConfig`，您可以變更 `SourceS3Uri` 和 `OnCreate` 的值，因為您想要更新執行個體群組。

   1. 針對 `ExecutionRole`

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

      1. 如需新增執行個體群組，請指定您要連接的 IAM 角色。

   1. 針對 `ThreadsPerCore`

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

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

   1. 針對 `OnStartDeepHealthChecks`，新增 `InstanceStress` 和 `InstanceConnectivity` 以啟用 [深層運作狀態檢查](sagemaker-hyperpod-eks-resiliency-deep-health-checks.md)。

   1. 針對 `NodeRecovery`，指定 `Automatic` 以啟用自動節點復原。當運作狀態監控代理程式發現問題時，SageMaker HyperPod 會取代或重新啟動執行個體 (節點)。

   下列程式碼片段是您可以使用的 JSON 請求檔案範本。如需此 API 請求語法和參數的詳細資訊，請參閱 [UpdateCluster](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateCluster.html) API 參考。

   ```
   // update_cluster.json
   {
       // Required
       "ClusterName": "name-of-cluster-to-update",
       // Required
       "InstanceGroups": [{
           "InstanceGroupName": "string",
           "InstanceType": "string",
           "InstanceCount": number,
           "LifeCycleConfig": {
               "SourceS3Uri": "string",
               "OnCreate": "string"
           },
           "ExecutionRole": "string",
           "ThreadsPerCore": number,
           "OnStartDeepHealthChecks": [
               "InstanceStress", "InstanceConnectivity"
           ]
       }],
       "NodeRecovery": "Automatic"
   }
   ```

1. 執行下列 `update-cluster` 命令以提交請求。

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

# 更新 SageMaker HyperPod 平台軟體
<a name="sagemaker-hyperpod-eks-operate-cli-command-update-cluster-software"></a>

當您建立 SageMaker HyperPod 叢集時，SageMaker HyperPod 會選取對應至 Amazon EKS 叢集 Kubernetes 版本的 Amazon Machine Image (AMI)。

執行 [update-cluster-software](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-cluster-software.html)，以使用 SageMaker HyperPod 服務提供的軟體和安全性修補程式更新現有叢集。針對 `--cluster-name`，指定要更新的叢集名稱或 ARN。

**重要**  
呼叫此 API 時，SageMaker HyperPod 不會耗盡或重新分配節點上執行的任務 (Pod)。呼叫此 API 之前，請務必檢查節點上是否有任何正在執行的任務。
修補程序會將根磁碟區取代為更新的 AMI，這表示先前存放在執行個體根磁碟區中的資料將會遺失。請確定您將資料從執行個體根磁碟區備份至 Amazon S3 或 Amazon FSx for Lustre。
修補進行時，所有叢集節點都會經歷停機 (節點在 `kubectl get node` 的輸出中顯示為 `<NotReady>`)。建議您在修補之前終止所有工作負載，並在修補完成後繼續。  
如果安全性修補程式失敗，您可以依照 [描述叢集](sagemaker-hyperpod-eks-operate-cli-command-cluster-details.md#sagemaker-hyperpod-eks-operate-cli-command-describe-cluster) 的指示執行 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeCluster.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeCluster.html) API 來擷取失敗訊息。

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

 呼叫 `UpdateClusterSoftware` API 時，SageMaker HyperPod 會根據 Amazon EKS 叢集的 Kubernetes 版本選取最新的 [SageMaker HyperPod DLAMI](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-hyperpod-ami)，以更新節點的 Kubernetes 版本。然後，它會在叢集建立或更新期間指定的 Amazon S3 儲存貯體中執行生命週期指令碼。

您可以執行 `kubectl describe node` 命令來驗證節點的 kubelet 版本。

當您更新 Amazon EKS 叢集版本時，SageMaker HyperPod 叢集節點的 Kubernetes 版本不會自動更新。更新 Amazon EKS 叢集的 Kubernetes 版本後，您必須使用 `UpdateClusterSoftware` API 將 SageMaker HyperPod 叢集節點更新為相同的 Kubernetes 版本。

 建議您在更新 Amazon EKS 節點之後更新 SageMaker HyperPod 叢集，並避免在 Amazon EKS 叢集版本與 SageMaker HyperPod 叢集節點版本之間具有多個版本差異。

SageMaker HyperPod 服務團隊會定期推出新的 [SageMaker HyperPod DLAMI](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-hyperpod-ami)，以增強安全性並改善使用者體驗。我們建議您一律持續更新至最新的 SageMaker HyperPod DLAMI。如需未來的 SageMaker HyperPod DLAMI 更新進行安全性修補，請追蹤 [Amazon SageMaker HyperPod 版本備註](sagemaker-hyperpod-release-notes.md)。

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

# 存取 SageMaker HyperPod 叢集節點
<a name="sagemaker-hyperpod-eks-operate-access-through-terminal"></a>

您可以使用 AWS Systems Manager (SSM) 的 AWS CLI 命令，直接存取服務中 SageMaker HyperPod 叢集的節點。使用格式為 `sagemaker-cluster:[cluster-id]_[instance-group-name]-[instance-id]` 的節點主機名稱執行 `aws ssm start-session`。您可以從 [SageMaker HyperPod 主控台](sagemaker-hyperpod-operate-slurm-console-ui.md#sagemaker-hyperpod-operate-slurm-console-ui-view-details-of-clusters)或是從 [SageMaker HyperPod 的AWS CLI 命令](sagemaker-hyperpod-operate-slurm-cli-command.md#sagemaker-hyperpod-operate-slurm-cli-command-list-cluster-nodes)執行 `describe-cluster` 和 `list-cluster-nodes`，擷取叢集 ID、執行個體 ID 和執行個體群組名稱。例如，如果您的叢集 ID 為 `aa11bbbbb222`、叢集節點名稱為 `controller-group`，而叢集節點 ID 為 `i-111222333444555aa`，則 SSM `start-session` 命令應該如下。

**注意**  
如果您尚未設定 AWS Systems Manager，請遵循 提供的指示[設定 AWS Systems Manager 和執行為叢集使用者存取控制](sagemaker-hyperpod-prerequisites.md#sagemaker-hyperpod-prerequisites-ssm)。

```
$ aws ssm start-session \
    --target sagemaker-cluster:aa11bbbbb222_controller-group-i-111222333444555aa \
    --region us-west-2
Starting session with SessionId: s0011223344aabbccdd
root@ip-111-22-333-444:/usr/bin#
```

# 縮減 SageMaker HyperPod 叢集
<a name="smcluster-scale-down"></a>

您可以縮減在 Amazon SageMaker HyperPod 叢集上執行的執行個體數量。您可能會基於各種原因而想要縮減叢集，例如降低資源使用率或成本最佳化。

下頁概述了縮減規模的兩種主要方法：
+ **在執行個體群組層級縮減規模：**此方法使用 `UpdateCluster` API，透過其您可以：
  + 獨立縮減特定執行個體群組的執行個體計數。SageMaker AI 會以到達您為每個群組設定之新目標執行個體計數的方式處理節點的終止。請參閱 [縮減執行個體群組](#smcluster-scale-down-updatecluster)。
  + 從您的叢集完全刪除執行個體群組。請參閱 [刪除執行個體群組](#smcluster-remove-instancegroup)。
+ **在執行個體層級縮減規模：**此方法使用 `BatchDeleteClusterNodes` API，您可以透過其來指定您要終止的個別節點。請參閱 [在執行個體層級縮減規模](#smcluster-scale-down-batchdelete)。

**注意**  
使用 `BatchDeleteCusterNodes` 在執行個體層級縮減規模時，您一次最多只能終止 99 個執行個體。`UpdateCluster` 支援終止任意數量的執行個體。

## 重要考量
<a name="smcluster-scale-down-considerations"></a>
+ 縮減叢集時，您應該確保剩餘的資源足以處理工作負載，並正確處理任何必要的資料遷移或重新平衡，以避免中斷。
+ 在工作節點群組上調用 API 之前，請務必將您的資料備份到 Amazon S3 或 FSx for Lustre 檔案系統。這有助於防止從執行個體根磁碟區中遺失任何潛在資料。如需備份的詳細資訊，請參閱[使用 SageMaker HyperPod 提供的備份指令碼](sagemaker-hyperpod-operate-slurm-cli-command.md#sagemaker-hyperpod-operate-slurm-cli-command-update-cluster-software-backup)。
+ 若要在現有叢集上調用此 API，您必須先執行 [UpdateClusterSoftware](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateClusterSoftware.html) API 來修補叢集。如需修補叢集的詳細資訊，請參閱[更新叢集的 SageMaker HyperPod 平台軟體](sagemaker-hyperpod-operate-slurm-cli-command.md#sagemaker-hyperpod-operate-slurm-cli-command-update-cluster-software)。
+ 縮減規模後，將自動停止隨需執行個體的計量/計費。若要停止縮減規模預留執行個體的計量，您應該聯絡 AWS 客戶團隊以取得支援。
+ 您可以使用從縮減的預留執行個體釋放的容量，來擴增另一個 SageMaker HyperPod 叢集。

## 在執行個體群組層級縮減規模
<a name="smcluster-scale-down-or-delete"></a>

[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateCluster.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateCluster.html) 操作可讓您對 SageMaker HyperPod 叢集的組態進行變更，例如縮減執行個體群組的執行個體數量，或移除整個執行個體群組。當您想要根據工作負載中的變更來調整配置給叢集的資源、最佳化成本，或變更執行個體群組的執行個體類型時，這會很有用。

### 縮減執行個體群組
<a name="smcluster-scale-down-updatecluster"></a>

當您有執行個體群組處於閒置狀態，而且可以安全地終止任何執行個體以縮減規模時，請使用此方法。當您提交要縮減規模的 `UpdateCluster` 請求時，HyperPod 會隨機選擇要終止的執行個體，並縮減至執行個體群組的指定節點數量。

**注意**  
當您將執行個體群組中的執行個體數量縮減至 0 時，該群組內的所有執行個體都會終止。不過，執行個體群組本身仍會做為 SageMaker HyperPod 叢集的一部分存在。稍後，您可以使用相同的執行個體群組組態來擴展執行個體群組備份。  
或者，您可以選擇永久移除執行個體群組。如需詳細資訊，請參閱[刪除執行個體群組](#smcluster-remove-instancegroup)。

**使用 `UpdateCluster` 縮減規模**

1. 請遵循[更新 SageMaker HyperPod 叢集組態](sagemaker-hyperpod-eks-operate-cli-command-update-cluster.md)中概述的步驟。當到達您在其中指定 **InstanceCount** 欄位的步驟 **1.d** 時，請輸入小於目前執行個體數量的數字，以縮減叢集。

1. 執行 [update-cluster](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-cluster.html) AWS CLI 命令以提交您的請求。

以下是 `UpdateCluster` JSON 物件的範例。考慮您的執行個體群組目前有 2 個執行中執行個體的情況。如果您將 **InstanceCount** 欄位設定為 1，如範例所示，HyperPod 會隨機選取其中一個執行個體並將其終止。

```
{
  "ClusterName": "name-of-cluster-to-update",
  "InstanceGroups": [
    {
      "InstanceGroupName": "training-instances",
      "InstanceType": "instance-type",
      "InstanceCount": 1,
      "LifeCycleConfig": {
        "SourceS3Uri": "s3://amzn-s3-demo-bucket/training-script.py",
        "OnCreate": "s3://amzn-s3-demo-bucket/setup-script.sh"
      },
      "ExecutionRole": "arn:aws:iam::123456789012:role/SageMakerRole",
      "ThreadsPerCore": number-of-threads,
      "OnStartDeepHealthChecks": [
        "InstanceStress",
        "InstanceConnectivity"
      ]
    }
  ],
  "NodeRecovery": "Automatic"
}
```

### 刪除執行個體群組
<a name="smcluster-remove-instancegroup"></a>

您可以使用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateCluster.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateCluster.html) 操作，在不再需要執行個體群組時，從 SageMaker HyperPod 叢集中移除整個執行個體群組。這不僅只是簡單的縮減規模，還可讓您從叢集的組態中完全消除特定執行個體群組。

**注意**  
移除執行個體群組時：  
目標群組內的所有執行個體都會終止。
整個群組組態會從叢集中刪除。
在該執行個體群組上執行的任何工作負載都會停止。

**使用 `UpdateCluster` 刪除執行個體群組**

1. 遵循[更新 SageMaker HyperPod 叢集組態](sagemaker-hyperpod-eks-operate-cli-command-update-cluster.md)中概述的步驟時：

   1. 在 `UpdateCluster` JSON 中設定選用 `InstanceGroupsToDelete` 參數，並傳遞您要刪除之執行個體群組名稱的逗號分隔清單。

   1.  當您指定 `InstanceGroups` 清單時，請確定您要移除的執行個體群組規格不再列示在 `InstanceGroups` 清單中。

1. 執行 [update-cluster](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-cluster.html) AWS CLI 命令以提交您的請求。

**重要**  
您的 SageMaker HyperPod 叢集必須一律維持至少一個執行個體群組。
在移除之前，請確保已備份所有關鍵資料。
移除程序無法復原。

以下是 `UpdateCluster` JSON 物件的範例。考慮叢集目前有 3 個執行個體群組 (一個 *training*、一個 *prototype-training* 和一個 *inference-serving* 群組) 的情況。您想要刪除 *prototype-training* 群組。

```
{
  "ClusterName": "name-of-cluster-to-update",
  "InstanceGroups": [
    {
      "InstanceGroupName": "training",
      "InstanceType": "instance-type",
      "InstanceCount": ,
      "LifeCycleConfig": {
        "SourceS3Uri": "s3://amzn-s3-demo-bucket/training-script.py",
        "OnCreate": "s3://amzn-s3-demo-bucket/setup-script.sh"
      },
      "ExecutionRole": "arn:aws:iam::123456789012:role/SageMakerRole",
      "ThreadsPerCore": number-of-threads,
      "OnStartDeepHealthChecks": [
        "InstanceStress",
        "InstanceConnectivity"
      ]
    },
    {
      "InstanceGroupName": "inference-serving",
      "InstanceType": "instance-type",
      "InstanceCount": 2,
      [...]
    },
  ],
  "InstanceGroupsToDelete": [ "prototype-training" ],
  "NodeRecovery": "Automatic"
}
```

## 在執行個體層級縮減規模
<a name="smcluster-scale-down-batchdelete"></a>

`BatchDeleteClusterNodes` 操作可讓您透過指定要終止的個別節點來縮減 SageMaker HyperPod 叢集。`BatchDeleteClusterNodes` 為目標節點移除和叢集最佳化提供更精細的控制。例如，您可能使用 `BatchDeleteClusterNodes` 刪除目標節點以進行維護、滾動升級，或在地理上重新平衡資源。

**API 請求與回應**

當您提交 `BatchDeleteClusterNodes` 請求時，SageMaker HyperPod 會依其執行個體 ID 刪除節點。API 接受具有叢集名稱的請求，以及要刪除的節點 ID 清單。

回應包含兩個區段：
+  `Failed`：類型 `[ BatchDeleteClusterNodesError ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_BatchDeleteClusterNodesError.html)` 的錯誤清單 - 每個執行個體 ID 一個。
+  `Successful`：執行個體 ID 清單已成功終止。

**驗證和錯誤處理**

API 會執行各種驗證，例如：
+ 驗證節點 ID 格式 (字首 `i-` 和 Amazon EC2 執行個體 ID 結構)。
+ 檢查節點清單長度，單一 `BatchDeleteClusterNodes` 請求中的節點 ID 數量限制為 99 個或更少。
+ 確保具有輸入叢集名稱的有效 SageMaker HyperPod 叢集存在，而且沒有正在進行的叢集層級操作 (更新、系統更新、修補或刪除)。
+ 處理執行個體找不到、具有無效狀態或使用中的案例。

**API 回應代碼**
+  API 會傳回 `200` 狀態代碼表示成功 (例如，所有輸入節點驗證成功) 或部分成功的請求 (例如，某些輸入節點驗證失敗)。
+  如果所有這些驗證都失敗 (例如，所有輸入節點驗證都失敗)，API 將傳回 `400` 錯誤請求回應，其中包含適當的錯誤訊息和錯誤代碼。

**範例**

以下是使用 AWS CLI**在執行個體層級縮減叢集**的範例：

```
aws sagemaker batch-delete-cluster-nodes --cluster-name "cluster-name" --node-ids '["i-111112222233333", "i-111112222233333"]'
```

# 刪除 SageMaker HyperPod 叢集
<a name="sagemaker-hyperpod-eks-operate-cli-command-delete-cluster"></a>

執行 [delete-cluster](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-cluster.html) 以刪除叢集。您可以指定叢集的名稱或 ARN。

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

此 API 只會清除 SageMaker HyperPod 資源，而不會刪除相關聯 EKS 叢集的任何資源。這包括 Amazon EKS 叢集、EKS Pod 身分識別、Amazon FSx 磁碟區和 EKS 附加元件。這也包括您已新增至 EKS 叢集的初始組態。如果您想要清除所有資源，請確定您也會分別清除 EKS 資源。

確定您先刪除 SageMaker HyperPod 資源，接著刪除 EKS 資源。以相反順序執行刪除可能會導致資源殘留。

**重要**  
呼叫此 API 時，SageMaker HyperPod 不會耗盡或重新分配節點上執行的任務 (Pod)。呼叫此 API 之前，請務必檢查節點上是否有任何正在執行的任務。