

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

# 縮減 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"]'
```