SageMaker异步端点扩缩容异常求助:无法缩至0实例
SageMaker异步端点无法缩容至0实例的解决方法
核心问题分析
你当前的配置仅实现了扩容触发逻辑(有请求积压且无实例时扩容到1),但缺少缩容的策略和对应告警规则,同时需确保自动扩缩容的最小实例数已设置为0。
解决步骤
1. 确认自动扩缩容的最小实例数为0
在注册SageMaker端点的可扩展目标时,必须将MinCapacity设为0。如果之前注册时MinCapacity是1,端点无法缩至0。检查注册代码:
client_autoscaling.register_scalable_target( ServiceNamespace="sagemaker", ResourceId=resource_id, # 格式为 endpoint/{EndpointName}/variant/{VariantName} ScalableDimension="sagemaker:variant:DesiredInstanceCount", MinCapacity=0, # 必须设为0 MaxCapacity=1 )
2. 添加缩容的StepScaling策略
创建专门的缩容策略,当无请求积压时将实例数从1调整为0:
# 缩容策略 scale_in_policy = client_autoscaling.put_scaling_policy( PolicyName=f"{self.policy_name}-scale-in", ServiceNamespace="sagemaker", ResourceId=self.resource_id, ScalableDimension="sagemaker:variant:DesiredInstanceCount", PolicyType="StepScaling", StepScalingPolicyConfiguration={ "AdjustmentType": "ChangeInCapacity", "MetricAggregationType": "Average", "Cooldown": 300, # 缩容冷却时间建议设长一些,避免频繁扩缩容 "StepAdjustments": [ { "MetricIntervalUpperBound": 0, "ScalingAdjustment": -1 # 实例数减1,从1到0 } ] } )
3. 创建触发缩容的CloudWatch告警
监控BacklogSize指标,当该指标持续为0时触发缩容策略:
# 缩容告警 client_cloudwatch.put_metric_alarm( AlarmName=f"{self.policy_name}-scale-in-alarm", MetricName="BacklogSize", Namespace="AWS/SageMaker", Statistic="Average", EvaluationPeriods=3, # 连续3个周期验证无积压 DatapointsToAlarm=3, Threshold=0, ComparisonOperator="LessThanOrEqualToThreshold", TreatMissingData="notBreaching", Dimensions=[ {"Name": "EndpointName", "Value": self.endpoint_name}, {"Name": "VariantName", "Value": self.variant_name} # 必须指定变体名称 ], Period=60, AlarmActions=[scale_in_policy["PolicyARN"]] )
关键注意事项
- 缩容冷却时间(Cooldown)建议设置为300秒以上,避免因短暂的无请求状态频繁缩容,影响后续请求响应速度。
- 告警必须指定
VariantName维度,否则可能无法正确关联到端点变体。 - 确保
BacklogSize指标能正常采集:异步端点的请求积压会反映在该指标上,无请求时指标值为0。
内容的提问来源于stack exchange,提问作者Francesco Camussoni
相关产品推荐
相关产品推荐

