

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

# 使用滾動式部署
<a name="deployment-guardrails-rolling"></a>

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

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

下列清單說明 Amazon SageMaker AI 中滾動式部署的主要功能：
+ **製作期。**製作期是指在進入下一個部署階段之前監控新機群的設定時間。如果任何預先指定的警示在任何製作期間發生故障，則所有端點流量都會還原至舊的機群。製作期可以幫助您在永久轉移流量之前建立對更新的信心。
+ **滾動批次大小。**您可以精細控制流量轉移的每個批次大小，或是每個批次中要更新的執行個體數目。這個數字的範圍可以是您機群規模的 5-50%。您可以將批次大小指定為執行個體數目或機群的整體百分比。
+ **自動還原。**您可以指定 SageMaker AI 用來監控新機群的 Amazon CloudWatch 警示。如果更新的程式碼問題觸發任何警示，SageMaker AI 會啟動自動還原至舊機群，以維持可用性，進而將風險降至最低。

**注意**  
如果您的端點使用 [Exclusions](https://docs.aws.amazon.com/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. 製作期過後，如果沒有觸發任何 Amazon CloudWatch 警示，則 SageMaker AI 會清除一批舊執行個體。

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

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

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

![\[滾動部署的流量從舊機群成功轉移至新機群的步驟。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/deployment-guardrails-rolling-diagram.png)


若要建立滾動式部署，您只需要指定所需的部署組態。接著，SageMaker AI 會為您處理佈建新執行個體、終止舊執行個體並轉移流量。您可以透過現有的 [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) 和 [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) SageMaker API 和 AWS Command Line Interface 命令來建立和管理部署。

## 先決條件
<a name="deployment-guardrails-prereqs"></a>

在設定滾動式部署之前，您必須先建立 Amazon CloudWatch 警示以監看端點中的指標。如有任何警示在製作期間觸發，那麼流量就會開始回復到您的舊機群。如要了解如何在端點上設定 CloudWatch 警示，請參閱先決條件頁面的[自動回復組態和監控](https://docs.aws.amazon.com/sagemaker/latest/dg/deployment-guardrails-configuration.html)。如需有關 CloudWatch 警示的詳細資訊，請參閱 *Amazon CloudWatch 使用者指南*中的[使用 Amazon CloudWatch 警示](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)。

此外，請檢閱 [Exclusions](https://docs.aws.amazon.com/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 AI [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API 或 中的 [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html) 命令 AWS Command Line Interface 來啟動部署。

**如何更新端點**

下列範例顯示如何透過 Boto3 SageMaker AI 用戶端的 [update\$1endpoint](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 會使用藍/綠復原策略，並在警示出現時將所有流量復原至舊機群。

```
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.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html) API 檢閱端點的狀態。

在 `DescribeEndpoint` API 傳回的 `VariantStatus` 物件中，`Status` 欄位會告訴您端點目前的部署或操作狀態。如需有關可能狀態及其含義的詳細資訊，請參閱 [ProductionVariantStatus](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariantStatus.html)。

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

## 失敗處理
<a name="deployment-guardrails-rolling-failures"></a>

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

您可以再次呼叫 [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API，將您的端點回復為良好狀態。指定所需的端點組態和部署組態 (可以是滾動式部署、藍/綠部署，或兩者皆非) 以更新您的端點。

您可以呼叫 [DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html) API 來再次檢查端點的運作狀態，這會在 `VariantStatus` 物件中以 `Status` 欄位的形式傳回。如果更新成功，則您端點的 `Status` 會返回 `InService`。