

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 執行自訂負載測試
<a name="inference-recommender-load-test"></a>

Amazon SageMaker Inference Recommender 負載測試會根據延遲和輸送量、自訂流量模式以及您選取的無伺服器端點或即時執行個體 (最多 10 個) 的生產需求，進行廣泛的基準測試。

下列各節示範如何使用 和 以程式設計方式建立、描述和停止負載測試 適用於 Python (Boto3) 的 AWS SDK AWS CLI，或使用 Amazon SageMaker Studio Classic 或 SageMaker AI 主控台以互動方式進行。

## 建立負載測試任務
<a name="load-test-create"></a>

使用 適用於 Python (Boto3) 的 AWS SDK、 搭配 以程式設計方式建立負載測試 AWS CLI，或使用 Studio Classic 或 SageMaker AI 主控台以互動方式建立負載測試。如同 Inference Recommender 推論建議，當您向模型登錄檔註冊模型時，請為負載測試指定任務名稱、IAM AWS 角色 ARN、輸入組態和模型套件 ARN。負載測試還會要求您指定流量模式和停止條件。

------
#### [ 適用於 Python (Boto3) 的 AWS SDK ]

使用 `CreateInferenceRecommendationsJob` API 建立 Inference Recommender 負載測試。為 `JobType` 欄位指定 `Advanced` 並提供：
+ 負載測試的任務名稱 (`JobName`)。任務名稱在您的 AWS 區域和 AWS 帳戶中必須是唯一的。
+ IAM 角色的 Amazon Resource Name (ARN)，可讓 Inference Recommender 代表您執行任務。為 `RoleArn` 欄位定義此項目。
+ 端點組態字典 (`InputConfig`)，方便您在其中指定以下項目：
  + 針對 `TrafficPattern`，指定階段或樓梯流量模式。透過階段流量模式，新使用者每分鐘產生一次您指定的速率。在階梯流量模式下，新使用者會以您指定的速率按定時間隔 (或*步驟*) 產生。選擇下列其中一項：
    + 對於 `TrafficType`，請指定 `PHASES`。接著，針對 `Phases` 陣列，指定 `InitialNumberOfUsers` (開始使用多少個並行使用者，最少為 1 且最多為 3 )、`SpawnRate` (在特定負載測試階段中，一分鐘內產生的使用者數目，最少為 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 容器，端點每分鐘可達到 30,000 次調用 (500 tps)，而且只有 15-20 個使用者。
  + 對於 `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 且最多為 30,000。
  + 針對 `ModelLatencyThresholds`，指定 `Percentile` (模型延遲百分位數閾值) 和 `ValueInMilliseconds` (模型延遲百分位數值 (以毫秒為單位))。
  + (選用) 針對 `FlatInvocations`，您可以指定當 TPS (每分鐘調用數) 速率持平時是否繼續負載測試。持平的 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'
                        }
                )
```

請參閱 [Amazon SageMaker API 參考指南](https://docs.aws.amazon.com/sagemaker/latest/APIReference/Welcome.html)，以取得可傳遞給 `CreateInferenceRecommendationsJob` 的選用和必要引數之完整清單。

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

使用 `create-inference-recommendations-job` API 建立 Inference Recommender 負載測試。為 `JobType` 欄位指定 `Advanced` 並提供：
+ 負載測試的任務名稱 (`job-name`)。任務名稱在您的 AWS 區域和 AWS 帳戶中必須是唯一的。
+ IAM 角色的 Amazon Resource Name (ARN)，可讓 Inference Recommender 代表您執行任務。為 `role-arn` 欄位定義此項目。
+ 端點組態字典 (`input-config`)，方便您在其中指定以下項目：
  + 針對 `TrafficPattern`，指定階段或樓梯流量模式。透過階段流量模式，新使用者每分鐘產生一次您指定的速率。在階梯流量模式下，新使用者會以您指定的速率按定時間隔 (或*步驟*) 產生。選擇下列其中一項：
    + 對於 `TrafficType`，請指定 `PHASES`。接著，針對 `Phases` 陣列，指定 `InitialNumberOfUsers` (開始使用多少個並行使用者，最少為 1 且最多為 3 )、`SpawnRate` (在特定負載測試階段中，一分鐘內產生的使用者數目，最少為 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 容器，端點每分鐘可達到 30,000 次調用 (500 tps)，而且只有 15-20 個使用者。
  + 對於 `ResourceLimit`，請指定 `MaxNumberOfTests` (Inference Recommender 任務的基準測試負載測試數目上限，最少為 1，最多為 10) 和 `MaxParallelOfTests` (Inference Recommender 任務的平行基準測試負載測試數目上限，最少為 1，最多為 10)。
  + 針對 `EndpointConfigurations`，您可以指定下列其中一項：
    + `InstanceType` 欄位方便您在其中指定要執行負載測試的執行個體類型。
    + 您可以在 `ServerlessConfig` 中為無伺服器端點指定 `MaxConcurrency` 和 `MemorySizeInMB` 的理想值。
+ 停止條件字典 (`stopping-conditions`)，如果符合任何條件，Inference Recommender 任務就會停止。對於此範例，請在字典中指定下列欄位：
  + 針對 `MaxInvocations`，指定端點每分鐘預期的請求數目上限，最少為 1 且最多為 30,000。
  + 針對 `ModelLatencyThresholds`，指定 `Percentile` (模型延遲百分位數閾值) 和 `ValueInMilliseconds` (模型延遲百分位數值 (以毫秒為單位))。
  + (選用) 針對 `FlatInvocations`，您可以指定當 TPS (每分鐘調用數) 速率持平時是否繼續負載測試。持平的 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 應用程式中，選擇首頁圖示 (![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/studio/icons/house.png))。

1. 在 Studio Classic 的左側邊欄中，選擇**部署**。

1. 從下拉式清單中選擇**推論建議程式**。

1. 選擇**建立推論建議程式任務**。名為**建立推論建議程式任務**的新索引標籤會隨即開啟。

1. 從下拉式清單**模型群組**欄位中選取模型群組的名稱。此清單包含在您帳戶中註冊至模型註冊表的所有模型群組，包括在 Studio Classic 外部註冊的模型。

1. 從下拉式清單**模型版本**欄位中選取模型版本。

1. 選擇**繼續**。

1. 在**名稱**欄位中提供任務的名稱。

1. (選用) 在**說明**欄位中提供任務的描述。

1. 選擇授予 Inference Recommender 存取 AWS 服務的許可的 IAM 角色。您可以建立角色並連接 `AmazonSageMakerFullAccess` IAM 受管政策來達成此目的，也可以讓 Studio Classic 為您建立角色。

1. 選擇**停止條件**以展開可用的輸入欄位。提供一組停止部署建議的條件。

   1. 在**每分鐘調用數上限**欄位中，指定端點每分鐘預期的請求數量上限。

   1. 在**模型延遲閾值**欄位中指定模型延遲閾值 (以微秒為單位)。**模型延遲閾值**描述了從 Inference Recommender 檢視的模型回應所花費的時間間隔。這個間隔包含傳送請求和從模型容器擷取回應的本機通訊時間，以及在容器中完成推論的時間。

1. 選擇**流量模式**以展開可用的輸入欄位。

   1. 在**初始使用者數目**欄位中指定一個整數，以設定虛擬使用者的初始數量。

   1. 在**產生率**欄位中提供一個整數。產生率設定每秒建立的使用者數目。

   1. 在**持續時間**欄位中指定一個整數，以秒為單位設定階段的持續時間。

   1. (選用) 新增其他流量模式。若要這麼做，請選擇**新增**。

1. 選擇**其他**設定以顯示**最長測試持續時間**欄位。指定任務期間測試所需的時間上限 (以秒為單位)。在定義的持續時間之後，不會排定新任務。這有助於確保進行中的任務不會停止，而且您只能檢視已完成的任務。

1. 選擇**繼續**。

1. 選擇**選取的執行個體**。

1. 在**基準測試執行個體**欄位中，選擇**新增要測試的執行個體**。為 Inference Recommender 選取最多 10 個執行個體，以用於負載測試。

1. 選擇**其他設定**。

   1. 提供一個整數，此整數會設定任務可在**測試數量上限欄位**中進行的測試次數上限。請注意，每個端點組態都會產生新的負載測試。

   1. 為**平行測試上限**測試欄位提供一個整數。此設定定義可以平行執行的負載測試次數上限。

1. 選擇**提交**。

   負載測試最多需要 2 小時的時間。
**警告**  
請勿關閉此索引標籤。如果您關閉此索引標籤，就會取消 Inference Recommender 負載測試任務。

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

透過執行下列動作，透過 SageMaker AI 主控台建立自訂負載測試：

1. 前往位在 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/) 的 SageMaker AI 主控台。

1. 在左側導覽窗格中，選擇**推論**，然後選擇**推論建議程式**。

1. 在**推論建議程式任務**頁面上，選擇**建立任務**。

1. 針對**步驟 1：模型組態**，執行下列動作：

   1. 針對**任務類型**，選擇**進階推薦程式任務**。

   1. 如果您使用的是在 SageMaker AI 模型註冊表中註冊的模型，請開啟**從模型註冊表中選擇模型**切換鈕並執行下列動作：

      1. 對於**模型群組**下拉式清單，請在 SageMaker AI 模型註冊表中選擇模型所在的模型群組。

      1. 對於**模型版本**下拉式清單，選擇您想要的模型版本。

   1. 如果您使用的是在 SageMaker AI 中建立的模型，請關閉**從模型註冊表中選擇模型切換鈕**，然後執行下列動作：

      1. 在**模型名稱**欄位中，輸入 SageMaker AI 模型的名稱。

   1. 對於 **IAM 角色**，您可以選取具有建立執行個體建議任務所需許可的現有 IAM 角色。 AWS 或者，如果您沒有現有角色，可以選擇**建立新角色**以開啟角色建立快顯視窗，SageMaker AI 會將必要的權限新增至您建立的新角色。

   1. 針對**用於基準測試承載的 S3 儲存貯體**，請輸入您範例承載存檔的 Amazon S3 路徑，其中應包含 Inference Recommender 用於在不同執行個體類型上對模型進行基準測試的範例承載檔案。

   1. 針對**承載內容類型**，輸入範例承載資料的 MIME 類型。

   1. 對於**流量模式**，請執行下列動作來設定負載測試的階段：

      1. 對於**初始使用者數目**，請指定您要開始使用的並行使用者數目 (最少為 1，最多為 3)。

      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. 針對**每分鐘調用數上限**，請輸入端點在停止建議任務之前每分鐘可達到的請求數量上限。達到此限制後，SageMaker AI 會結束任務。

   1. 對於 **P99 模型延遲閾值 (ms)**，輸入模型延遲百分位數 (以毫秒為單位)。

   1. 選擇**下一步**。

1. 針對**步驟 4：檢閱任務**，檢閱您的組態，然後選擇**提交**。

------

## 取得負載測試結果
<a name="load-test-describe"></a>

完成負載測試後，您可以透過程式設計方式收集所有負載測試的指標 適用於 Python (Boto3) 的 AWS SDK、 AWS CLI、Studio Classic 或 SageMaker AI 主控台。

------
#### [ 適用於 Python (Boto3) 的 AWS SDK ]

使用 `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` 巢狀字典包含執行個體類型 (`InstanceType`) 建議，以及建議任務期間使用的端點和變體名稱 （已部署的 AWS 機器學習模型）。您可以使用端點和變體名稱在 Amazon CloudWatch Events 中進行監控。如需詳細資訊，請參閱[Amazon CloudWatch 中的 Amazon SageMaker AI 指標](monitoring-cloudwatch.md)。

`EndpointConfiguration` 巢狀字典也包含執行個體計數 (`InitialInstanceCount`) 建議。這是您應在端點中佈建以符合 `StoppingConditions` 中指定的 `MaxInvocations` 執行個體數目。例如，如果 `InstanceType` 為 `ml.m5.large` 而 `InitialInstanceCount` 是 `2`，則您應該為端點佈建 2 個 `ml.m5.large` 執行個體，以便它可以處理 `MaxInvocations` 停止條件中指定的 TPS。

`Metrics` 巢狀字典包含有關即時端點的估計每小時成本 (`CostPerHour`)、即時端點的預估每個推論美元成本 (`CostPerInference`)、傳送至端點的 `InvokeEndpoint` 請求數量上限，以及模型延遲 (`ModelLatency`)，這是模型回應 SageMaker AI 所花費的時間間隔 (以微秒為單位) 等資訊。模型延遲包含傳送請求和從模型容器擷取回應的本機通訊時間，以及在容器中完成推論的時間。

下列範例顯示設定為傳回無伺服器推論建議之負載測試任務的 `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` 巢狀字典包含執行個體類型 (`InstanceType`) 建議，以及建議任務期間使用的端點和變體名稱 （已部署的 AWS 機器學習模型）。您可以使用端點和變體名稱在 Amazon CloudWatch Events 中進行監控。如需詳細資訊，請參閱[Amazon CloudWatch 中的 Amazon SageMaker AI 指標](monitoring-cloudwatch.md)。

`Metrics` 巢狀字典包含有關即時端點的估計每小時成本 (`CostPerHour`)、即時端點的預估每個推論美元成本 (`CostPerInference`)、傳送至端點的 `InvokeEndpoint` 請求數量上限，以及模型延遲 (`ModelLatency`)，這是模型回應 SageMaker AI 所花費的時間間隔 (以微秒為單位) 等資訊。模型延遲包含傳送請求和從模型容器擷取回應的本機通訊時間，以及在容器中完成推論的時間。

下列範例顯示設定為傳回無伺服器推論建議之負載測試任務的 `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 小時，結果才會顯示。此索引標籤包含**結果**和**詳細資訊**欄。

**詳細資訊**欄提供有關負載測試任務的資訊，例如指定給負載測試任務的名稱、建立任務的時間 (**建立時間**) 等。它也包含**設定**資訊，例如每分鐘發生的調用次數上限，以及所使用之 Amazon Resource Name 的相關資訊。

**結果**欄提供**部署目標**和 **SageMaker AI 建議**視窗，您可以在其中根據部署重要性調整結果的顯示順序。您可以在三個下拉式清單選單中為使用案例提供**成本**、**延遲**和**輸送量**的重要性層級。您可以針對每個目標 (成本、延遲和輸送量) 設定重要性層級：**最低重要性**、**低重要性**、**中等重要性**、**高重要性**或**最高重要性**。

根據您對每個目標的重要性選擇，Inference Recommender 會在面板右側的 **SageMaker 建議**欄位中顯示其最佳建議，以及每小時的預估成本和推論請求。同時也提供預期模型延遲、調用次數上限以及執行個體數目的相關資訊。

除了顯示的最佳建議之外，您也可以看到在**所有執行**段落中，Inference Recommender 測試過的所有執行個體處理所顯示的相同資訊。

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

您可以執行下列動作，在 SageMaker AI 主控台中檢視自訂負載測試任務結果：

1. 前往位在 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/) 的 SageMaker AI 主控台。

1. 在左側導覽窗格中，選擇**推論**，然後選擇**推論建議程式**。

1. 在**推論建議程式任務**頁面上，選擇推論建議任務的名稱。

在任務的詳細資料頁面上，您可以檢視**推論建議**，這是 SageMaker AI 針對您的模型建議的執行個體類型，如下列螢幕擷取畫面所示。

![\[SageMaker AI 主控台中任務詳細資料頁面上推論建議清單的螢幕擷取畫面。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/inf-rec-instant-recs.png)


在本節中，您可以依各種因素比較執行個體類型，例如**模型延遲**、**每小時成本**、**每個推論的成本**、**每分鐘調用數**。

您也可以在此頁面檢視針對您指定的組態。在**監控**區段中，您可以檢視針對每個執行個體類型記錄的 Amazon CloudWatch 指標。若要深入了解如何解讀這些指標，請參閱[解讀結果](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-interpret-results.html)。

------