本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用滚动部署
您在更新端点时,可以指定滚动部署方式,从而逐步将流量从旧实例集转移到新实例集。您可以控制流量转移步骤的大小,还可以指定一个评估期,以便在终止旧实例集内的实例之前,监控新实例以确保没有问题。通过滚动部署,每次流量转移到新实例集后,都会清理旧实例集上的实例,从而减少更新端点所需的额外实例数量。这对于需要量大的加速实例尤其有用。
滚动部署按照可配置的批量大小来更新端点,从而逐步将之前部署的模型版本替换为新版本。滚动部署的流量转移行为类似于蓝绿部署中的线性流量转移模式,但是与蓝绿部署相比,滚动部署的好处是能够降低容量需求。通过滚动部署,您能够减少同时处于活动状态的实例数量,从而更精细地控制要在新实例集内更新的实例数量。如果您有大型模型或具有许多实例的大型端点,则应考虑使用滚动部署而不是蓝绿部署。
以下列表描述了在 Amazon 中滚动部署的主要功能 SageMaker:
-
烘焙期。烘焙期是设定用于监控新实例集的一段时间,在该期间完成后再进入下一个部署阶段。如果在任意烘焙期内触发了任何预先指定的警报,则所有端点流量都会回滚到旧实例集。烘焙期可以在最终完成流量的彻底转移之前,协助您确信更新没有问题。
-
滚动批次大小。您可以精细控制流量转移中的每个批次的大小,或每个批次中要更新的实例数量。这个数字的范围在您的实例集大小的 5-50% 之间。您可以将批次大小指定为实例数量或实例集的整体百分比。
-
自动回滚。您可以指定用于监控新队列的 SageMaker Amazon CloudWatch 警报。如果更新后的代码出现问题触发任何警报,则 SageMaker 启动自动回滚到旧队列以保持可用性,从而最大限度地降低风险。
注意
如果您的端点使用排除项页面中列出的任何功能,则您无法使用滚动部署。
工作方式
在滚动部署期间, SageMaker 提供基础架构,以便将流量从旧队列转移到新队列,而无需同时配置所有新实例。 SageMaker 使用以下步骤转移流量:
-
SageMaker 配置新队列中的第一批实例。
-
一部分流量从旧实例转移到第一批新实例。
-
烘焙期结束后,如果没有 CloudWatch 触发 Amazon 警报,则 SageMaker 会清理一批旧实例。
-
SageMaker 继续分批配置、转移和清理实例,直到部署完成。
如果在某个烘焙期内触发了警报,则流量将按您指定的大小分批回滚到旧实例集。或者,您可以指定在触发警报时,滚动部署将全部流量转移回旧实例集。
下图显示了成功滚动部署的进度,如前面的步骤所述。
要创建滚动部署,您只需指定所需的部署配置。然后为您 SageMaker 处理配置新实例、终止旧实例和转移流量。您可以通过现有的UpdateEndpoint和和 AWS Command Line Interface 命令创建和管理您的部署。CreateEndpoint SageMaker API
先决条件
在设置滚动部署之前,您必须创建 Amazon CloudWatch 警报以监控终端节点的指标。如果在烘焙期间触发了任何警报,则流量将开始回滚到您的旧实例集。要了解如何在端点上设置 CloudWatch 警报,请参阅必备条件页面 “自动回滚配置和监控”。要了解有关 CloudWatch 警报的更多信息,请参阅亚马逊 CloudWatch 用户指南中的使用亚马逊 CloudWatch警报。
此外,请查看排除项页面,确保您的端点满足滚动部署的要求。
确定滚动批次大小
在更新端点之前,请确定用于将流量逐步转移到新实例集的批次大小。
对于滚动部署,您可以将批次大小指定为实例集容量的 5-50% 之间。如果您选择大批次大小,则部署完成的速度会更快。但请记住,这种情况下端点在更新时需要更多容量,开销大致相当于批次的大小。如果您选择较小的批次大小,则部署所需的时间会更长,但在部署期间使用的容量会较少。
配置滚动部署
准备好部署并为终端节点设置 CloudWatch 警报后,您可以使用中的 SageMaker UpdateEndpointAPI或 update-endpoin t 命令 AWS Command Line Interface 来启动部署。
如何更新端点
以下示例显示了如何使用 Boto3 客户端的 update_endpoint 方法通过滚动部署更新终端节点
要配置滚动部署,请使用以下示例和字段:
-
对于
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。
在返回的VariantStatus
对象中 DescribeEndpoint
API,该Status
字段告诉您终端节点的当前部署或运行状态。有关可能的状态及其含义的更多信息,请参阅ProductionVariantStatus。
如果您尝试进行滚动部署,并且端点的状态为 UpdateRollbackFailed
,请参阅以下部分以获取故障排除帮助。
故障处理
如果您的滚动部署失败并且自动回滚也失败,则端点的状态可能会保持为 UpdateRollbackFailed
。此状态意味着不同的端点配置部署到了端点后的实例上,并且您的端点正在混合使用新旧端点配置来提供服务。
您可以再次调用,将您的终端节点恢复UpdateEndpointAPI到正常状态。指定所需的端点配置和部署配置(滚动部署、蓝绿部署或两者混用)以更新您的端点。
您可以调用再次检查终端节点的运行状况,该终端节点将作为Status
字段返回到VariantStatus
对象中。DescribeEndpointAPI如果更新成功,您的端点的 Status
将返回到 InService
。