機器學習工作流可能涉及相互依賴的許多步驟 —— 從數(shù)據(jù)準備和分析、訓練、評估到部署等。很難以一種特別的方式對這些流程進行組合和跟蹤—— 例如,以一套 notebook 或者腳本 —— 而審核和可重復性之類的問題會變得越來越嚴重。
今年早些時候推出的Cloud AI Platform Pipelines 有助于解決這些問題:AI Platform Pipelines 提供了一種部署健壯、可重復機器學習流水線以及監(jiān)控、審核、版本跟蹤和可重復性的方法,并且為您的ML 工作流提供了一個企業(yè)就緒、易安裝的安全執(zhí)行環(huán)境.
盡管通過 Pipelines DashboardUI 可以簡便地上傳、運行和監(jiān)控流水線,但有時您可能要以編程方式訪問 Pipelines 框架。這樣可以讓您從 notebook 構建和運行流水線,并以編程方式管理您的流水線、試驗和運行。首先,您需要對您的Pipelines 安裝端點進行身份驗證。如何做到這一點取決于您的代碼運行所基于的環(huán)境。所以,這是我們現(xiàn)在要關注的焦點。
事件驅動的Pipeline 調用
我們將要介紹的一類有趣的用例是通過 Cloud Functions 之類的服務使用SDK 來設置事件驅動的 Pipeline 調用。這些用例允許您基于添加到GCS 存儲桶的新數(shù)據(jù)、添加到 PubSub 主題的新信息或者其他事件來開始部署。
通過Pipelines Dashboard UI 可以簡便地上傳和運行流水線,但您也經(jīng)常需要進行遠程訪問。
通過 AI Platform Pipelines,您可以使用Kubeflow Pipelines (KFP) SDK 或者通過采用TFX SDK 自定義TensorFlow Extended(TFX)Pipeline 模板,來指定流水線。要使用 SDK 從 Pipelines 集群外部進行連接,必須在遠程環(huán)境中設置您的憑據(jù),使您有權訪問AI Platform Pipelines 安裝端點。多數(shù)情況下,為您的賬戶安裝和初始化 gcloud 很簡單(或者就像AI Platform Notebooks 一樣,已經(jīng)為您設置好了),連接是透明的。
而如果您是運行在 Google Cloud 之上,在一種不能簡單地進行 gcloud 初始化的場景下,您可以通過底層 VM 的元數(shù)據(jù)獲得并使用訪問令牌來進行身份驗證。如果運行時環(huán)境正在使用與 Pipelines 安裝所使用的不同的服務賬戶,您還需要為該服務賬戶提供訪問 Pipelines 端點的權限。例如,這種情況就是這樣,采用 Cloud Functions,其實例使用項目的App Engine 服務賬戶。
最后,如果您未在 Google Cloud 中運行并且未安裝gcloud,可使用服務賬戶憑據(jù)文件來生成訪問令牌。
接下來,我們將介紹這些選項,并且提供一個示例來說明如何定義對流水線運行進行初始化的Cloud Function,從而使您能夠設置事件驅動的 Pipeline 作業(yè)。
使用 Kubeflow PipelinesSDK 通過 gcloud 訪問連接 AI Platform Pipelines 集群
要連接 AI PlatformPipelines 集群,您首先需要找到其端點的 URL。
一個簡單的方法是訪問您的 AIPipelines 儀表板,并點擊“SETTINGS”(設置)。
點擊“Settings”獲得有關您的安裝的信息。
將彈出一個與下圖類似的窗口:
KFP 客戶端設置
復制所顯示的代碼段以使用 KFP SDK 連接您的安裝端點。這一簡單的 notebook 示例旨在讓您對流程進行測試。(在此另有一個使用 TFX SDK 和 TFXTemplates 的示例)。
從AI Platform Notebooks 進行連接
如果您使用在相同項目中運行的AI Platform Notebook,連通性會起作用。您只需如上所述提供您的Pipelines 安裝端點的 URL。
從本地或者開發(fā)機器進行連接
您可能要從您的本地機器或者其他類似環(huán)境進行Pipelines 安裝部署。如果已安裝 gcloud 并為您的賬號授權,身份驗證應當同樣直接有效。
從GCP 運行時連接 AI Platform Pipelines 端點
對于無服務器環(huán)境(例如,CloudFunctions、Cloud Run 或者 App Engine),由于有使用不同服務賬戶的臨時實例,設置和初始化 gcloud 可能存在問題。這里我們將使用不同的方法:我們將允許服務賬戶訪問Cloud AI Pipelines 的反向代理,并且獲得創(chuàng)建客戶端對象時傳遞的訪問令牌。我們將通過一個 Cloud Functions 示例詳細說明如何這樣做。
示例:使用Cloud Functions 進行事件驅動的流水線部署
Cloud Functions 是 Google Cloud 的事件驅動無服務器計算平臺。使用 Cloud Functions 觸發(fā)流水線部署會為支持事件驅動的流水線帶來許多可能性,您可以基于添加到 Google Cloud Storage 存儲桶的新數(shù)據(jù)、添加到 PubSub 主題的新信息等來開始部署。
例如,一旦新的一批數(shù)據(jù)到達或者 AIPlatform Data Labeling Service“導出”完成,您會預期著自動開始運行 ML 訓練流水線。
在此,您將看到一個通過向 CloudStorage 存儲桶添加新文件觸發(fā)流水線部署的示例。
對于這種情況,您可能不想在保存您的數(shù)據(jù)集的Cloud Storage 存儲桶中設置 Cloud Functions 觸發(fā)器,因為這在每次添加文件時都會觸發(fā) —— 如果更新包括多個文件,可能這并非您想要的行為。相反,一旦完成數(shù)據(jù)導出或者攝取流程,您可以將Cloud Storage 文件寫入一個單獨的“觸發(fā)器桶”,該文件包含有關新添加的數(shù)據(jù)的路徑信息。通過定義一個在該存儲桶上觸發(fā)的 Cloud Functions 函數(shù),這會讀取文件內容并且在啟動流水線運行時將數(shù)據(jù)路徑信息作為參數(shù)進行傳遞。
通過設置 Cloud Functions 函數(shù)來部署流水線有兩個主要步驟。首先是提供由Cloud Functions 使用的服務賬戶 —— 您的項目的 App Engine 服務賬戶 —— 通過將其添加為具有 Project Viewer 權限的成員,訪問由 Pipelines 安裝使用的服務賬戶。默認情況下,Pipelines服務賬戶將是您的項目的 Compute Engine 默認服務賬戶。
然后,您定義并部署Cloud Functions函數(shù),該函數(shù)會觸發(fā)啟動流水線運行。該函數(shù)獲得 Cloud Functions 實例的服務賬戶訪問令牌,此令牌被傳遞至KFP 客戶端構造函數(shù)。接下來,您可以通過客戶端對象啟動流水線運行(或者提出其他請求)。
有關觸發(fā) Cloud Storage 文件或者其內容的信息可作為流水線運行時參數(shù)被傳遞。
import kfp
def get_access_token():
url ='http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token'
r= requests.get(url, headers={'Metadata-Flavor': 'Google'})
r.raise_for_status()
access_token = r.json()['access_token']
return access_token
...
token = get_access_token()
client = kfp.Client(host=HOST_URL,existing_token=token)
...
res = client.run_pipeline(...)
因為 Cloud Function 需要安裝 kfp SDK,您需要定義一個 CloudFunctions 部署所使用的 requirements.txt 文件,該文件將指定此要求。
此 notebook會引導您完成設置流程,并顯示 CloudFunctions 函數(shù)代碼。此示例定義了一個非常簡單的流水線,只回顯一個作為參數(shù)傳遞的文件名。Cloud Function 啟動該流水線的運行,傳遞Function 調用所觸發(fā)的新文件或者被修改文件的文件名。
使用服務賬戶憑據(jù)文件連接Pipelines 端點
如果您正在進行本地開發(fā),并且未安裝 gcloud,也可通過本地可用的服務賬戶憑據(jù)文件獲得憑據(jù)令牌。本示例介紹了如何做到這一點。最簡單的方式是使用與用于Pipelines 安裝相同的服務賬戶的憑據(jù) —— 默認為 ComputeEngine 服務賬戶。否則,您需要為其他服務賬戶提供對 Compute Engine 賬戶的訪問權限。
總結
您可以采用幾種方法來使用 AI Platform Pipelines API 遠程部署流水線,我們在此介紹的notebook 應當是一個很好的開端。尤其是,Cloud Functions 讓您能夠支持許多類型的事件驅動的流水線。要了解有關將這些知識付諸實踐的更多信息,請參考 Cloud Functions notebook 了解關于如何基于新數(shù)據(jù)自動啟動流水線運行的示例。嘗試運行這些 notebook,并讓我們了解您的想法。您可以在Twitter 通過 @amygdala 找到我。