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

非同期エンドポイントをオートスケールする

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

非同期エンドポイントをオートスケールするには、少なくとも以下を行う必要があります。

  • デプロイされたモデル (本番稼働用バリアント) を登録する。

  • スケーリングポリシーを定義する。

  • オートスケーリングポリシーを適用する。

自動スケーリングを使用する前に、 SageMaker エンドポイントにモデルをデプロイしておく必要があります。デプロイされたモデルは、本番稼動用バリアントと呼ばれます。エンドポイントへのモデルのデプロイの詳細については、「モデルを SageMaker ホスティングサービスにデプロイする」を参照してください。スケーリングポリシーのメトリクスとターゲット値を指定するには、スケーリングポリシーを設定します。スケーリングポリシーを定義する方法の詳細については、「スケーリングポリシーを定義する」を参照してください。モデルを登録してスケーリングポリシーを定義した後に、そのスケーリングポリシーを登録されたモデルに適用します。スケーリングポリシーを適用する方法の詳細については、「スケーリングポリシーを適用する」を参照してください。

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

Auto Scaling で使用されるその他の前提条件とコンポーネントの詳細については、Auto Scaling ドキュメントの「前提条件 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', } }

ゼロにスケールするスケーリングポリシーを定義する

以下に、 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」のドキュメントを参照してください。

オプション: 新しいリクエストに合わせてゼロからスケールアップするスケーリングポリシーを定義します。

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

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

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

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