許多企業(yè)正逐漸意識(shí)到擁有機(jī)器學(xué)習(xí)模型只是將其 ML 驅(qū)動(dòng)的應(yīng)用程序朝著投入生產(chǎn)邁出的一小步,更為重要的是要構(gòu)建端到端流水線。
Google Cloud 提供一個(gè)大規(guī)模訓(xùn)練和部署模型的工具 —— Cloud AI Platform,這一平臺(tái)整合了多種編排工具 (orchestration tool),例如,TensorFlow Extended 和 KubeFlow Pipelines(KFP)。不過(guò),經(jīng)常會(huì)有這樣的情況:企業(yè)已經(jīng)在其自己的生態(tài)系統(tǒng)中使用 scikit-learn 和 xgboost 之類(lèi)的框架構(gòu)建了模型,將這些模型移植到云可能既復(fù)雜又耗時(shí)。
由于所涉及的所有樣板的量,即使對(duì)于有著豐富 Google Cloud Platform (GCP) 經(jīng)驗(yàn)的 ML 從業(yè)者,要將scikit-learn 模型(或者同等模型)遷移至 AI Platform 可能也要耗費(fèi)較長(zhǎng)時(shí)間。ML Pipeline Generator 是一個(gè)允許用戶在 GCP 中輕松部署現(xiàn)有 ML 模型的工具,無(wú)服務(wù)器模型訓(xùn)練和部署以及更快地將其解決方案推向市場(chǎng)能夠讓用戶受益匪淺。
本文概要介紹了這一解決方案的工作原理以及預(yù)期的用戶遷移之旅,同時(shí),提供了在 AI Platform 中編排TensorFlow 訓(xùn)練作業(yè)的相關(guān)指南。
概述
ML Pipeline Generator 允許擁有預(yù)構(gòu)建 scikit-learn、xgboost 和TensorFlow 模型的用戶在 GCP 中利用其自有代碼和數(shù)據(jù)快速生成并運(yùn)行端到端 ML 流水線。
要做到這一點(diǎn),用戶必須填寫(xiě)描述其代碼元數(shù)據(jù)的配置文件。庫(kù)會(huì)接受這個(gè)配置文件并生成所有必要的樣板,以供用戶使用模板引擎以協(xié)調(diào)的方式在云中訓(xùn)練和部署其模型。此外,訓(xùn)練TensorFlow 模型的用戶還可以使用Explainable AI 功能來(lái)更好地了解其模型。
在下圖中,我們將重點(diǎn)介紹生成的流水線的架構(gòu)。用戶將使用自己的數(shù)據(jù)、定義執(zhí)行數(shù)據(jù)預(yù)處理的方式,并且添加其 ML 模型文件。一旦用戶填寫(xiě)了配置文件,他們可以使用簡(jiǎn)單的python API 生成自包含樣板代碼,代碼負(fù)責(zé)執(zhí)行指定的任何預(yù)處理、將其數(shù)據(jù)上傳至 Google Cloud Storage (GCS) 以及利用超參數(shù)調(diào)試啟動(dòng)訓(xùn)練作業(yè)。一旦完成上述操作,模型即可被部署以供使用,并且根據(jù)模型類(lèi)型,執(zhí)行模型可解釋性分析。整個(gè)流程是通過(guò)KubeFlow Pipelines 進(jìn)行編排。
分步指南
我們將向您詳解如何利用給定的模型配置參數(shù)和模型代碼構(gòu)建端到端Kubeflow Pipeline 以訓(xùn)練和使用模型。我們將基于Census Income Data Set(人口調(diào)查收入數(shù)據(jù)集)構(gòu)建一個(gè)流水線來(lái)訓(xùn)練一個(gè)淺層的TensorFlow 模型。利用 Cloud AI Platform 訓(xùn)練該模型并可在 Kubeflow UI 中對(duì)其進(jìn)行監(jiān)控。
開(kāi)始之前
為了確保您能完全使用解決方案,需要對(duì) GCP 中的一些項(xiàng)進(jìn)行設(shè)置:
1. 您需要一個(gè) Google Cloud 項(xiàng)目以運(yùn)行此演示。我們建議創(chuàng)建一個(gè)新項(xiàng)目并確保為該項(xiàng)目啟用下列 API。
1. Compute Engine(計(jì)算引擎)
2. AI Platform Training and Prediction(AI 平臺(tái)訓(xùn)練與預(yù)測(cè))
3. Cloud Storage(云存儲(chǔ))
2. 安裝Google Cloud SDK,以便您可以通過(guò)命令行訪問(wèn)所需要的 GCP 服務(wù)。SDK安裝后,利用您以上所創(chuàng)建的項(xiàng)目的項(xiàng)目 ID 來(lái)設(shè)置應(yīng)用程序默認(rèn)憑據(jù)。
gcloud auth login
gcloud auth application-default login
gcloud config setproject [PROJECT_ID]
3. 如果您尋求使用此解決方案在KubeFlow Pipelines 部署 ML 模型,在您的項(xiàng)目中創(chuàng)建基于AI Platform Pipelines 的新的 KFP 實(shí)例。記下實(shí)例的主機(jī)名(表單中的 Dashboard URL: [vm-hash]-dot-[zone].Pipelines.googleusercontent.com)。
4. 最后,創(chuàng)建存儲(chǔ)桶,這樣,就能在 GCS 中存儲(chǔ)數(shù)據(jù)和模型。記下存儲(chǔ)桶 ID。
第一步:設(shè)置環(huán)境
從github repo克隆演示代碼 ,并創(chuàng)建一個(gè) Python 虛擬環(huán)境。
git clonehttps://github.com/GoogleCloudPlatform/ml-pipeline-generator-python.git
cd ml-pipeline-generator-python
python3 -m venv venv
source ./venv/bin/activate
安裝ml-pipeline-gen 包。
pip install ml-pipeline-gen
下列文件使我們能夠確保生成模型并正常運(yùn)行:
1. examples/ 目錄包含 sklearn、Tensorflow 和 XGBoost 模型的示例代碼。我們將使用examples/kfp/model/tf_model.py 在 KubeFlow Pipelines 中部署 TensorFlow 模型。不過(guò),如果您使用自己的模型,可利用您的模型代碼修改tf_model.py 文件。
2. examples/kfp/model/census_preprocess.py 會(huì)下載 Census Income 數(shù)據(jù)集并為模型預(yù)處理該數(shù)據(jù)集。對(duì)于您的自定義模型,可根據(jù)需要修改預(yù)處理腳本。
3. 工具從 config.yaml 文件讀取所需的元數(shù)據(jù)來(lái)為流水線構(gòu)建工件。打開(kāi) examples/kfp/config.yaml.example 模板文件查看示例元數(shù)據(jù)參數(shù),您可以在在此找到詳細(xì)的模式。
4. 如果您要使用 Cloud AI Platform 的超參數(shù)調(diào)試功能,可在hptune_config.yaml 文件中包含參數(shù),并將其路徑添加到 config.yaml。您可以在此處查看 hptune_config.yaml 的模式。
第二步:設(shè)置所需要的參數(shù)
1. 復(fù)制 kfp/ 示例目錄
cp -r examples/kfp kfp-demo
cd kfp-demo
2. 使用 config.yaml.example 模板創(chuàng)建 config.yaml 文件并使用項(xiàng)目 ID、存儲(chǔ)桶 ID、您之前記下的 KFP 主機(jī)名以及模型名更新下列參數(shù)。
project_id: PROJECT_ID
bucket_id: BUCKET_ID
data:
train: “gs://BUCKET_ID/MODEL_NAME/data/adult.data.csv”
evaluation:"gs://BUCKET_ID/MODEL_NAME/data/adult.test.csv"
prediction:
input_data_paths:
- "gs://BUCKET_ID/MODEL_NAME/inputs/*"
orchestration :
host: “KUBEFLOW_PIPELINE_HOST_URL”
第三步:構(gòu)建流水線并訓(xùn)練模型
有了配置參數(shù)后,我們就準(zhǔn)備好了生成所有模塊,它們將構(gòu)建流水線以訓(xùn)練TensorFlow 模型。運(yùn)行 demo.py 文件。
pythondemo.py
首次運(yùn)行 KubeFlow Pipelines 演示時(shí),工具會(huì)提供適用于GKE 集群的 Workload Identity,以修改 Dashboard URL。要部署您的模型,只需在 config.yaml 中更新 URL 并再次運(yùn)行演示。
demo.py 腳本從公共 Cloud Storage 存儲(chǔ)桶下載人口調(diào)查數(shù)據(jù)集、按照examples/kfp/model/census_preprocess.py 準(zhǔn)備數(shù)據(jù)集以進(jìn)行訓(xùn)練和評(píng)估、將數(shù)據(jù)集上傳到 config.yaml中指定的Cloud Storage URL、構(gòu)建訓(xùn)練的流水線圖并將該圖上傳到 KubeFlow Pipelines 應(yīng)用程序?qū)嵗鳛樵囼?yàn)。
一旦提交該圖以供運(yùn)行,可在 KubeFlowPipelines UI 中對(duì)運(yùn)行進(jìn)度進(jìn)行監(jiān)控。打開(kāi) Cloud AI Platform Pipelines 頁(yè)并且打開(kāi)您的 KubeFlow Pipelines 集群的 Dashboard。
注意:
如果您要使用 Scikit-learn 或者XGBoost 示例,可遵循如上所述的相同步驟,但要利用上述類(lèi)似的變更來(lái)修改 examples/sklearn/config.yaml,無(wú)需額外步驟來(lái)創(chuàng)建 KubeFlowPipelines 實(shí)例。要了解詳細(xì)信息,請(qǐng)參考 public repo 中的指南或者遵循我們使用 Jupyter notebook 撰寫(xiě)的詳盡教程。
結(jié)論
在本文中,我們?yōu)槟榻B了如何通過(guò)三個(gè)輕松步驟將您的自定義ML 模型遷移至 Google Cloud 以進(jìn)行訓(xùn)練和部署。大部分繁瑣工作都由解決方案完成,用戶只需提供自己的數(shù)據(jù)和模型定義,并且說(shuō)明希望如何處理訓(xùn)練和服務(wù)。
我們?cè)斀饬艘粋€(gè)示例,公共代碼庫(kù)包含針對(duì)其他支持框架的示例。我們邀請(qǐng)您使用該工具并且開(kāi)始能夠?yàn)槟臋C(jī)器學(xué)習(xí)工作負(fù)載帶來(lái)云的諸多優(yōu)勢(shì)之一。