

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

# カスタムロードテストを実行する
<a name="inference-recommender-load-test"></a>

Amazon SageMaker Inference Recommender のロードテストでは、レイテンシーとスループット、カスタムトラフィックパターン、選択したサーバーレスエンドポイントまたはリアルタイムのインスタンス (最大 10) の本番要件に基づいて、広範なベンチマークが実行されます。

以下のセクションでは、 と を使用してプログラムでロードテストを作成、説明 AWS SDK for Python (Boto3) AWS CLI、停止する方法、または Amazon SageMaker Studio Classic または SageMaker AI コンソールをインタラクティブに使用する方法を示します。

## ロードテストジョブを作成する
<a name="load-test-create"></a>

を使用してプログラムで負荷テストを作成するか AWS SDK for Python (Boto3)、 を使用するか AWS CLI、Studio Classic または SageMaker AI コンソールを使用してインタラクティブに負荷テストを作成します。Inference Recommender の推論レコメンデーションと同様に、モデルをモデルレジストリに登録したときのロードテストのジョブ名、IAM AWS ロール ARN、入力設定、およびモデルパッケージ ARN を指定します。ロードテストでは、トラフィックパターンと停止条件も指定する必要があります。

------
#### [ AWS SDK for Python (Boto3) ]

`CreateInferenceRecommendationsJob` API を使用して、Inference Recommender のロードテストを作成します。`JobType` フィールドで `Advanced` を指定し、以下を指定します。
+ ロードテストのジョブ名 (`JobName`)。ジョブ名は、 AWS リージョン内および AWS アカウント内で一意である必要があります。
+ Inference Recommender がユーザーに代わってタスクを実行できるようにする IAM ロールの Amazon リソースネーム (ARN)。これを `RoleArn` フィールドで定義します。
+ エンドポイント設定ディクショナリ (`InputConfig`)。以下を指定します。
  + `TrafficPattern` では、フェーズまたは階段状トラフィックパターンを指定します。フェーズトラフィックパターンでは、指定したレートで新しいユーザーが毎分生成されます。階段状トラフィックパターンでは、指定したレートで新しいユーザーが時間間隔 (*またはステップ数*) 単位で生成されます。次のいずれかを選択します。
    + `TrafficType` の場合、`PHASES` を指定します。次に、`Phases` アレイには、`InitialNumberOfUsers` (開始時の同時ユーザー数 (最小 1、最大 3))、`SpawnRate` (ロードテストの特定のフェーズで 1 分間に生成されるユーザー数 (最小 0、最大 3))、`DurationInSeconds` (トラフィックのフェーズの長さ (最小 120、最大 3600)) を指定します。
    + `TrafficType` の場合、`STAIRS` を指定します。次に、`Stairs` アレイには、`DurationInSeconds` (トラフィックのフェーズの長さ (最小 120、最大 3600)）、`NumberOfSteps` (フェーズで使用する間隔数）、`UsersPerStep` (各間隔で追加するユーザー数) を指定します。各ステップの長さは `DurationInSeconds / NumberOfSteps` の値であることに注意してください。たとえば、`DurationInSeconds` が `600` の場合、`5` ステップを指定すると、各ステップの長さは 120 秒になります。
**注記**  
ユーザーは、Inference Recommender の一部としてループ内で実行され、エンドポイントへのリクエストを呼び出すシステム生成アクターとして定義されます。`ml.c5.large` インスタンス上で実行される一般的な XGBoost コンテナの場合、エンドポイントは、わずか 15～20 人のユーザーで 1 分あたり 30,000 回の呼び出し (500 tps) に達することがあります。
  + `ResourceLimit` には、`MaxNumberOfTests` (Inference Recommender ジョブのベンチマークロードテストの最大数 (最小 1、最大 10)) と `MaxParallelOfTests` (Inference Recommender ジョブの並列ベンチマークロードテストの最大数 (最小 1、最大 10)) を指定します。
  + `EndpointConfigurations` には、以下のいずれかを指定できます。
    + `InstanceType` フィールド。ロードテストを実行するインスタンスタイプを指定します。
    + `ServerlessConfig`。サーバーレスエンドポイントの `MaxConcurrency` および `MemorySizeInMB` の理想的な値を指定します。詳細については、[サーバーレス推論ドキュメント](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html)を参照してください。
+ 停止条件ディクショナリ (`StoppingConditions`)。いずれかの条件が満たされると、Inference Recommender のジョブが停止します。この例では、ディクショナリで以下のフィールドを指定します。
  + `MaxInvocations` には、エンドポイントで想定される 1 分あたりの最大リクエスト数を指定します (最小 1、最大 30,000)。
  + `ModelLatencyThresholds` には、`Percentile` (モデルレイテンシーのパーセンタイルのしきい値) と `ValueInMilliseconds` (モデルレイテンシーのパーセンタイル値 (ミリ秒単位)) を指定します。
  + (オプション) `FlatInvocations` では、TPS (1 分あたりの呼び出し数) レートが平坦化したときにロードテストを続行するかどうかを指定できます。TPS レートが平坦化すると通常、エンドポイントがキャパシティに達したことを意味します。ただし、フルキャパシティ条件でエンドポイントの監視を継続したほうが良い場合があります。このような場合でもロードテストを続行するには、この値を `Continue` として指定します。それ以外の場合、デフォルト値は `Stop` です。

```
# Create a low-level SageMaker service client.
import boto3
aws_region={{<INSERT>}}
sagemaker_client=boto3.client('sagemaker', region=aws_region) 
                
# Provide a name to your recommendation based on load testing
load_test_job_name={{"<INSERT>"}}

# Provide the name of the sagemaker instance type
instance_type={{"<INSERT>"}}

# Provide the IAM Role that gives SageMaker permission to access AWS services 
role_arn='arn:aws:iam::{{<account>:role/*}}'

# Provide your model package ARN that was created when you registered your 
# model with Model Registry
model_package_arn='arn:aws:sagemaker:{{<region>:<account>:role/*}}'

sagemaker_client.create_inference_recommendations_job(
                        JobName=load_test_job_name,
                        JobType="Advanced",
                        RoleArn=role_arn,
                        InputConfig={
                            'ModelPackageVersionArn': model_package_arn,
                            "JobDurationInSeconds": 7200,
                            'TrafficPattern' : {
                                # Replace PHASES with STAIRS to use the stairs traffic pattern
                                'TrafficType': 'PHASES',
                                'Phases': [
                                    {
                                        'InitialNumberOfUsers': 1,
                                        'SpawnRate': 1,
                                        'DurationInSeconds': 120
                                    },
                                    {
                                        'InitialNumberOfUsers': 1,
                                        'SpawnRate': 1,
                                        'DurationInSeconds': 120
                                    }
                                ]
                                # Uncomment this section and comment out the Phases object above to use the stairs traffic pattern
                                # 'Stairs' : {
                                #   'DurationInSeconds': 240,
                                #   'NumberOfSteps': 2,
                                #   'UsersPerStep': 2
                                # }
                            },
                            'ResourceLimit': {
                                        'MaxNumberOfTests': 10,
                                        'MaxParallelOfTests': 3
                                },
                            "EndpointConfigurations" : [{
                                        'InstanceType': 'ml.c5.xlarge'
                                    },
                                    {
                                        'InstanceType': 'ml.m5.xlarge'
                                    },
                                    {
                                        'InstanceType': 'ml.r5.xlarge'
                                    }]
                                    # Uncomment the ServerlessConfig and comment out the InstanceType field if you want recommendations for a serverless endpoint
                                    # "ServerlessConfig": {
                                    #     "MaxConcurrency": {{value}}, 
                                    #     "MemorySizeInMB": {{value}} 
                                    # }
                        },
                        StoppingConditions={
                            'MaxInvocations': 1000,
                            'ModelLatencyThresholds':[{
                                'Percentile': 'P95', 
                                'ValueInMilliseconds': 100
                            }],
                            # Change 'Stop' to 'Continue' to let the load test continue if invocations flatten 
                            'FlatInvocations': 'Stop'
                        }
                )
```

`CreateInferenceRecommendationsJob` に渡すことができるオプションの引数と必須の引数の完全なリストについては、[Amazon SageMaker API リファレンスガイド](https://docs.aws.amazon.com/sagemaker/latest/APIReference/Welcome.html)を参照してください。

------
#### [ AWS CLI ]

`create-inference-recommendations-job` API を使用して、Inference Recommender のロードテストを作成します。`JobType` フィールドで `Advanced` を指定し、以下を指定します。
+ ロードテストのジョブ名 (`job-name`)。ジョブ名は、 AWS リージョン内および AWS アカウント内で一意である必要があります。
+ Inference Recommender がユーザーに代わってタスクを実行できるようにする IAM ロールの Amazon リソースネーム (ARN)。これを `role-arn` フィールドで定義します。
+ エンドポイント設定ディクショナリ (`input-config`)。以下を指定します。
  + `TrafficPattern` では、フェーズまたは階段状トラフィックパターンを指定します。フェーズトラフィックパターンでは、指定したレートで新しいユーザーが毎分生成されます。階段状トラフィックパターンでは、指定したレートで新しいユーザーが時間間隔 (*またはステップ数*) 単位で生成されます。次のいずれかを選択します。
    + `TrafficType` の場合、`PHASES` を指定します。次に、`Phases` アレイには、`InitialNumberOfUsers` (開始時の同時ユーザー数 (最小 1、最大 3))、`SpawnRate` (ロードテストの特定のフェーズで 1 分間に生成されるユーザー数 (最小 0、最大 3))、`DurationInSeconds` (トラフィックのフェーズの長さ (最小 120、最大 3600)) を指定します。
    + `TrafficType` の場合、`STAIRS` を指定します。次に、`Stairs` アレイには、`DurationInSeconds` (トラフィックのフェーズの長さ (最小 120、最大 3600)）、`NumberOfSteps` (フェーズで使用する間隔数）、`UsersPerStep` (各間隔で追加するユーザー数) を指定します。各ステップの長さは `DurationInSeconds / NumberOfSteps` の値であることに注意してください。たとえば、`DurationInSeconds` が `600` の場合、`5` ステップを指定すると、各ステップの長さは 120 秒になります。
**注記**  
ユーザーは、Inference Recommender の一部としてループ内で実行され、エンドポイントへのリクエストを呼び出すシステム生成アクターとして定義されます。`ml.c5.large` インスタンス上で実行される一般的な XGBoost コンテナの場合、エンドポイントは、わずか 15～20 人のユーザーで 1 分あたり 30,000 回の呼び出し (500 tps) に達することがあります。
  + `ResourceLimit` には、`MaxNumberOfTests` (Inference Recommender ジョブのベンチマークロードテストの最大数 (最小 1、最大 10)) と `MaxParallelOfTests` (Inference Recommender ジョブの並列ベンチマークロードテストの最大数 (最小 1、最大 10)) を指定します。
  + `EndpointConfigurations` には、以下のいずれかを指定できます。
    + `InstanceType` フィールド。ロードテストを実行するインスタンスタイプを指定します。
    + `ServerlessConfig`。サーバーレスエンドポイントの `MaxConcurrency` および `MemorySizeInMB` の理想的な値を指定します。
+ 停止条件ディクショナリ (`stopping-conditions`)。いずれかの条件が満たされると、Inference Recommender のジョブが停止します。この例では、ディクショナリで以下のフィールドを指定します。
  + `MaxInvocations` には、エンドポイントで想定される 1 分あたりの最大リクエスト数を指定します (最小 1、最大 30,000)。
  + `ModelLatencyThresholds` には、`Percentile` (モデルレイテンシーのパーセンタイルのしきい値) と `ValueInMilliseconds` (モデルレイテンシーのパーセンタイル値 (ミリ秒単位)) を指定します。
  + (オプション) `FlatInvocations` では、TPS (1 分あたりの呼び出し数) レートが平坦化したときにロードテストを続行するかどうかを指定できます。TPS レートが平坦化すると通常、エンドポイントがキャパシティに達したことを意味します。ただし、フルキャパシティ条件でエンドポイントの監視を継続したほうが良い場合があります。このような場合でもロードテストを続行するには、この値を `Continue` として指定します。それ以外の場合、デフォルト値は `Stop` です。

```
aws sagemaker create-inference-recommendations-job\
    --region {{<region>}}\
    --job-name {{<job-name>}}\
    --job-type ADVANCED\
    --role-arn arn:aws:iam::{{<account>:role/*}}\
    --input-config \"{
        \"ModelPackageVersionArn\": \"arn:aws:sagemaker:{{<region>:<account>:role/*}}\",
        \"JobDurationInSeconds\": 7200,                                
        \"TrafficPattern\" : {
                # Replace PHASES with STAIRS to use the stairs traffic pattern
                \"TrafficType\": \"PHASES\",
                \"Phases\": [
                    {
                        \"InitialNumberOfUsers\": 1,
                        \"SpawnRate\": 60,
                        \"DurationInSeconds\": 300
                    }
                ]
                # Uncomment this section and comment out the Phases object above to use the stairs traffic pattern
                # 'Stairs' : {
                #   'DurationInSeconds': 240,
                #   'NumberOfSteps': 2,
                #   'UsersPerStep': 2
                # }
            },
            \"ResourceLimit\": {
                \"MaxNumberOfTests\": 10,
                \"MaxParallelOfTests\": 3
            },
            \"EndpointConfigurations\" : [
                {
                    \"InstanceType\": \"ml.c5.xlarge\"
                },
                {
                    \"InstanceType\": \"ml.m5.xlarge\"
                },
                {
                    \"InstanceType\": \"ml.r5.xlarge\"
                }
                # Use the ServerlessConfig and leave out the InstanceType fields if you want recommendations for a serverless endpoint
                # \"ServerlessConfig\": {
                #     \"MaxConcurrency\": {{value}}, 
                #     \"MemorySizeInMB\": {{value}} 
                # }
            ]
        }\"
    --stopping-conditions \"{
        \"MaxInvocations\": 1000,
        \"ModelLatencyThresholds\":[
                {
                    \"Percentile\": \"P95\", 
                    \"ValueInMilliseconds\": 100
                }
        ],
        # Change 'Stop' to 'Continue' to let the load test continue if invocations flatten 
        \"FlatInvocations\": \"Stop\"
    }\"
```

------
#### [ Amazon SageMaker Studio Classic ]

Studio Classic でロードテストを作成します。

1. Studio Classic アプリケーションで、ホームアイコン (![](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/studio/icons/house.png)) を選択します。

1. Studio Classic の左側のサイドバーで **[デプロイ]** を選択します。

1. ドロップダウンリストから **[推論レコメンダー]** を選択します。

1. **[推論レコメンダージョブを作成]** を選択します。右側ペインに、**[推論レコメンダージョブを作成]** という新しいタブが開きます。

1. **[モデルグループ]** フィールドのドロップダウンからモデルグループの名前を選択します。リストには、Studio Classic 以外で登録されたモデルを含む、アカウントのモデルレジストリに登録されているすべてのモデルグループが含まれます。

1. **[モデルバージョン]** フィールドのドロップダウンからモデルのバージョンを選択します。

1. **[続行]** をクリックします。

1. **[Name]** (名前) フィールドにジョブの名前を入力します。

1. （オプション）ジョブに関する説明を**[Description]** (説明) フィールドに入力します。

1.  AWS サービスへのアクセス許可を Inference Recommender に付与する IAM ロールを選択します。これを行うには、ロールを作成して `AmazonSageMakerFullAccess` IAM 管理ポリシーをアタッチするか、Studio Classic にロールを作成させることもできます。

1. **[停止条件]** を選択し、使用できる入力フィールドを展開します。デプロイのレコメンデーションを停止するための一連の条件を指定します。

   1. エンドポイントで予想される 1 分あたりの最大リクエスト数を**[Max Invocations Per Minute]** (1 分あたりの最大呼び出し回数) フィールドに指定します。

   1. モデルレイテンシーのしきい値を、**[Model Latency Threshold]** (モデルのレイテンシーしきい値) フィールドにマイクロ秒単位で指定します。**[Model Latency Threshold]** (モデルのレイテンシーしきい値) は、Inference Recommender から見た、モデルが応答するのにかかる時間の間隔を示しています。この間隔には、リクエストを送信し、モデルのコンテナからレスポンスを取得するのにかかるローカル通信時間と、コンテナ内で推論を完了するのにかかる時間が含まれます。

1. **[Traffic Pattern]** (トラフィックパターン) を選択して、使用できる入力フィールドを展開します。

   1. **[Initial Number of Users] (初期ユーザー数)** フィールドに整数値を指定して、仮想ユーザーの初期数を設定します。

   1. **[Spawn Rate]** (スポーンレート) フィールドに整数値を指定します。スポーンレートは、1 秒間に作成されるユーザー数を設定します。

   1. **[Duration]** (期間) フィールドに整数値を指定して、フェーズの期間を秒単位で設定します。

   1. (オプション) トラフィックパターンを追加します。追加するには、**[Add]** (追加) を選択します。

1. **[Additional]** (追加) 設定を選択すると、**[Max test duration]** (最大テスト期間) フィールドが表示されます。ジョブ中にテストを実行できる最大時間を秒単位で指定します。新しいジョブは、定義された期間後には予定されません。これにより、進行中のジョブが停止されず、完了したジョブのみを表示できるようになります。

1. **[続行]** をクリックします。

1. **[Selected Instances]** (選択したインスタンス) を選択します。

1. **[Instances for benchmarking]** (ベンチマークするインスタンス) フィールドで、**[Add instances to test]** (テストするインスタンスを追加する) を選択します。Inference Recommender でロードテストに使用するインスタンスを最大 10 個選択します。

1. **[Additional settings]** (追加設定) を選択します。

   1. ジョブが実行できるテストの数に上限を設定する整数を **[Max number of tests]** (テストの最大数) フィールドに指定します。各エンドポイント設定では、新しいロードテストが行われます。

   1. **[Max parallel]** (最大並列値) テストフィールドに整数を指定します。この設定では、並列に実行できるロードテスト数の上限を定義します。

1. **[Submit]** (送信) を選択します。

   ロードテストには最大 2 時間かかることがあります。
**警告**  
このタブを閉じないでください。このタブを閉じると、Inference Recommender のロードテストジョブがキャンセルされます。

------
#### [ SageMaker AI console ]

次の手順を実行して、SageMaker AI コンソールからカスタムロードテストを作成します。

1. SageMaker AI コンソール ([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)) に移動します。

1. 左側のナビゲーションペインで、**[推論]** を選択し、次に **[推論レコメンダー]** を選択します。

1. **[推論レコメンダージョブ]** ページで **[ジョブを作成]** を選択します。

1. **[ステップ 1: モデル設定]** で、以下の操作を行います。

   1. **[ジョブタイプ]** には、**[高度なレコメンダージョブ]** を選択します。

   1. SageMaker AI モデルレジストリに登録されているモデルを使用する場合は、**[モデルレジストリからモデルを選択]** トグルをオンにして、以下の操作を行います。

      1. **[モデルグループ]** ドロップダウンリストでは、モデルがある SageMaker AI モデルレジストリ内のモデルグループを選択します。

      1. **[モデルバージョン]** ドロップダウンリストでは、目的のバージョンのモデルを選択します。

   1. SageMaker AI で作成したモデルを使用する場合は、**[モデルレジストリからモデルを選択]** トグルをオフにして、以下の操作を行います。

      1. **[モデル名]** フィールドには、SageMaker AI モデルの名前を入力します。

   1. **IAM ロール**では、インスタンスレコメンデーションジョブを作成するために必要なアクセス許可を持つ既存の AWS IAM ロールを選択できます。または、既存のロールがない場合は、**[新しいロールの作成]** を選択してロール作成ポップアップを開くと、SageMaker AI によって作成した新しいロールに必要な権限が追加されます。

   1. **[ペイロードをベンチマークするための S3 バケット]** には、サンプルペイロードアーカイブへの Amazon S3 パスを入力します。これには、Inference Recommender がさまざまなインスタンスタイプでモデルをベンチマークするために使用するサンプルペイロードファイルが含まれている必要があります。

   1. **[ペイロードコンテンツタイプ]** には、サンプルペイロードデータの MIME タイプを入力します。

   1. **[トラフィックパターン]** では、次の手順を実行してロードテストのフェーズを設定します。

      1. **[初期ユーザー数]** には、開始時の同時ユーザー数を指定します (最小 1、最大 3)。

      1. **[生成レート]** には、そのフェーズで 1 分間に生成されるユーザー数を指定します (最小 0、最大 3)。

      1. **[所要時間 (秒)]** では、トラフィックフェーズをどの程度短くするかを秒単位で指定します (最小 120、最大 3600)。

   1. (オプション) **[モデルレジストリからモデルを選択]** トグルをオフにし、SageMaker AI モデルを指定した場合は、**[コンテナの設定]** で以下の操作を行います。

      1. **[ドメイン]** ドロップダウンリストでは、コンピュータビジョン、自然言語処理、機械学習など、モデルの機械学習ドメインを選択します。

      1. **[フレームワーク]** ドロップダウンリストでは、TensorFlow や XGBoost など、コンテナのフレームワークを選択します。

      1. **[フレームワークバージョン]** には、コンテナイメージのフレームワークバージョンを入力します。

      1. **[最も近いモデル名]** ドロップダウンリストでは、自分のモデルと最もよく一致する事前トレーニング済みのモデルを選択します。

      1. **[タスク]** ドロップダウンリストでは、画像分類やリグレッションなど、モデルが実行する機械学習タスクを選択します。

   1. (オプション) **[SageMaker Neo を使用したモデルコンパイル]** では、SageMaker Neo を使用してコンパイルしたモデルのレコメンデーションジョブを設定できます。**[データ入力設定]** には、モデルに適した入力データ形状を `{'input':[1,1024,1024,3]}` のような形式で入力します。

   1. [**次へ**] を選択します。

1. **[ステップ 2: インスタンスと環境パラメータ]** では、以下の操作を行います。

   1. **[ベンチマーキング用のインスタンスを選択]** では、ベンチマークするインスタンスタイプを最大 8 個選択します。

   1. (オプション) **[環境パラメータの範囲]** では、モデルの最適化に役立つ環境パラメータを指定できます。パラメータは **キー**と**値**のペアとして指定します。

   1. [**次へ**] を選択します。

1. **[ステップ 3: ジョブパラメータ]** では、以下の操作を行います。

   1. (オプション) **[ジョブ名]** フィールドに、インスタンスレコメンデーションジョブの名前を入力します。ジョブを作成すると、SageMaker AI によってこの名前の末尾にタイムスタンプが追加されます。

   1. (オプション) **[ジョブの説明]** に、ジョブの説明を入力します。

   1. (オプション) **暗号化キー**ドロップダウンリストで、名前で AWS KMS キーを選択するか、ARN を入力してデータを暗号化します。

   1. (オプション) **[テストの最大数]** には、レコメンデーションジョブ中に実行するテストの数を入力します。

   1. (オプション) **[最大並列テスト]** には、レコメンデーションジョブ中に実行する並列テストの最大数を入力します。

   1. **[最大テスト時間]** には、各テストを実行する最大秒数を入力します。

   1. **[1 分あたりの最大呼び出し数]** には、推奨ジョブを停止するまでにエンドポイントが到達できる 1 分あたりの最大リクエスト数を入力します。この制限に達すると、SageMaker AI はジョブを終了します。

   1. **[P99 モデルレイテンシーのしきい値]** には、モデルレイテンシーのパーセンタイルをミリ秒単位で入力します。

   1. [**次へ**] を選択します。

1. **[ステップ 4: ジョブを確認]** では、設定を確認して **[送信]** を選択します。

------

## ロードテスト結果を取得する
<a name="load-test-describe"></a>

負荷テストが完了したら AWS SDK for Python (Boto3)、、、Studio Classic AWS CLI、または SageMaker AI コンソールを使用して、すべての負荷テストのメトリクスをプログラムで収集できます。

------
#### [ AWS SDK for Python (Boto3) ]

`DescribeInferenceRecommendationsJob` API でメトリクスを収集します。`JobName` フィールドにロードテストのジョブ名を指定します。

```
load_test_response = sagemaker_client.describe_inference_recommendations_job(
                                                        JobName=load_test_job_name
                                                        )
```

レスポンスオブジェクトを出力します。

```
load_test_response['Status']
```

ここでは、次の例のような JSON レスポンスが返されます。この例はリアルタイム推論に推奨されるインスタンスタイプを示していることに注意してください (サーバーレス推論レコメンデーションを示す例については、この後の例を参照してください)。

```
{
    'JobName': {{'job-name'}}, 
    'JobDescription': {{'job-description'}}, 
    'JobType': 'Advanced', 
    'JobArn': 'arn:aws:sagemaker:{{region}}:{{account-id}}:inference-recommendations-job/{{resource-id}}', 
    'Status': 'COMPLETED', 
    'CreationTime': datetime.datetime(2021, 10, 26, 19, 38, 30, 957000, tzinfo=tzlocal()), 
    'LastModifiedTime': datetime.datetime(2021, 10, 26, 19, 46, 31, 399000, tzinfo=tzlocal()), 
    'InputConfig': {
        'ModelPackageVersionArn': 'arn:aws:sagemaker:{{region}}:{{account-id}}:model-package/{{resource-id}}', 
        'JobDurationInSeconds': 7200, 
        'TrafficPattern': {
            'TrafficType': 'PHASES'
            }, 
        'ResourceLimit': {
            'MaxNumberOfTests': 100, 
            'MaxParallelOfTests': 100
            }, 
        'EndpointConfigurations': [{
            'InstanceType': 'ml.c5d.xlarge'
            }]
        }, 
    'StoppingConditions': {
        'MaxInvocations': 1000, 
        'ModelLatencyThresholds': [{
            'Percentile': 'P95', 
            'ValueInMilliseconds': 100}
            ]}, 
    'InferenceRecommendations': [{
        'Metrics': {
            'CostPerHour': 0.6899999976158142, 
            'CostPerInference': 1.0332434612791985e-05, 
            'MaximumInvocations': 1113, 
            'ModelLatency': 100000
            }, 
    'EndpointConfiguration': {
        'EndpointName': {{'endpoint-name'}}, 
        'VariantName': {{'variant-name'}}, 
        'InstanceType': 'ml.c5d.xlarge', 
        'InitialInstanceCount': 3
        }, 
    'ModelConfiguration': {
        'Compiled': False, 
        'EnvironmentParameters': []
        }
    }], 
    'ResponseMetadata': {
        'RequestId': {{'request-id'}}, 
        'HTTPStatusCode': 200, 
        'HTTPHeaders': {
            'x-amzn-requestid': {{'x-amzn-requestid'}}, 
            'content-type': {{'content-type'}}, 
            'content-length': '1199', 
            'date': 'Tue, 26 Oct 2021 19:57:42 GMT'
            }, 
        'RetryAttempts': 0}
    }
```

最初の数行には、ロードテストジョブ自体に関する情報が表示されます。これには、ジョブ名、ロール ARN、作成、削除時間が含まれます。

`InferenceRecommendations` ディクショナリには、Inference Recommender 推論レコメンデーションのリストが含まれています。

`EndpointConfiguration` ネストされたディクショナリには、レコメンデーションジョブ中に使用されるエンドポイントとバリアント名 (デプロイされた AWS 機械学習モデル`InstanceType`) とともに、インスタンスタイプ () レコメンデーションが含まれています。Amazon CloudWatch Events でのモニタリングには、エンドポイントとバリアント名を使用できます。詳細については「[Amazon CloudWatch における Amazon SageMaker AI メトリクス](monitoring-cloudwatch.md)」を参照してください。

`EndpointConfiguration` のネストされたディクショナリには、インスタンス数 (`InitialInstanceCount`) レコメンデーションも含まれています。これは、`StoppingConditions` で指定されている `MaxInvocations` を満たすためにエンドポイントでプロビジョニングする必要があるインスタンス数です。たとえば、`InstanceType` が `ml.m5.large` で、`InitialInstanceCount` が `2` の場合、`MaxInvocations` 停止条件で指定された TPS を処理できるように、エンドポイントに対して 2 つの `ml.m5.large` インスタンスをプロビジョニングする必要があります。

`Metrics` のネストされたディクショナリには、リアルタイムエンドポイントの 1 時間あたりの推定コスト (`CostPerHour`) (USD)、リアルタイムエンドポイントの推論あたりの推定コスト (`CostPerInference`)、エンドポイントに送信される `InvokeEndpoint` リクエストの最大数、モデルが SageMaker AI に応答するのにかかった時間間隔 (マイクロ秒単位) である、モデルのレイテンシー (`ModelLatency`) に関する情報が含まれています。モデルのレイテンシーには、リクエストを送信し、モデルのコンテナからレスポンスを取得するのにかかるローカル通信時間と、コンテナ内で推論を完了するのにかかる時間が含まれます。

以下の例は、サーバーレス推論レコメンデーションを返すように設定されたロードテストのレスポンスの `InferenceRecommendations` 部を示しています。

```
"InferenceRecommendations": [ 
      { 
         "EndpointConfiguration": { 
            "EndpointName": "{{value}}",
            "InitialInstanceCount": {{value}},
            "InstanceType": "{{value}}",
            "VariantName": "{{value}}",
            "ServerlessConfig": {
                "MaxConcurrency": {{value}},
                "MemorySizeInMb": {{value}}
            }
         },
         "InvocationEndTime": {{value}},
         "InvocationStartTime": {{value}},
         "Metrics": { 
            "CostPerHour": {{value}},
            "CostPerInference": {{value}},
            "CpuUtilization": {{value}},
            "MaxInvocations": {{value}},
            "MemoryUtilization": {{value}},
            "ModelLatency": {{value}},
            "ModelSetupTime": {{value}}
         },
         "ModelConfiguration": { 
            "Compiled": "False",
            "EnvironmentParameters": [],
            "InferenceSpecificationName": "{{value}}"
         },
         "RecommendationId": "{{value}}"
      }
   ]
```

サーバーレス推論のレコメンデーションは、リアルタイム推論の結果と同様に解釈できます。ただし、`ServerlessConfig` は例外で、ロードテストの設定時に `MaxConcurrency` と `MemorySizeInMB` に指定された値を示します。サーバーレスレコメンデーションではメトリクス `ModelSetupTime` も測定され、これにより、サーバーレスエンドポイントでコンピューターリソースを起動するのにかかる時間 (マイクロ秒単位) が測定されます。サーバーレスエンドポイントの設定について詳しくは、[サーバーレス推論のドキュメント](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html)を参照してください。

------
#### [ AWS CLI ]

`describe-inference-recommendations-job` API でメトリクスを収集します。次の `job-name` フラグにロードテストのジョブ名を指定します。

```
aws sagemaker describe-inference-recommendations-job --job-name {{<job-name>}}
```

ここでは、次の例のようなレスポンスが返されます。この例はリアルタイム推論に推奨されるインスタンスタイプを示していることに注意してください (サーバーレス推論レコメンデーションを示す例については、この後の例を参照してください)。

```
{
    'JobName': {{'job-name'}}, 
    'JobDescription': {{'job-description'}}, 
    'JobType': 'Advanced', 
    'JobArn': 'arn:aws:sagemaker:{{region}}:{{account-id}}:inference-recommendations-job/{{resource-id}}', 
    'Status': 'COMPLETED', 
    'CreationTime': datetime.datetime(2021, 10, 26, 19, 38, 30, 957000, tzinfo=tzlocal()), 
    'LastModifiedTime': datetime.datetime(2021, 10, 26, 19, 46, 31, 399000, tzinfo=tzlocal()), 
    'InputConfig': {
        'ModelPackageVersionArn': 'arn:aws:sagemaker:{{region}}:{{account-id}}:model-package/{{resource-id}}', 
        'JobDurationInSeconds': 7200, 
        'TrafficPattern': {
            'TrafficType': 'PHASES'
            }, 
        'ResourceLimit': {
            'MaxNumberOfTests': 100, 
            'MaxParallelOfTests': 100
            }, 
        'EndpointConfigurations': [{
            'InstanceType': 'ml.c5d.xlarge'
            }]
        }, 
    'StoppingConditions': {
        'MaxInvocations': 1000, 
        'ModelLatencyThresholds': [{
            'Percentile': 'P95', 
            'ValueInMilliseconds': 100
            }]
        }, 
    'InferenceRecommendations': [{
        'Metrics': {
        'CostPerHour': 0.6899999976158142, 
        'CostPerInference': 1.0332434612791985e-05, 
        'MaximumInvocations': 1113, 
        'ModelLatency': 100000
        }, 
        'EndpointConfiguration': {
            'EndpointName': {{'endpoint-name'}}, 
            'VariantName': {{'variant-name'}}, 
            'InstanceType': 'ml.c5d.xlarge', 
            'InitialInstanceCount': 3
            }, 
        'ModelConfiguration': {
            'Compiled': False, 
            'EnvironmentParameters': []
            }
        }], 
    'ResponseMetadata': {
        'RequestId': {{'request-id'}}, 
        'HTTPStatusCode': 200, 
        'HTTPHeaders': {
            'x-amzn-requestid': {{'x-amzn-requestid'}}, 
            'content-type': {{'content-type'}}, 
            'content-length': '1199', 
            'date': 'Tue, 26 Oct 2021 19:57:42 GMT'
            }, 
        'RetryAttempts': 0
        }
    }
```

最初の数行には、ロードテストジョブ自体に関する情報が表示されます。これには、ジョブ名、ロール ARN、作成、削除時間が含まれます。

`InferenceRecommendations` ディクショナリには、Inference Recommender 推論レコメンデーションのリストが含まれています。

`EndpointConfiguration` ネストされたディクショナリには、レコメンデーションジョブ中に使用されるエンドポイントとバリアント名 (デプロイされた AWS 機械学習モデル`InstanceType`) とともに、インスタンスタイプ () レコメンデーションが含まれています。Amazon CloudWatch Events でのモニタリングには、エンドポイントとバリアント名を使用できます。詳細については「[Amazon CloudWatch における Amazon SageMaker AI メトリクス](monitoring-cloudwatch.md)」を参照してください。

`Metrics` のネストされたディクショナリには、リアルタイムエンドポイントの 1 時間あたりの推定コスト (`CostPerHour`) (USD)、リアルタイムエンドポイントの推論あたりの推定コスト (`CostPerInference`)、エンドポイントに送信される `InvokeEndpoint` リクエストの最大数、モデルが SageMaker AI に応答するのにかかった時間間隔 (マイクロ秒単位) である、モデルのレイテンシー (`ModelLatency`) に関する情報が含まれています。モデルのレイテンシーには、リクエストを送信し、モデルのコンテナからレスポンスを取得するのにかかるローカル通信時間と、コンテナ内で推論を完了するのにかかる時間が含まれます。

以下の例は、サーバーレス推論レコメンデーションを返すように設定されたロードテストのレスポンスの `InferenceRecommendations` 部を示しています。

```
"InferenceRecommendations": [ 
      { 
         "EndpointConfiguration": { 
            "EndpointName": "{{value}}",
            "InitialInstanceCount": {{value}},
            "InstanceType": "{{value}}",
            "VariantName": "{{value}}",
            "ServerlessConfig": {
                "MaxConcurrency": {{value}},
                "MemorySizeInMb": {{value}}
            }
         },
         "InvocationEndTime": {{value}},
         "InvocationStartTime": {{value}},
         "Metrics": { 
            "CostPerHour": {{value}},
            "CostPerInference": {{value}},
            "CpuUtilization": {{value}},
            "MaxInvocations": {{value}},
            "MemoryUtilization": {{value}},
            "ModelLatency": {{value}},
            "ModelSetupTime": {{value}}
         },
         "ModelConfiguration": { 
            "Compiled": "False",
            "EnvironmentParameters": [],
            "InferenceSpecificationName": "{{value}}"
         },
         "RecommendationId": "{{value}}"
      }
   ]
```

サーバーレス推論のレコメンデーションは、リアルタイム推論の結果と同様に解釈できます。ただし、`ServerlessConfig` は例外で、ロードテストの設定時に `MaxConcurrency` と `MemorySizeInMB` に指定された値を示します。サーバーレスレコメンデーションではメトリクス `ModelSetupTime` も測定され、これにより、サーバーレスエンドポイントでコンピューターリソースを起動するのにかかる時間 (マイクロ秒単位) が測定されます。サーバーレスエンドポイントの設定について詳しくは、[サーバーレス推論のドキュメント](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html)を参照してください。

------
#### [ Amazon SageMaker Studio Classic ]

レコメンデーションは、Studio Classic 内の **[推論レコメンデーション]** という新しいタブに表示されます。結果が表示されるまでに最大 2 時間かかることがあります。このタブには、**[Results]** (結果) と **[Details]** (詳細) 列が含まれています。

**[Details]** (詳細) 列には、ロードテストジョブに指定された名前やジョブの作成日時 (**[Creation time]** (作成日時)) など、ロードテストジョブに関する情報が表示されます。また、1 分あたりに発生した最大呼び出し数や、使用された Amazon リソースネーム (ARN) といった、**[Settings]** (設定) 情報も表示されます。

**[結果]** 列には、**[デプロイの目標]** と **[SageMaker AI レコメンデーション]** ウィンドウが表示され、デプロイの重要度に基づいて結果が表示される順序を調整できます。ユースケースの **[Cost]** (コスト)、**[Latency]** (レイテンシー)、**[Throughput]** (スループット) の重要レベルを指定できる 3 つのドロップダウンメニューがあります。目標（コスト、レイテンシー、スループット）ごとに、**最小重要度**、**低重要度**、**中重要度**、**高重要度**、または**最高重要度**の重要度のレベルを設定できます。

各目標の重要度の選択に基づいて、Inference Recommender はその最上位レコメンデーションを、パネル右側の **[SageMaker recommendation]** (SageMaker レコメンデーション)フィールドに、時間あたりの推定コストと推論リクエストとともに表示します。また、予想されるモデルのレイテンシー、最大呼び出し数、インスタンス数に関する情報も表示されます。

表示される上位のレコメンデーションに加えて、Inference Recommender がテストしたすべてのインスタンスについての同じ情報が**[All runs]** (すべての実行) セクションに表示されます。

------
#### [ SageMaker AI console ]

次の手順を実行して、SageMaker AI コンソールにカスタムロードテストジョブの結果を表示します。

1. SageMaker AI コンソール ([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)) に移動します。

1. 左側のナビゲーションペインで、**[推論]** を選択し、次に **[推論レコメンダー]** を選択します。

1. **[推論レコメンダージョブ]** ページで、推論レコメンデーションジョブの名前を選択します。

ジョブの詳細ページでは、以下のスクリーンショットに示すように、SageMaker AI がモデルに推奨するインスタンスタイプである **[推論のレコメンデーション]** を表示できます。

![SageMaker AI コンソールのジョブ詳細ページにある推論レコメンデーションリストのスクリーンショット。](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/inf-rec-instant-recs.png)


このセクションでは、**[モデルレイテンシー]**、**[1 時間あたりのコスト]**、**[推論あたりのコスト]**、**[1 分あたりの呼び出し]** などのさまざまな要因でインスタンスタイプを比較できます。

このページでは、ジョブに指定した設定も表示できます。**[モニター]** セクションでは、インスタンスタイプごとに記録された Amazon CloudWatch メトリクスを表示できます。これらのメトリクスの解釈について詳しくは、「[結果の解釈](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-interpret-results.html)」を参照してください。

------