スケーリングポリシーを定義する - Amazon SageMaker

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

スケーリングポリシーをモデルに追加する前に、ポリシー設定を JSON ブロックとしてテキストファイルに保存します。このテキストファイルは、AWS Command Line Interface (AWS CLI) または Application Auto Scaling API を呼び出す際に使用します。適切な CloudWatch メトリクスを選択することで、スケーリングを最適化できます。ただし、本番環境でカスタムメトリクスを使用する前に、カスタムメトリクスを使用して自動スケーリングをテストする必要があります。

このセクションでは、ターゲット追跡スケーリングポリシーの設定例を示します。

事前定義されたメトリクスを指定する (CloudWatch メトリクス: InvocationsPerInstance)

以下は、インスタンスあたりの平均呼び出し数を 70 に維持するバリアントのターゲット追跡ポリシーの設定例です。この設定を config.json という名前のファイルに保存してください。

{ "TargetValue": 70.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "SageMakerVariantInvocationsPerInstance" } }

詳細については、Application Auto Scaling API Reference の「TargetTrackingScalingPolicyConfiguration」を参照してください。

高解像度の事前定義済みメトリクスを指定する (CloudWatch メトリクス: ConcurrentRequestsPerModel と ConcurrentRequestsPerCopy )

次の高解像度の CloudWatch メトリクスを使用すると、モデルが受信するたくさんの同時リクエストのスケーリングポリシーを設定できます。

ConcurrentRequestsPerModel

モデルコンテナが受信する同時リクエストの数。

ConcurrentRequestsPerCopy

推論コンポーネントが受信する同時リクエストの数。

これらのメトリクスは、モデルコンテナが処理する同時リクエスト (コンテナ内でキューに入れられたリクエストを含む) の数を追跡します。トークンのストリームとして推論レスポンスを送信するモデルの場合、これらのメトリクスは、モデルがリクエストの最後のトークンを送信するまで、各リクエストを追跡します。

このような高解像度メトリクスは、標準の CloudWatch メトリクスよりも頻繁にデータを出力します。InvocationsPerInstance メトリクスなどの標準メトリクスは、1 分に 1 回データを出力しますが、これらの高解像度メトリクスは 10 秒ごとにデータを出力します。したがって、モデルへの同時トラフィックが増加するにつれて、ポリシーは標準メトリクスよりもはるかに早くスケールアウトすることで対応します。ただし、モデルへのトラフィックが減少すると、ポリシーは標準メトリクスと同じ速度でスケールインします。

以下は、モデルあたりの同時リクエスト数が 5 を超えた場合にインスタンスを追加するターゲット追跡ポリシーの設定例です。この設定を config.json という名前のファイルに保存してください。

{ "TargetValue": 5.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "SageMakerVariantConcurrentRequestsPerModelHighResolution" } }

推論コンポーネントを使用して複数のモデルを同じエンドポイントにデプロイする場合は、同等のポリシーを作成できます。この場合は、PredefinedMetricTypeSageMakerInferenceComponentConcurrentRequestsPerCopyHighResolution に設定します。

詳細については、Application Auto Scaling API Reference の「TargetTrackingScalingPolicyConfiguration」を参照してください。

カスタムメトリクスを定義する (CloudWatch メトリクス: CPUUtilization)

カスタムメトリクスを使用してターゲット追跡スケーリングポリシーを作成するには、メトリクスの名前、名前空間、単位、統計、0 以上のディメンションを指定します。ディメンションには、そのディメンションの名前と値を含みます。容量に比例して変化する本番稼働用バリアントのメトリクスを使用できます。

次の設定例は、カスタムメトリクスを使用したターゲット追跡スケーリングポリシーを示しています。このポリシーは、すべてのインスタンスの平均 CPU 使用率が 50% であることに基づいてバリアントをスケーリングします。この設定を config.json という名前のファイルに保存してください。

{ "TargetValue": 50.0, "CustomizedMetricSpecification": { "MetricName": "CPUUtilization", "Namespace": "/aws/sagemaker/Endpoints", "Dimensions": [ {"Name": "EndpointName", "Value": "my-endpoint" }, {"Name": "VariantName","Value": "my-variant"} ], "Statistic": "Average", "Unit": "Percent" } }

詳細については、Application Auto Scaling API リファレンスの「CustomizedMetricSpecification」を参照してください。

カスタムメトリクスを定義する (CloudWatch メトリクス: ExplanationsPerInstance)

エンドポイントでオンライン説明可能性をアクティブ化すると、バリアントのインスタンスごとに、1 分あたりに説明されたレコード数の平均を出力する ExplanationsPerInstance メトリクスが出力されます。レコードを説明するリソース使用率は、レコードを予測する場合と大きく異なることがあります。オンライン説明可能性をアクティブ化したエンドポイントのターゲット追跡スケーリングには、このメトリクスを使用することを強くお勧めします。

スケーラブルなターゲットに対して複数のターゲット追跡ポリシーを作成できます。「事前定義されたメトリクスを指定する (CloudWatch メトリクス: InvocationsPerInstance)」セクションの InvocationsPerInstance ポリシーを、(ExplanationsPerInstance ポリシーに加えて) 追加することを検討してください。EnableExplanations パラメータに設定されたしきい値が原因でほとんどの呼び出しで説明が返されない場合、エンドポイントは InvocationsPerInstance ポリシーを選択できます。多数の説明がある場合、エンドポイントは ExplanationsPerInstance ポリシーを使用できます。

次の設定例は、カスタムメトリクスを使用したターゲット追跡スケーリングポリシーを示しています。このスケーリングポリシーは、各インスタンスの ExplanationsPerInstance メトリクスが 20 になるようにバリアントインスタンスの数を調整します。この設定を config.json という名前のファイルに保存してください。

{ "TargetValue": 20.0, "CustomizedMetricSpecification": { "MetricName": "ExplanationsPerInstance", "Namespace": "AWS/SageMaker", "Dimensions": [ {"Name": "EndpointName", "Value": "my-endpoint" }, {"Name": "VariantName","Value": "my-variant"} ], "Statistic": "Sum" } }

詳細については、Application Auto Scaling API リファレンスの「CustomizedMetricSpecification」を参照してください。

クールダウン期間を指定する

必要に応じて、ScaleOutCooldown または ScaleInCooldown パラメータを指定してターゲット追跡スケーリングポリシーでクールダウン期間を定義できます。

以下は、インスタンスあたりの平均呼び出し数を 70 に維持するバリアントのターゲット追跡ポリシーの設定例です。このポリシー構成では、スケールインのクールダウン期間が 10 分間 (600 秒)、スケールアウトのクールダウン期間が 5 分間 (300 秒) に設定されます。この設定を config.json という名前のファイルに保存してください。

{ "TargetValue": 70.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "SageMakerVariantInvocationsPerInstance" }, "ScaleInCooldown": 600, "ScaleOutCooldown": 300 }

詳細については、Application Auto Scaling API Reference の「TargetTrackingScalingPolicyConfiguration」を参照してください。