

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

# 部署
<a name="deployment"></a>

在軟體工程中，將程式碼放入生產環境需要盡職調查，因為程式碼可能會意外發生，未預期的使用者行為可能會中斷軟體，並可能發現未預期的邊緣案例。軟體工程師和 DevOps 工程師通常會採用單元測試和復原策略來降低這些風險。使用 ML，將模型放入生產環境需要更多規劃，因為實際環境預期會偏離，而且在許多情況下，模型會根據他們嘗試改善的實際業務指標代理的指標進行驗證。

請遵循本節中的最佳實務，以協助解決這些挑戰。

**Topics**
+ [自動化部署週期](#automation)
+ [選擇部署策略](#deployment-strategy)
+ [考慮您的推論需求](#inference)

## 自動化部署週期
<a name="automation"></a>

訓練和部署程序應完全自動化，以防止人為錯誤，並確保建置檢查持續執行。使用者不應擁有生產環境的寫入存取許可。

[Amazon SageMaker AI Pipelines](https://aws.amazon.com/sagemaker/pipelines/) 並[AWS CodePipeline](https://aws.amazon.com/codepipeline/)協助為 ML 專案建立 CI/CD 管道。使用 CI/CD 管道的優點之一是，所有用來擷取資料、訓練模型和執行監控的程式碼都可以使用 [Git](https://git-scm.com/) 等工具控制版本。有時候，您必須使用相同的演算法和超參數來重新訓練模型，但資料不同。驗證您使用的演算法版本是否正確的唯一方法是使用來源控制和標籤。您可以使用 SageMaker AI 提供[的預設專案範本](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-projects-templates-sm.html)作為 MLOps 實務的起點。

當您建立 CI/CD 管道來部署模型時，請務必使用組建識別符、程式碼版本或遞交和資料版本來標記組建成品。此實務可協助您疑難排解任何部署問題。對於在高度管制欄位中進行預測的模型，有時還需要標記。回溯工作並識別與 ML 模型相關聯的確切資料、程式碼、建置、檢查和核准的能力，有助於大幅改善控管。

CI/CD 管道任務的一部分是對正在建置的項目進行測試。雖然資料單位測試預期會在特徵存放區擷取資料之前進行，但管道仍需負責對指定模型的輸入和輸出執行測試，以及檢查關鍵指標。這類檢查的範例之一是驗證固定驗證集上的新模型，並使用已建立的閾值來確認其效能與先前模型相似。如果效能明顯低於預期，則建置應該會失敗，且模型不應進入生產環境。

CI/CD 管道的廣泛使用也支援提取請求，這有助於防止人為錯誤。當您使用提取請求時，每個程式碼變更都必須至少由其他一位團隊成員審查和核准，才能進入生產環境。提取請求也有助於識別不遵守業務規則的程式碼，以及在團隊中傳播知識。

## 選擇部署策略
<a name="deployment-strategy"></a>

MLOps 部署策略包括藍/綠、金絲雀、陰影和 A/B 測試。

### 藍/綠
<a name="blue-green"></a>

藍/綠部署在軟體開發中非常常見。在此模式下，兩個系統在開發期間會保持執行：藍色是舊環境 （在此案例中，是要取代的模型），而綠色是即將生產的新發行模型。因為舊系統保持運作狀態，所以可以輕鬆地復原變更，並縮短停機時間。如需 SageMaker 內容中藍/綠部署的更深入資訊，請參閱 部落格文章中的[使用 和 安全地部署 AWS CodePipeline 和監控 Amazon SageMaker AI 端點 AWS CodeDeploy](https://aws.amazon.com/blogs/machine-learning/safely-deploying-and-monitoring-amazon-sagemaker-endpoints-with-aws-codepipeline-and-aws-codedeploy/)，網址為 AWS Machine Learning部落格。

### Canary
<a name="canary"></a>

Canary 部署與 中的藍/綠部署類似，這兩者會保持兩個模型一起執行。不過，在 Canary 部署中，新模型會逐步推出給使用者，直到所有流量最終轉移到新模型為止。與藍/綠部署一樣，由於新的 （和潛在的故障） 模型在初始推出期間受到密切監控，並且可以在發生問題時復原，因此降低風險。在 SageMaker AI 中，您可以使用 [InitialVariantWeight](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-productionvariant.html) API 指定初始流量分佈。

### 影子
<a name="shadow"></a>

您可以使用陰影部署來安全地將模型帶入生產環境。在此模式中，新模型可與較舊的模型或業務流程搭配使用，並在不影響任何決策的情況下執行推論。在您將模型提升至生產環境之前，此模式可以做為最終檢查或更高保真度實驗。

當您不需要任何使用者推論意見回饋時，陰影模式非常有用。您可以執行錯誤分析，並將新模型與舊模型進行比較，藉此評估預測品質，並且可以監控輸出分佈，確認其是否如預期。若要了解如何使用 SageMaker AI 進行陰影部署，請參閱 AWS Machine Learning 部落格》中的部落格文章在 [Amazon SageMaker AI 中部署陰影 ML 模型](https://aws.amazon.com/blogs/machine-learning/deploy-shadow-ml-models-in-amazon-sagemaker/)。

### A/B 測試
<a name="ab"></a>

當 ML 從業人員在其環境中開發模型時，他們最佳化的指標通常是真正重要的業務指標代理。這使得難以確定新模型是否實際改善業務成果，例如營收和點擊率，並減少使用者投訴的數量。

考慮電子商務網站的情況，其中的業務目標是盡可能銷售更多產品。審核團隊知道銷售和客戶滿意度與資訊豐富且準確的審核直接相關。團隊成員可能會提出新的審核排名演算法，以改善銷售額。透過使用 A/B 測試，他們可以將新舊演算法轉出至不同但類似的使用者群組，並監控結果，以查看從較新模型收到預測的使用者是否更有可能進行購買。

A/B 測試也有助於衡量模型過時和偏離對業務的影響。團隊可以在一些循環的情況下將新模型放入生產環境，對每個模型執行 A/B 測試，並建立年齡與效能圖表。這有助於團隊了解其生產資料中的資料偏離波動。

如需如何使用 SageMaker AI 執行 A/B 測試的詳細資訊，請參閱機器學習部落格上的部落格文章 [A/B 測試生產環境中使用 Amazon SageMaker AI 的 ML 模型](https://aws.amazon.com/blogs/machine-learning/a-b-testing-ml-models-in-production-using-amazon-sagemaker/) AWS Machine Learning 。

## 考慮您的推論需求
<a name="inference"></a>

使用 SageMaker AI，您可以選擇基礎基礎設施以不同方式部署模型。這些推論調用功能支援不同的使用案例和成本描述檔。您的選項包括即時推論、非同步推論和批次轉換，如下列各節所述。

### 即時推論
<a name="realtime"></a>

[即時推論](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html)非常適合具有即時、互動式、低延遲需求的推論工作負載。您可以將模型部署到 SageMaker AI 託管服務，並取得可用於推論的端點。這些端點受到完整管理，支援自動擴展 （請參閱[自動擴展 Amazon SageMaker AI 模型](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling.html))，並且可以部署在多個[可用區域中](https://docs.aws.amazon.com/sagemaker/latest/dg/instance-types-az.html)。

如果您有使用 Apache MXNet、PyTorch 或 TensorFlow 建置的深度學習模型，您也可以使用 [Amazon SageMaker AI Elastic Inference (EI)](https://docs.aws.amazon.com/sagemaker/latest/dg/ei.html)。使用 EI，您可以將分數 GPUs 連接到任何 SageMaker AI 執行個體，以加速推論。您可以選擇用戶端執行個體來執行應用程式，並連接 EI 加速器，以針對推論需求使用正確數量的 GPU 加速。

另一個選項是使用[多模型端點](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoints.html)，提供可擴展且符合成本效益的解決方案來部署大量模型。這些端點使用共用服務容器，該容器已啟用來託管多個模型。與使用單一模型端點相比，多模型端點透過改善端點使用率來降低託管成本。它們也會降低部署開銷，因為 SageMaker AI 會管理記憶體中的載入模型，並根據流量模式進行擴展。

如需在 SageMaker AI 中部署 ML 模型的其他最佳實務，請參閱 SageMaker AI 文件中的[部署最佳實務](https://docs.aws.amazon.com/sagemaker/latest/dg/best-practices.html)。

### 非同步推論
<a name="async"></a>

[Amazon SageMaker AI 非同步推論](https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference.html)是 SageMaker AI 中的功能，可將傳入的請求排入佇列並以非同步方式處理。此選項適用於承載大小高達 1 GB、處理時間長和近乎即時延遲需求的請求。非同步推論可讓您在無處理請求時，自動將執行個體計數擴展到零，以節省成本，因此只有在端點正在處理請求時，才需要付費。

### 批次轉換
<a name="batch-transform"></a>

當您想要執行下列動作時，請使用[批次轉換](https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html)：
+ 預先處理資料集，以移除干擾資料集訓練或推論的雜訊或偏差。
+ 從大型資料集取得推論。
+ 當您不需要持久性端點時，執行推論。
+ 將輸入記錄與推論建立關聯，以協助解讀結果。