

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

# 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>

若要使用自動擴展，請定義新增和移除生產變體執行個體數量的擴展政策，以回應實際的工作負載。

若要在工作負載變化時自動擴展，您有兩個選項：目標追蹤和步進擴展政策。

在多數情況下，建議您使用目標追蹤擴展政策。透過目標追蹤，您可以選擇 Amazon CloudWatch 指標和目標值。自動擴展會建立和管理擴展政策的 CloudWatch 警示，並根據指標和目標值來計算擴展調整內容。該政策會根據需要來新增或移除執行個體數量，以讓指標保持在等於或接近指定目標值的值。例如，擴展政策如果使用預先定義的 `InvocationsPerInstance` 指標和 70 的目標值，可將 `InvocationsPerInstance` 保持在等於或接近 70。如需詳細資訊，請參閱《Application Auto Scaling 使用者指南》中的[目標追蹤擴展政策](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html)。

您可以在需要進階組態時使用步驟擴展，例如指定在何種情況下要部署的執行個體數目。例如，如果您想讓端點從零個作用中執行個體橫向擴充，您就必須使用步進擴展。如需進一步瞭解步進擴展政策，請參閱*《Application Auto Scaling 使用者指南》*中的[步進擴展政策](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html)。

如要建立目標追蹤擴展政策，您必須指定以下項目：
+ **指標** — 要追蹤的 CloudWatch 指標，例如每個執行個體的平均調用次數。
+ **目標值** — 指標的目標值，例如每分鐘每個執行個體 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 自動擴展功能不會強制為此值設定限制。

若要決定一般流量所需的擴展上限和下限，請使用預期的傳輸流量來傳送到您的模型，以測試您的自動擴展組態設定。

如果變體的流量變成 0，SageMaker AI 會自動將規模調整至指定的執行個體數量下限。在此情況下，SageMaker AI 會發出值 0 的指標。

有三種方式可以指定容量下限和上限：

1. 透過主控台更新**執行個體數量下限**和**執行個體數量上限**設定。

1. 執行 [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 命令時，請使用 AWS CLI 並包含 `--min-capacity`和 `--max-capacity`選項。

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 使用者指南》**中的[定義冷卻時間](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 命令參考*中的[應用程式自動擴展](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling)一節
+ [Application Auto Scaling API 參考](https://docs.aws.amazon.com/autoscaling/application/APIReference/)
+ [Application Auto Scaling 使用者指南](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)。

若要啟用模型的自動擴展，您可以透過 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 身分型政策範例](https://docs.aws.amazon.com/autoscaling/application/userguide/security_iam_id-based-policy-examples.html)。

`SagemakerFullAccessPolicy` 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>

Auto Scaling 使用 `AWSServiceRoleForApplicationAutoScaling_SageMakerEndpoint` 服務連結角色。此服務連結角色會授予 Application Auto Scaling 許可以描述政策的警示、監控目前的容量多寡，以及擴展目標資源。系統會自動建立此角色。為了成功自動建立該角色，您必須有 `iam:CreateServiceLinkedRole` 動作的許可。如需詳細資訊，請參閱《應用程式自動擴展使用者指南》**中的[服務連結角色](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html)。

# 使用主控台設定模型自動擴展
<a name="endpoint-auto-scaling-add-console"></a>

**設定模型的自動擴展 (主控台)**

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

1. 在導覽窗格中，選擇**推論**，然後選擇**端點**。

1. 選擇您的端點，然後針對**端點執行時期設定**選擇變體。

1. 選擇**設定自動擴展**。

1. 在**設定變體自動擴展**頁面上，針對**變體自動擴展**，執行下列動作：

   1. 針對**執行個體數量下限**，輸入您希望擴展政策維持的執行個體數量下限。必須設定至少 1 個執行個體。

   1. 針對**執行個體數量上限**，輸入您希望擴展政策維持的執行個體數量上限。

1. 請針對**內建擴展政策**，執行下列動作：

   1. 針對**目標指標**，系統會自動選取 `SageMakerVariantInvocationsPerInstance` 且無法變更。

   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>

將擴展政策新增至模型之前，您必須先註冊模型以進行自動擴展，並定義模型的擴展限制。

下列程序說明如何使用 () 或 Application Auto Scaling API 註冊模型 AWS Command Line Interface （生產變體AWS CLI) 以進行自動擴展。

**Topics**
+ [註冊模型 (AWS CLI)](#endpoint-auto-scaling-add-cli)
+ [註冊模型 (應用程式自動擴展 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
```

## 註冊模型 (應用程式自動擴展 API)
<a name="endpoint-auto-scaling-add-api"></a>

若要以 Application Auto Scaling 註冊您的模型，請使用 [RegisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html) Application Auto Scaling API 動作搭配下列參數：
+ `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 參考*中的 [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` 指標等標準指標每分鐘發出一次資料。而高解析度指標每 10 秒即發出一次資料。因此，隨著模型的並行流量增加，您的政策會比標準指標更快橫向擴充以進行回應。不過，隨著模型流量減少，您的政策會以與標準指標相同的速度縮減。

以下是目標追蹤政策組態範例，如果每個模型的並行請求數量超過 5，則會新增執行個體。將此組態儲存至名為 `config.json` 的檔案。

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

如果您使用推論元件將多個模型部署到相同端點，您可以建立一個類似的政策。在此情況下，請將 `PredefinedMetricType` 設為 `SageMakerInferenceComponentConcurrentRequestsPerCopyHighResolution`。

如需詳細資訊，請參閱 *Application Auto Scaling API 參考*中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。

## 定義自訂指標 (CloudWatch 指標：CPUUtilization)
<a name="endpoint-auto-scaling-add-code-custom"></a>

若要使用自訂指標建立目標追蹤擴展政策，請指定指標名稱、命名空間、單位、統計資料，以及零或多個維度。維度由維度名稱和維度值組成。您可以使用隨容量比例變更的任何生產變體指標。

**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>

當端點啟用線上可解釋性時，會發出一個 `ExplanationsPerInstance` 指標，輸出每個執行個體的一個變體每分鐘可解釋性的平均記錄數。可解釋記錄的資源使用率，可以和預測的記錄大為不同。我們強烈建議啟用線上可解釋性，將此指標用於端點的目標追蹤擴展。

您可以為可擴展目標建立多個目標追蹤政策。請考慮從 [指定預先定義的指標 (CloudWatch 指標：InvocationsPerInstance)](#endpoint-auto-scaling-add-code-predefined) 區段 (除了 `ExplanationsPerInstance` 政策) 加入 `InvocationsPerInstance` 政策。如果大多數調用因為 `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 參考*中的 [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-scaling-policy` 的目標追蹤擴展政策套用到在 `my-endpoint` 端點上執行且名為 `my-variant` 的變體。請針對 `--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 將擴展政策套用到變體，請使用 [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html) Application Auto Scaling API 動作搭配下列參數：
+ `PolicyName`—擴展政策的名稱。
+ `ServiceNamespace`—將此值設定為 `sagemaker`。
+ `ResourceID`—此變體的資源識別符。針對這項參數，資源的類型為 `endpoint`，而唯一識別符是變體的名稱。例如 `endpoint/my-endpoint/variant/my-variant`。
+ `ScalableDimension`—將此值設定為 `sagemaker:variant:DesiredInstanceCount`。
+ `PolicyType`—將此值設定為 `TargetTrackingScaling`。
+ `TargetTrackingScalingPolicyConfiguration`—要用於變體的目標追蹤擴展政策組態。

**Example**  
下列的範例將名為 `my-scaling-policy` 的目標追蹤擴展政策套用到在 `my-endpoint` 端點上執行且名為 `my-variant` 的變體。政策組態會將每個執行個體的平均調用保持在 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>

設定自動擴展之後，如果您需要在不受擴展政策 (動態擴展) 干擾的情況下處理問題，您可以採取下列方式：
+ 呼叫 [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) CLI 命令或 [RegisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html) API 動作，指定 `DynamicScalingInSuspended` 和 `DynamicScalingOutSuspended` 的布林值，以暫停和繼續擴展活動。  
**Example**  

  下列範例說明如何暫停名為 `my-variant` 且在 `my-endpoint` 端點上執行的變體擴展政策。

  ```
  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}'
  ```
+ 停用政策的縮減部分，防止特定目標追蹤擴展政策在變體中縮減。這個方式可防止擴展政策刪除執行個體，同時讓此政策仍然能夠根據需要來建立執行個體。

  使用 [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) CLI 命令或 [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html) API 動作編輯政策，指定 `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. 開啟位在 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/) 的 Amazon SageMaker AI 主控台。

1. 在導覽窗格中選擇**端點**。

1. 選擇您的端點，然後針對**端點執行時期設定**選擇變體。

1. 選擇**設定自動擴展**。

1. 選擇**取消登錄自動擴展**。

## 刪除擴展政策 (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>

若要從變體刪除擴展政策，請使用 [DeleteScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_DeleteScalingPolicy.html) Application Auto Scaling API 動作搭配下列參數：
+ `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 提供過去六週內，具有指定之命名空間的擴展活動的描述性資訊。如需詳細資訊，請參閱《Application Auto Scaling 使用者指南》**中的[適用於 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 資源的擴展活動，請使用 [describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html) 命令，為 `--service-namespace` 選項指定 `sagemaker`。

```
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>

設定端點的自動擴展時，您可以允許縮減程序，將服務中執行個體的數量減少到零。這樣一來，您可以在端點未提供推論請求，因此不需要任何作用中執行個體的期間節省成本。

不過，在縮減至零個執行個體之後，端點在佈建至少一個執行個體之前，無法回應任何傳入的推論請求。若要自動化佈建程序，請使用 Application Auto Scaling 建立步進擴展政策。然後將政策指派給 Amazon CloudWatch 警示。

設定步進擴展政策和警示後，端點會在收到無法回應的推論請求後，自動佈建執行個體。請注意，佈建程序需要花費幾分鐘。在此期間，任何調用端點的嘗試都會產生錯誤。

下列程序說明如何設定端點的自動擴展，使其縮減至和擴展自零個執行個體。這些程序搭配使用命令和 AWS CLI。

**開始之前**

在端點可以縮減至和擴展自零個執行個體之前，端點必須符合下列要求：
+ 位於服務中。
+ 託管一個或多個推論元件。端點只有在託管推論元件時，才能在零執行個體之間擴展。

  如需進一步瞭解如何在 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 Resource Name (ARN)。在下一個步驟中，您會需要 CloudWatch 警示的 ARN。

   如需有關步進擴展政策的詳細資訊，請參閱《Application 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`，和並行作業增加時的請求延遲。

這個值取決於所選擇的執行個體類型、模型的用戶端通常會傳送的酬載，以及模型所具備任何外部相依項目的效能。

**若要找出您的模型生產變體每秒可處理的峰值請求數 (RPS)，以及請求的延遲**

1. 使用單一執行個體，來設定您模型的端點。關於設定端點的方法，詳細資訊請參閱[將模型部署至 SageMaker AI 託管服務](ex1-model-deployment.md#ex1-deploy-model)。

1. 使用負載測試工具來產生數量不斷增加的平行請求，並監控負載測試工具的 RPS 和輸出中的模型延遲。
**注意**  
您還可以監控每分鐘可處理的請求數而非 RPS。在這個情境中，不需要在方程式中乘上 60 以求出 `SageMakerVariantInvocationsPerInstance`，如下所示。

   當模型的延遲增加，或交易成功的比例減少時，這就是模型可處理的峰值 RPS。

## 計算目標負載
<a name="endpoint-scaling-loadtest-calc"></a>

在找出變體的效能特性之後，您可以決定應允許傳送到執行個體的最大 RPS。用於擴展的閾值，必須小於這個最大值。請利用下列的方程式，並結合負載測試，來為您擴展組態中的 `SageMakerVariantInvocationsPerInstance` 目標指標，找出正確的值。

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

其中，`MAX_RPS` 是您先前所找出的最大 RPS，`SAFETY_FACTOR` 則是您所選擇的安全係數，用來確保您的用戶端不會超過最大 RPS。乘上 60，從 RPS 轉換為每分鐘的調用數，以符合每分鐘的 CloudWatch 指標，SageMaker AI 用它來部署自動擴展 (如果您測量的是每分鐘處理的請求數，而非每秒鐘處理的請求數，就不需執行此作業)。

**注意**  
SageMaker AI 建議您用 0.5 的 `SAFETY_FACTOR` 開始測試。測試您的擴展組態，確保您的模型在端點增加和減少客戶傳輸流量時，能如預期運作。

# 使用 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 使用者指南》*中的[以 AWS CloudFormation建立 Application Auto Scaling](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 來更新端點，則呼叫會失敗。在您更新端點之前，請先呼叫 [DeregisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_DeregisterScalableTarget.html) Application Auto Scaling API 動作，刪除針對該端點設定的所有擴展政策，然後再取消註冊變體為可擴展目標。在更新端點之後，您可以將更新的變體註冊為可擴展目標，然後連接擴展政策。

有一種例外狀況。如果您針對已設定自動擴展的變體，來變更其模型，則 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. 重複呼叫 [ DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html)，直到回應的 `EndpointStatus` 欄位的值是 `InService`。

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`。這會指定具有相同名稱的生產變體將使用最新版本 `DesiredInstanceCount` 進行更新，這是來自對 `DescribeEndpoint` 的呼叫所得的回應，而不管新 `EndpointConfig` 中 `InitialInstanceCount` 欄位值為何。

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 使用者的您，許可或許不足以刪除該端點。