GCP的AI開發作業流程
Vertex AI 的 ML 工作流程分為三個主要階段。
- 資料準備,包括”資料上傳和特徵工程”兩個步驟。模型需要大量資料來學習。資料的品質和數量決定了ML的良率。ML中使用的資料可以是"串流或批次"資料。資料也可以是"結構化的或非結構化"的。
- 模型開發 — 模型需要大量的"迭代訓練"。這是"訓練和評估( training and evaluation)"形成一個循環,訓練模型,然後評估模型,然後再訓練模型。
- 最後一個階段是模型運作(model serving)。模型需要實際使用才能預測結果。這是"部署和監控"ML模型的時候。如果不將ML模型投入生產,它就沒有任何用處,只是一個理論模型。
現在,需要注意的是,ML作業流程是非線性的,而是迭代的。例如,在模型訓練期間,可能需要傳回raw data並產生更有用的特徵來為模型提供資料。在模型運作期間監控模型時,我們可能會發現資料漂移(data drifting),或者預測的準確性突然下降。我們可能需要檢查資料來源並調整模型參數。幸運的是,這些步驟可以透過 MLOps 實現自動化。
儘管主要階段是不變的,但我們有兩個選項來使用 Vertex AI 設定作業流程:
- AutoML,這是一種no-code解決方案,可透過 UI 建立 ML 模型。
- Vertex AI Workbench 或使用 Vertex AI Pipelines 的 Colab 對作業流程進行編碼。
Vertex AI Pipelines 本質上是一個工具包,其中包括預先建置的 SDK 和軟體開發套件,它們是流水線的建構區塊(building block)。 如果是經驗豐富的ML工程師或資料科學家,並且希望以程式設計方式自動化工作流程,那麼對流水線進行編碼是一個不錯的選擇。
資料準備
資料來源可以從GCP的storage service或是本機電腦。AutoML 支援四種資料類型: image, tabular, text, video。
- Image —
對於Image data,可以訓練模型將image分類為單一標籤或多標籤(也就是分類classification與物件偵測object detection)。單一標籤意味著只能為一個image分配一個標籤,例如狗或貓,而多標籤意味著可以為image給予多個標籤,例如狗、大小和顏色。還可以訓練模型來偵測物件並發現影像分割(image segmentation)。 - Tabular —
這一類資料可以訓練模型來解決迴歸(Regression)、分類(Classification)或預測(Forecasting)問題。預測對於零售等許多產業至關重要。 - Text —
訓練模型: 對文字進行分類。提取實體(entities)。並進行情緒分析。 - Video —
訓練模型來辨識影片動作。將影片分類。並追蹤物件。
資料準備階段中也需要進行特徵工程。特徵工程:
在模型開始訓練之前必須處理資料。特徵是指有助於預測的因素。它就像統計資料中的自變數或表格中的列(column)。特徵工程作業既具有挑戰性又乏味。
為了提供協助,Vertex AI 提供了一項名為 Vertex AI Feature Store 的服務,它是一個用於管理、服務和共享功能的集中式儲存庫。它聚合了 BigQuery 中不同來源的特徵,並使它們可用於即時(通常稱為線上)和批次(通常稱為離線)服務。它可以管理和服務嵌入,這是AI中的關鍵資料類型。它還支援即時檢索相似項目,確保低延遲。
Vertex AI Feature Store的效益:
- 可共享用於模型訓練與模型運作
- 可重覆使用
- 可擴展
自動擴展以提供低延遲服務,因此可以專注於開發建立它們的邏輯,而無需擔心部署
模型開發
這個階段涉及兩個步驟:
- 模型訓練,
- 模型評估
而這個過程可能是迭代的。
要設定 ML 模型,我們需要指定一些內容(如上圖一)。
- 是訓練方法(Training method),將準備階段中上傳的資料集告訴 Vertex AI。根據資料類型(無論是表格、圖像、文字或影片),我們可以指定訓練目標。這就是模型訓練的目標,也是要解決的任務。
- 選擇哪一種訓練方法:AutoML,no-code,或自訂訓練,使用代碼。
- 確定訓練細節(如下圖二)。 例如,如果正在訓練模型來解決迴歸和分類等監督學習問題,則必須從資料集中選擇目標列(target column)。
- 在訓練選項中(如下圖三),可以選擇某些特徵來參與訓練,並根據需要轉換資料類型
- 最後指定預算和定價(如下圖四),然後開始訓練。
AutoML 將為我們訓練模型,並從數千個其他模型中選擇最佳表現的模型。AutoML 背後的技術是神經架構搜尋和遷移學習(neural architecture search and transfer learning)。 Vertex AI 提供廣泛的評估指標來幫助確定模型的效能。
這是模型開發階段的評估部分。 Vertex AI 提供廣泛的評估指標來幫助確定模型的效能。 在評估分類模型的表現時,我們要看的指標是recall和precision標。 為此,需要使用混淆矩陣(confusion matrix)。混淆矩陣是機器學習分類問題的特定效能度量。關於更多的混淆矩陣(confusion matrix)與其Recall與Precision的計算,可參閱本部落格"AWS-ML認證筆記 — Domain 3 Part 1"文章介紹。
Vertex AI 可以將 precision-recall曲線視覺化,以便可以根據需要解決的問題進行調整。
您將有機會在 AutoML Lab中實踐調整precision and recall。除了混淆矩陣和為衡量precision and recall而產生的指標之外,另一個有用的衡量標準是特徵重要性(Feature importance)。在 Vertex AI 中,特徵重要性透過長條圖顯示,以說明每個特徵如何對預測做出貢獻。條形越長,或與某個特徵相關的數值越大,它就越重要。
特徵重要性只是 Vertex AI 稱為可解釋 AI(Explainable AI) 的ML功能的範例之一。可解釋AI是一組工具和框架,可幫助理解和解釋ML模型所做的預測。
服務運作(Model serving)
模型運作包括兩個步驟:
- 模型部署
- 模型監控
我們需要注意,模型管理存在於整個工作流程中,用於管理底層ML基礎架構。這讓數據科學家專注於做什麼,而不是如何做。
模型佈署
這是模型實現並準備好提供服務。這裡有兩個主要選項:
- 將模型部署到端點(Endpoint)以進行即時預測(或通常稱為線上預測)。當需要低延遲的即時結果時,此選項是最佳選擇,例如根據使用者在線上時的瀏覽習慣進行即時推薦。模型必須先部署到端點,然後才能用於提供即時預測
- 直接從模型資源請求預測作業以進行批次預測(Prediction)。當不需要立即回應時,此選項是最佳選擇。例如,根據客戶最近的購買行為以及當前市場上的流行商品,每隔一周發送一次行銷活動。而批次預測不需要將模型部署到端點。
模型監控
一旦模型部署並開始進行預測或產生內容,監控其效能就非常重要。 Vertex AI 上自動化 ML 工作流程的主要功能是一個名為 Vertex AI Pipelines 的工具包。它透過以no-code方式編排工作流程來自動化、監控和管理ML系統。
MLOps與工作流程自動化
上面我們介紹了透過三個主要階段建立 ML 模型:資料準備、模型開發和模型運作。我們可以使用兩種方法來建立端到端工作流程。
- 透過 Google Cloud 控制台實現no-code,例如 Vertex AI 上的 AutoML。但是,如果您想要自動化此工作流程以實現持續整合、持續訓練和持續交付,該怎麼做?
- 這裡還有另一個選項:編寫一個自動化 ML 作業流程的流水線。機MLOps就是拿來在這用的。
MLOps 將ML開發與維運結合,並將 DevOps中的類似原則應用於ML模型。 MLOps 旨在解決與ML相關的生產環境挑戰。這是指建立整合性的ML系統並在生產環境中運行它。 這些被ML從業者社群認為是最大的痛點,因為資料和代碼在ML中都在不斷變動。
實踐 MLOps 意味著自動化和監控 ML 系統建置的每個步驟,以實現持續整合(CI)、持續訓練(CT)和持續交付(CD)。 Vertex AI 上的 MLOps 的骨幹是一個名為 Vertex AI Pipelines 的工具包,它支援
- Kubeflow Pipelines(KFP)
- TensorFlow Extended(TFX)。
如果我們已經使用 TensorFlow 建立了處理 TB 級的結構化資料 ML 模型,那麼使用 TFX 並將該代碼轉換為 ML流水線是有意義的。否則,KFP 可能是個不錯的選擇。
ML 流水線包含一系列流程並在兩個不同的環境中運行。第一個是實驗(experimentation)、開發(Development)和測試(test)環境,第二個是staging、預生產(pre-production)和生產環境。 在開發環境中,從資料準備(包括資料提取、分析和準備)開始,到模型開發(如訓練、評估和驗證)。 成果是經過訓練的模型,可以輸入模型註冊表(model registry)中。
一旦模型經過訓練,流水線流程就會跑到暫存和生產環境,可以在其中提供模型運作,包括預測和監控。其中每個進程都可以是流水線組件,它是執行工作流程的一項任務的一組獨立的代碼。我們可以將組件視為一個函數,它是流水線的建構區塊(building block)。 我們可以自行建立自訂組件,也可以利用 Google 提供的預建置組件。
如果您想要完成特定任務來自訂 ML 工作流程,例如確定模型部署的特殊閾值,您可能需要編寫自訂元件。組織通常分三個階段實施ML自動化。
- 階段零是起點,尚未設定任何 MLOps。通常使用基於 GUI 的工作流程(例如 AutoML)進行訊連、部署和服務。階段零至關重要,因為它可以幫助我們在自動化之前手動建立端到端作業流程。
- 階段一是透過使用 Vertex AI Pipelines SDK 建置組件來開始自動化 ML 作業流程。組件的一個例子是訓練流水線。正是在這個階段,我們開發了供之後使用的建構區塊。
- 在第二階段,整合單獨的組件以形成整個工作流程並實現 CI、CT 和 CD。
案例: 使用AutoML來預測借款風險
在這個案例中,我們有2500個資料點,AutoML需要至少1000個資料點。目標是用ML作業流程的三個階段:資料準備(包含資料上傳)、模型開發和模型運作。在開始之前,我們要定義甚麼模型的效能(也就是訓練成果)是我們需要的。所以需要定義模型評估(model evaluation)。
功能表:Vertex AI →DATA →Datasets
上圖中,我們已經將資料建立在Vertex AI中。在選擇資料集時,除了給予名稱之外還需要指定資料型態與目標。在此例中我們選擇的是Tabular與Regression/classification(如下圖)。
功能表:Vertex AI →Model development → Training(如下圖)
我們需要訓練一個新的模型。除了選擇Datasets之外,也要指定其目標。這裡我們選擇的是分類問題。
接下來我們需要指定要經過ML流程之後要預測表格中的哪一個目標欄位。在這裡我們選擇default。
在進階選項中(如下圖),我們可以看到要將資料集進行"訓練、驗證與測試"的比例。可以看到有最佳實踐、手動或依時間序。
在訓練選項中(如下圖)。指定想要在訓練模型中包含的column。例如,ClientID 可能與預測貸款風險無關。針對AutoML對於表格優化的預測可參考ptimization objectives for tabular AutoML models guide。
我們也可以選擇要優化的指標是哪一種(如下圖)。
最後是指定預算。
模型評估(model evaluation)
我們進行訓練時取得混淆矩陣(confusion matrix)的資料如下:
上面這張圖告訴我們其結果的計算是用以下的公式計算出來的:
這張表格告訴我們100% 真陽性率(true positive):這意味著該模型可以完美識別每個將還錢的人。模型不會漏失掉任何一個好的借款人。另外有87% 的真實陰性(true negative)率:該模型還正確識別了 87% 的不還錢的人。
另外就是13% 的假陽性(false positive)率:這意味著模型錯誤地將 13% 的會還錢的人判定為不還錢的。這意味著根據模型,我們可能會少做到這13%的生意。最後,0%的假陰性(false negative)率:這意味著模型永遠不會錯誤地將會還錢識別為可能會不還錢的人。
所以我們可以在AutoML計算出precision-recall curve(如下圖)。
功能表: Vertex AI →Deploy and Use → Model Registry
其中置信度閾值(confidence threshold)決定了ML模型如何計算陽性(positive)案例。
- 閾值越高 — precision會增加,recall會減少
- 閾值越低 — precision會減少,recall會增加
我們在Vertex AI中可以任意調整這個置信度閾值。在上面的案例中,將置信度閾值移至零可產生最高的 100% 的recall和最低的 50% 的precision。該模型預測 100% 的街錢的人會還錢。但實際上只有50%的人能夠還還錢。用這個門檻來識別不還錢情況可能會有風險,因為這意味著有一半的人可能不會還錢。
哪如果我們把閥值調整成1呢?哪 precision就會是100%,而recall就只剩下1%。
這意味著,在所有預計將還錢的人之中,100%的人實際上都償還了貸款。但是,我們只會向 1% 的借錢提供貸款,從而拒絕了 99% 的借錢人。這生意其實不用做了。
所以如何在這中間取捨,靠的是人的智慧,而不是機器。
Feature importance
在 Vertex AI 中,特徵重要性透過長條圖顯示,以說明每個特徵如何有助於預測。條形越長或特徵相關的數值越大,其重要性就越大。
佈署模型
在Vertex AI中,
- Deploy & test
- Deploy to Endpoint
- 於Endpoint name, type LoanRisk