缩减 SageMaker HyperPod 集群
您可以缩减 Amazon SageMaker HyperPod 集群上运行的实例数量。出于多种原因(例如,资源利用率降低或成本优化),您可能需要缩减集群。
以下页面概述了两种主要的缩减方法:
-
在实例组级别缩减:此方法使用
UpdateClusterAPI,可让您: -
在实例级别缩减:此方法使用
BatchDeleteClusterNodesAPI,可让您指定要终止的单个节点。请参阅在实例级别缩减。
注意
使用 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 进行缩减
-
按照更新 SageMaker HyperPod 集群配置中概述的步骤操作。在步骤 1.d 中指定 InstanceCount 字段时,请输入一个小于当前实例数的数字来缩减集群。
-
运行 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 删除实例组
-
按照更新 SageMaker HyperPod 集群配置中概述的步骤进行操作时:
-
在
UpdateClusterJSON 中设置可选的InstanceGroupsToDelete参数,然后传递要删除的实例组名称的逗号分隔列表。 -
指定
InstanceGroups列表时,请确保将删除的实例组的规格不再在InstanceGroups列表中列出。
-
-
运行 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"]'