비동기 엔드포인트 오토 스케일링 - Amazon SageMaker

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

비동기 엔드포인트 오토 스케일링

SageMaker Amazon은 비동기 엔드포인트의 자동 크기 조정 (자동 크기 조정) 을 지원합니다. 자동 크기 조정은 워크로드의 변화에 따라 모델에 대해 프로비저닝된 인스턴스의 수를 동적으로 조정합니다. Amazon이 SageMaker 지원하는 다른 호스팅 모델과 달리 비동기 추론을 사용하면 비동기 엔드포인트 인스턴스를 0으로 축소할 수도 있습니다. 인스턴스가 0개일 때 수신된 요청은 엔드포인트가 확장되면 처리를 위해 대기열에 추가됩니다.

비동기식 엔드포인트를 오토 스케일링하려면 최소한 다음을 충족해야 합니다.

  • 배포된 모델(프로덕션 변형)을 등록합니다.

  • 스케일링 정책을 정의합니다.

  • 오토 스케일링 정책을 적용합니다.

자동 크기 조정을 사용하려면 먼저 모델을 엔드포인트에 배포해야 합니다. SageMaker 배포된 모델을 프로덕션 변형이라고 합니다. 엔드포인트에 모델을 배포하는 방법에 대한 자세한 내용은 SageMaker 호스팅 서비스에 모델 배포를 참조하십시오. 스케일링 정책에 대한 지표 및 대상 값을 지정하기 위해 스케일링 정책을 구성합니다. 스케일링 정책을 정의하는 방법에 대한 자세한 내용은 스케일링 정책 정의하기를 참고하십시오. 모델을 등록하고 조정 정책을 정의한 이후 등록된 모델에 조정 정책을 적용합니다. 스케일링 정책을 정의하는 방법에 대한 자세한 내용은 스케일링 정책 적용하기를 참고하십시오.

엔드포인트가 0으로 축소된 후 요청을 받았을 때 엔드포인트를 확장하는 선택적 스케일링 정책을 추가로 정의하는 방법에 대한 자세한 내용은 선택 사항: 새 요청에 대해 0부터 확장하는 스케일링 정책 정의을 참고하십시오. 이 선택적 정책을 지정하지 않으면 엔드포인트는 백로그 요청 수가 대상 추적 값을 초과한 후에만 0부터 확장을 시작합니다.

자동 크기 조정에 사용되는 기타 사전 요구 사항 및 구성 요소에 대한 자세한 내용은 자동 크기 조정 설명서의 사전 요구 사항 섹션을 참조하십시오. SageMaker

참고

동일한 오토 스케일링 그룹에 여러 스케일링 정책을 연결하는 경우 스케일링에 충돌이 발생할 수 있습니다. 이러한 충돌 상황이 발생하는 경우 Amazon EC2 Auto Scaling은 확장 및 축소를 위해 최대 용량을 제공하는 정책을 선택합니다. 이 동작에 대한 자세한 내용은 Amazon EC2 Auto Scaling 설명서다중 동적 스케일링 정책을 참고하십시오.

조정 정책 정의

조정 정책에 대한 지표 및 대상 값을 지정하려면 대상 추적 조정 정책을 구성합니다. 텍스트 파일에 JSON 블록으로 스케일링 정책을 정의합니다. AWS CLI 또는 Application Auto Scaling API를 호출할 때 이 텍스트 파일을 사용합니다. 정책 구성 구문에 대한 자세한 정보는 Application Auto Scaling API 참조의 TargetTrackingScalingPolicyConfiguration을 참조하십시오.

비동기 엔드포인트의 경우 변형의 대상 추적 조정을 위한 정책 구성을 생성할 것을 SageMaker 강력히 권장합니다. 이 구성 예제에서는 ApproximateBacklogSizePerInstance라는 사용자 지정 지표 CustomizedMetricSpecification을 사용합니다.

TargetTrackingScalingPolicyConfiguration={ 'TargetValue': 5.0, # The target value for the metric. Here the metric is: ApproximateBacklogSizePerInstance 'CustomizedMetricSpecification': { 'MetricName': 'ApproximateBacklogSizePerInstance', 'Namespace': 'AWS/SageMaker', 'Dimensions': [ {'Name': 'EndpointName', 'Value': <endpoint_name> } ], 'Statistic': 'Average', } }

0으로 확장하는 스케일링 정책을 정의합니다.

다음은 AWS SDK for Python (Boto3)를 사용하여 애플리케이션 오토 스케일링을 통해 엔드포인트 변형을 정의하고 등록하는 방법을 보여줍니다. Boto3로 애플리케이션 오토 스케일링을 나타내는 저수준 클라이언트 객체를 정의한 후 이 RegisterScalableTarget 메서드를 사용하여 프로덕션 변형을 등록합니다. 처리할 요청이 없을 때 비동기 추론을 사용하면 0으로 오토 스케일링할 수 있으므로 MinCapacity를 0으로 설정합니다.

# Common class representing application autoscaling for SageMaker client = boto3.client('application-autoscaling') # This is the format in which application autoscaling references the endpoint resource_id='endpoint/' + <endpoint_name> + '/variant/' + <'variant1'> # Define and register your endpoint variant response = client.register_scalable_target( ServiceNamespace='sagemaker', ResourceId=resource_id, ScalableDimension='sagemaker:variant:DesiredInstanceCount', # The number of EC2 instances for your Amazon SageMaker model endpoint variant. MinCapacity=0, MaxCapacity=5 )

애플리케이션 오토 스케일링 API에 대한 자세한 설명은 애플리케이션 스케일링 Boto3 설명서를 참고하십시오.

선택 사항: 새 요청에 대해 0부터 확장하는 스케일링 정책 정의

요청이 산발적으로 발생하거나 요청 수가 적은 기간이 있는 사용 사례가 있을 수 있습니다. 이 기간 동안 엔드포인트가 인스턴스 0개로 스케일 다운될 경우, 대기열의 요청 수가 조정 정책에 지정된 대상을 초과할 때까지 엔드포인트는 다시 확장되지 않습니다. 이로 인해 대기열에 있는 요청을 기다리는 시간이 길어질 수 있습니다. 다음 섹션에서는 대기열에서 새 요청을 수신한 후 엔드포인트를 0개 인스턴스에서 확장하는 오토 스케일링 정책을 추가로 생성하는 방법을 보여줍니다. 엔드포인트는 대기열 크기가 대상을 초과할 때까지 기다리지 않고 새 요청에 더 빠르게 응답할 수 있습니다.

0개 인스턴스부터 확장하는 엔드포인트에 대한 스케일링 정책을 생성하려면 다음을 수행하십시오.

  1. 원하는 동작을 정의하는 스케일링 정책을 생성합니다. 즉, 인스턴스가 0이지만 대기열에 요청이 있을 때 엔드포인트를 확장합니다. 다음은 AWS SDK for Python (Boto3)를 사용하여 HasBacklogWithoutCapacity-ScalingPolicy라고 하는 스케일링 정책을 정의하는 방법을 보여줍니다. 대기열이 0보다 크고 엔드포인트의 현재 인스턴스 수도 0이면 이 정책은 엔드포인트를 확장합니다. 기타 모든 경우에는 이 정책이 엔드포인트의 스케일링에 영향을 주지 않습니다.

    response = client.put_scaling_policy( PolicyName="HasBacklogWithoutCapacity-ScalingPolicy", ServiceNamespace="sagemaker", # The namespace of the service that provides the resource. ResourceId=resource_id, # Endpoint name ScalableDimension="sagemaker:variant:DesiredInstanceCount", # SageMaker supports only Instance Count PolicyType="StepScaling", # 'StepScaling' or 'TargetTrackingScaling' StepScalingPolicyConfiguration={ "AdjustmentType": "ChangeInCapacity", # Specifies whether the ScalingAdjustment value in the StepAdjustment property is an absolute number or a percentage of the current capacity. "MetricAggregationType": "Average", # The aggregation type for the CloudWatch metrics. "Cooldown": 300, # The amount of time, in seconds, to wait for a previous scaling activity to take effect. "StepAdjustments": # A set of adjustments that enable you to scale based on the size of the alarm breach. [ { "MetricIntervalLowerBound": 0, "ScalingAdjustment": 1 } ] }, )
  2. 사용자 지정 지표로 경보를 생성하십시오. CloudWatch HasBacklogWithoutCapacity 경보가 트리거되면 이전에 정의된 스케일링 정책이 시작됩니다. HasBacklogWithoutCapacity 지표에 대한 자세한 내용은 비동기 추론 엔드포인트 지표를 참고하십시오.

    response = cw_client.put_metric_alarm( AlarmName=step_scaling_policy_alarm_name, MetricName='HasBacklogWithoutCapacity', Namespace='AWS/SageMaker', Statistic='Average', EvaluationPeriods= 2, DatapointsToAlarm= 2, Threshold= 1, ComparisonOperator='GreaterThanOrEqualToThreshold', TreatMissingData='missing', Dimensions=[ { 'Name':'EndpointName', 'Value':endpoint_name }, ], Period= 60, AlarmActions=[step_scaling_policy_arn] )

이제 대기열에 보류 중인 요청이 있을 때마다 0개의 인스턴스에서 엔드포인트를 확장하는 조정 정책과 CloudWatch 경보가 있어야 합니다.