

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

# 使用管理 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>

了解如何使用创建由 Amazon EKS 编排的 SageMaker HyperPod 集群。 AWS CLI

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 图表。如果您创建了 [Amazon Nova SageMaker HyperPod 集群](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-hp-cluster.html)，则需要一个单独的 Helm 图表。

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 分布式训练 GitHub 存储库下载示例脚本，然后将其上传到 S3 存储桶。您还可以包括其他设置说明、一系列安装脚本或要在 HyperPod 集群配置阶段执行的命令。
**重要**  
如果您创建的 [的 IAM 角色适用于 SageMaker HyperPod](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-role-for-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-` 的 Amazon S3 存储桶。

   如果您创建受限实例组，则无需下载并运行生命周期脚本。相反，您需要运行 `install_rig_dependencies.sh`。

   运行 `install_rig_dependencies.sh` 脚本的先决条件包括：
   + AWS 节点 (CNI) 和 CoreDNS 都应启用。这些是标准的 EKS 附加组件，不由标准 SageMaker HyperPod Helm 管理，但可以在 EKS 控制台的 Add-ons 下轻松启用。
   +  在运行此脚本之前，应安装标准 SageMaker HyperPod Helm 图表。

   `install_rig_dependencies.sh` 脚本将执行以下操作。
   + `aws-node`（CNI）：已创建新的 `rig-aws-node` Daemonset；已修补现有 `aws-node` 以避开 RIG 节点。
   + `coredns`: 已转换为 Daemonset RIGs 以支持多重装备使用并防止过载。
   + training-operators：已更新，添加了 RIG Worker 污点容忍度，并设置了 nodeAffinity 以优先选择非 RIG 实例。
   + Elastic Fabric Adapter（EFA）：已更新，添加了 RIG Worker 污点容忍度，并为每个区域使用正确的容器映像。

1. 准备一个 JSON 格式的 [CreateCluster](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCluster.html)API 请求文件。对于 `ExecutionRole`，请提供使用托管的 `AmazonSageMakerClusterInstanceRolePolicy` 从 [的 IAM 角色适用于 SageMaker HyperPod](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-role-for-hyperpod) 部分创建的 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`标签。例如，`"nvidia.com/mig.config": "all-3g.40gb"`使用 3g.40GB 分区配置文件 GPUs 进行所有配置。有关 GPU 分区和可用配置文件的更多信息，请参阅[在亚马逊中使用 GPU 分区 SageMaker HyperPod](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 时，for FSx Lustre 的文件系统不会被删除。要完全删除 f FSx or Lustre 文件系统，必须完全删除 RIG。  
移除 RIG 将不会删除存储在服务托管的 Amazon S3 存储桶中的任何构件。但是，在移除之前，您应确保 for FSx Lustre 文件系统中的所有项目都与 Amazon S3 完全同步。我们建议在任务完成后至少等待 30 分钟，以确保从 for Lustre 文件系统的所有项目完全同步到服务托管的 Amazon S3 存储桶。 FSx 
**重要**  
使用已载入的按需容量预留 (ODCR) 时，您必须通过在匹配的可用区 ID 中设置子网，将您的实例组映射到`OverrideVpcConfig`与 ODCR 相同的可用区 ID (AZ ID)。  
关键：在部署之前验证`OverrideVpcConfig`配置，以避免对 ODCR 和按需容量产生重复费用。

# 检索 SageMaker HyperPod 集群详细信息
<a name="sagemaker-hyperpod-eks-operate-cli-command-cluster-details"></a>

了解如何使用检索 SageMaker HyperPod 集群详细信息 AWS CLI。

## 描述集群
<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 请求文件。确保指定正确的集群名称和实例组名称进行更新。对于每个实例组，您可以更改实例类型、实例数量、生命周期配置入口点脚本以及脚本的路径。
**注意**  
您可以使用缩小规模或从 SageMaker HyperPod 集群中移除整个实例组。`UpdateCluster`有关如何缩减或删除实例组的更多说明，请参阅[缩小 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 版本相对应的亚马逊系统映像 (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 for Lustre。 FSx 
在修补过程中，所有集群节点都会停机（节点在 `<NotReady>` 的输出中显示为 `kubectl get node`）。我们建议您在打补丁前终止所有工作负载，并在补丁完成后恢复它们。  
如果安全补丁失败，您可以按照 [描述集群](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，获取失败信息。API。

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

 调用 `UpdateClusterSoftware` API 时，[SageMaker HyperPod DLAMI](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-hyperpod-ami)根据您的 Amazon EKS 集群的 Kubernetes 版本选择最新版本来 SageMaker HyperPod 更新节点的 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 Future DLAMI 的安全补丁更新，请跟进。[亚马逊 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 群集的节点。运行 `aws ssm start-session`，并输入格式为 `sagemaker-cluster:[cluster-id]_[instance-group-name]-[instance-id]` 的节点主机名。您可以从[SageMaker HyperPod 控制台](sagemaker-hyperpod-operate-slurm-console-ui.md#sagemaker-hyperpod-operate-slurm-console-ui-view-details-of-clusters)检索集群 ID、实例 ID 和实例组名称，也可以通过运行和的[AWS CLI 命令](sagemaker-hyperpod-operate-slurm-cli-command.md#sagemaker-hyperpod-operate-slurm-cli-command-list-cluster-nodes)来检索集群 ID、实例 ID `describe-cluster` 和`list-cluster-nodes`实例组名称 SageMaker HyperPod。例如，如果集群 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 或 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.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 会按节点的实例删除节点 IDs。API 接受包含集群名称和 IDs 要删除的节点列表的请求。

响应包括两个部分：
+  `Failed`：类型 `[ BatchDeleteClusterNodesError ](https://docs.aws.amazon.com/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` 错误请求响应。

**示例**

以下示例说明如何使用 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 身份、亚马逊 FSx 卷和 EKS 插件。这也包括您添加到 EKS 集群的初始配置。如果您要清理所有资源，请确保同时单独清理 EKS 资源。

请务必先删除 SageMaker HyperPod 资源，然后删除 EKS 资源。以相反的顺序进行删除可能会导致资源滞留。

**重要**  
调用此 API 时， SageMaker HyperPod 不会耗尽或重新分配节点上运行的作业 (Pod)。在调用此 API 之前，请确保检查节点上是否有正在运行的作业。