本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
金丝雀流量转移
借助金丝雀流量转移,您可以在新实例集上测试部分端点流量,而旧实例集为其余流量提供服务。此测试步骤是一个安全防护机制,可在将所有流量转移到新实例集之前验证新实例集是否正常运转。您仍然可获得蓝绿部署的益处,而增加的金丝雀功能则在让新(绿色)实例集处理全部流量之前,确保该实例集可以处理推理请求。
在您的绿色实例集内,开启接收流量的部分称为金丝雀,您可以选择此金丝雀的大小。请注意,金丝雀的大小应小于或等于新实例集容量的 50%。烘焙期结束并且没有预先指定的Amazon CloudWatch 警报响起后,其余流量就会从旧(蓝色)车队转移到绿色车队。金丝雀流量转移可在部署期间提供更高的安全性,因为更新后模型的任何问题都只会影响金丝雀。
下图显示了金丝雀流量转移如何管理蓝色实例集和绿色实例集之间的流量分布。
一旦 SageMaker 配置了绿色车队,就会将部分入站流量(例如 25%) SageMaker 路由到金丝雀。然后开始烘焙期,在此期间,您的 CloudWatch 警报会监控绿色车队的性能。在此期间,蓝色实例集和绿色实例集均有一部分资源处于活动状态来接收流量。如果在烘焙期间有任何警报跳动,则 SageMaker 启动回滚并将所有流量返回到蓝色舰队。如果没有触发任何警报,那么所有的流量都会转移到绿色实例集,并且还有最后的烘焙期。如果最后的烘焙周期在没有触发任何警报的情况下结束,则绿色车队将为所有流量提供服务并 SageMaker 终止蓝色车队。
先决条件
在设置带有金丝雀流量转移的部署之前,您必须创建 Amazon CloudWatch 警报以监控来自终端节点的指标。警报在烘焙期间处于活动状态,如果触发了警报,则所有端点流量都会回滚到蓝色实例集。要了解如何在端点上设置 CloudWatch警报,请参阅先决条件页面自动回滚配置和监控。要了解有关 CloudWatch 警报的更多信息,请参阅亚马逊 CloudWatch 用户指南中的使用亚马逊 CloudWatch 警报。
配置金丝雀流量转移
准备好部署并已为终端节点设置亚马逊 CloudWatch 警报后,即可使用 Amazon SageMaker UpdateEndpointAPI 或 update-endpoin t 命令 AWS CLI 来启动部署。
如何更新端点 (API)
以下 UpdateEndpointAPI 示例显示了如何使用灰度流量转移来更新终端节点。
import boto3 client = boto3.client("sagemaker") response = client.update_endpoint( EndpointName="
<your-endpoint-name>
", EndpointConfigName="<your-config-name>
", DeploymentConfig={ "BlueGreenUpdatePolicy": { "TrafficRoutingConfiguration": { "Type": "CANARY", "CanarySize": { "Type": "CAPACITY_PERCENT", "Value": 30 }, "WaitIntervalInSeconds": 600 }, "TerminationWaitInSeconds": 600, "MaximumExecutionTimeoutInSeconds": 1800 }, "AutoRollbackConfiguration": { "Alarms": [ { "AlarmName": "<your-cw-alarm>
" } ] } } )
要配置金丝雀流量转移选项,请执行以下操作:
对于
EndpointName
,请使用要更新的现有端点的名称。对于
EndpointConfigName
,请使用要使用的端点配置的名称。在
DeploymentConfig
和BlueGreenUpdatePolicy
下的TrafficRoutingConfiguration
中,将Type
参数设置为CANARY
。这指定了部署使用金丝雀流量转移。在
CanarySize
字段中,您可以通过修改Type
和Value
参数来更改金丝雀的大小。对于Type
,请使用CAPACITY_PERCENT
,此值表示您要用作金丝雀的绿色实例集的百分比,然后将Value
设置为30
。在此示例中,您将绿色实例集的 30% 容量用作金丝雀。请注意,金丝雀规模应等于或小于绿色实例集容量的 50%。对于
WaitIntervalInSeconds
,请使用600
。该参数告诉 SageMaker 你在每次间隔偏移之间等待指定的时间(以秒为单位)。此间隔是金丝雀烘焙期的持续时间。在前面的示例中, SageMaker 在金丝雀移位后等待 10 分钟,然后完成第二次也是最后一次流量转移。对于
TerminationWaitInSeconds
,请使用600
。此参数告诉您在绿色队列完全处于活动状态后等待指定的时间( SageMaker 以秒为单位),然后再终止蓝色队列中的实例。在此示例中,在最后一个烘焙期结束后 SageMaker 等待 10 分钟,然后才终止蓝色舰队。对于
MaximumExecutionTimeoutInSeconds
,请使用1800
。此参数设置部署在超时之前可以运行的最长时间。在前面的示例中,您的部署的完成时间限制为 30 分钟。在该
Alarms
字段中,您可以按名称添加 CloudWatch 警报。AutoRollbackConfiguration
为要使用的每个警报创建一个AlarmName:
条目。<your-cw-alarm>
如何使用现有的蓝绿更新政策更新端点 (API)
使用 CreateEndpointAPI 创建终端节点时,您可以选择指定部署配置,以便在将来的终端节点更新中重复使用。您可以使用与前面的 UpdateEndpoint API 示例相同的DeploymentConfig
选项。 CreateEndpoint API 行为没有变化。指定部署配置不会自动在端点上执行蓝绿更新。
使用 UpdateEndpointAPI 更新您的终端节点时,可以选择使用先前的部署配置。更新端点时,您可以使用 RetainDeploymentConfig
选项,以保留创建端点时您指定的部署配置。
调用 UpdateEndpointAPI 时,请RetainDeploymentConfig
将设置True
为以保留原始端点配置中的DeploymentConfig
选项。
response = client.update_endpoint( EndpointName="
<your-endpoint-name>
", EndpointConfigName="<your-config-name>
", RetainDeploymentConfig=True )
如何更新端点 (CLI)
如果您使用的是 AWS CLI,则以下示例说明如何使用 update-end p oint 命令启动蓝/绿金丝雀部署。
update-endpoint --endpoint-name
<your-endpoint-name>
--endpoint-config-name<your-config-name>
--deployment-config '"BlueGreenUpdatePolicy": {"TrafficRoutingConfiguration": {"Type": "CANARY", "CanarySize": {"Type": "CAPACITY_PERCENT", "Value": 30}, "WaitIntervalInSeconds": 600}, "TerminationWaitInSeconds": 600, "MaximumExecutionTimeoutInSeconds": 1800}, "AutoRollbackConfiguration": {"Alarms": [{"AlarmName": "<your-alarm>
"}]}'
要配置金丝雀流量转移选项,请执行以下操作:
对于
endpoint-name
,请使用要更新的端点的名称。对于
endpoint-config-name
,请使用要使用的端点配置的名称。对于
deployment-config
,请使用 BlueGreenUpdatePolicyJSON 对象。
注意
如果您想将 JSON 对象保存在文件中,请参阅AWS CLI 用户指南中的生成 AWS CLI 框架和输入参数。