步驟 2. 建立執行階段指令碼 - AWS 方案指引

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

步驟 2. 建立執行階段指令碼

建立執行階段指令碼。

在此步驟中,您將您在步驟 1 中開發的模型及其相關聯的協助程式程式碼整合到 ML 平台,以進行生產就緒訓練和推論。具體而言,這涉及開發執行階段指令碼,以便將模型納入 SageMaker AI。這些獨立的 Python 指令碼包括預先定義的 SageMaker AI 回呼函數和環境變數。它們會在託管在 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上的 SageMaker AI 容器內執行。Amazon SageMaker AI Python SDK 文件提供有關這些回呼和輔助設定如何一起運作以進行訓練和推論的詳細資訊。(例如,請參閱 SageMaker AI 文件中的準備 scikit-learn 訓練指令碼部署 scikit-learn 模型。) 以下各節根據我們 AWS 與客戶合作的經驗,提供開發 ML 執行階段指令碼的其他建議。

使用處理任務

SageMaker AI 提供兩種執行批次模式模型推論的選項。您可以使用 SageMaker AI 處理任務批次轉換任務。每個選項都有優點和缺點。

處理任務包含在 SageMaker AI 容器內執行的 Python 檔案。處理任務包含您在 Python 檔案中放置的任何邏輯。它具有以下優點:

  • 當您了解訓練任務的基本邏輯時,處理任務非常簡單,易於設定和理解。它們與訓練任務共用相同的摘要 (例如,調校執行個體計數和資料分佈)。

  • 資料科學家和 ML 工程師可以完全控制資料操作選項。

  • 除了熟悉的讀取/寫入功能之外,資料科學家不需要管理任何 I/O 元件邏輯。

  • 在非 SageMaker AI 環境中執行檔案稍微容易一點,這有助於快速開發和本機測試。

  • 如果發生錯誤,處理任務會在指令碼失敗時立即失敗,而且沒有非預期的等待重試。

另一方面,批次轉換任務是 SageMaker AI 端點概念的延伸。在執行時間,這些任務會匯入回呼函數,然後處理讀取資料、載入模型和進行預測的輸入/輸出。批次轉換任務具有下列優點:

  • 他們使用與訓練任務所使用的抽象不同的資料分佈抽象。

  • 它們使用相同的核心檔案和函數結構進行批次推論和即時推論,這很方便。

  • 它們具有內建的重試型容錯機制。例如,如果批次記錄發生錯誤,則會在任務因失敗而終止之前重試多次。

由於其透明度、在多個環境中的易用性,以及與訓練任務的共享抽象性,我們決定使用處理任務,而不是本指南中介紹的參考架構中的批次轉換任務。

您應該在本機執行 Python 執行階段指令碼,再部署到雲端。具體而言,我們建議您在建構 Python 指令碼和執行單位測試時,使用主要防護子句。

使用主要防護子句

使用主保護子句來支援模組匯入和執行 Python 指令碼。個別執行 Python 指令碼有助於偵錯和隔離 ML 管道中的問題。建議下列步驟:

  • 使用 Python 處理檔案中的引數剖析器來指定輸入/輸出檔案及其位置。

  • 為每個 Python 檔案提供主要指南和測試函數。

  • 測試 Python 檔案後,無論您使用的是 AWS Step Functions 模型或 SageMaker AI 處理任務,請將其納入 ML 管道的不同階段。

  • 在指令碼的關鍵區段中使用 Assert 陳述式,以協助測試和偵錯。例如,您可以使用 Assert 陳述式,以確保資料集功能的數量在載入後一致。

單元測試

為管道編寫的執行階段指令碼的單位測試是機器學習管道開發中經常忽略的重要任務。這是因為機器學習和資料科學是相對較新的欄位,並且採用成熟的軟體工程實務很緩慢,例如單元測試。由於 ML 管道將用於生產環境,因此在將 ML 模型套用至真實世界應用程式之前,測試管道程式碼至關重要。

測試執行階段指令碼的單元也為 ML 模型提供下列獨特優勢:

  • 它可防止意外的資料轉換。大多數 ML 管道涉及許多資料轉換,因此這些轉換如預期般執行至關重要。

  • 它會驗證程式碼的重現性。程式碼中的任何隨機性都可以透過使用案例不同的單位測試來偵測。

  • 它強制執行程式碼的模組化。單位測試通常與測試涵蓋範圍指標相關聯,這是特定測試套件 (一組測試案例) 執行程式原始碼的程度。為了達到高測試涵蓋範圍,開發人員會模組化程式碼,因為很難針對大量程式碼撰寫單位測試,而不需要將其分解為函數或類別。

  • 它可防止低品質程式碼或錯誤引入生產環境。

我們建議您使用成熟的單位測試架構,例如 pytest 來撰寫單位測試案例,因為在架構中管理廣泛的單位測試更容易。

重要

單元測試無法保證所有角落案例都經過測試,但它可協助您在部署模型之前主動避免錯誤。我們建議您在部署後監控模型,以確保卓越營運。