

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

# 自动缩放 Amazon SageMaker 人工智能模型
<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 指标和目标值。Auto Scaling 创建和管理扩展策略的 CloudWatch 警报，并根据指标和目标值计算缩放调整。该策略会根据需要增加或删除实例数量，以使指标保持在或接近指定的目标值。例如，使用具有目标值为 70 的预定义 `InvocationsPerInstance` 指标的扩展策略可以将 `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 或应用程序自动扩缩 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 auto scaling 不会对该值施加限制。

要确定典型流量所需的扩展限制，请使用模型的预期流量速率测试自动扩缩配置。

如果变体的流量变为零， SageMaker AI 会自动缩放到指定的最小实例数。在这种情况下， SageMaker AI 会发出值为零的指标。

有三个选项可用于指定最小和最大容量：

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>

当模型横向缩减（减少容量）或横向扩展（增加容量）时，*冷却时间*用于防止过度扩展。为此，它会减慢随后的扩展活动，直到期限结束。具体来说，它会阻止删除横向缩减请求中的实例，并限制创建横向扩展请求中的实例。更多信息，请参阅[《应用程序自动扩缩用户指南》](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 Command Reference* 的 [application-autoscaling](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 最近推出了基于实时推理端点的新推理功能。您可以使用终端节点配置创建 A SageMaker I 终端节点，该端点配置定义了终端节点的实例类型和初始实例数。然后，创建一个推理组件，它是一个 SageMaker AI 托管对象，可用于将模型部署到终端节点。有关扩展推理组件的信息，请参阅博客[上的 [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/)。 AWS 

# 自动扩缩先决条件
<a name="endpoint-auto-scaling-prerequisites"></a>

在使用自动缩放之前，您必须已经创建了 Amazon A SageMaker I 模型终端节点。同一端点可以有多个模型版本。每个模型被称为[生产（模型）变体](model-ab-testing.md)。有关部署模型终端节点的更多信息，请参阅[将模型部署到 SageMaker AI 托管服务](ex1-model-deployment.md#ex1-deploy-model)。

要激活模型的自动缩放，你可以使用 SageMaker AI 控制台、 AWS Command Line Interface (AWS CLI) 或 Application Auto Scaling API 的 AWS SDK。
+ 如果这是您第一次为模型配置扩展比例，我们建议您[使用控制台配置模型自动扩缩](endpoint-auto-scaling-add-console.md)。
+ 使用 AWS CLI 或 Application Auto Scaling API 时，流程是将模型注册为可扩展目标，定义扩展策略，然后应用它。在 SageMaker AI 控制台的导航窗格的 “**推理**” 下，选择 “**终端节点**”。查找模型的端点名称，然后选择它来查找变体名称。要激活模型的自动扩缩功能，必须同时指定端点名称和变体名称。

Amazon A SageMaker I、Amazon 和 Application Auto Scaling 的组合使自动扩展成为可能 APIs。 CloudWatch有关所需最低权限的信息，请参阅[《应用程序自动扩缩用户指南》](https://docs.aws.amazon.com/autoscaling/application/userguide/security_iam_id-based-policy-examples.html)中的*应用程序自动扩缩基于身份的策略示例*。

`SagemakerFullAccessPolicy` IAM 策略拥有执行自动扩缩所需的所有 IAM 权限。有关 A SageMaker I IAM 权限的更多信息，请参阅[如何使用 SageMaker AI 执行角色](sagemaker-roles.md)。

如果您管理自己的权限策略，则必须包括以下权限：

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

****  

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

------

## 服务相关角色
<a name="endpoint-auto-scaling-slr"></a>

自动扩缩使用 `AWSServiceRoleForApplicationAutoScaling_SageMakerEndpoint` 服务链接角色。此服务链接角色授予应用程序自动扩缩权限，以描述策略警报、监控当前容量水平并扩展目标资源。该角色将自动为您创建。要成功自动创建角色，您必须拥有 `iam:CreateServiceLinkedRole` 操作的权限。有关更多信息，请参阅《Application Auto Scaling 用户指南》**中的[服务相关角色](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html)。

# 使用控制台配置模型自动扩缩
<a name="endpoint-auto-scaling-add-console"></a>

**要为模型（管理控制台）配置自动扩缩功能**

1. 打开 Amazon A SageMaker I 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 在导航窗格中选择**推理**，然后选择**端点**。

1. 选择端点，然后在**端点运行时设置**中选择变体。

1. 选择 **Configure auto scaling** (配置自动扩展)。

1. 在**配置变量自动扩缩**页面的**变量自动扩缩**中，执行以下操作：

   1. 在**最小实例数**中，键入希望扩展策略保持的最小实例数。至少需要 1 个实例。

   1. 在**最大实例数**中，键入希望扩展策略保持的最大实例数。

1. 对于**内置扩展策略**，请执行以下操作：

   1. 对于**目标指标**，`SageMakerVariantInvocationsPerInstance` 会被自动选择为指标，且无法更改。

   1. 对于**目标值**，请键入模型每分钟每个实例的平均调用次数。要确定该值，请按照[负载测试](endpoint-scaling-loadtest.md)中的准则进行操作。

   1. (可选）对于**横向缩减冷却（秒）**和**横向扩展冷却（秒）**，输入每个冷却周期的时间（秒）。

   1. (可选）如果不想在流量减少时自动扩缩终止实例，请选择**禁用横向缩减**。

1. 选择**保存**。

此过程使用 Application Auto Scaling 将模型注册为可扩展目标。当您注册模型时，Application Auto Scaling 执行验证检查以确保以下内容：
+ 该模型存在
+ 权限足够
+ 您没有注册具有可突增性能实例 (如 T2) 的变体。
**注意**  
SageMaker AI 不支持 T2 等可突发实例的 auto Scaling，因为它们已经允许在工作负载增加的情况下增加容量。有关可突增性能实例的信息，请参阅 [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)
+ [注册模型 (Application Auto Scaling API)](#endpoint-auto-scaling-add-api)

## 注册模型 (AWS CLI)
<a name="endpoint-auto-scaling-add-cli"></a>

要注册您的生产变体，请使用带有以下参数的[register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html)命令：
+ `--service-namespace` – 将该值设置为 `sagemaker`。
+ `--resource-id` – 模型（特别是生产变体）的资源标识符。对于该参数，资源类型为 `endpoint`，唯一标识符为生产变体的名称。例如 `endpoint/my-endpoint/variant/my-variant`。
+ `--scalable-dimension` – 将该值设置为 `sagemaker:variant:DesiredInstanceCount`。
+ `--min-capacity`：最小实例数。必须将此值设置为至少 1，并且必须等于或小于为 `max-capacity` 指定的值。
+ `--max-capacity`：最大实例数。必须将此值设置为至少 1，并且必须等于或大于为 `min-capacity` 指定的值。

**Example**  
下面的示例展示了如何注册一个名为 `my-variant` 的变量，该变量运行在 `my-endpoint` 端点上，可动态扩展为 1 到 8 个实例。  

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

## 注册模型 (Application Auto Scaling API)
<a name="endpoint-auto-scaling-add-api"></a>

要在 Application Auto Scaling 中注册模型，请使用 [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-variant` 的变量，该变量在 `my-endpoint` 端点上运行，可动态扩展为使用 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"
    }
}
```
有关更多信息，请参阅《App *licati [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)on Auto Scaling API 参考*》中的。

## 指定高分辨率的预定义指标（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`。

有关更多信息，请参阅《App *licati [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)on Auto Scaling API 参考*》中的。

## 定义自定义指标（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"
    }
}
```
有关更多信息，请参阅《App *licati [CustomizedMetricSpecification](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_CustomizedMetricSpecification.html)on Auto Scaling API 参考*》中的。

## 定义自定义指标（CloudWatch 指标: ExplanationsPerInstance）
<a name="endpoint-auto-scaling-online-explainability"></a>

当端点激活了在线可解释性时，它会发出一个 `ExplanationsPerInstance` 指标，输出变量每分钟、每个实例的平均解释记录数。解释记录的资源利用率与预测记录的资源利用率会大不相同。我们强烈建议使用这一指标对激活了在线可解释性的端点进行目标跟踪扩展。

您可以为一个可扩展目标创建多个目标跟踪策略。考虑从 [指定预定义的指标（CloudWatch 指标: InvocationsPerInstance）](#endpoint-auto-scaling-add-code-predefined) 部分添加 `InvocationsPerInstance` 策略（除 `ExplanationsPerInstance` 策略外）。如果由于 `EnableExplanations` 参数中设置的阈值，大多数调用都不返回解释，那么端点可以选择 `InvocationsPerInstance` 策略。如果有大量解释，则端点可以使用 `ExplanationsPerInstance` 策略。

**Example**  
下面的配置示例显示了使用自定义指标的目标跟踪扩展策略。策略比例调整变体实例的数量，使每个实例的 `ExplanationsPerInstance` 指标值为 20。将此配置保存在名为 `config.json` 的文件中。  

```
{
    "TargetValue": 20.0,
    "CustomizedMetricSpecification":
    {
        "MetricName": "ExplanationsPerInstance",
        "Namespace": "AWS/SageMaker",
        "Dimensions": [
            {"Name": "EndpointName", "Value": "my-endpoint" },
            {"Name": "VariantName","Value": "my-variant"}
        ],
        "Statistic": "Sum"
    }
}
```

有关更多信息，请参阅《App *licati [CustomizedMetricSpecification](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_CustomizedMetricSpecification.html)on Auto Scaling API 参考*》中的。

## 指定冷却时间
<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
}
```
有关更多信息，请参阅《App *licati [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)on Auto Scaling API 参考*》中的。

# 应用扩缩策略
<a name="endpoint-auto-scaling-add-code-apply"></a>

注册模型并定义扩展策略后，将扩展策略应用到注册的模型。本节介绍如何使用 AWS Command Line Interface (AWS CLI) 或应用程序自动扩缩 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-endpoint` 端点上运行的名为 `my-variant` 的变体的扩展策略。

  ```
  aws application-autoscaling register-scalable-target \
    --service-namespace sagemaker \
    --resource-id endpoint/my-endpoint/variant/my-variant \
    --scalable-dimension sagemaker:variant:DesiredInstanceCount \
    --suspended-state '{"DynamicScalingInSuspended":true,"DynamicScalingOutSuspended":true}'
  ```
+ 通过禁用策略的横向缩减部分，防止特定目标跟踪扩展策略在变量中横向缩减。这种方法可以防止扩展策略删除实例，但仍允许它根据需要创建实例。

  使用 CLI 命令或 [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html)AP [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html)I 操作编辑策略，为指定布尔值，从而暂时禁用并启用缩减活动。`DisableScaleIn`  
**Example**  

  下面是扩展策略目标跟踪配置的示例，该策略将横向扩展，但不会横向缩减。

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

# 删除扩展策略
<a name="endpoint-auto-scaling-delete"></a>

如果不再需要扩展策略，您可以随时删除。

**Topics**
+ [删除所有扩展策略并注销模型（管理控制台）](#endpoint-auto-scaling-delete-console)
+ [删除扩展策略（AWS CLI 或 Application Auto Scaling API）](#endpoint-auto-scaling-delete-code)

## 删除所有扩展策略并注销模型（管理控制台）
<a name="endpoint-auto-scaling-delete-console"></a>

**删除所有扩展策略并将变体注销为可扩展目标**

1. 打开 Amazon A SageMaker I 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 在导航窗格中，选择**端点**。

1. 选择端点，然后在**端点运行时设置**中选择变体。

1. 选择 **Configure auto scaling** (配置自动扩展)。

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>

您可以通过描述扩展活动来检查自动扩缩端点的扩展活动状态。应用程序自动扩缩提供指定命名空间中前六周扩展活动的描述性信息。有关更多信息，请参阅[《应用程序自动扩缩用户指南》](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 资源的扩展活动，请使用`sagemaker`为`--service-namespace`选项指定[describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html)命令。

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

要描述特定资源的扩展活动，请使用 `--resource-id` 选项。

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

下面的示例显示运行此命令时产生的输出。

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

## 从实例配额中识别受阻的扩展活动 (AWS CLI)
<a name="endpoint-identify-blocked-autoscaling"></a>

当您横向扩展（添加更多实例）时，可能会达到账户级实例配额。您可以使用[describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html)命令来检查是否已达到您的实例配额。当您超出限额时，自动扩缩将被阻止。

要检查您是否已达到实例配额，请使用[describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html)命令并为该`--resource-id`选项指定资源 ID。

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

在返回语法中，检查 [StatusCode](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_ScalingActivity.html#autoscaling-Type-ScalingActivity-StatusCode) 和 [StatusMessage](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_ScalingActivity.html#autoscaling-Type-ScalingActivity-StatusMessage) 键及其关联的值。`StatusCode` 返回 `Failed`。在 `StatusMessage` 中有一条消息，表明已达到账户级别的服务限额。消息类似于以下示例：

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

# 将端点扩展到零个实例
<a name="endpoint-auto-scaling-zero-instances"></a>

在为端点设置自动扩缩时，可以支持横向缩减流程将使用中实例的数量减少到零。这样一来，在端点不处理推理请求因而不需要任何活动实例的时段内，您就可以节省成本。

但是，在横向缩减到零个实例后，您的端点在预调配至少一个实例之前，无法响应任何传入的推理请求。要自动执行预调配过程，请使用 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 资源名称（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`，以及请求的延迟。

此值取决于所选的实例类型、模型的客户端通常发送的有效负载以及模型具有的任何外部依赖项的性能。

**要找出您的模型的生产变体可以处理的峰值 requests-per-second (RPS) 和请求延迟**

1. 使用单个实例为模型设置终端节点。有关如何设置终端节点的信息，请参阅[将模型部署到 SageMaker AI 托管服务](ex1-model-deployment.md#ex1-deploy-model)。

1. 使用负载测试工具可生成越来越多的并行请求，并在负载测试工具的输出中监控 RPS 和模型延迟。
**注意**  
您也可以监视 requests-per-minute而不是 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 转换为， invocations-per-minute以匹配 SageMaker AI 用于实现自动缩放的每分钟 CloudWatch 指标（如果您 requests-per-minute改为进行测量，则无需这样做）。 requests-per-second

**注意**  
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
```

如需了解更多信息，请参阅[《应用程序自动扩缩用户指南》](https://docs.aws.amazon.com/autoscaling/application/userguide/creating-resources-with-cloudformation.html)中的*使用 AWS CloudFormation创建应用程序自动扩缩资源*。

# 更新使用自动扩缩的端点
<a name="endpoint-scaling-update"></a>

更新端点时，应用程序自动扩缩会检查该端点上是否有任何模型是自动扩缩的目标。如果更新会改变作为自动扩缩目标的任何模型的实例类型，则更新失败。

在中 AWS 管理控制台，您会看到一条警告，提示您必须先从 auto Scaling 中取消注册模型，然后才能对其进行更新。如果您试图通过调用[UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API 来更新终端节点，则调用将失败。在更新终端节点之前，请删除为其配置的所有扩展策略，并通过调用 App [DeregisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_DeregisterScalableTarget.html)lication Auto Scaling API 操作将该变体取消注册为可扩展目标。更新端点后，您可以将更新后的变体注册为可扩展目标，并附加扩展策略。

有一个例外。如果您更改配置为自动缩放的变体的模型，Amazon A SageMaker I auto scaling 将允许更新。这是因为更改模型对性能的影响通常不足以改变扩展行为。如果您确实要为配置为自动扩缩的变体更新模型，请确保对模型的更改不会对性能和扩展行为造成重大影响。

更新应用了 auto Scaling 的 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`。这会指定具有相同名称的生产变体将使用从调用 `DescribeEndpoint` 得到的响应中的最新 `DesiredInstanceCount` 进行更新，而不考虑新 `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)来重新激活 auto Scaling。

**注意**  
只有在使用以下更改更新终端节点时，才需要步骤 1 和 7：  
更改已配置自动扩缩的生产变体的实例类型
删除已配置自动扩缩功能的生产变体。

# 删除为自动扩缩配置的端点
<a name="endpoint-delete-with-scaling"></a>

如果您删除端点，应用程序自动扩缩会检查该端点上是否有任何模型是自动扩缩的目标。如果您有权取消注册模型，Application Auto Scaling 会取消注册这些模型为可扩展目标，并且不会通知您。如果您使用的自定义权限策略不提供操作权限，则必须先请求访问此[DeregisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_DeregisterScalableTarget.html)操作，然后才能删除终端节点。

**注意**  
作为 IAM 用户，如果其他用户为某个端点上的变体配置了自动扩缩功能，您可能没有足够的权限删除该端点。