

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

# Amazon SageMaker AI モデルの自動スケーリング
<a name="endpoint-auto-scaling"></a>

Amazon SageMaker AI では、ホストモデルの自動的なスケーリング (オートスケーリング) がサポートされています。*自動スケーリング*は、ワークロードの変動に応じて、モデルにプロビジョニングされるインスタンスの数を動的に調整します。ワークロードが増加すると、自動スケーリングはより多くのインスタンスをオンラインにします。ワークロードが減少すると、自動スケーリングは使用していないプロビジョニングされたインスタンスに対して支払いが発生しないように、不要なインスタンスを削除します。

**Topics**
+ [自動スケーリングポリシーの概要](endpoint-auto-scaling-policy.md)
+ [自動スケーリングの前提条件](endpoint-auto-scaling-prerequisites.md)
+ [コンソールを使用してモデルの自動スケーリングを設定する](endpoint-auto-scaling-add-console.md)
+ [モデルの登録](endpoint-auto-scaling-add-policy.md)
+ [スケーリングポリシーを定義する](endpoint-auto-scaling-add-code-define.md)
+ [スケーリングポリシーを適用する](endpoint-auto-scaling-add-code-apply.md)
+ [スケーリングポリシーを編集する手順](endpoint-auto-scaling-edit.md)
+ [スケーリングポリシーを一時的に無効にする](endpoint-auto-scaling-suspend-scaling-activities.md)
+ [スケーリングポリシーを削除する](endpoint-auto-scaling-delete.md)
+ [スケーリングアクティビティを記述してスケーリングアクティビティのステータスを確認する](endpoint-scaling-query-history.md)
+ [エンドポイントをゼロインスタンスにスケールする](endpoint-auto-scaling-zero-instances.md)
+ [自動スケーリング設定の負荷テスト](endpoint-scaling-loadtest.md)
+ [CloudFormation を使用してスケーリングポリシーを作成する](endpoint-scaling-cloudformation.md)
+ [自動スケーリングを使用するエンドポイントを更新する](endpoint-scaling-update.md)
+ [自動スケーリングに設定されたエンドポイントを削除する](endpoint-delete-with-scaling.md)

# 自動スケーリングポリシーの概要
<a name="endpoint-auto-scaling-policy"></a>

自動スケーリングを使用するには、実際のワークロードに応じて本番稼働用バリアントのインスタンス数を追加および削除するスケーリングポリシーを定義します。

ワークロードの変動に合わせて自動的にスケーリングするには、ターゲット追跡ポリシーとステップスケーリングポリシーの 2 つのオプションがあります。

大半のケースで推奨されるのはターゲット追跡スケーリングポリシーです。ターゲット追跡では、Amazon CloudWatch メトリクスとターゲット値を選択します。自動スケーリングは、スケーリングポリシーの CloudWatch アラームを作成および管理し、メトリクスとターゲット値に基づいてスケーリング調整値を計算します。ポリシーは、指定されたターゲット値、またはそれに近い値にメトリクスを維持するために、必要に応じてインスタンスを追加または削除します。たとえば、事前定義された `InvocationsPerInstance` メトリクスのターゲット値を 70 に設定すると、`InvocationsPerInstance` を 70 または 70 近くに維持できます。詳細については、[Application Auto Scaling ユーザーガイド](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html)の Target Tracking Scaling Policies を参照してください。

ステップスケーリングは、デプロイするインスタンスの数や条件を指定するなど、高度な設定が必要な場合に使用できます。たとえば、エンドポイントがゼロアクティブインスタンスからスケールアウトできるようにする場合は、ステップスケーリングを使用する必要があります。ステップスケーリングポリシーの概要とその仕組みについては、「[Application Auto Scaling ユーザー ガイド](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html)」の「ステップスケーリングポリシー」を参照してください。

ターゲット追跡スケーリングポリシーを作成するには、以下を指定します。
+ **メトリクス** — インスタンスあたりの平均呼び出し数など、追跡する CloudWatch メトリクス。
+ **ターゲット値** — 1 分ごとにインスタンスあたり 70 回の呼び出しなど、メトリクスのターゲット値。

事前定義されたメトリクスまたはカスタムメトリクスのいずれかを使用して、ターゲット追跡スケーリングポリシーを作成できます。事前定義されたメトリクスは列挙型で定義されるため、それをコード内に名前で指定するか、SageMaker AI コンソールで使用できます。代わりに、 AWS CLI または Application Auto Scaling API を使用し、事前定義されたメトリクスまたはカスタムメトリクスに基づいてターゲット追跡スケーリングポリシーを適用することもできます。

スケーリングアクティビティは、容量の急激な変動を防ぐため、クールダウン期間を設けて実行されることに注意してください。オプションでスケーリングポリシーのクールダウン期間を設定できます。

自動スケーリングの主な概念については、以下のセクションを参照してください。

## スケジュールベースのスケーリング
<a name="scheduled-scaling"></a>

スケジュールされたアクションを作成して、特定の時刻にスケーリングアクティビティを実行することもできます。スケジュールされたアクションは、一度だけスケールする、または定期的なスケジュールに従ってスケールするものを作成できます。スケジュールされたアクションが実行された後も、スケーリングポリシーは、ワークロードの変動が発生したときに動的にスケーリングするかどうかの決定を引き続き行うことができます。スケジュールされたスケーリングは、 AWS CLI または Application Auto Scaling API からのみ管理できます。詳細については、「*Application Auto Scaling ユーザーガイド*」の「[スケジュールされたスケーリング](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html)」を参照してください。

## 最小スケーリング制限と最大スケーリング制限
<a name="endpoint-auto-scaling-target-capacity"></a>

自動スケーリングを設定するときは、スケーリングポリシーを作成する前にスケーリング制限を指定する必要があります。最小値と最大値の制限を個別に設定します。

最小値は 1 以上で、最大値で指定された値以下である必要があります。

最大値は、最小数に指定された値以上である必要があります。SageMaker AI の自動スケーリングでは、この値に制限は適用されません。

通常のトラフィックに必要なスケーリング制限を決定するには、モデルに対するトラフィックの予想レートで自動スケーリングの設定をテストします。

バリアントのトラフィックがゼロになった場合、SageMaker AI は、指定されたインスタンスの最小数に自動的にスケールインします。この場合、SageMaker AI からは値がゼロのメトリクスが出力されます。

最小容量と最大容量を指定するには、次の 3 つのオプションがあります。

1. コンソールを使用して、**[最小インスタンス数]** と **[最大インスタンス数]** の設定を更新します。

1. register-scalable-target コマンドを実行するときは、 AWS CLI を使用し、 `--min-capacity`オプションと `--max-capacity`オプションを含めます。 [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 

1. [RegisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html) API を呼び出し、`MinCapacity` および `MaxCapacity` パラメータを指定します。

**ヒント**  
最小値を増やすことで手動でスケールアウトすることも、最大値を減らすことで手動でスケールインすることもできます。

## クールダウン期間
<a name="endpoint-auto-scaling-target-cooldown"></a>

*クールダウン期間*は、モデルのスケールイン (容量の削減) またはスケールアウト (容量の増加) 時に、オーバースケーリングを防ぐために使用されます。これは、この期間が終了するまで、後続のスケーリングアクティビティを遅らせるものです。つまり、スケールインのリクエストについてはインスタンスの削除が、スケールアウトのリクエストについてはインスタンスの作成が停止されます。詳細については、「*Application Auto Scaling ユーザーガイド*」の「[Define cooldown periods](https://docs.aws.amazon.com/autoscaling/application/userguide/target-tracking-scaling-policy-overview.html#target-tracking-cooldown)」を参照してください。

スケーリングポリシーのクールダウン期間はお客様が設定します。

スケールインやスケールアウトのクールダウン期間を指定しない場合、スケーリングポリシーではデフォルト値 (それぞれ 300 秒) が使用されます。

スケーリングの設定をテストしたときに、インスタンスが追加または削除されるペースが速すぎる場合は、この値を増やすことを検討してください。この動作は、モデルへのトラフィックに大量のスパイクがある場合や、バリアントに対して複数のスケーリングポリシーを定義した場合に見られます。

インスタンスが追加されるペースが増加したトラフィックに対処するのに十分でない場合は、この値を減らすことを検討してください。

## 関連リソース
<a name="auto-scaling-related-resources"></a>

自動スケーリングの設定の詳細については、次のリソースを参照してください。
+ AWS CLI コマンドリファレンスの [application-autoscaling](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling) セクション
+ Application Auto Scaling API リファレンス[https://docs.aws.amazon.com/autoscaling/application/APIReference/](https://docs.aws.amazon.com/autoscaling/application/APIReference/)
+ アプリケーション Auto Scaling ユーザーガイド[https://docs.aws.amazon.com/autoscaling/application/userguide/](https://docs.aws.amazon.com/autoscaling/application/userguide/)

**注記**  
SageMaker AI では最近、リアルタイム推論エンドポイント上に構築された新しい推論機能を導入しました。エンドポイントのインスタンスタイプと初期インスタンス数を定義するエンドポイント設定を使用して SageMaker AI エンドポイントを作成します。次に、推論コンポーネントを作成します。これは、モデルをエンドポイントにデプロイするために使用できる SageMaker AI ホスティングオブジェクトです。推論コンポーネントのスケーリングの詳細については、 AWS ブログの[SageMaker AI が新しい推論機能を追加して、基盤モデルのデプロイコストとレイテンシーを削減](https://aws.amazon.com/blogs/aws/amazon-sagemaker-adds-new-inference-capabilities-to-help-reduce-foundation-model-deployment-costs-and-latency/)し、[SageMaker AI の最新機能を使用してモデルデプロイコストを平均 50% 削減](https://aws.amazon.com/blogs/machine-learning/reduce-model-deployment-costs-by-50-on-average-using-sagemakers-latest-features/)する」を参照してください。

# 自動スケーリングの前提条件
<a name="endpoint-auto-scaling-prerequisites"></a>

自動スケーリングを使用するには、事前に Amazon SageMaker AI モデルのエンドポイントを作成しておく必要があります。同じエンドポイントに複数のモデルバージョンを持つことができます。各モデルは、[本番稼働用 (モデル) バリアント](model-ab-testing.md)と呼ばれます。モデルのエンドポイントのデプロイの詳細については、「[SageMaker AI ホスティングサービスにモデルをデプロイする](ex1-model-deployment.md#ex1-deploy-model)」を参照してください。

モデルの Auto Scaling を有効にするには、Application Auto Scaling API を使用して SageMaker AI コンソール、 AWS Command Line Interface (AWS CLI)、または AWS SDK を使用できます。
+ モデルのスケーリングを初めて設定する場合は、[コンソールを使用してモデルの自動スケーリングを設定する](endpoint-auto-scaling-add-console.md)ことをお勧めします。
+  AWS CLI または Application Auto Scaling API を使用する場合、フローはモデルをスケーラブルターゲットとして登録し、スケーリングポリシーを定義して適用することです。SageMaker AI コンソールを開き、ナビゲーションペインの **[推論]** で **[エンドポイント]** を選択します。モデルのエンドポイント名を探して選択し、バリアント名を見つけます。モデルの自動スケーリングを有効にするには、エンドポイント名とバリアント名の両方を指定する必要があります。

自動スケーリングは、Amazon SageMaker AI、Amazon CloudWatch、および Application Auto Scaling API の組み合わせによって可能になります。最低限必要なアクセス許可の詳細については、「*Application Auto Scaling ユーザーガイド*」の「[Application Auto Scaling identity-based policy examples](https://docs.aws.amazon.com/autoscaling/application/userguide/security_iam_id-based-policy-examples.html)」を参照してください。

`SagemakerFullAccessPolicy` IAM ポリシーには、自動スケーリングを実行するために必要なすべての IAM アクセス許可が付与されています。SageMaker AI IAM アクセス許可の詳細については、「[SageMaker AI 実行ロールの使用方法](sagemaker-roles.md)」を参照してください。

独自のアクセス許可ポリシーを管理している場合は、次のアクセス許可を含める必要があります。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:DescribeEndpoint",
        "sagemaker:DescribeEndpointConfig",
        "sagemaker:UpdateEndpointWeightsAndCapacities"
      ],
      "Resource": "*"
    },
    {    
        "Effect": "Allow",
        "Action": [
            "application-autoscaling:*"
        ],
        "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iam:CreateServiceLinkedRole",
      "Resource": "arn:aws:iam::*:role/aws-service-role/sagemaker.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_SageMakerEndpoint",
      "Condition": {
        "StringLike": { "iam:AWSServiceName": "sagemaker.application-autoscaling.amazonaws.com"	}
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "cloudwatch:PutMetricAlarm",
        "cloudwatch:DescribeAlarms",
        "cloudwatch:DeleteAlarms"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## サービスにリンクされたロール
<a name="endpoint-auto-scaling-slr"></a>

自動スケーリングは、サービスにリンクされたロール `AWSServiceRoleForApplicationAutoScaling_SageMakerEndpoint` を使用します。このサービスにリンクされたロールは、Application Auto Scaling に対して、ポリシーのアラームの記述、現在の容量レベルのモニタリング、およびターゲットリソースのスケーリングを行うためのアクセス許可を付与します。このロールは自動的に作成されます。この自動ロール作成が正常に行われるには、`iam:CreateServiceLinkedRole` アクションへのアクセス許可が必要です。詳細については、*アプリケーション Auto Scaling ユーザーガイド*の「[サービスにリンクされたロール](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html)」を参照してください。

# コンソールを使用してモデルの自動スケーリングを設定する
<a name="endpoint-auto-scaling-add-console"></a>

**モデルの自動スケーリングを設定するには (コンソール)**

1. Amazon SageMaker AI コンソール ([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)) を開きます。

1. ナビゲーションペインで **[推論]** を選択し、**[エンドポイント]** を選択します。

1. エンドポイントを選択し、**[エンドポイントのランタイム設定]** でバリアントを選択します。

1. [**Auto Scaling の設定**] を選択します。

1. **[バリアントの自動スケーリングの設定]** ページの **[バリアントの自動スケーリング]** で、以下を実行します。

   1. **[最小インスタンス数]** に、スケーリングポリシーが維持する必要があるインスタンスの最小数を入力します。少なくとも 1 つのインスタンスが必要です

   1. **[最大インスタンス数]** に、スケーリングポリシーが維持する必要があるインスタンスの最大数を入力します。

1. **[組み込みのスケーリングポリシー]** で、以下を実行します。

   1. **[ターゲットメトリクス]** については、メトリクスに `SageMakerVariantInvocationsPerInstance` が自動的に選択され、変更できません。

   1. **[ターゲット値]** については、モデルの 1 分あたりのインスタンスごとの平均呼び出し回数を入力します。この値を確認するには、「[負荷テスト](endpoint-scaling-loadtest.md)」のガイドラインに従います。

   1. **[スケールインのクールダウン (秒)]** と **[スケールアウトのクールダウン (秒)]** に、それぞれのクールダウン期間の秒数を入力します。

   1. (オプション) トラフィックが減少したときに自動スケーリングでインスタンスが終了されないようにするには、**[スケールインの無効化]** を選択します。

1. **[保存]** を選択します。

この手順では、Application Auto Scaling を使用してモデルをスケーラブルなターゲットとして登録します。モデルを登録するときに、Application Auto Scaling は検証チェックを実行して、次のことを確認します。
+ モデルが存在する
+ アクセス許可が十分である
+ T2 などのパフォーマンスをバースト可能なインスタンスであるインスタンスを持つバリアントを登録しない
**注記**  
T2 などのバースト可能なインスタンスは増加したワークロード下でのキャパシティー増に既に対応しているため、SageMaker AI ではそれらのインスタンスの自動スケーリングはサポートしていません。バーストパフォーマンスインスタンスの詳細については、「[Amazon EC2 インスタンスタイプ](https://aws.amazon.com/ec2/instance-types/)」を参照してください。

# モデルの登録
<a name="endpoint-auto-scaling-add-policy"></a>

モデルにスケーリングポリシーを追加する前に、まずモデルを自動スケーリングに登録し、モデルのスケーリング制限を定義する必要があります。

次の手順では、 AWS Command Line Interface () または Application Auto Scaling API を使用して自動スケーリング用のモデル (本番稼働用バリアントAWS CLI) を登録する方法について説明します。

**Topics**
+ [モデルの登録 (AWS CLI)](#endpoint-auto-scaling-add-cli)
+ [モデルの登録 (Application Auto Scaling API)](#endpoint-auto-scaling-add-api)

## モデルの登録 (AWS CLI)
<a name="endpoint-auto-scaling-add-cli"></a>

本番稼働用バリアントを登録するには、[register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) コマンドを次のパラメータとともに使用します。
+ `--service-namespace` - この値は `sagemaker` に設定します。
+ `--resource-id` - モデルのリソース識別子 (具体的には本番稼働用バリアント)。このパラメータでは、リソースタイプは `endpoint` で、一意の識別子は本番稼働用バリアントの名前です。例えば、`endpoint/my-endpoint/variant/my-variant`。
+ `--scalable-dimension` - この値は `sagemaker:variant:DesiredInstanceCount` に設定します。
+ `--min-capacity` - インスタンスの最小数。この値は 1 以上、および `max-capacity` に指定された値以下である必要があります。
+ `--max-capacity` - インスタンスの最大数。この値は 1 以上、および `min-capacity` に指定された値以上である必要があります。

**Example**  
次の例では、`my-endpoint` エンドポイントで実行されている `my-variant` という名前のバリアントを登録して、1 ～ 8 個のインスタンスを持つように動的にスケーリングする方法を示します。  

```
aws application-autoscaling register-scalable-target \
  --service-namespace sagemaker \
  --resource-id endpoint/my-endpoint/variant/my-variant \
  --scalable-dimension sagemaker:variant:DesiredInstanceCount \
  --min-capacity 1 \
  --max-capacity 8
```

## モデルの登録 (Application Auto Scaling API)
<a name="endpoint-auto-scaling-add-api"></a>

Application Auto Scaling でモデルを登録するには、次のパラメータを指定して Application Auto Scaling API アクション [RegisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html) を使用します。
+ `ServiceNamespace` - この値は `sagemaker` に設定します。
+ `ResourceID` - 本番稼働用バリアントのリソース識別子。このパラメータでは、リソースタイプは `endpoint` で、一意の識別子はバリアントの名前です。例: `endpoint/my-endpoint/variant/my-variant`。
+ `ScalableDimension` - この値は `sagemaker:variant:DesiredInstanceCount` に設定します。
+ `MinCapacity` - インスタンスの最小数。この値は 1 以上、および `MaxCapacity` に指定された値以下である必要があります。
+ `MaxCapacity` - インスタンスの最大数。この値は 1 以上、および `MinCapacity` に指定された値以上である必要があります。

**Example**  
次の例では、`my-endpoint` エンドポイントで実行されている `my-variant` という名前のバリアントを登録して、1 ～ 8 個のインスタンスを使用するように動的にスケーリングする方法を示します。  

```
POST / HTTP/1.1
Host: application-autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.RegisterScalableTarget
X-Amz-Date: 20230506T182145Z
User-Agent: aws-cli/2.0.0 Python/3.7.5 Windows/10 botocore/2.0.0dev4
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/my-endpoint/variant/my-variant",
    "ScalableDimension": "sagemaker:variant:DesiredInstanceCount",
    "MinCapacity": 1,
    "MaxCapacity": 8
}
```

# スケーリングポリシーを定義する
<a name="endpoint-auto-scaling-add-code-define"></a>

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

**Topics**
+ [事前定義されたメトリクスを指定する (CloudWatch メトリクス: InvocationsPerInstance)](#endpoint-auto-scaling-add-code-predefined)
+ [高解像度の事前定義済みメトリクスを指定する (CloudWatch メトリクス: ConcurrentRequestsPerModel と ConcurrentRequestsPerCopy )](#endpoint-auto-scaling-add-code-high-res)
+ [カスタムメトリクスを定義する (CloudWatch メトリクス: CPUUtilization)](#endpoint-auto-scaling-add-code-custom)
+ [カスタムメトリクスを定義する (CloudWatch メトリクス: ExplanationsPerInstance)](#endpoint-auto-scaling-online-explainability)
+ [クールダウン期間を指定する](#endpoint-auto-scaling-add-code-cooldown)

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

## 事前定義されたメトリクスを指定する (CloudWatch メトリクス: InvocationsPerInstance)
<a name="endpoint-auto-scaling-add-code-predefined"></a>

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

```
{
    "TargetValue": 70.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
    }
}
```
詳細については、*Application Auto Scaling API Reference* の「[TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)」を参照してください。

## 高解像度の事前定義済みメトリクスを指定する (CloudWatch メトリクス: ConcurrentRequestsPerModel と ConcurrentRequestsPerCopy )
<a name="endpoint-auto-scaling-add-code-high-res"></a>

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

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

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

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

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

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

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

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

詳細については、*Application Auto Scaling API Reference* の「[TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)」を参照してください。

## カスタムメトリクスを定義する (CloudWatch メトリクス: CPUUtilization)
<a name="endpoint-auto-scaling-add-code-custom"></a>

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

**Example**  
次の設定例は、カスタムメトリクスを使用したターゲット追跡スケーリングポリシーを示しています。このポリシーは、すべてのインスタンスの平均 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](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_CustomizedMetricSpecification.html)」を参照してください。

## カスタムメトリクスを定義する (CloudWatch メトリクス: ExplanationsPerInstance)
<a name="endpoint-auto-scaling-online-explainability"></a>

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

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

**Example**  
次の設定例は、カスタムメトリクスを使用したターゲット追跡スケーリングポリシーを示しています。このスケーリングポリシーは、各インスタンスの `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](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_CustomizedMetricSpecification.html)」を参照してください。

## クールダウン期間を指定する
<a name="endpoint-auto-scaling-add-code-cooldown"></a>

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

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

```
{
    "TargetValue": 70.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
    },
    "ScaleInCooldown": 600,
    "ScaleOutCooldown": 300
}
```
詳細については、*Application Auto Scaling API Reference* の「[TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)」を参照してください。

# スケーリングポリシーを適用する
<a name="endpoint-auto-scaling-add-code-apply"></a>

モデルを登録してスケーリングポリシーを定義したら、そのスケーリングポリシーを登録されたモデルに適用します。このセクションでは、 AWS Command Line Interface (AWS CLI) または Application Auto Scaling API を使用してスケーリングポリシーを適用する方法を示します。

**Topics**
+ [ターゲット追跡スケーリングポリシーを適用する (AWS CLI)](#endpoint-auto-scaling-add-code-apply-cli)
+ [スケーリングポリシーを適用する (Application Auto Scaling API)](#endpoint-auto-scaling-add-code-apply-api)

## ターゲット追跡スケーリングポリシーを適用する (AWS CLI)
<a name="endpoint-auto-scaling-add-code-apply-cli"></a>

モデルにスケーリングポリシーを適用するには、次のパラメータを指定して [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) AWS CLI コマンドを使用します。
+ `--policy-name` - スケーリングポリシーの名前。
+ `--policy-type` - この値は `TargetTrackingScaling` に設定します。
+ `--resource-id` - バリアントのリソース識別子。このパラメータでは、リソースタイプは `endpoint` で、一意の識別子はバリアントの名前です。例えば、`endpoint/my-endpoint/variant/my-variant`。
+ `--service-namespace` - この値は `sagemaker` に設定します。
+ `--scalable-dimension` - この値は `sagemaker:variant:DesiredInstanceCount` に設定します。
+ `--target-tracking-scaling-policy-configuration` - モデルに使用するターゲット追跡スケーリングポリシーの設定。

**Example**  
次の例では、`my-endpoint` エンドポイントで実行されている `my-variant` という名前のバリアントに `my-scaling-policy` という名前のターゲット追跡スケーリングポリシーを適用します。`--target-tracking-scaling-policy-configuration` オプションで、以前に作成した `config.json` ファイルを指定します。  

```
aws application-autoscaling put-scaling-policy \
  --policy-name my-scaling-policy \
  --policy-type TargetTrackingScaling \
  --resource-id endpoint/my-endpoint/variant/my-variant \
  --service-namespace sagemaker \
  --scalable-dimension sagemaker:variant:DesiredInstanceCount \
  --target-tracking-scaling-policy-configuration file://config.json
```

## スケーリングポリシーを適用する (Application Auto Scaling API)
<a name="endpoint-auto-scaling-add-code-apply-api"></a>

Application Auto Scaling API を使用してスケーリングポリシーをバリアントに適用するには、次のパラメータを指定して Application Auto Scaling API アクション [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html) を使用します。
+ `PolicyName` - スケーリングポリシーの名前。
+ `ServiceNamespace` - この値は `sagemaker` に設定します。
+ `ResourceID` - バリアントのリソース識別子。このパラメータでは、リソースタイプは `endpoint` で、一意の識別子はバリアントの名前です。例えば、`endpoint/my-endpoint/variant/my-variant`。
+ `ScalableDimension` - この値は `sagemaker:variant:DesiredInstanceCount` に設定します。
+ `PolicyType` - この値は `TargetTrackingScaling` に設定します。
+ `TargetTrackingScalingPolicyConfiguration` - バリアントに使用するターゲット追跡スケーリングポリシー設定。

**Example**  
次の例では、`my-endpoint` エンドポイントで実行されている `my-variant` という名前のバリアントに `my-scaling-policy` という名前のターゲット追跡スケーリングポリシーを適用します。このポリシー設定では、インスタンスあたりの平均呼び出し数が 70 に維持されます。  

```
POST / HTTP/1.1
Host: application-autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.
X-Amz-Date: 20230506T182145Z
User-Agent: aws-cli/2.0.0 Python/3.7.5 Windows/10 botocore/2.0.0dev4
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "PolicyName": "my-scaling-policy",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/my-endpoint/variant/my-variant",
    "ScalableDimension": "sagemaker:variant:DesiredInstanceCount",
    "PolicyType": "TargetTrackingScaling",
    "TargetTrackingScalingPolicyConfiguration": {
        "TargetValue": 70.0,
        "PredefinedMetricSpecification":
        {
            "PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
        }
    }
}
```

# スケーリングポリシーを編集する手順
<a name="endpoint-auto-scaling-edit"></a>

スケーリングポリシーを作成した後、名前以外のすべての設定を更新できます。

 でターゲット追跡スケーリングポリシーを編集するには AWS マネジメントコンソール、 に使用したのと同じ手順を使用します[コンソールを使用してモデルの自動スケーリングを設定する](endpoint-auto-scaling-add-console.md)。

 AWS CLI または Application Auto Scaling API を使用して、新しいスケーリングポリシーを作成するのと同じ方法でスケーリングポリシーを編集できます。詳細については、「[スケーリングポリシーを適用する](endpoint-auto-scaling-add-code-apply.md)」を参照してください。

# スケーリングポリシーを一時的に無効にする
<a name="endpoint-auto-scaling-suspend-scaling-activities"></a>

自動スケーリングを設定した後、スケーリングポリシー (動的スケーリング) による干渉を受けずに問題を調査する必要がある場合は、次のオプションがあります。
+ CLI コマンド [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) または API アクション [RegisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html) を呼び出して `DynamicScalingInSuspended` と `DynamicScalingOutSuspended` の両方にブール値を指定することで、スケーリングアクティビティを一時的に停止してから再開します。  
**Example**  

  次の例は、`my-endpoint` エンドポイントで実行されている `my-variant` という名前のバリアントのスケーリングポリシーを一時停止する方法を示しています。

  ```
  aws application-autoscaling register-scalable-target \
    --service-namespace sagemaker \
    --resource-id endpoint/my-endpoint/variant/my-variant \
    --scalable-dimension sagemaker:variant:DesiredInstanceCount \
    --suspended-state '{"DynamicScalingInSuspended":true,"DynamicScalingOutSuspended":true}'
  ```
+ ポリシーのスケールイン部分を無効にして、特定のターゲット追跡スケーリングポリシーでバリアントのスケールインが行われないようにします。この方法を使うと、スケーリングポリシーによってインスタンスが削除されることがなくなる一方で、インスタンスの作成は必要に応じて行われます。

  CLI コマンド [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) または API アクション [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html) を使って `DisableScaleIn` のブール値を指定してポリシーを編集することで、スケールインアクティビティを一時的に無効にしてから有効にします。  
**Example**  

  以下は、スケールアウトするがスケールインしないスケーリングポリシーのターゲット追跡設定の例です。

  ```
  {
      "TargetValue": 70.0,
      "PredefinedMetricSpecification":
      {
          "PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
      },
      "DisableScaleIn": true
  }
  ```

# スケーリングポリシーを削除する
<a name="endpoint-auto-scaling-delete"></a>

不要になったスケーリングポリシーはいつでも削除できます。

**Topics**
+ [すべてのスケーリングポリシーを削除し、モデルを登録解除する (コンソール)](#endpoint-auto-scaling-delete-console)
+ [スケーリングポリシー (AWS CLI または Application Auto Scaling API) を削除する](#endpoint-auto-scaling-delete-code)

## すべてのスケーリングポリシーを削除し、モデルを登録解除する (コンソール)
<a name="endpoint-auto-scaling-delete-console"></a>

**すべてのスケーリングポリシーを削除し、バリアントをスケーラブルターゲットとして登録解除するには**

1. Amazon SageMaker AI コンソール ([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)) を開きます。

1. ナビゲーションペインで、**[エンドポイント]** を選択します。

1. エンドポイントを選択し、**[エンドポイントのランタイム設定]** でバリアントを選択します。

1. [**Auto Scaling の設定**] を選択します。

1. [**Auto Scaling の登録解除**] を選択します。

## スケーリングポリシー (AWS CLI または Application Auto Scaling API) を削除する
<a name="endpoint-auto-scaling-delete-code"></a>

 AWS CLI または Application Auto Scaling API を使用して、バリアントからスケーリングポリシーを削除できます。

### スケーリングポリシーを削除する (AWS CLI)
<a name="endpoint-auto-scaling-delete-code-cli"></a>

スケーリングポリシーをバリアントから削除するには、[delete-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/delete-scaling-policy.html) コマンドを次のパラメータとともに使用します。
+ `--policy-name` - スケーリングポリシーの名前。
+ `--resource-id` - バリアントのリソース識別子。このパラメータでは、リソースタイプは `endpoint` で、一意の識別子はバリアントの名前です。例えば、`endpoint/my-endpoint/variant/my-variant`。
+ `--service-namespace` - この値は `sagemaker` に設定します。
+ `--scalable-dimension` - この値は `sagemaker:variant:DesiredInstanceCount` に設定します。

**Example**  
次の例では、`my-endpoint` エンドポイントで実行されている `my-variant` という名前のバリアントから `my-scaling-policy` という名前のターゲット追跡スケーリングポリシーを削除します。  

```
aws application-autoscaling delete-scaling-policy \
  --policy-name my-scaling-policy \
  --resource-id endpoint/my-endpoint/variant/my-variant \
  --service-namespace sagemaker \
  --scalable-dimension sagemaker:variant:DesiredInstanceCount
```

### スケーリングポリシーを削除する (Application Auto Scaling API)
<a name="endpoint-auto-scaling-delete-code-api"></a>

スケーリングポリシーをバリアントから削除するには、Application Auto Scaling API アクション [DeleteScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_DeleteScalingPolicy.html) を次のパラメータとともに使用します。
+ `PolicyName` - スケーリングポリシーの名前。
+ `ServiceNamespace` - この値は `sagemaker` に設定します。
+ `ResourceID` - バリアントのリソース識別子。このパラメータでは、リソースタイプは `endpoint` で、一意の識別子はバリアントの名前です。例えば、`endpoint/my-endpoint/variant/my-variant`。
+ `ScalableDimension` - この値は `sagemaker:variant:DesiredInstanceCount` に設定します。

**Example**  
次の例では、`my-endpoint` エンドポイントで実行されている `my-variant` という名前のバリアントから `my-scaling-policy` という名前のターゲット追跡スケーリングポリシーを削除します。  

```
POST / HTTP/1.1
Host: application-autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.DeleteScalingPolicy
X-Amz-Date: 20230506T182145Z
User-Agent: aws-cli/2.0.0 Python/3.7.5 Windows/10 botocore/2.0.0dev4
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "PolicyName": "my-scaling-policy",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/my-endpoint/variant/my-variant",
    "ScalableDimension": "sagemaker:variant:DesiredInstanceCount"
}
```

# スケーリングアクティビティを記述してスケーリングアクティビティのステータスを確認する
<a name="endpoint-scaling-query-history"></a>

スケーリングアクティビティを記述することで、自動スケーリングされたエンドポイントのスケーリングアクティビティのステータスを確認できます。Application Auto Scaling は、指定された名前空間における過去 6 週間のスケーリングアクティビティに関する詳細情報を提供します。詳細については、「*Application Auto Scaling ユーザーガイド*」の「[Scaling activities for Application Auto Scaling](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-scaling-activities.html)」を参照してください。

スケーリングアクティビティのステータスを確認するには、[describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html) コマンドを使用します。コンソールを使用してスケーリングアクティビティのステータスを確認することはできません。

**Topics**
+ [スケーリングアクティビティを記述する (AWS CLI)](#endpoint-how-to)
+ [ブロックされたスケーリングアクティビティをインスタンスクォータから識別する (AWS CLI)](#endpoint-identify-blocked-autoscaling)

## スケーリングアクティビティを記述する (AWS CLI)
<a name="endpoint-how-to"></a>

Application Auto Scaling に登録されたすべての SageMaker AI リソースのスケーリングアクティビティを記述するには、`--service-namespace` オプションに `sagemaker` を指定して [describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html) コマンドを使用します。

```
aws application-autoscaling describe-scaling-activities \
  --service-namespace sagemaker
```

特定のリソースのスケーリングアクティビティを記述するには、`--resource-id` オプションを含めます。

```
aws application-autoscaling describe-scaling-activities \
  --service-namespace sagemaker \
  --resource-id endpoint/my-endpoint/variant/my-variant
```

次の例は、このコマンドを実行したときに生成される出力を示しています。

```
{
    "ActivityId": "activity-id",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/my-endpoint/variant/my-variant",
    "ScalableDimension": "sagemaker:variant:DesiredInstanceCount",
    "Description": "string",
    "Cause": "string",
    "StartTime": timestamp,
    "EndTime": timestamp,
    "StatusCode": "string",
    "StatusMessage": "string"
}
```

## ブロックされたスケーリングアクティビティをインスタンスクォータから識別する (AWS CLI)
<a name="endpoint-identify-blocked-autoscaling"></a>

スケールアウト (インスタンスを追加) したときに、アカウントレベルのインスタンスクォータに達してしまうことがあります。[describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html) コマンドを使用して、インスタンスクォータに達したかどうかを確認できます。クォータを超過すると、自動スケーリングがブロックされます。

インスタンスクォータに達したかどうかを確認するには、[describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html) コマンドを使用し、`--resource-id` オプションでリソース ID を指定します。

```
aws application-autoscaling describe-scaling-activities \
    --service-namespace sagemaker \
    --resource-id endpoint/my-endpoint/variant/my-variant
```

返される構文内の [StatusCode](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_ScalingActivity.html#autoscaling-Type-ScalingActivity-StatusCode) と [StatusMessage](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_ScalingActivity.html#autoscaling-Type-ScalingActivity-StatusMessage) のキーおよびそれに関連付けられている値を確認します。`StatusCode` は `Failed` を返します。`StatusMessage` 内には、アカウントレベルのサービスクォータに達したことを示すメッセージがあります。以下に示しているのは、メッセージの具体的な例です。

```
{
    "ActivityId": "activity-id",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/my-endpoint/variant/my-variant",
    "ScalableDimension": "sagemaker:variant:DesiredInstanceCount",
    "Description": "string",
    "Cause": "minimum capacity was set to 110",
    "StartTime": timestamp,
    "EndTime": timestamp,
    "StatusCode": "Failed",
    "StatusMessage": "Failed to set desired instance count to 110. Reason: The 
    account-level service limit 'ml.xx.xxxxxx for endpoint usage' is 1000 
    Instances, with current utilization of 997 Instances and a request delta 
    of 20 Instances. Please contact AWS support to request an increase for this 
    limit. (Service: AmazonSageMaker; Status Code: 400; 
    Error Code: ResourceLimitExceeded; Request ID: request-id)."
}
```

# エンドポイントをゼロインスタンスにスケールする
<a name="endpoint-auto-scaling-zero-instances"></a>

エンドポイントの自動スケーリングを設定すると、スケールインプロセスでサービス内インスタンス数をゼロに減らすことができます。これにより、エンドポイントで推論リクエストを処理することがなくなり、アクティブなインスタンスを必要としない期間にコストを削減できます。

ただし、ゼロインスタンスにスケールインした後、エンドポイントでは少なくとも 1 つのインスタンスをプロビジョニングするまで受信推論リクエストに応答できません。プロビジョニングプロセスを自動化するには、Application Auto Scaling を使用してステップスケーリングポリシーを作成します。次に、Amazon CloudWatch アラームにポリシーを割り当てます。

ステップスケーリングポリシーとアラームを設定すると、エンドポイントでは応答できない推論リクエストを受け取った直後にインスタンスを自動的にプロビジョニングします。プロビジョニングプロセスには数分かかることに注意してください。その間、エンドポイントを呼び出そうとするとエラーが発生します。

次の手順では、エンドポイントがゼロインスタンスにスケールインまたはゼロインスタンスからスケールアウトするように、エンドポイントの自動スケーリングを設定する方法について説明しています。この手順では、 AWS CLIでコマンドを使用します。

**[開始する前に]**

エンドポイントがゼロインスタンスにスケールインおよびスケールアウトできるようにするには、次の要件を満たす必要があります。
+ エンドポイントが稼働中である。
+ 1 つ以上の推論コンポーネントをホストしている。エンドポイントでは、推論コンポーネントをホストしている場合にのみ、ゼロインスタンスとの間でスケーリングできます。

  SageMaker AI エンドポイントで推論コンポーネントをホストする方法については、「[リアルタイム推論用のモデルをデプロイする](realtime-endpoints-deploy-models.md)」を参照してください。
+ エンドポイント設定で、本番稼働用バリアント `ManagedInstanceScaling` オブジェクトに対して `MinInstanceCount` パラメータを `0` に設定している。

  このパラメータのリファレンス情報については、「[ProductionVariantManagedInstanceScaling](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariantManagedInstanceScaling.html)」を参照してください。

**エンドポイントがゼロインスタンスにスケールインできるようにするには (AWS CLI)**

エンドポイントでホストしている推論コンポーネントごとに、次の操作を行います。

1. 推論コンポーネントをスケーラブルターゲットとして登録します。登録するときは、次のコマンドで示すように、最小キャパシティを `0` に設定します。

   ```
   aws application-autoscaling register-scalable-target \
     --service-namespace sagemaker \
     --resource-id inference-component/inference-component-name \
     --scalable-dimension sagemaker:inference-component:DesiredCopyCount \
     --min-capacity 0 \
     --max-capacity n
   ```

   この例では、*inference-component-name* を推論コンポーネントの名前に置き換えます。*n* を、スケールアウト時にプロビジョニングする推論コンポーネントコピーの最大数に置き換えます。

   このコマンドとその各パラメータの詳細については、*AWS CLI コマンドリファレンス*の「[register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html)」を参照してください。

1. 次のコマンドで示しているように、ターゲット追跡ポリシーを推論コンポーネントに適用します。

   ```
   aws application-autoscaling put-scaling-policy \
     --policy-name my-scaling-policy \
     --policy-type TargetTrackingScaling \
     --resource-id inference-component/inference-component-name \
     --service-namespace sagemaker \
     --scalable-dimension sagemaker:inference-component:DesiredCopyCount \
     --target-tracking-scaling-policy-configuration file://config.json
   ```

   この例では、*inference-component-name* を推論コンポーネントの名前に置き換えます。

   この例では、`config.json` ファイルに次のようなターゲット追跡ポリシー設定が含まれています。

   ```
   {
     "PredefinedMetricSpecification": {
         "PredefinedMetricType": "SageMakerInferenceComponentInvocationsPerCopy"
     },
     "TargetValue": 1,
     "ScaleInCooldown": 300,
     "ScaleOutCooldown": 300
   }
   ```

   追跡ポリシー設定のその他の例については、「[スケーリングポリシーを定義する](endpoint-auto-scaling-add-code-define.md)」を参照してください。

   このコマンドとその各パラメータの詳細については、*AWS CLI コマンドリファレンス*の「[put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html)」を参照してください。

**エンドポイントがゼロインスタンスからスケールアウトできるようにするには (AWS CLI）**

エンドポイントでホストしている推論コンポーネントごとに、次の操作を行います。

1. 次のコマンドで示しているように、推論コンポーネントにステップスケーリングポリシーを適用します。

   ```
   aws application-autoscaling put-scaling-policy \
     --policy-name my-scaling-policy \
     --policy-type StepScaling \
     --resource-id inference-component/inference-component-name \
     --service-namespace sagemaker \
     --scalable-dimension sagemaker:inference-component:DesiredCopyCount \
     --step-scaling-policy-configuration file://config.json
   ```

   この例では、*my-scaling-policy* をポリシーの一意の名前に置き換えます。*inference-component-name* を推論コンポーネントの名前に置き換えます。

   この例では、`config.json` ファイルには次のようなステップスケーリングポリシー設定が含まれています。

   ```
   {
       "AdjustmentType": "ChangeInCapacity",
       "MetricAggregationType": "Maximum",
       "Cooldown": 60,
       "StepAdjustments":
         [
            {
              "MetricIntervalLowerBound": 0,
              "ScalingAdjustment": 1
            }
         ]
   }
   ```

   このステップスケーリングポリシーがトリガーされると、SageMaker AI では推論コンポーネントのコピーをサポートするために必要なインスタンスをプロビジョニングします。

   ステップスケーリングポリシーを作成したら、その Amazon リソースネーム (ARN) を書き留めます。次のステップでは、CloudWatch アラームの ARN が必要です。

   ステップスケーリングポリシーの詳細については、*アプリケーション Auto Scaling ユーザーガイド*の「[ステップスケーリングポリシー](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html)」を参照してください。

1. 次の例に示すように、CloudWatch アラームを作成し、ステップスケーリングポリシーを割り当てます。

   ```
   aws cloudwatch put-metric-alarm \
   --alarm-actions step-scaling-policy-arn \
   --alarm-description "Alarm when SM IC endpoint invoked that has 0 instances." \
   --alarm-name ic-step-scaling-alarm \
   --comparison-operator GreaterThanThreshold  \
   --datapoints-to-alarm 1 \
   --dimensions "Name=InferenceComponentName,Value=inference-component-name" \
   --evaluation-periods 1 \
   --metric-name NoCapacityInvocationFailures \
   --namespace AWS/SageMaker \
   --period 60 \
   --statistic Sum \
   --threshold 1
   ```

   この例では、*step-scaling-policy-arn* をステップスケーリングポリシーの ARN に置き換えます。*ic-step-scaling-alarm* を任意の名前に置き換えます。*inference-component-name* を推論コンポーネントの名前に置き換えます。

   この例では `--metric-name` パラメータを `NoCapacityInvocationFailures` に設定しています。SageMaker AI では、エンドポイントが推論リクエストを受信したときにこのメトリクスを出力しますが、エンドポイントにはリクエストを処理するアクティブなインスタンスがありません。そのイベントが発生すると、アラームは前のステップのステップスケーリングポリシーを開始します。

   このコマンドとその各パラメータの詳細については、*AWS CLI コマンドリファレンス*の「[put-metric-alarm](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/put-metric-alarm.html)」を参照してください。

# 自動スケーリング設定の負荷テスト
<a name="endpoint-scaling-loadtest"></a>

負荷テストを実行して、意図した通りに動作するスケーリング設定を選択します。

次の負荷テスト用のガイドラインでは、事前定義されたターゲットメトリクス `SageMakerVariantInvocationsPerInstance` を使用するスケーリングポリシーの使用を想定しています。

**Topics**
+ [パフォーマンス特性を明確にする](#endpoint-scaling-loadtest-variant)
+ [ターゲットの負荷を計算する](#endpoint-scaling-loadtest-calc)

## パフォーマンス特性を明確にする
<a name="endpoint-scaling-loadtest-variant"></a>

負荷テストを実行し、モデルの本番稼働用バリアントが処理できる `InvocationsPerInstance` のピーク、および同時実行数の増加に伴うリクエストのレイテンシーを探し出します。

この値は選択したインスタンスタイプ、モデルのクライアントが通常送信するペイロード、モデルのすべての外部依存関係のパフォーマンスに依存します。

**モデルの本番稼働用バリアントが処理できる 1 秒あたりのピークのリクエスト数 (RPS) とリクエストのレイテンシーを探し出すには**

1. 単一のインスタンスを使用してモデルにエンドポイントを設定します。エンドポイントの設定方法の詳細については、「[SageMaker AI ホスティングサービスにモデルをデプロイする](ex1-model-deployment.md#ex1-deploy-model)」を参照してください。

1. 負荷テストツールを使用して増加する並列リクエストを生成し、負荷テストツールの出力で RPS とモデルのレイテンシーを監視します。
**注記**  
また、RPS の代わりに 1 分あたりのリクエスト数を監視することもできます。その場合、式に 60 を乗算して以下に示す `SageMakerVariantInvocationsPerInstance` を計算しないでください。

   モデルのレイテンシーが増加、または成功したトランザクションの割合が減少するタイミングが、バリアントが処理できるピークの RPS になります。

## ターゲットの負荷を計算する
<a name="endpoint-scaling-loadtest-calc"></a>

バリアントのパフォーマンス特性を探し出した後は、インスタンスへの送信を許可する最大 RPS を決定できます。スケーリングに使用されるしきい値はこの最大値より小さくする必要があります。次の式を負荷テストと組み合わせて使用することで、スケーリング設定の `SageMakerVariantInvocationsPerInstance` ターゲットメトリクスの正しい値を決定できます。

```
SageMakerVariantInvocationsPerInstance = (MAX_RPS * SAFETY_FACTOR) * 60
```

ここで、`MAX_RPS` は以前に決定した最大 RPS で、`SAFETY_FACTOR` はクライアントが最大 RPS を超過しないように選択する安全係数です。SageMaker AI が自動スケーリングの実装に使用する 1 分あたりの CloudWatch メトリクスに合わせて、60 を乗算して RPS から 1 分あたりの呼び出し数に変換します (1 秒あたりのリクエスト数ではなく、1 分あたりのリクエスト数を計測した場合、これを行う必要はありません)。

**注記**  
SageMaker AI では、`SAFETY_FACTOR` を 0.5 に設定してテストを始めることをお勧めします。スケーリング設定をテストし、エンドポイント上のお客様のトラフィックの増減がモデルで期待したとおりに動作することを確認します。

# CloudFormation を使用してスケーリングポリシーを作成する
<a name="endpoint-scaling-cloudformation"></a>

次の例は、 CloudFormationを使用してエンドポイントのモデルの自動スケーリングを設定する方法を示しています。

```
  Endpoint:
    Type: "AWS::SageMaker::Endpoint"
    Properties:
      EndpointName: yourEndpointName
      EndpointConfigName: yourEndpointConfigName

  ScalingTarget:
    Type: "AWS::ApplicationAutoScaling::ScalableTarget"
    Properties:
      MaxCapacity: 10
      MinCapacity: 2
      ResourceId: endpoint/my-endpoint/variant/my-variant
      RoleARN: arn
      ScalableDimension: sagemaker:variant:DesiredInstanceCount
      ServiceNamespace: sagemaker

  ScalingPolicy:
    Type: "AWS::ApplicationAutoScaling::ScalingPolicy"
    Properties:
      PolicyName: my-scaling-policy
      PolicyType: TargetTrackingScaling
      ScalingTargetId:
        Ref: ScalingTarget
      TargetTrackingScalingPolicyConfiguration:
        TargetValue: 70.0
        ScaleInCooldown: 600
        ScaleOutCooldown: 30
        PredefinedMetricSpecification:
          PredefinedMetricType: SageMakerVariantInvocationsPerInstance
```

詳細については、「*Application Auto Scaling ユーザーガイド*」の「[Configure Application Auto Scaling resources using AWS CloudFormation](https://docs.aws.amazon.com/autoscaling/application/userguide/creating-resources-with-cloudformation.html)」を参照してください。

# 自動スケーリングを使用するエンドポイントを更新する
<a name="endpoint-scaling-update"></a>

エンドポイントを更新すると、そのエンドポイント上のモデルが自動スケーリングの対象となっているかどうかを Application Auto Scaling がチェックします。更新により自動スケーリングの対象となっているいずれかのモデルのインスタンスタイプが変更される場合、更新は失敗します。

で AWS マネジメントコンソール、モデルを更新する前にモデルを自動スケーリングから登録解除する必要があるという警告が表示されます。[UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API を呼び出してエンドポイントの更新を試行すると、呼び出しが失敗します。エンドポイントを更新する前に、そのエンドポイントに設定されているスケーリングポリシーをすべて削除し、Application Auto Scaling API アクション [DeregisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_DeregisterScalableTarget.html) を呼び出してそのバリアントのスケーラブルなターゲットの登録を解除します。エンドポイントを更新した後に、更新されたバリアントをスケーラブルなターゲットとして登録し、スケーリングポリシーをアタッチできます。

1 つ例外があります。自動スケーリングの対象に設定されたバリアントのモデルを変更した場合、Amazon SageMaker AI の自動スケーリングで更新が許可されます。これは、一般的にはモデルを変更しても、スケーリング動作を変更するほどパフォーマンスには影響を及ぼさないからです。自動スケーリングの対象として設定されているバリアントのモデルを更新した場合、そのモデルへの変更がパフォーマンスとスケーリング動作に大幅に影響しないことを確認する必要があります。

自動スケーリングが適用されている SageMaker AI エンドポイントを更新するには、以下の手順を実行します。

**自動スケーリングが適用されたエンドポイントを更新するには**

1. エンドポイントをスケーラブルなターゲットとして登録解除するには、「[DeregisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_DeregisterScalableTarget.html)」を呼び出します。

1. 自動スケーリングは、更新オペレーションの進行中 (または前のステップで自動スケーリングをオフにした場合) はブロックされるため、更新中にエンドポイントのインスタンス数を増やすという追加の予防措置を講じることができます。そのためには、[UpdateEndpointWeightsAndCapacities](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpointWeightsAndCapacities.html) を呼び出して、エンドポイントでホストされている本番稼働用バリアントのインスタンスの数を更新します。

1. レスポンスの `EndpointStatus` フィールドの値が `InService` になるまで、[DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html) を繰り返し呼び出します。

1. [DescribeEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html) を呼び出して、現在のエンドポイント設定の値を取得します。

1. [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html) を呼び出して、新しいエンドポイント設定を作成します。既存のインスタンス数または重みを保持する本番稼働用バリアントの場合、前のステップで [DescribeEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html) を呼び出したときのレスポンスと同じバリアント名を使用します。他のすべての値については、前のステップで [DescribeEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html) を呼び出したときにレスポンスとして取得した値を使用します。

1. [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) を呼び出してエンドポイントを更新します。前のステップで作成したエンドポイント設定を `EndpointConfig` フィールドとして指定します。インスタンス数や重みなどのバリアントプロパティを保持する場合、`RetainAllVariantProperties` パラメータの値を `True` に設定します。これにより、同じ名前の本番稼働用バリアントが、新しい `EndpointConfig` の `InitialInstanceCount` フィールドの値に関係なく、`DescribeEndpoint` の呼び出しの応答から取られた最新の `DesiredInstanceCount` で更新されるように指定されます。

1. (オプション) [RegisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html) と [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html) を呼び出して自動スケーリングを再度アクティブ化します。

**注記**  
ステップ 1 と 7 は、次の変更でエンドポイントを更新する場合のみ必要です。  
自動スケーリングが設定されている本番稼働用バリアントのインスタンスタイプを変更する
自動スケーリングが設定されている本番稼働用バリアントを削除する。

# 自動スケーリングに設定されたエンドポイントを削除する
<a name="endpoint-delete-with-scaling"></a>

エンドポイントを削除すると、そのエンドポイント上のモデルが自動スケーリングの対象となっているかどうかを Application Auto Scaling がチェックします。モデルの登録を解除するアクセス許可がある場合、Application Auto Scaling はそれらのモデルのスケーラブルなターゲットとしての登録を通知なしに解除します。[DeregisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_DeregisterScalableTarget.html) アクションのアクセス許可を付与しないカスタムアクセス許可ポリシーを使用している場合は、エンドポイントを削除する前に、このアクションへのアクセスをリクエストする必要があります。

**注記**  
あるユーザーがエンドポイント上のバリアントに対して自動スケーリングを設定した場合、別の IAM ユーザーにはそのエンドポイントを削除する十分なアクセス許可がない場合があります。