

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

# 使用滚动部署
<a name="deployment-guardrails-rolling"></a>

您在更新端点时，可以指定滚动部署方式，从而逐步将流量从旧实例集转移到新实例集。您可以控制流量转移步骤的大小，还可以指定一个评估期，以便在终止旧实例集内的实例之前，监控新实例以确保没有问题。通过滚动部署，每次流量转移到新实例集后，都会清理旧实例集上的实例，从而减少更新端点所需的额外实例数量。这对于需要量大的加速实例尤其有用。

滚动部署按照可配置的批量大小来更新端点，从而逐步将之前部署的模型版本替换为新版本。滚动部署的流量转移行为与部署中的[ blue/green 线性流量转移模式](https://docs.amazonaws.cn/sagemaker/latest/dg/deployment-guardrails-blue-green-linear.html)类似，但是与部署相比，滚动 blue/green 部署可以降低容量需求。通过滚动部署，您能够减少同时处于活动状态的实例数量，从而更精细地控制要在新实例集内更新的实例数量。如果您有大型模型或具有许多实例的大型终端节点，则应考虑使用滚动 blue/green 部署而不是部署。

以下列表描述了 Amazon A SageMaker I 中滚动部署的主要功能：
+ **烘焙期。**烘焙期是设定用于监控新实例集的一段时间，在该期间完成后再进入下一个部署阶段。如果在任意烘焙期内触发了任何预先指定的警报，则所有端点流量都会回滚到旧实例集。烘焙期可以在最终完成流量的彻底转移之前，协助您确信更新没有问题。
+ **滚动批次大小。**您可以精细控制流量转移中的每个批次的大小，或每个批次中要更新的实例数量。这个数字的范围在您的实例集大小的 5-50% 之间。您可以将批次大小指定为实例数量或实例集的整体百分比。
+ **自动回滚。**您可以指定 A SageMaker I 用来监控新队列的 Amazon CloudWatch 警报。如果更新后的代码出现问题触发任何警报， SageMaker AI 会启动自动回滚到旧队列以保持可用性，从而最大限度地降低风险。

**注意**  
如果您的端点使用[排除项](https://docs.amazonaws.cn/sagemaker/latest/dg/deployment-guardrails-exclusions.html)页面中列出的任何功能，则您无法使用滚动部署。

## 工作方式
<a name="deployment-guardrails-rolling-how-it-works"></a>

在滚动部署期间， SageMaker AI 提供了将流量从旧队列转移到新队列的基础架构，而无需同时配置所有新实例。 SageMaker AI 使用以下步骤来转移流量：

1. SageMaker AI 会配置新队列中的第一批实例。

1. 一部分流量从旧实例转移到第一批新实例。

1. 烘焙期过后，如果没有触发亚马逊 CloudWatch 警报， SageMaker AI 就会清理一批旧实例。

1. SageMaker 在部署完成之前，AI 会继续分批配置、转移和清理实例。

如果在某个烘焙期内触发了警报，则流量将按您指定的大小分批回滚到旧实例集。或者，您可以指定在触发警报时，滚动部署将全部流量转移回旧实例集。

下图显示了成功滚动部署的进度，如前面的步骤所述。

![滚动部署的流量成功从旧实例集转移到新实例集的步骤。](http://docs.amazonaws.cn/sagemaker/latest/dg/images/deployment-guardrails-rolling-diagram.png)


要创建滚动部署，您只需指定所需的部署配置。然后， SageMaker AI 会为您处理配置新实例、终止旧实例和转移流量。您可以通过现有的、[CreateEndpoint](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateEndpoint.html) SageMaker API [UpdateEndpoint](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_UpdateEndpoint.html)和 Amazon Command Line Interface 命令创建和管理您的部署。

## 先决条件
<a name="deployment-guardrails-prereqs"></a>

在设置滚动部署之前，您必须创建 Amazon CloudWatch 警报以监控终端节点的指标。如果在烘焙期间触发了任何警报，则流量将开始回滚到您的旧实例集。要了解如何在端点上设置 CloudWatch 警报，请参阅必备条件页面 “[自动回滚配置和](https://docs.amazonaws.cn/sagemaker/latest/dg/deployment-guardrails-configuration.html)监控”。要了解有关 CloudWatch 警报的更多信息，请参阅[亚马逊* CloudWatch 用户指南中的使用亚马逊 CloudWatch*警报](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)。

此外，请查看[排除项](https://docs.amazonaws.cn/sagemaker/latest/dg/deployment-guardrails-exclusions.html)页面，确保您的端点满足滚动部署的要求。

## 确定滚动批次大小
<a name="deployment-guardrails-rolling-batch-size"></a>

在更新端点之前，请确定用于将流量逐步转移到新实例集的批次大小。

对于滚动部署，您可以将批次大小指定为实例集容量的 5-50% 之间。如果您选择大批次大小，则部署完成的速度会更快。但请记住，这种情况下端点在更新时需要更多容量，开销大致相当于批次的大小。如果您选择较小的批次大小，则部署所需的时间会更长，但在部署期间使用的容量会较少。

## 配置滚动部署
<a name="deployment-guardrails-rolling-configure"></a>

准备好部署并为终端节点设置 CloudWatch 警报后，即可使用 SageMaker A [UpdateEndpoint](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_UpdateEndpoint.html)I API 或 [update-endpoin](https://docs.amazonaws.cn/cli/latest/reference/sagemaker/update-endpoint.html) t 命令启动部 Amazon Command Line Interface 署。

**如何更新端点**

以下示例显示了如何使用 Boto3 AI 客户端的 [update\_endpo SageMaker int 方法通过滚动部署更新终端节点](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/update_endpoint.html)。

要配置滚动部署，请使用以下示例和字段：
+ 对于 `EndpointName`，请使用要更新的现有端点的名称。
+ 对于 `EndpointConfigName`，请使用要使用的端点配置的名称。
+ 在`AutoRollbackConfiguration`对象中，在`Alarms`字段中，您可以按名称添加 CloudWatch 警报。为要使用的每个警报创建一个 `AlarmName: <your-cw-alarm>` 条目。
+ 在 `DeploymentConfig` 下，对于 `RollingUpdatePolicy` 对象，请指定以下字段：
  + `MaximumExecutionTimeoutInSeconds` – 整体部署的时间限制。超过此限制会导致超时。您可以为此字段指定的最大值为 28800 秒，即 8 小时。
  + `WaitIntervalInSeconds`— 烘焙周期的长度，在此期间， SageMaker AI 会监控新车队中每批次的警报。
  + `MaximumBatchSize` – 指定要使用的批次 `Type`（实例数或实例集的总体百分比）以及 `Value`，也就是每个批次的大小。
  + `RollbackMaximumBatchSize` – 使用此对象指定触发警报时的回滚策略。指定要使用的批次 `Type`（实例数或实例集的总体百分比）以及 `Value`，也就是每个批次的大小。如果您未指定这些字段，或者将该值设置为终端节点的 100%，则 SageMaker AI 会使用 blue/green 回滚策略，并在警报触发时将所有流量回滚到旧队列。

```
import boto3
client = boto3.client("sagemaker")

response = client.update_endpoint(
    EndpointName="{{<your-endpoint-name>}}",
    EndpointConfigName="{{<your-config-name>}}",
    DeploymentConfig={
        "AutoRollbackConfiguration": {
            "Alarms": [
                {
                    "AlarmName": "{{<your-cw-alarm>}}"
                },
            ]
        },
        "RollingUpdatePolicy": { 
            "MaximumExecutionTimeoutInSeconds": number,
            "WaitIntervalInSeconds": number,
            "MaximumBatchSize": {
                "Type": "INSTANCE_COUNT" | "CAPACITY_PERCENTAGE" (default),
                "Value": number
            },
            "RollbackMaximumBatchSize": {
                "Type": "INSTANCE_COUNT" | "CAPACITY_PERCENTAGE" (default),
                "Value": number
            },
        }  
    }
)
```

更新端点后，您需要检查滚动部署的状态并检查端点的运行状况。您可以在 SageMaker AI 控制台中查看终端节点的状态，也可以使用 [DescribeEndpoint](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_DescribeEndpoint.html)API 查看终端节点的状态。

在 `DescribeEndpoint` API 返回的 `VariantStatus` 对象中，`Status` 字段告诉您端点的当前部署或运行状态。有关可能的状态及其含义的更多信息，请参阅[ProductionVariantStatus](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_ProductionVariantStatus.html)。

如果您尝试进行滚动部署，并且端点的状态为 `UpdateRollbackFailed`，请参阅以下部分以获取故障排除帮助。

## 故障处理
<a name="deployment-guardrails-rolling-failures"></a>

如果您的滚动部署失败并且自动回滚也失败，则端点的状态可能会保持为 `UpdateRollbackFailed`。此状态意味着不同的端点配置部署到了端点后的实例上，并且您的端点正在混合使用新旧端点配置来提供服务。

您可以再次调用 [UpdateEndpoint](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_UpdateEndpoint.html)API，将终端节点恢复到正常状态。指定所需的端点配置和部署配置（滚动部署、蓝绿部署或两者混用）以更新您的端点。

您可以调用 [DescribeEndpoint](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_DescribeEndpoint.html)API 再次检查终端节点的运行状况，该终端节点将作为`Status`字段返回到`VariantStatus`对象中。如果更新成功，您的端点的 `Status` 将返回到 `InService`。