本文說明使用 TensorFlow Extended (TFX) 程式庫的機器學習 (ML) 系統整體架構。此外,本文也會說明如何使用 Cloud Build 和 Vertex AI Pipelines,為機器學習系統設定持續整合 (CI)、持續推送軟體更新 (CD) 和持續訓練 (CT)。
本文中的「機器學習系統」和「機器學習管道」是指機器學習模型訓練管道,而非模型評分或預測管道。
本文適用於想調整 CI/CD 做法,將機器學習解決方案移至 Google Cloud的數據資料學家和機器學習工程師,以及想確保機器學習管道品質、可維護性和可調整性的使用者。
本文涵蓋下列主題:
- 瞭解機器學習中的 CI/CD 和自動化。
- 使用 TFX 設計整合式機器學習管線。
- 使用 Vertex AI Pipelines 自動化調度管理及執行機器學習管道。
- 使用 Cloud Build 為機器學習管道設定 CI/CD 系統。
MLOps
如要在正式版環境中整合機器學習系統,您必須自動化調度機器學習管道中的步驟。此外,您還需要自動執行管道,持續訓練模型。如要試用新構想和功能,您需要在管道的新實作項目中採用 CI/CD 做法。以下各節將概要介紹機器學習中的 CI/CD 和 CT。
機器學習管道自動化
在某些情況下,手動訓練、驗證及部署機器學習模型就已足夠。如果團隊只管理幾個不會重新訓練或經常變更的 ML 模型,這個手動方法就適用。然而,在實際應用中,模型往往會因為無法適應環境動態變化,或描述這類動態變化的資料,而無法正常運作。
如要讓 ML 系統適應這類變化,您需要套用下列 MLOps 技術:
- 自動執行機器學習管道,根據新資料重新訓練新模型,以掌握任何新興模式。本文稍後會在「使用 Vertex AI Pipelines 進行機器學習」一節中討論 CT。
- 設定持續推送軟體更新系統,以便頻繁部署整個機器學習管道的新實作項目。本文稍後的「在 Google Cloud上設定機器學習的 CI/CD」一節將說明 CI/CD。
您可以自動執行機器學習生產管道,使用新資料重新訓練模型。 您可以根據需求、排程、新資料的可用性、模型效能下降、資料統計屬性發生重大變化或其他條件,觸發管道。
CI/CD 管道與 CT 管道比較
有新資料時,系統會觸發重新訓練機器學習模型。如果機器學習管道有新的實作方式 (包括新的模型架構、特徵工程和超參數),也是重新執行機器學習管道的重要觸發條件。這個新的 ML 管道實作項目會做為模型預測服務的新版本,例如具有 REST API 的微服務,用於線上服務。這兩種情況的差異如下:
- 如要使用新資料訓練新的 ML 模型,系統會執行先前部署的 CT 管道。系統不會部署新的管道或元件,只會在管道結尾提供新的預測服務或新訓練的模型。
- 如要使用新的實作方式訓練新的機器學習模型,請透過 CI/CD 管道部署新的 pipeline。
如要快速部署新的機器學習管道,您需要設定 CI/CD 管道。這個管線負責在有新實作項目可用,且已核准用於各種環境 (例如開發、測試、試行、預先發布和正式發布) 時,自動部署新的機器學習管線和元件。
下圖顯示 CI/CD 管道與 ML CT 管道之間的關係。
圖 1. 持續整合/持續推送軟體更新和機器學習 CT 管道。
這些管道的輸出內容如下:
- 如果提供新的實作方式,成功的 CI/CD 管道會部署新的 ML CT 管道。
- 如果提供新資料,成功的 CT 管道會訓練新模型,並將其部署為預測服務。
設計以 TFX 為基礎的機器學習系統
以下各節將討論如何使用 TensorFlow Extended (TFX) 設計整合式機器學習系統,為機器學習系統設定 CI/CD 管道。雖然有許多架構可用於建構機器學習模型,但 TFX 是整合式機器學習平台,可開發及部署生產環境機器學習系統。TFX 管線是實作機器學習系統的一系列元件。這個 TFX 管線專為可擴充的高效能機器學習工作而設計。這些工作包括建立模型、訓練、驗證、提供推論,以及管理部署。TFX 的主要程式庫如下:
- TensorFlow Data Validation (TFDV): 用於偵測資料中的異常狀況。
- TensorFlow Transform (TFT):用於資料預先處理和特徵工程。
- TensorFlow Estimators 和 Keras:用於建構及訓練 ML 模型。
- TensorFlow Model Analysis (TFMA):用於評估及分析機器學習模型。
- TensorFlow Serving (TFServing):用於以 REST 和 gRPC API 形式提供 ML 模型。
TFX 機器學習系統總覽
下圖顯示如何整合各種 TFX 程式庫,組成 ML 系統。
圖 2. 典型的 TFX 機器學習系統。
圖 2 顯示以 TFX 為基礎的典型機器學習系統。您可以手動或透過自動化管道完成下列步驟:
- 資料擷取:第一步是從資料來源擷取新的訓練資料。這個步驟的輸出內容是資料檔案,用於訓練及評估模型。
- 資料驗證:TFDV 會根據預期的 (原始) 資料結構定義驗證資料。資料架構是在開發階段建立並修正,資料驗證步驟會偵測與資料分配和結構定義偏移相關的異常狀況。這個步驟的輸出內容是異常狀況 (如有) 和是否執行後續步驟的決策。
- 資料轉換:驗證資料後,系統會使用 TFT 執行資料轉換和特徵工程作業,分割並準備資料以供機器學習工作使用。這個步驟的輸出內容是訓練及評估模型的資料檔案,通常會轉換為
TFRecords
格式。此外,產生的轉換成果有助於建構模型輸入內容,並在訓練後將轉換程序嵌入匯出的已儲存模型。 - 模型訓練和調整:如要實作及訓練機器學習模型,請使用
tf.Keras
API,以及上一個步驟產生的轉換後資料。如要選取可產生最佳模型的參數設定,可以使用 Keras 的超參數調整程式庫 Keras Tuner。或者,您也可以使用其他服務,例如 Katib、Vertex AI Vizier 或 Vertex AI 的超參數調整工具。這個步驟會輸出用於評估的已儲存模型,以及用於線上提供模型預測服務的另一個已儲存模型。 - 模型評估和驗證:訓練步驟完成後匯出模型時,系統會使用測試資料集評估模型,並透過 TFMA 評估模型品質。TFMA 會評估整體模型品質,並找出資料模型中效能不佳的部分。這項評估可確保只有符合品質條件的模型,才會升級為放送模型。這些條件可能包括在各種資料子集 (例如人口統計資料和位置) 中表現良好,以及與先前的模型或基準模型相比,成效有所提升。這個步驟會輸出成效指標,並決定是否要將模型升級至正式環境。
- 模型預測服務:新訓練的模型經過驗證後,會部署為微服務,並使用 TensorFlow Serving 提供線上預測。這個步驟的輸出內容是已部署的訓練後機器學習模型預測服務。您可以將訓練好的模型儲存在模型登錄檔中,取代這個步驟。隨後會啟動獨立的模型服務 CI/CD 程序。
如需如何使用 TFX 程式庫的範例,請參閱官方 TFX Keras 元件教學課程。
Google Cloud上的 TFX 機器學習系統
在實際工作環境中,系統元件必須在可靠的平台上大規模執行。下圖顯示 TFX ML 管道的每個步驟如何使用 Google Cloud上的受管理服務執行,確保大規模的靈活度、可靠性和效能。
圖 3. 以 TFX 為基礎的機器學習系統。 Google Cloud
下表說明圖 3 所示的主要Google Cloud 服務:
步驟 | TFX 程式庫 | Google Cloud 服務 |
---|---|---|
資料擷取和驗證 | TensorFlow Data Validation | Dataflow |
資料轉換 | TensorFlow Transform | Dataflow |
模型訓練和調整 | TensorFlow | Vertex AI 訓練 |
模型評估與驗證 | TensorFlow Model Analysis | Dataflow |
提供模型以進行預測 | TensorFlow Serving | Vertex AI 推論 |
模型儲存空間 | 不適用 | Vertex AI Model Registry |
- Dataflow 是一項可靠的無伺服器全代管服務,用於在 Google Cloud上大規模執行 Apache Beam 管道。Dataflow 用於擴充下列程序:
- 計算統計資料,驗證傳入的資料。
- 執行資料準備和轉換作業。
- 評估模型在大型資料集中的表現。
- 計算評估資料集不同層面的指標。
- Cloud Storage 是具有高可用性和耐用性的儲存空間,適用於二進位大型物件。Cloud Storage 會代管 ML 管道執行期間產生的構件,包括:
- 資料異常 (如有)
- 轉換後的資料和構件
- 匯出 (訓練) 模型
- 模型評估指標
- Vertex AI Training 是一種代管服務,可大規模訓練機器學習模型。您可以透過 TensorFlow、Scikit learn、XGBoost 和 PyTorch 的預先建構容器,執行模型訓練作業。您也可以使用自己的自訂容器執行任何架構。您可以為訓練基礎架構使用加速器和多個節點,進行分散式訓練。此外,您也可以使用以貝氏最佳化方法為基礎的服務,進行可擴充的超參數調整
- Vertex AI Inference 是一項代管服務,可使用經過訓練的模型執行批次預測,並將模型部署為具有 REST API 的微服務,以進行線上預測。這項服務也整合了 Vertex Explainable AI 和 Vertex AI Model Monitoring,可協助您瞭解模型,並在特徵或特徵歸因出現偏差和偏移時收到快訊。
- Vertex AI Model Registry 可讓您管理機器學習模型的生命週期。您可以為匯入的模型建立版本,並查看成效指標。接著,模型可用於批次預測,或使用 Vertex AI 推論功能部署模型,以進行線上服務。
使用 Vertex AI Pipelines 自動化調度管理機器學習系統
本文已說明如何設計以 TFX 為基礎的 ML 系統,以及如何在 Google Cloud大規模執行系統的每個元件。不過,您需要協調器才能將系統的不同元件連結在一起。協調器會依序執行管道,並根據定義的條件自動從一個步驟移至下一個步驟。舉例來說,如果評估指標符合預先定義的門檻,定義的條件可能會在模型評估步驟後執行模型服務步驟。步驟也可以平行執行,以節省時間,例如驗證部署基礎架構和評估模型。在開發和生產階段,自動調度管理機器學習管線都很有用:
- 在開發階段,調度功能可協助資料科學家執行機器學習實驗,不必手動執行每個步驟。
- 在生產階段,自動化調度管理有助於根據排程或特定觸發條件,自動執行機器學習管道。
使用 Vertex AI Pipelines 進行機器學習
Vertex AI Pipelines 是一項 Google Cloud 代管服務,可讓您調度管理及自動執行機器學習管道,管道的每個元件都可以在Google Cloud 或其他雲端平台以容器化形式執行。系統會自動將產生的管道參數和構件儲存在 Vertex 機器學習中繼資料中,方便您追蹤歷程和執行情況。Vertex AI Pipelines 服務包含下列項目:
- 用於管理及追蹤實驗、工作和執行的使用者介面。
- 用於排定多步驟機器學習工作流程的引擎。
- 用於定義及操控管道和元件的 Python SDK。
- 與 Vertex ML Metadata 整合,可儲存執行作業、模型、資料集和其他構件的相關資訊。
以下是在 Vertex AI Pipelines 執行的管道:
- 一組容器化的機器學習工作,或稱「元件」。管道元件是封裝為 Docker 映像檔的獨立程式碼。元件會在管道中執行一個步驟。這個函式會接收輸入引數並產生構件。
- 機器學習工作序列的規格,透過 Python 特定領域語言 (DSL) 定義。工作流程的拓撲會透過將上游步驟的輸出內容連線至下游步驟的輸入內容,以隱含方式定義。管道定義中的步驟會叫用管道中的元件。在複雜的管道中,元件可能會在迴圈中執行多次,也可能是有條件地執行。
- 一組管道輸入參數,其值會傳遞至管道的元件,包括篩選資料的條件,以及管道產生的構件儲存位置。
下圖顯示 Vertex AI Pipelines 的範例圖表。
圖 4. Vertex AI Pipelines 的範例圖表。
Kubeflow Pipelines SDK
Kubeflow Pipelines SDK 可讓您建立元件、定義元件的協調流程,並以管道形式執行元件。如要進一步瞭解 Kubeflow Pipelines 元件,請參閱 Kubeflow 說明文件中的「建立元件」。
您也可以使用 TFX Pipeline DSL,並使用 TFX 元件。TFX 元件會封裝中繼資料功能。驅動程式會透過查詢中繼資料儲存庫,將中繼資料提供給執行程式。發布程式會接收執行程式的結果,並將結果儲存至中繼資料。您也可以導入自訂元件,與中繼資料進行相同的整合。您可以使用 tfx.orchestration.experimental.KubeflowV2DagRunner,將 TFX 管道編譯為與 Vertex AI Pipelines 相容的 YAML。然後將檔案提交至 Vertex AI Pipelines 執行。
下圖顯示在 Vertex AI Pipelines 中,容器化工作如何叫用其他服務,例如 BigQuery 工作、Vertex AI (分散式) 訓練工作和 Dataflow 工作。
圖 5:Vertex AI Pipelines 會叫用Google Cloud 代管服務。
Vertex AI Pipelines 可執行必要 Google Cloud 服務,自動調度管理及自動執行正式環境機器學習管道。如圖 5 所示,Vertex 機器學習中繼資料是 Vertex AI Pipelines 的機器學習中繼資料儲存庫。
管線元件不限於在Google Cloud上執行 TFX 相關服務,這些元件可以執行任何資料和運算相關服務,包括用於 SparkML 工作的 Dataproc、AutoML 和其他運算工作負載。
在 Vertex AI Pipelines 中將工作容器化,具有下列優點:
- 將執行環境與程式碼執行階段分離。
- 在開發和實際工作環境之間提供程式碼的可重現性,因為您測試的項目在實際工作環境中相同。
- 隔離管道中的每個元件;每個元件都可以有自己的執行階段版本、不同語言和不同程式庫。
- 有助於組合複雜的管道。
- 與 Vertex 機器學習中繼資料整合,可追蹤及重現 pipeline 執行作業和構件。
如要全面瞭解 Vertex AI Pipelines,請參閱筆記本範例清單。
觸發及排定 Vertex AI Pipelines 的執行時間
將管道部署至正式版環境時,您需要根據「機器學習管道自動化」一節討論的情境,自動執行管道。
您可以使用 Vertex AI SDK,以程式輔助方式操作管道。google.cloud.aiplatform.PipelineJob 類別包含用於建立實驗,以及部署及執行管道的 API。因此,您可以使用 SDK 從其他服務叫用 Vertex AI Pipelines,以達成排程器或事件觸發條件。
圖 6. 流程圖:使用 Pub/Sub 和 Cloud Run 函式,為 Vertex AI Pipelines 示範多個觸發程序。
圖 6 顯示如何觸發 Vertex AI Pipelines 服務來執行 pipeline。系統會使用 Cloud Run 函式的 Vertex AI SDK 觸發 pipeline。Cloud Run 函式本身是 Pub/Sub 的訂閱者,會根據新訊息觸發。任何想觸發管道執行的服務,都可以發布至對應的 Pub/Sub 主題。上述範例有三項發布服務:
- Cloud Scheduler 會依排程發布訊息,因此會觸發管道。
- Cloud Composer 會發布訊息,做為較大型工作流程的一部分,例如資料擷取工作流程會在 BigQuery 擷取新資料後,觸發訓練管道。
- Cloud Logging 會根據符合特定篩選條件的記錄檔發布訊息。您可以設定篩選器,偵測新資料的抵達時間,甚至是 Vertex AI Model Monitoring 服務產生的偏差和偏移警報。
在 Google Cloud上為機器學習設定 CI/CD
Vertex AI Pipelines 可協助您調度管理涉及多個步驟的機器學習系統,包括資料預先處理、模型訓練和評估,以及模型部署。在資料科學探索階段,Vertex AI Pipelines 有助於快速實驗整個系統。在正式環境階段,Vertex AI Pipelines 可根據新資料自動執行管道,訓練或重新訓練機器學習模型。
CI/CD 架構
下圖顯示使用 Vertex AI Pipelines 進行機器學習 CI/CD 的概要總覽。
圖 7:使用 Vertex AI Pipelines 進行 CI/CD 的高階總覽。
這項架構的核心是 Cloud Build。Cloud Build 可從Artifact Registry、GitHub 或 Bitbucket 匯入來源,然後依據您的規格執行建構,並產生 Docker 容器或 Python tar 檔案等構件。
Cloud Build 會以一系列建構步驟執行建構,這些步驟定義在建構設定檔 (cloudbuild.yaml
) 中。每個建構步驟都會在 Docker 容器中執行。您可以使用 Cloud Build 提供的支援建構步驟,也可以撰寫自己的建構步驟。
您可以手動或透過自動建構觸發條件,執行 Cloud Build 程序,為 ML 系統執行必要的 CI/CD。每當變更推送至建構來源時,觸發條件就會執行您設定的建構步驟。您可以設定建構觸發條件,在原始碼存放區發生變更時執行建構常式,或只在變更符合特定條件時執行建構常式。
此外,您也可以設定建構常式 (Cloud Build 設定檔),根據不同觸發條件執行。舉例來說,您可以設定在將提交內容推送至開發或主要分支時,觸發建構常式。
您可以使用設定變數替代字元,在建構時間定義環境變數。這些替代變數是從觸發的建構作業擷取而來。這些變數包括 $COMMIT_SHA
、$REPO_NAME
、$BRANCH_NAME
、$TAG_NAME
和 $REVISION_ID
。其他非觸發條件變數為 $PROJECT_ID
和 $BUILD_ID
。對於值在建構之前仍未知的變數,或者以不同變數值重複使用現有建構要求而言,替代變數很實用。
CI/CD 工作流程用途
原始碼存放區通常包含下列項目:
- 定義 pipeline 工作流程的 Python pipeline 工作流程原始碼
- Python 管道元件的原始碼,以及不同管道元件 (例如資料驗證、資料轉換、模型訓練、模型評估和模型服務) 的對應元件規格檔案。
- 建立 Docker 容器映像檔所需的 Dockerfile,每個管道元件各有一個。
- Python 單元和整合測試,用於測試元件和整體管道中實作的方法。
- 其他指令碼,包括
cloudbuild.yaml
檔案、測試觸發程序和管道部署作業。 - 設定檔 (例如
settings.yaml
檔案),包括管道輸入參數的設定。 - 筆記本可用於探索性資料分析、模型分析,以及對模型進行互動式實驗。
在下列範例中,開發人員從資料科學環境將原始碼推送至開發分支時,系統會觸發建構常式。
圖 8:Cloud Build 執行的建構步驟範例。
Cloud Build 通常會執行下列建構步驟,如圖 7 所示:
- 原始碼存放區會複製到 Cloud Build 執行階段環境的
/workspace
目錄下。 - 執行單元測試和整合測試。
- 選用:使用 Pylint 等分析工具執行靜態程式碼分析。
- 如果測試通過,系統會為每個管道元件建構一個 Docker 容器映像檔。圖片會標記
$COMMIT_SHA
參數。 - Docker 容器映像檔會上傳至 Artifact Registry (如圖 7 所示)。
- 每個
component.yaml
檔案中的圖片網址都會更新為已建立並加上標記的 Docker 容器映像檔。 - 系統會編譯管道工作流程,產生
pipeline.json
檔案。 pipeline.json
檔案會上傳至 Artifact Registry。- 選用:在整合測試或正式執行作業中,使用參數值執行管道。執行的管道會產生新模型,並將模型部署為 Vertex AI Inference 上的 API。
如需包含使用 Cloud Build 進行 CI/CD 的端對端 MLOps 範例,請參閱 GitHub 上的 Vertex Pipelines 端對端範例。
其他事項
在 Google Cloud上設定 ML CI/CD 架構時,請考量下列事項:
- 資料科學環境可以使用本機,或 Vertex AI Workbench。
- 您可以將自動化 Cloud Build 管道設為略過觸發條件,例如只編輯說明文件檔案,或是修改實驗筆記本時。
- 您可以執行管道,以進行整合和迴歸測試,做為建構測試。將管道部署至目標環境前,您可以使用
wait()
方法,等待提交的管道執行作業完成。 - 除了使用 Cloud Build 之外,您也可以使用其他建構系統,例如 Jenkins。您可以在 Google Cloud Marketplace 找到 Jenkins 的部署作業。
- 您可以設定管道,根據不同的觸發條件自動部署至不同環境,包括開發、測試和預備環境。此外,您也可以手動部署至特定環境,例如預先製作或製作環境,通常是在取得版本核准後進行。您可以為不同觸發條件或目標環境設定多個建構常式。
- 您可以使用熱門的自動化調度管理和排程架構 Apache Airflow,執行一般用途的工作流程,並透過全代管的 Cloud Composer 服務執行這些工作流程。
- 將新版模型部署至實際工作環境時,請以「初期測試」版本部署,瞭解模型效能 (CPU、記憶體和磁碟用量)。您也可以先執行 A/B 測試,再設定新模型來處理所有即時流量。將新模型設定為處理 10% 至 20% 的即時流量。如果新模型的成效優於目前模型,您可以將新模型設為處理所有流量。否則,服務系統會回溯至目前模型。
後續步驟
- 進一步瞭解如何使用 Cloud Build 以 Git 運作方式持續推送軟體更新。
- 如要瞭解適用於 Google CloudAI 和機器學習工作負載的架構原則和建議,請參閱 Well-Architected Framework 中的AI 和機器學習觀點。
- 如需更多參考架構、圖表和最佳做法,請瀏覽 Cloud 架構中心。
貢獻者
作者:
- Ross Thomson | 雲端解決方案架構師
- Khalid Salama | 機器學習軟體工程師
其他貢獻者:Wyatt Gorman | HPC 對外產品經理