使用滾動部署 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用滾動部署

更新端點時,您可以指定滾動式部署,以逐步將流量從舊機群轉移到新機群。您可以控制流量轉移步驟的大小,並指定評估期間,以便在從舊機群終止執行個體之前,監控新執行個體是否存有問題。使用滾動式部署時,舊機群上的執行個體會在每次流量轉移到新機群之後清除,從而減少更新端點所需的額外執行個體數量。這對於需求量高的加速執行個體特別實用。

滾動式部署會以可設定的批次大小更新端點,逐漸將先前的模型版本部署取代為新版本。滾動式部署的流量轉移行為與藍/綠部署中的線性流量轉移模式類似,但是與藍/綠部署相比,滾動式部署可提供您降低容量需求的好處。使用滾動式部署時,一次可以減少作用中的執行個體,而且您可以更精細地控制要在新機群中更新的執行個體數量。如有大型模型或具有許多執行個體的大型端點,則應考慮使用滾動式部署而非藍/綠部署。

下列清單說明 Amazon 中滾動部署的主要功能 SageMaker:

  • 製作期。製作期是指在進入下一個部署階段之前監控新機群的設定時間。如果任何預先指定的警示在任何製作期間發生故障,則所有端點流量都會還原至舊的機群。製作期可以幫助您在永久轉移流量之前建立對更新的信心。

  • 滾動批次大小。您可以精細控制流量轉移的每個批次大小,或是每個批次中要更新的執行個體數目。這個數字的範圍可以是您機群規模的 5-50%。您可以將批次大小指定為執行個體數目或機群的整體百分比。

  • 自動還原。您可以指定 SageMaker 用於監控新機群的 Amazon CloudWatch 警示。如果更新程式碼的問題觸發任何警示, 會 SageMaker 啟動自動復原至舊機群,以維持可用性,進而將風險降至最低。

注意

如果您的端點使用 Exclusions (排除項目) 頁面中列出的任何功能,則無法使用滾動式部署。

運作方式

在滾動部署期間, SageMaker 提供基礎設施,將流量從舊機群轉移到新機群,而不必一次佈建所有新執行個體。 SageMaker 使用下列步驟轉移流量:

  1. SageMaker 會在新機群中佈建第一批執行個體。

  2. 部分流量會從舊執行個體轉移到第一批新執行個體。

  3. 在烘烤期間之後,如果沒有絆倒 Amazon CloudWatch 警示,則會 SageMaker 清除一批舊執行個體。

  4. SageMaker 會繼續分批佈建、轉移和清除執行個體,直到部署完成為止。

如果警示在其中一個製作期間觸發,則流量會以您指定的大小批次回復至舊機群。或者,您可以指定滾動部署,以便在警示中斷時將 100% 的流量轉移回舊機群。

下圖顯示成功的滾動式部署進展,如前面的步驟所述。

滾動部署的流量從舊 成功轉移到新機群的步驟。

若要建立滾動式部署,您只需要指定所需的部署組態。然後, SageMaker 會為您處理佈建新執行個體、終止舊執行個體和轉移流量。您可以透過現有的 UpdateEndpoint和 AWS Command Line Interface 命令來建立CreateEndpoint SageMaker API和管理部署。

必要條件

在設定滾動部署之前,您必須建立 Amazon CloudWatch 警示,以從端點監控指標。如有任何警示在製作期間觸發,那麼流量就會開始回復到您的舊機群。若要了解如何在端點上設定 CloudWatch 警示,請參閱先決條件頁面 Auto-Rollback Configuration and Monitoring 。若要進一步了解 CloudWatch 警示,請參閱 Amazon CloudWatch 使用者指南 中的使用 Amazon 警示 CloudWatch

此外,請檢閱 Exclusions (排除項目) 頁面,確定您的端點符合滾動式部署的需求。

確定滾動批次大小

在更新端點之前,請確定要用於將流量遞增轉移到新機群的批次大小。

對於滾動式部署,您可以指定機群容量的 5–50% 的批次大小。如果您選擇大型批次大小,部署會更快完成。不過請記住,端點在更新時需要更多容量,大致上是批次大小的額外負荷。如果您選擇較小的批次大小,部署會花費較長的時間,但在部署期間使用的容量較少。

設定滾動式部署

準備好部署並設定端點的 CloudWatch 警示後,您可以使用 SageMaker UpdateEndpoint中的 API或 update-endpoint 命令 AWS Command Line Interface 來啟動部署。

如何更新端點

下列範例示範如何使用 Boto3 SageMaker client 的 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 主控台中檢閱端點的狀態,或使用 DescribeEndpoint 檢閱端點的狀態API。

DescribeEndpoint 傳回的VariantStatus物件中API, Status 欄位會告訴您端點目前的部署或操作狀態。如需可能狀態及其意義的詳細資訊,請參閱 ProductionVariantStatus

如果您嘗試執行滾動式部署,且端點的狀態為 UpdateRollbackFailed,請參閱下一節以取得故障診斷說明。

失敗處理

如果您的滾動式部署失敗,並且自動回復也失敗,則您的端點可能會保留為 UpdateRollbackFailed 的狀態。此狀態表示不同的端點組態會部署到端點後面的執行個體,而您的端點會使用新舊端點組態的服務。

您可以對 再次呼叫 UpdateEndpoint API ,以將端點恢復為運作狀態。指定所需的端點組態和部署組態 (可以是滾動式部署、藍/綠部署,或兩者皆非) 以更新您的端點。

您可以呼叫 DescribeEndpoint API 再次檢查端點的運作狀態,該端點會在VariantStatus物件中傳回為 Status 欄位。如果更新成功,則您端點的 Status 會返回 InService