You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SageMaker异步端点10分钟自动缩容至0实例问题求助

SageMaker异步端点实例异常终止并重复处理请求问题排查与解决

核心问题诊断

你遇到的实例10分钟后被终止、重启后重复处理请求的问题,根源在于错误使用了CPU利用率作为扩缩容指标,以及缩容策略的触发条件与异步端点的运行特性不匹配:

  • 异步任务处理时,实例可能处于S3数据下载、磁盘IO等低CPU负载状态,CPU指标会误触发缩容;
  • 实例被终止后,SageMaker异步端点会自动重试未完成的请求,导致你看到“重复处理”的现象;
  • 缩容策略绑定的告警指标错误,导致提前触发缩容操作。

解决方案

一、替换为异步端点专属扩缩容指标

异步端点必须使用SageMaker提供的请求队列状态指标来控制扩缩容,而非CPU利用率:

1. 保留并完善从零扩容策略

HasBacklogWithoutCapacity是专门检测“有请求但无运行实例”的指标,需绑定对应的CloudWatch告警:

# 创建扩容策略(你的现有代码可保留)
response = asg_client.put_scaling_policy(
    PolicyName = f'HasBacklogWithoutCapacity-ScalingPolicy-{endpoint_name}',
    ServiceNamespace="sagemaker",
    ResourceId=resource_id,
    ScalableDimension="sagemaker:variant:DesiredInstanceCount",
    PolicyType="StepScaling",
    StepScalingPolicyConfiguration={
        "AdjustmentType": "ChangeInCapacity",
        "MetricAggregationType": "Average",
        "Cooldown": 300,
        "StepAdjustments": [ 
            {
                "MetricIntervalLowerBound": 0.0,
                "ScalingAdjustment": 1
            }
        ]
    },    
)

# 绑定CloudWatch告警(新增)
cw_client.put_metric_alarm(
    AlarmName=f'HasBacklogWithoutCapacity-Alarm-{endpoint_name}',
    MetricName='HasBacklogWithoutCapacity',
    Namespace='AWS/SageMaker',
    Dimensions=[
        {'Name': 'EndpointName', 'Value': endpoint_name},
        {'Name': 'VariantName', 'Value': 'AllTraffic'}
    ],
    Statistic='Average',
    ComparisonOperator='GreaterThanThreshold',
    Threshold=0.0,
    EvaluationPeriods=1,
    Period=60,
    AlarmActions=[response['PolicyArn']]
)

2. 修改缩容策略:基于待处理请求数

改用PendingRequests指标,当待处理请求数为0持续指定时间后缩容到0:

# 注册可伸缩目标(你的现有代码可保留)
response = asg_client.register_scalable_target(
    ServiceNamespace="sagemaker",
    ResourceId=resource_id,
    ScalableDimension="sagemaker:variant:DesiredInstanceCount",
    MinCapacity=0,
    MaxCapacity=5,
)

# 新的缩容策略
response_scale_in = asg_client.put_scaling_policy(
    PolicyName=f'scaleinpolicy-{endpoint_name}',
    ServiceNamespace="sagemaker",
    ResourceId=resource_id,
    ScalableDimension="sagemaker:variant:DesiredInstanceCount",
    PolicyType="StepScaling",
    StepScalingPolicyConfiguration={
        "AdjustmentType": "ExactCapacity",  # 直接缩容到0,避免多次操作
        "MetricAggregationType": "Average",
        "Cooldown": 3600,  # 冷却时间设为60分钟,确保任务完全处理完成
        "StepAdjustments": [
            {
                "MetricIntervalUpperBound": 0,
                "ScalingAdjustment": 0
            }
        ]
    },
)

# 绑定缩容告警:当PendingRequests为0持续X分钟触发(X改为你期望的无请求缩容时间)
cw_client.put_metric_alarm(
    AlarmName=f'PendingRequests-Zero-Alarm-{endpoint_name}',
    MetricName='PendingRequests',
    Namespace='AWS/SageMaker',
    Dimensions=[
        {'Name': 'EndpointName', 'Value': endpoint_name},
        {'Name': 'VariantName', 'Value': 'AllTraffic'}
    ],
    Statistic='Average',
    ComparisonOperator='LessThanOrEqualToThreshold',
    Threshold=0.0,
    EvaluationPeriods=10,  # 比如10分钟,每个Period为60秒
    Period=60,
    AlarmActions=[response_scale_in['PolicyArn']]
)

二、删除CPU利用率扩缩容策略

完全移除基于CPUUtilization的扩缩容配置,该指标不适合异步端点的运行模式,会导致误触发缩容。

三、验证配置与状态

  1. 检查端点事件日志:在SageMaker控制台的端点详情页,查看Events标签,确认实例终止原因是否为“Scaling activity initiated by policy”,验证告警触发是否符合预期;
  2. 监控CloudWatch指标:查看PendingRequests、HasBacklogWithoutCapacity指标的变化,确认扩缩容操作与请求状态匹配;
  3. 确认超时配置:保留InvocationTimeoutSeconds=3600,确保该值大于模型实际处理时间(40分钟),避免SageMaker主动终止请求。

内容的提问来源于stack exchange,提问作者AlArgente

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:52:18