

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 缩小 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 或 for Lustre 文件系统。 FSx 这有助于防止实例根卷出现任何潜在的数据丢失。有关备份的更多信息，请参阅[使用提供的备份脚本 SageMaker HyperPod](sagemaker-hyperpod-operate-slurm-cli-command.md#sagemaker-hyperpod-operate-slurm-cli-command-update-cluster-software-backup)。
+ 要在现有集群上调用此 API，必须先运行 [ UpdateClusterSoftware](https://docs.amazonaws.cn/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)。
+ 按需型实例的计量/计费将在缩减后自动停止。要停止对缩小规模的预留实例进行计量，您应该联系您的 Amazon 账户团队寻求支持。
+ 您可以使用从缩减的预留实例中释放的容量来扩展另一个 SageMaker HyperPod 集群。

## 在实例组级别缩减
<a name="smcluster-scale-down-or-delete"></a>

该[https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_UpdateCluster.html](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_UpdateCluster.html)操作允许您更改 SageMaker HyperPod 集群的配置，例如缩小实例组的实例数量或删除整个实例组。当您要根据工作负载变化调整分配给集群的资源、优化成本或更改实例组的实例类型时，此操作会很有用。

### 缩减实例组
<a name="smcluster-scale-down-updatecluster"></a>

如果您的实例组处于空闲状态，并且可以安全地终止任意实例以进行缩减，请使用此方法。当您提交缩减`UpdateCluster`请求时，会 HyperPod 随机选择要终止的实例，然后缩减到该实例组的指定节点数。

**使用灵活的实例组缩小规模**  
对于`InstanceRequirements`与多个实例类型一起使用的实例组，在缩容期间首先 HyperPod 终止优先级最低的实例类型。优先级由`InstanceTypes`列表中实例类型的顺序决定，其中第一种类型的优先级最高。这可以在缩小操作期间保护优先级较高的实例，这些实例通常性能更高。

**注意**  
在将实例组中的实例数缩减至 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.amazonaws.cn/cli/latest/reference/sagemaker/update-cluster.html) Amazon 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.amazonaws.cn/sagemaker/latest/APIReference/API_UpdateCluster.html](https://docs.amazonaws.cn/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.amazonaws.cn/cli/latest/reference/sagemaker/update-cluster.html) Amazon 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 会按节点的实例删除节点 IDs。API 接受包含集群名称和 IDs 要删除的节点列表的请求。

响应包括两个部分：
+  `Failed`：类型 `[ BatchDeleteClusterNodesError ](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_BatchDeleteClusterNodesError.html)` 的错误列表 – 每个实例 ID 对应一个错误。
+  `Successful`：实例列表 IDs 已成功终止。

**验证和错误处理**

API 会执行各种验证，例如：
+ 验证节点 ID 格式（前缀 `i-` 和 Amazon EC2 实例 ID 结构）。
+ 检查节点列表长度，单个`BatchDeleteClusterNodes`请求中限制为 99 个或更少 IDs 的节点。
+ 确保存在带有输入 SageMaker HyperPod 集群名称的有效集群，并且没有正在进行任何集群级别的操作（更新、系统更新、修补或删除）。
+ 处理未找到实例、实例状态无效或实例正在使用中的情况。

**API 响应代码**
+  API 会针对成功请求（例如，所有输入节点验证成功）或部分成功请求（例如，某些输入节点验证失败）返回 `200` 状态代码。
+  如果所有这些验证都失败（例如，所有输入节点验证失败），API 将返回包含相应错误消息和错误代码的 `400` 错误请求响应。

**示例**

以下示例说明如何使用 Amazon CLI**在实例级别缩减集群**：

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