英文原标题:Orchestrating SageMaker AI endpoint auto scaling with AWS CDK

本文为英文原文的机器翻译摘要,原文见:AWS Machine Learning Blog ↗

  • 文章指出,当使用CloudFormation或CDK部署SageMaker AI实时端点并启用自动扩缩时,更新端点配置(如实例类型、数量或环境变量)会失败,因为SageMaker要求先注销可扩缩目标,而注销后CloudFormation无法跟踪Application Auto Scaling资源。
  • 文章分析了三种失败模式:直接更新端点配置时,SageMaker拒绝更新并报错;手动注销后仅更新端点配置,部署成功但自动扩缩不会重新注册,且无错误提示;手动注销后更新自动扩缩参数,CloudFormation尝试更新不存在的资源,导致回滚也失败,堆栈进入UPDATE_ROLLBACK_FAILED状态。
  • 解决方案是使用一个可复用的CDK构造,用三个自定义资源替换原生的ScalableTarget和ScalingPolicy资源,通过显式依赖顺序在端点更新前后自动执行注销和注册操作,实现单次部署完成配置和扩缩参数更新。
  • 三个自定义资源依次为:注销(在端点更新前移除可扩缩目标)、端点更新(由CDK管理)、注册可扩缩目标(等待端点进入InService状态后注册)、附加扩缩策略(等待可扩缩目标可查询后应用目标跟踪策略)。
  • 注册和附加策略使用CDK提供程序的异步完成模式,通过on_event和is_complete处理器以及等待器轮询实现,总超时分别为1小时和15分钟;每个自定义资源上的ConfigHash属性确保配置变更时重新调用Lambda函数。

关键数据

  • 错误信息:The variant(s) "[AllTraffic]" must be deregistered as scalable targets with Application Auto Scaling before they can be removed or have their instance type updated.
  • 错误信息:Resource of type 'AWS::ApplicationAutoScaling::ScalableTarget' with identifier 'endpoint/<name>/variant/AllTraffic|sagemaker:variant:DesiredInstanceCount|sagemaker' was not found.
  • 等待器每30秒重新调用is_complete处理器,总超时:注册可扩缩目标1小时,附加扩缩策略15分钟。
  • 部署堆栈包含3个自定义资源、2个Step Functions状态机和12个Lambda函数。
  • 示例配置中自动扩缩参数:min_capacity: 1, max_capacity: 10, target_value: 100, scale_in_cooldown: 600, scale_out_cooldown: 120。

为什么值得看:本文提供了一种自动化方案,解决了SageMaker AI端点更新时自动扩缩配置导致的部署失败和堆栈损坏问题,使开发者能通过单次CDK部署安全地更新端点配置和扩缩参数。

站内导航