缩减 SageMaker HyperPod 集群 - Amazon SageMaker AI

缩减 SageMaker HyperPod 集群

您可以缩减 Amazon SageMaker HyperPod 集群上运行的实例数量。出于多种原因(例如,资源利用率降低或成本优化),您可能需要缩减集群。

以下页面概述了两种主要的缩减方法:

  • 在实例组级别缩减:此方法使用 UpdateCluster API,可让您:

    • 单独缩减特定实例组的实例数。SageMaker AI 会通过某种方式终止节点,确保每个实例组的实例数达到您为其设定的新目标值。请参阅缩减实例组

    • 从集群中完全删除实例组。请参阅删除实例组

  • 在实例级别缩减:此方法使用 BatchDeleteClusterNodes API,可让您指定要终止的单个节点。请参阅在实例级别缩减

注意

使用 BatchDeleteCusterNodes 在实例级别缩减时,您一次只能终止最多 99 个实例。UpdateCluster 支持终止任意数量的实例。

重要注意事项

  • 在缩减集群时,应确保剩余资源足以处理您的工作负载,并确保正确处理任何必要的数据迁移或再平衡以避免中断。

  • 在 Worker 节点组上调用 API 之前,请务必将数据备份到 Amazon S3 或适用于 Lustre 的 FSx 文件系统。这有助于防止实例根卷出现任何潜在的数据丢失。有关备份的更多信息,请参阅使用 SageMaker HyperPod 提供的备份脚本

  • 要在现有集群上调用此 API,必须先通过运行 UpdateClusterSoftware API 来修补集群。有关修补集群的更多信息,请参阅更新集群的 SageMaker HyperPod 平台软件

  • 按需型实例的计量/计费将在缩减后自动停止。要停止对缩减的预留实例进行计量,您应联系您的 AWS 账户团队以寻求支持。

  • 您可以使用缩减的预留实例所释放的容量来纵向扩展另一个 SageMaker HyperPod 集群。

在实例组级别缩减

UpdateCluster 操作可让您更改 SageMaker HyperPod 集群的配置,例如缩减实例组的实例数或移除整个实例组。当您要根据工作负载变化调整分配给集群的资源、优化成本或更改实例组的实例类型时,此操作会很有用。

缩减实例组

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

注意

在将实例组中的实例数缩减至 0 时,该实例组中的所有实例都将被终止。但是,实例组本身仍将作为 SageMaker HyperPod 集群的一部分存在。您稍后可使用相同的实例组配置来再次纵向扩展实例组。

或者,您可以选择永久性移除实例组。有关更多信息,请参阅删除实例组

使用 UpdateCluster 进行缩减
  1. 按照更新 SageMaker HyperPod 集群配置中概述的步骤操作。在步骤 1.d 中指定 InstanceCount 字段时,请输入一个小于当前实例数的数字来缩减集群。

  2. 运行 update-cluster 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" }

删除实例组

当不再需要实例组时,可使用 UpdateCluster 操作从 SageMaker HyperPod 集群中移除整个实例组。这不仅仅是简单的缩减,还允许您从集群配置中彻底移除特定的实例组。

注意

在移除实例组时:

  • 将终止目标组中的所有实例。

  • 从集群中删除整个组配置。

  • 将停止该实例组上运行的所有工作负载。

使用 UpdateCluster 删除实例组
  1. 按照更新 SageMaker HyperPod 集群配置中概述的步骤进行操作时:

    1. UpdateCluster JSON 中设置可选的 InstanceGroupsToDelete 参数,然后传递要删除的实例组名称的逗号分隔列表。

    2. 指定 InstanceGroups 列表时,请确保将删除的实例组的规格不再在 InstanceGroups 列表中列出。

  2. 运行 update-cluster 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" }

在实例级别缩减

BatchDeleteClusterNodes 操作可让您通过指定要终止的单个节点来缩减 SageMaker HyperPod 集群。利用 BatchDeleteClusterNodes,可以更精细地控制目标节点移除和集群优化操作。例如,您可以使用 BatchDeleteClusterNodes 删除目标节点以进行维护、滚动升级或跨地域再平衡资源。

API 请求和响应

当您提交 BatchDeleteClusterNodes 请求时,SageMaker HyperPod 会根据节点的实例 ID 删除节点。API 接受包含集群名称和要删除的节点 ID 列表的请求。

响应包括两个部分:

  • Failed:类型 BatchDeleteClusterNodesError 的错误列表 – 每个实例 ID 对应一个错误。

  • Successful:已成功终止的实例 ID 的列表。

验证和错误处理

API 会执行各种验证,例如:

  • 验证节点 ID 格式(前缀 i- 和 Amazon EC2 实例 ID 结构)。

  • 检查节点列表长度,单个 BatchDeleteClusterNodes 请求中的节点 ID 不得超过 99 个。

  • 确保存在带输入 cluster-name 的有效 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"]'