

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 自动扩展无服务器端点的预置并发
<a name="serverless-endpoints-autoscale"></a>

 Amazon SageMaker AI 可自动横向缩减或横向扩展按需无服务器端点。对于使用预置并发的无服务器端点，您可以使用 Application Auto Scaling，根据流量状况增加或减少预置并发，从而优化成本。

 以下是在无服务器端点上自动扩缩预置并发的先决条件：
+ [注册模型](#serverless-endpoints-autoscale-register)
+ [定义扩展策略](#serverless-endpoints-autoscale-define)
+ [应用扩缩策略](#serverless-endpoints-autoscale-apply)

 在使用自动扩缩功能之前，您必须已将模型部署到使用预置并发的无服务器端点。部署的模型称为[生产变体](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html)。有关将模型部署到使用预置并发的无服务器端点的更多信息，请参阅[创建端点配置](serverless-endpoints-create-config.md)和[创建端点](serverless-endpoints-create-endpoint.md)。要为扩展策略指定指标和目标值，必须配置扩展策略。有关如何定义扩展策略的更多信息，请参阅[定义扩展策略](#serverless-endpoints-autoscale-define)。注册模型并定义扩展策略后，将扩展策略应用于已注册的模型。有关如何应用扩展策略的信息，请参阅[应用扩缩策略](#serverless-endpoints-autoscale-apply)。

 有关自动扩缩的其它先决条件和所用组件的详细信息，请参阅 [SageMaker AI 自动扩缩文档](endpoint-auto-scaling.md)中的[自动扩缩先决条件](endpoint-auto-scaling-prerequisites.md)部分。

## 注册模型
<a name="serverless-endpoints-autoscale-register"></a>

 要为使用预置并发的无服务器端点添加自动扩缩功能，必须首先使用 AWS CLI 或 Application Auto Scaling API 注册模型（生产变体）。

### 注册模型 (AWS CLI)
<a name="serverless-endpoints-autoscale-register-cli"></a>

 要注册模型，请使用具有以下参数的 `register-scalable-target` AWS CLI 命令：
+  `--service-namespace` – 将该值设置为 `sagemaker`。
+  `--resource-id` – 模型（特别是生产变体）的资源标识符。对于该参数，资源类型为 `endpoint`，唯一标识符为生产变体的名称。例如 `endpoint/MyEndpoint/variant/MyVariant`。
+  `--scalable-dimension` – 将该值设置为 `sagemaker:variant:DesiredProvisionedConcurrency`。
+  `--min-capacity` – 模型的预置并发最小数。将 `--min-capacity` 至少设置为 1。该值必须等于或小于为 `--max-capacity` 指定的值。
+  `--max-capacity` – 应通过 Application Auto Scaling 启用的预置并发最大数。将 `--max-capacity` 至少设置为 1。该值必须大于或等于为 `--min-capacity` 指定的值。

 以下示例演示如何注册名为 `MyVariant` 的模型，该模型动态扩展以具有 1 到 10 的预置并发值：

```
aws application-autoscaling register-scalable-target \
    --service-namespace sagemaker \
    --scalable-dimension sagemaker:variant:DesiredProvisionedConcurrency \
    --resource-id endpoint/MyEndpoint/variant/MyVariant \
    --min-capacity 1 \
    --max-capacity 10
```

### 注册模型 (Application Auto Scaling API)
<a name="serverless-endpoints-autoscale-register-api"></a>

 要注册模型，请使用带有以下参数的 `RegisterScalableTarget` Application Auto Scaling API 操作：
+  `ServiceNamespace` – 将该值设置为 `sagemaker`。
+  `ResourceId` – 模型（特别是生产变体）的资源标识符。对于该参数，资源类型为 `endpoint`，唯一标识符为生产变体的名称。例如 `endpoint/MyEndpoint/variant/MyVariant`。
+  `ScalableDimension` – 将该值设置为 `sagemaker:variant:DesiredProvisionedConcurrency`。
+  `MinCapacity` – 模型的预置并发最小数。将 `MinCapacity` 至少设置为 1。该值必须等于或小于为 `MaxCapacity` 指定的值。
+  `MaxCapacity` – 应通过 Application Auto Scaling 启用的预置并发最大数。将 `MaxCapacity` 至少设置为 1。该值必须大于或等于为 `MinCapacity` 指定的值。

 以下示例演示如何注册名为 `MyVariant` 的模型，该模型动态扩展以具有 1 到 10 的预置并发值：

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.RegisterScalableTarget
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/MyEndPoint/variant/MyVariant",
    "ScalableDimension": "sagemaker:variant:DesiredProvisionedConcurrency",
    "MinCapacity": 1,
    "MaxCapacity": 10
}
```

## 定义扩展策略
<a name="serverless-endpoints-autoscale-define"></a>

 要为扩展策略指定指标和目标值，可以配置目标跟踪扩展策略。将扩展策略定义为文本文件中的 JSON 块。在调用 AWS CLI 或 Application Auto Scaling API 时，您可以使用该文本文件。要为无服务器端点快速定义目标跟踪扩展策略，请使用 `SageMakerVariantProvisionedConcurrencyUtilization` 预定义指标。

```
{
    "TargetValue": 0.5,
    "PredefinedMetricSpecification": 
    {
        "PredefinedMetricType": "SageMakerVariantProvisionedConcurrencyUtilization"
    },
    "ScaleOutCooldown": 1,
    "ScaleInCooldown": 1
}
```

## 应用扩缩策略
<a name="serverless-endpoints-autoscale-apply"></a>

 注册模型后，您可以将扩展策略应用于使用预置并发的无服务器端点。要应用已定义的目标跟踪扩展策略，请参阅[应用目标跟踪扩展策略](#serverless-endpoints-autoscale-apply-target)。如果无服务器端点的流量具有可预测的规律，那么您可能不需要应用目标跟踪扩展策略，而需要在特定时间计划扩展操作。有关计划扩展操作的更多信息，请参阅[计划扩展](#serverless-endpoints-autoscale-apply-scheduled)。

### 应用目标跟踪扩展策略
<a name="serverless-endpoints-autoscale-apply-target"></a>

 您可以使用 AWS 管理控制台、AWS CLI 或 Application Auto Scaling API 将目标跟踪扩展策略应用于使用预置并发的无服务器端点。

#### 应用目标跟踪扩展策略 (AWS CLI)
<a name="serverless-endpoints-autoscale-apply-target-cli"></a>

 要将扩展策略应用于模型，请使用带有以下参数的 `put-scaling-policy` AWS CLI 命令：
+  `--policy-name` – 扩展策略的名称。
+  `--policy-type` – 将该值设置为 `TargetTrackingScaling`。
+  `--resource-id` – 变体的资源标识符。对于该参数，资源类型为 `endpoint`，唯一标识符为变体的名称。例如 `endpoint/MyEndpoint/variant/MyVariant`。
+  `--service-namespace` – 将该值设置为 `sagemaker`。
+  `--scalable-dimension` – 将该值设置为 `sagemaker:variant:DesiredProvisionedConcurrency`。
+  `--target-tracking-scaling-policy-configuration`：模型要使用的目标跟踪扩展策略配置。

 以下示例演示如何将名为 `MyScalingPolicy` 的目标跟踪扩展策略应用于名为 `MyVariant` 的模型。策略配置保存在一个名为 `scaling-policy.json` 的文件中。

```
aws application-autoscaling put-scaling-policy \
    --policy-name MyScalingPolicy \
    --policy-type TargetTrackingScaling \
    --service-namespace sagemaker \
    --scalable-dimension sagemaker:variant:DesiredProvisionedConcurrency \
    --resource-id endpoint/MyEndpoint/variant/MyVariant \
    --target-tracking-scaling-policy-configuration file://[file-localtion]/scaling-policy.json
```

#### 应用目标跟踪扩展策略 (Application Auto Scaling API)
<a name="serverless-endpoints-autoscale-apply-target-api"></a>

 要对模型应用扩展策略，请使用带有以下参数的 `PutScalingPolicy` Application Auto Scaling API 操作：
+  `PolicyName` – 扩展策略的名称。
+  `PolicyType` – 将该值设置为 `TargetTrackingScaling`。
+  `ResourceId` – 变体的资源标识符。对于该参数，资源类型为 `endpoint`，唯一标识符为变体的名称。例如 `endpoint/MyEndpoint/variant/MyVariant`。
+  `ServiceNamespace` – 将该值设置为 `sagemaker`。
+  `ScalableDimension` – 将该值设置为 `sagemaker:variant:DesiredProvisionedConcurrency`。
+  `TargetTrackingScalingPolicyConfiguration`：模型要使用的目标跟踪扩展策略配置。

 以下示例演示如何将名为 `MyScalingPolicy` 的目标跟踪扩展策略应用于名为 `MyVariant` 的模型。策略配置保存在一个名为 `scaling-policy.json` 的文件中。

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.PutScalingPolicy
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "PolicyName": "MyScalingPolicy",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/MyEndpoint/variant/MyVariant",
    "ScalableDimension": "sagemaker:variant:DesiredProvisionedConcurrency",
    "PolicyType": "TargetTrackingScaling",
    "TargetTrackingScalingPolicyConfiguration": 
    {
        "TargetValue": 0.5,
        "PredefinedMetricSpecification": 
        {
            "PredefinedMetricType": "SageMakerVariantProvisionedConcurrencyUtilization"
        }
    }
}
```

#### 应用目标跟踪扩展策略 (AWS 管理控制台)
<a name="serverless-endpoints-autoscale-apply-target-console"></a>

 要使用AWS 管理控制台应用目标跟踪扩展策略，请执行以下操作：

1.  登录 [Amazon SageMaker AI 控制台](https://console.aws.amazon.com/sagemaker/)。

1.  在导航面板中，选择**推理**。

1.  选择**端点**以查看所有端点的列表。

1.  选择要将扩展策略应用到的端点。此时将出现一个包含端点设置的页面，在**端点运行时系统设置部分**列出了模型（生产变体）。

1.  选择要将扩展策略应用到的生产变体，然后选择**配置自动扩缩**。此时将显示**配置变体自动扩展**对话框。  
![\[控制台中配置变体自动扩展对话框的屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/serverless-endpoints-variant-autoscaling.png)

1.  在**变体自动扩展**部分，在**最小预置并发**和**最大预置并发**字段中分别输入最小和最大的预置并发值。最小预置并发必须小于或等于最大预置并发。

1.  在目标指标 `SageMakerVariantProvisionedConcurrencyUtilization` 的**目标值**字段中输入目标值。

1.  （可选）分别在**横向缩减冷却时间**和**横向扩展冷却时间**字段中输入横向缩减冷却时间值和横向扩展冷却时间值（以秒为单位）。

1.  （可选）如果您不想在流量减少时通过自动扩缩功能删除实例，请选择**禁用横向缩减**。

1.  选择**保存**。

### 计划扩展
<a name="serverless-endpoints-autoscale-apply-scheduled"></a>

 如果使用预置并发的无服务器端点的流量遵循一种常规模式，您可能希望在特定时间计划扩展操作，以横向缩减或横向扩展预置并发。您可以使用 AWS CLI 或 Application Auto Scaling 来计划扩展操作。

#### 计划扩展 (AWS CLI)
<a name="serverless-endpoints-autoscale-apply-scheduled-cli"></a>

 要将扩展策略应用于模型，请使用带有以下参数的 `put-scheduled-action` AWS CLI 命令：
+  `--schedule-action-name` – 扩展操作的名称。
+  `--schedule` – 一个 cron 表达式，用于指定具有重复计划的扩展操作的开始和结束时间。
+  `--resource-id` – 变体的资源标识符。对于该参数，资源类型为 `endpoint`，唯一标识符为变体的名称。例如 `endpoint/MyEndpoint/variant/MyVariant`。
+  `--service-namespace` – 将该值设置为 `sagemaker`。
+  `--scalable-dimension` – 将该值设置为 `sagemaker:variant:DesiredProvisionedConcurrency`。
+  `--scalable-target-action` – 扩展操作的目标。

 以下示例演示如何将重复计划的名为 `MyScalingAction` 的扩展操作添加到名为 `MyVariant` 的模型。如果当前预置并发低于为 `MinCapacity` 指定的值，则根据指定的计划（UTC 时间每天中午 12:15）。Application Auto Scaling 将预置并发横向扩展到由 `MinCapacity` 指定的值。

```
aws application-autoscaling put-scheduled-action \
    --scheduled-action-name 'MyScalingAction' \
    --schedule 'cron(15 12 * * ? *)' \
    --service-namespace sagemaker \
    --resource-id endpoint/MyEndpoint/variant/MyVariant \
    --scalable-dimension sagemaker:variant:DesiredProvisionedConcurrency \
    --scalable-target-action 'MinCapacity=10'
```

#### 计划扩展 (Application Auto Scaling API)
<a name="serverless-endpoints-autoscale-apply-scheduled-api"></a>

 要对模型应用扩展策略，请使用带有以下参数的 `PutScheduledAction` Application Auto Scaling API 操作：
+  `ScheduleActionName` – 扩展操作的名称。
+  `Schedule` – 一个 cron 表达式，用于指定具有重复计划的扩展操作的开始和结束时间。
+  `ResourceId` – 变体的资源标识符。对于该参数，资源类型为 `endpoint`，唯一标识符为变体的名称。例如 `endpoint/MyEndpoint/variant/MyVariant`。
+  `ServiceNamespace` – 将该值设置为 `sagemaker`。
+  `ScalableDimension` – 将该值设置为 `sagemaker:variant:DesiredProvisionedConcurrency`。
+  `ScalableTargetAction` – 扩展操作的目标。

 以下示例演示如何将重复计划的名为 `MyScalingAction` 的扩展操作添加到名为 `MyVariant` 的模型。如果当前预置并发低于为 `MinCapacity` 指定的值，则根据指定的计划（UTC 时间每天中午 12:15）。Application Auto Scaling 将预置并发横向扩展到由 `MinCapacity` 指定的值。

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.PutScheduledAction
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "ScheduledActionName": "MyScalingAction",
    "Schedule": "cron(15 12 * * ? *)",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/MyEndpoint/variant/MyVariant",
    "ScalableDimension": "sagemaker:variant:DesiredProvisionedConcurrency",
    "ScalableTargetAction": "MinCapacity=10"
        }
    }
}
```

# 清理
<a name="serverless-endpoints-autoscale-cleanup"></a>

 使用预置并发完成无服务器端点的自动扩缩后，应清理您创建的资源。这需要删除扩展策略，并从应用程序自动扩缩中注销模型。清理可以确保您不再使用的资源不会产生不必要的费用。

## 删除扩展策略
<a name="serverless-endpoints-autoscale-delete"></a>

 您可以使用 AWS 管理控制台、AWS CLI 或 Application Auto Scaling API 删除扩展策略。有关使用 AWS 管理控制台删除扩展策略的更多信息，请参阅 [SageMaker AI 自动扩缩文档](endpoint-auto-scaling.md)中的[删除扩展策略](endpoint-auto-scaling-delete.md)。

### 删除扩展策略 (AWS CLI)
<a name="serverless-endpoints-autoscale-delete-cli"></a>

 要将扩展策略应用于模型，请使用带有以下参数的 `delete-scaling-policy` AWS CLI 命令：
+  `--policy-name` – 扩展策略的名称。
+  `--resource-id` – 变体的资源标识符。对于该参数，资源类型为 `endpoint`，唯一标识符为变体的名称。例如 `endpoint/MyEndpoint/variant/MyVariant`。
+  `--service-namespace` – 将该值设置为 `sagemaker`。
+  `--scalable-dimension` – 将该值设置为 `sagemaker:variant:DesiredProvisionedConcurrency`。

 以下示例从名为 `MyVariant` 的模型中删除名为 `MyScalingPolicy` 的扩展策略。

```
aws application-autoscaling delete-scaling-policy \
    --policy-name MyScalingPolicy \
    --service-namespace sagemaker \
    --scalable-dimension sagemaker:variant:DesiredProvisionedConcurrency \
    --resource-id endpoint/MyEndpoint/variant/MyVariant
```

### 删除扩展策略 (Application Auto Scaling API)
<a name="serverless-endpoints-autoscale-delete-api"></a>

 要删除模型的扩展策略，请使用带有以下参数的 `DeleteScalingPolicy` Application Auto Scaling API 操作：
+  `PolicyName` – 扩展策略的名称。
+  `ResourceId` – 变体的资源标识符。对于该参数，资源类型为 `endpoint`，唯一标识符为变体的名称。例如 `endpoint/MyEndpoint/variant/MyVariant`。
+  `ServiceNamespace` – 将该值设置为 `sagemaker`。
+  `ScalableDimension` – 将该值设置为 `sagemaker:variant:DesiredProvisionedConcurrency`。

 以下示例使用 Application Auto Scaling API 从名为 `MyVariant` 的模型中删除名为 `MyScalingPolicy` 的扩展策略。

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.DeleteScalingPolicy
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "PolicyName": "MyScalingPolicy",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/MyEndpoint/variant/MyVariant",
    "ScalableDimension": "sagemaker:variant:DesiredProvisionedConcurrency",
}
```

## 取消注册模型
<a name="serverless-endpoints-autoscale-deregister"></a>

 您可以使用 AWS 管理控制台、AWS CLI 或 Application Auto Scaling API 取消注册模型。

### 取消注册模型 (AWS CLI)
<a name="serverless-endpoints-deregister-model-cli"></a>

 要从 Application Auto Scaling 取消注册模型，请使用带有以下参数的 `deregister-scalable-target` AWS CLI 命令：
+  `--resource-id` – 变体的资源标识符。对于该参数，资源类型为 `endpoint`，唯一标识符为变体的名称。例如 `endpoint/MyEndpoint/variant/MyVariant`。
+  `--service-namespace` – 将该值设置为 `sagemaker`。
+  `--scalable-dimension` – 将该值设置为 `sagemaker:variant:DesiredProvisionedConcurrency`。

 以下示例从 Application Auto Scaling 取消注册名为 `MyVariant` 的模型。

```
aws application-autoscaling deregister-scalable-target \
    --service-namespace sagemaker \
    --scalable-dimension sagemaker:variant:DesiredProvisionedConcurrency \
    --resource-id endpoint/MyEndpoint/variant/MyVariant
```

### 取消注册模型 (Application Auto Scaling API)
<a name="serverless-endpoints-autoscale-deregister-api"></a>

 要从 Application Auto Scaling 取消注册模型，请使用带有以下参数的 `DeregisterScalableTarget` Application Auto Scaling API 操作：
+  `ResourceId` – 变体的资源标识符。对于该参数，资源类型为 `endpoint`，唯一标识符为变体的名称。例如 `endpoint/MyEndpoint/variant/MyVariant`。
+  `ServiceNamespace` – 将该值设置为 `sagemaker`。
+  `ScalableDimension` – 将该值设置为 `sagemaker:variant:DesiredProvisionedConcurrency`。

 以下示例使用 Application Auto Scaling API 从 Application Auto Scaling 取消注册名为 `MyVariant` 的模型。

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.DeregisterScalableTarget
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/MyEndpoint/variant/MyVariant",
    "ScalableDimension": "sagemaker:variant:DesiredProvisionedConcurrency",
}
```

### 取消注册模型 (AWS 管理控制台)
<a name="serverless-endpoints-autoscale-deregister-console"></a>

 要使用AWS 管理控制台取消注册模型（生产变体），请执行以下操作：

1.  打开 [Amazon SageMaker AI 控制台](https://console.aws.amazon.com/sagemaker/)。

1.  在导航面板中，选择**推理**。

1.  选择**端点**以查看您的端点列表。

1.  选择托管生产变体的无服务器端点。此时将出现一个包含端点设置的页面，在**端点运行时系统设置**部分列出了生产变体。

1.  选择要取消注册的生产变体，然后选择**配置自动扩缩**。此时将显示**配置变体自动扩展**对话框。

1.  选择**取消注册自动扩缩**。