滚动部署 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

滚动部署

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

滚动部署按照可配置的批量大小来更新端点,从而逐步将之前部署的模型版本替换为新版本。滚动部署的流量转移行为类似于蓝绿部署中的线性流量转移模式,但是与蓝绿部署相比,滚动部署的好处是能够降低容量需求。通过滚动部署,您能够减少同时处于活动状态的实例数量,从而更精细地控制要在新实例集内更新的实例数量。如果您有大型模型或具有许多实例的大型端点,则应考虑使用滚动部署而不是蓝绿部署。

以下列表描述了在 Amazon 中滚动部署的主要功能 SageMaker:

  • 烘焙期。烘焙期是设定用于监控新实例集的一段时间,在该期间完成后再进入下一个部署阶段。如果在任意烘焙期内触发了任何预先指定的警报,则所有端点流量都会回滚到旧实例集。烘焙期可以在最终完成流量的彻底转移之前,协助您确信更新没有问题。

  • 滚动批次大小。您可以精细控制流量转移中的每个批次的大小,或每个批次中要更新的实例数量。这个数字的范围在您的实例集大小的 5-50% 之间。您可以将批次大小指定为实例数量或实例集的整体百分比。

  • 自动回滚。您可以指定用于监控新队列的 SageMaker Amazon CloudWatch 警报。如果更新后的代码出现问题触发任何警报,则 SageMaker 启动自动回滚到旧队列以保持可用性,从而最大限度地降低风险。

注意

如果您的端点使用排除项页面中列出的任何功能,则您无法使用滚动部署。

工作方式

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

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

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

  3. 烘焙期结束后,如果没有 CloudWatch 触发 Amazon 警报,则 SageMaker 会清理一批旧实例。

  4. SageMaker 继续分批配置、转移和清理实例,直到部署完成。

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

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

图中显示滚动部署的流量成功从旧实例集转移到新实例集的步骤。

要创建滚动部署,您只需指定所需的部署配置。然后为您 SageMaker 处理配置新实例、终止旧实例和转移流量。您可以通过现有的、CreateEndpoint SageMaker API UpdateEndpoint和 Amazon Command Line Interface 命令创建和管理您的部署。

先决条件

在设置滚动部署之前,您必须创建 Amazon CloudWatch 警报以监控终端节点的指标。如果在烘焙期间触发了任何警报,则流量将开始回滚到您的旧实例集。要了解如何在端点上设置 CloudWatch 警报,请参阅必备条件页面 “自动回滚配置和监控”。要了解有关 CloudWatch 警报的更多信息,请参阅亚马逊 CloudWatch 用户指南中的使用亚马逊 CloudWatch警报

此外,请查看排除项页面,确保您的端点满足滚动部署的要求。

确定滚动批次大小

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

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

配置滚动部署

准备好部署并设置终端节点 CloudWatch 警报后,即可使用中的 SageMaker UpdateEndpointAPI 或 update-endpoin t 命令 Amazon Command Line Interface 来启动部署。

如何更新端点

以下示例显示了如何使用 Boto3 客户端的 update_endpoint 方法通过滚动部署更新终端节点。 SageMaker

要配置滚动部署,请使用以下示例和字段:

  • 对于 EndpointName,请使用要更新的现有端点的名称。

  • 对于 EndpointConfigName,请使用要使用的端点配置的名称。

  • AutoRollbackConfiguration对象中,在Alarms字段中,您可以按名称添加 CloudWatch 警报。为要使用的每个警报创建一个 AlarmName: <your-cw-alarm> 条目。

  • DeploymentConfig 下,对于 RollingUpdatePolicy 对象,请指定以下字段:

    • MaximumExecutionTimeoutInSeconds – 整体部署的时间限制。超过此限制会导致超时。您可以为此字段指定的最大值为 28800 秒,即 8 小时。

    • WaitIntervalInSeconds— 烘焙周期的长度,在此期间 SageMaker 监控新车队中每批次的警报。

    • MaximumBatchSize – 指定要使用的批次 Type(实例数或实例集的总体百分比)以及 Value,也就是每个批次的大小。

    • RollbackMaximumBatchSize – 使用此对象指定触发警报时的回滚策略。指定要使用的批次 Type(实例数或实例集的总体百分比)以及 Value,也就是每个批次的大小。如果您未指定这些字段,或者将值设置为终端节点的 100%,则 SageMaker 使用蓝/绿回滚策略,并在警报触发时将所有流量回滚到旧队列。

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 控制台中查看终端节点的状态,也可以使用 DescribeEndpointAPI 查看终端节点的状态。

DescribeEndpoint API 返回的 VariantStatus 对象中,Status 字段告诉您端点的当前部署或运行状态。有关可能的状态及其含义的更多信息,请参阅ProductionVariantStatus

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

故障处理

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

您可以再次调用 UpdateEndpointAPI,将终端节点恢复到正常状态。指定所需的端点配置和部署配置(滚动部署、蓝绿部署或两者混用)以更新您的端点。

您可以调用 DescribeEndpointAPI 再次检查终端节点的运行状况,该终端节点将作为Status字段返回到VariantStatus对象中。如果更新成功,您的端点的 Status 将返回到 InService