

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 非同期エンドポイントをオートスケールする
<a name="async-inference-autoscale"></a>

Amazon SageMaker AI では、非同期エンドポイントの自動的なスケーリング (オートスケーリング) がサポートされています。自動スケーリングは、ワークロードの変動に応じて、モデルにプロビジョニングされたインスタンスの数を動的に調整します。Amazon SageMaker AI がサポートしている他のホストモデルとは異なり、非同期推論を使用すると、非同期エンドポイントのインスタンスをゼロにスケールダウンすることもできます。インスタンスがゼロの場合に受信されるリクエストは、エンドポイントがスケールアップされると処理のためにキューに入れられます。

非同期エンドポイントをオートスケールするには、少なくとも以下を行う必要があります。
+ デプロイされたモデル (本番稼働用バリアント) を登録する。
+ スケーリングポリシーを定義する。
+ オートスケーリングポリシーを適用する。

オートスケールを使用するには、SageMaker AI のエンドポイントにモデルをデプロイしておく必要があります。デプロイされたモデルは、[本番稼動用バリアント](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html)と呼ばれます。エンドポイントへのモデルのデプロイの詳細については、「[Deploy the Model to SageMaker Hosting Services](https://docs.aws.amazon.com/sagemaker/latest/dg/ex1-model-deployment.html#ex1-deploy-model)」を参照してください。スケーリングポリシーのメトリクスとターゲット値を指定するには、スケーリングポリシーを設定します。スケーリングポリシーを定義する方法の詳細については、「[スケーリングポリシーを定義する](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling-add-code-define.html)」を参照してください。モデルを登録してスケーリングポリシーを定義した後に、そのスケーリングポリシーを登録されたモデルに適用します。スケーリングポリシーを適用する方法の詳細については、「[スケーリングポリシーを適用する](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling-add-code-apply.html)」を参照してください。

エンドポイントがゼロにスケールダウンされてからリクエストを受信した際にエンドポイントをスケールアップする、オプションの追加のスケーリングポリシーを定義する方法の詳細については、「[オプション: 新しいリクエストに合わせてゼロからスケールアップするスケーリングポリシーを定義します。](#async-inference-autoscale-scale-up)」を参照してください。このオプションポリシーを指定しない場合、バックログリクエストの数がターゲットのトラッキング値を超えた後にのみ、エンドポイントはゼロからのスケールアップを開始します。

 オートスケーリングに関わるその他の前提条件およびコンポーネントの詳細については、SageMaker AI オートスケーリングに関するドキュメントの「[前提条件](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling-prerequisites.html)」セクションを参照してください。

**注記**  
同じ自動スケーリンググループに複数のスケーリングポリシーをアタッチすると、スケーリングが競合する可能性があります。競合が発生すると、Amazon EC2 Auto Scaling はスケールアウトとスケールインの両方で最大のキャパシティーをプロビジョニングするポリシーを選択します。この動作の詳細については、Amazon EC2 Auto Scaling ドキュメントの「[複数の動的スケーリングポリシー](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scale-based-on-demand.html#multiple-scaling-policy-resolution)」を参照してください。

## スケーリングポリシーを定義する
<a name="async-inference-autoscale-define-async"></a>

スケーリングポリシーのメトリクスとターゲット値を指定するには、ターゲット追跡スケーリングポリシーを設定します。スケーリングポリシーを JSON ブロックとしてテキストファイルに定義します。このテキストファイルは、AWS CLI または アプリケーションの Auto Scaling API を呼び出す際に使用します。ポリシー設定構文の詳細については、Application Auto Scaling API リファレンスの「[https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)」を参照してください。

非同期エンドポイントについて、SageMaker AI では、バリアントに対するターゲット追跡スケーリングのポリシー設定を作成することを強くお勧めします。この設定例では、`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',
        }
    }
```

## ゼロにスケールするスケーリングポリシーを定義する
<a name="async-inference-autoscale-define-async-zero"></a>

以下に、AWS SDK for Python (Boto3) を使って、アプリケーションオートスケーリングを備えるエンドポイントバリアントを定義および登録する方法を示します。Boto3 でアプリケーションオートスケーリングを行う低レベルのクライアントオブジェクトを定義した後、[https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/application-autoscaling.html#ApplicationAutoScaling.Client.register_scalable_target](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/application-autoscaling.html#ApplicationAutoScaling.Client.register_scalable_target) メソッドを使用して本番稼働用バリアントを登録します。処理するリクエストがない場合、非同期推論では 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](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/application-autoscaling.html#ApplicationAutoScaling.Client.register_scalable_target)」のドキュメントを参照してください。

## オプション: 新しいリクエストに合わせてゼロからスケールアップするスケーリングポリシーを定義します。
<a name="async-inference-autoscale-scale-up"></a>

散発的なリクエストやリクエスト数が少ない期間があるユースケースがあるかもしれません。この期間中にエンドポイントのインスタンスがゼロインスタンスにスケールダウンされた場合、キュー内のリクエスト数がスケーリングポリシーで指定された目標を超えるまで、エンドポイントは再びスケールアップされません。その結果、キュー内のリクエストの待ち時間が長くなる可能性があります。次のセクションでは、キューで新しいリクエストを受け取った後に、エンドポイントをゼロインスタンスからスケールアップする追加のスケーリングポリシーを作成する方法を示します。エンドポイントは、キューのサイズが目標を超えるのを待つ代わりに、より迅速に新しいリクエストに応答できるようになります。

インスタンスをゼロからスケールアップするエンドポイントのスケーリングポリシーを作成するには、次の操作を行います。

1. 必要な動作を定義するスケーリングポリシーを作成します。これは、インスタンスがゼロでもキューにリクエストがある場合にエンドポイントをスケールアップします。以下は、AWS SDK for Python (Boto3) を使用して `HasBacklogWithoutCapacity-ScalingPolicy` というスケーリングポリシーを定義する方法を示しています。キューがゼロより大きく、エンドポイントの現在のインスタンス数もゼロの場合、ポリシーはエンドポイントをスケールアップします。それ以外の場合、このポリシーはエンドポイント向けにスケーリングに影響しません。

   ```
   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
               }
             ]
       },    
   )
   ```

1. カスタムトリクス `HasBacklogWithoutCapacity` を使用して CloudWatch アラームを作成します。トリガーされると、アラームは以前に定義したスケーリングポリシーを開始します。`HasBacklogWithoutCapacity` メトリクスの詳細については、「[非同期推論エンドポイントメトリクス](async-inference-monitor.md#async-inference-monitor-cloudwatch-async)」を参照してください。

   ```
   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]
   )
   ```

これで、キューに保留中のリクエストがあるたびに、エンドポイントをゼロインスタンスからスケールアップするスケーリングポリシーと CloudWatch アラームが作成されます。