當(dāng)您開始研究一個(gè)新的機(jī)器學(xué)習(xí)問題時(shí),我猜您首先會(huì)使用的環(huán)境便是 notebook。也許您喜歡在本地環(huán)境中運(yùn)行 Jupyter、使用 Kaggle Kernel,或者我個(gè)人比較喜歡使用的 Colab。有了這些工具,創(chuàng)建并進(jìn)行機(jī)器學(xué)習(xí)實(shí)驗(yàn)變得越來越便利。盡管在 notebooks 中進(jìn)行實(shí)驗(yàn)時(shí)一切順利,但在您將實(shí)驗(yàn)提升到生產(chǎn)環(huán)境時(shí),很容易碰壁。突然間,您的關(guān)注點(diǎn)不再只是追求準(zhǔn)確度上的高分。
如果您有長時(shí)間運(yùn)行的作業(yè),如進(jìn)行分布式訓(xùn)練或是托管一個(gè)在線預(yù)測模型,這時(shí)該怎么辦?亦或您的用例需要有關(guān)安全性和數(shù)據(jù)隱私的更細(xì)粒度的權(quán)限,您的數(shù)據(jù)在使用期間會(huì)是怎樣的?您將如何處理代碼更改,或者如何隨著時(shí)間推移監(jiān)控模型的表現(xiàn)?
要打造生產(chǎn)級(jí)應(yīng)用或訓(xùn)練大型模型,您需要額外的工具來幫您實(shí)現(xiàn)擴(kuò)縮,而不僅僅是在 notebook 中編寫代碼。使用云服務(wù)提供商可以幫助解決這個(gè)問題,但這一過程可能會(huì)讓人感到有點(diǎn)望而生畏。如果瀏覽一下 Google Cloud 產(chǎn)品的完整列表,您可能完全不知道該從何入手。
因此,為了讓您的旅程更輕松,我將向您介紹從實(shí)驗(yàn)性 notebook 代碼到云中部署模型的快速路徑。
您可以在此處獲取本示例中使用的代碼。此 notebook 在 TF Flowers 數(shù)據(jù)集上訓(xùn)練了一個(gè)圖像分類模型。您將看到如何在云中部署該模型,并通過 REST 端點(diǎn)獲取對新花卉圖像的預(yù)測。
請注意,為了遵循此教程進(jìn)行實(shí)驗(yàn),您需要有一個(gè)啟用計(jì)費(fèi)功能的 Google Cloud 項(xiàng)目。如果您以前從未使用過 Google Cloud,可以按照此處的說明設(shè)置一個(gè)項(xiàng)目,并免費(fèi)獲得 300 美元贈(zèng)金以進(jìn)行實(shí)驗(yàn)。
以下是您需要采取的 5 個(gè)步驟:
1.創(chuàng)建一個(gè) Vertex AI Workbench 代管式 notebook
2.上傳 .ipynb 文件
3.啟動(dòng) notebook 執(zhí)行
4.部署模型
5.獲取預(yù)測
創(chuàng)建一個(gè) Vertex AI Workbench 代管 notebook
要訓(xùn)練和部署該模型,您將使用 Google Cloud 的代管式機(jī)器學(xué)習(xí)平臺(tái) Vertex AI。Vertex AI 包含許多不同的產(chǎn)品,可以在 ML 工作流的整個(gè)生命周期中為您提供幫助。今天,您將使用其中的一些產(chǎn)品,讓我們先從代管式 notebook 產(chǎn)品 Workbench 開始。
在 Cloud Console 的“Vertex AI”部分下,選擇“Workbench”。請注意,如果這是您首次在項(xiàng)目中使用 Vertex AI,系統(tǒng)將提示您啟用 Vertex API 和 Notebooks API。因此,請務(wù)必點(diǎn)擊界面中的按鈕來執(zhí)行此操作。
接下來,選擇“MANAGED NOTEBOOKS”,然后選擇“NEW NOTEBOOK”。
在“Advanced Settings”下,您可以通過指定機(jī)器類型和位置、添加 GPU、提供自定義容器以及啟用終端訪問來自定義 notebook。目前,請保留默認(rèn)設(shè)置,只需為 notebook 命名即可。然后點(diǎn)擊“CREATE”。
當(dāng) OPEN JUPYTERLAB 文本變?yōu)樗{(lán)色時(shí),表示您的 notebook 已準(zhǔn)備就緒。首次打開 notebook 時(shí),系統(tǒng)會(huì)提示您進(jìn)行身份驗(yàn)證,您可以按照界面中的步驟操作。
打開 JupyterLab 實(shí)例后,您會(huì)看到幾種不同的 notebook 選項(xiàng)。Vertex AI Workbench 提供了不同的內(nèi)核(TensorFlow、R、XGBoost 等),這些內(nèi)核是預(yù)安裝了通用數(shù)據(jù)科學(xué)庫的代管式環(huán)境。如果您需要向內(nèi)核中添加其他庫,和在 Colab 中一樣,您可以在 notebook 單元中使用 pip install。
第 1 步已完成!您已經(jīng)創(chuàng)建了代管式 JupyterLab 環(huán)境。
上傳 .ipynb 文件
現(xiàn)在,將 TensorFlow 代碼放入 Google Cloud 中。如果您一直在使用不同的環(huán)境(Colab、本地等),則可以將任何需要的代碼工件上傳到您的 Vertex AI Workbench 代管式 notebook,甚至可以與 GitHub 集成。在未來,您可以直接在 Workbench 中完成所有的開發(fā)工作,但現(xiàn)在讓我們假設(shè)您一直在使用 Colab。
Colab notebooks 可以導(dǎo)出為 .ipynb 文件。
您可以點(diǎn)擊“上傳文件”圖標(biāo),將文件上傳到 Workbench。
當(dāng)您在 Workbench 中打開此 notebook 時(shí),系統(tǒng)會(huì)提示您選擇內(nèi)核,即 notebook 的運(yùn)行環(huán)境。有幾種不同的內(nèi)核可供選擇,但由于此代碼示例使用 TensorFlow,因此需要選擇 TensorFlow 2 內(nèi)核。
選擇內(nèi)核后,在 notebook 中執(zhí)行的任何單元都將在此代管式 TensorFlow 環(huán)境中運(yùn)行。例如,如果執(zhí)行導(dǎo)入單元,則可以導(dǎo)入 TensorFlow、TensorFlow Datasets 和 NumPy。這是因?yàn)樗羞@些庫都包含在 Vertex AI Workbench TensorFlow 2 內(nèi)核中。當(dāng)然,由于 XGBoost 內(nèi)核中沒有安裝 TensorFlow,如果您嘗試在該內(nèi)核中執(zhí)行相同的 notebook 單元,則會(huì)看到一條錯(cuò)誤消息。
啟動(dòng) notebook 執(zhí)行
雖然我們可以手動(dòng)運(yùn)行其余的 notebook 單元,但對于需要長時(shí)間訓(xùn)練的模型而言,notebook 并不總是最方便的選擇。如果使用 ML 構(gòu)建應(yīng)用,通常來說您需要對模型進(jìn)行多次訓(xùn)練。隨著時(shí)間的推移,您會(huì)想要重新訓(xùn)練模型,以確保其保持實(shí)時(shí)更新,并不斷產(chǎn)生有價(jià)值的結(jié)果。
如果您要開始處理一個(gè)新的機(jī)器學(xué)習(xí)問題,手動(dòng)執(zhí)行 notebook 單元可能是不錯(cuò)的選擇。但是,如果您想要大規(guī)模進(jìn)行自動(dòng)化實(shí)驗(yàn),或者為生產(chǎn)應(yīng)用重新訓(xùn)練模型,代管式 ML 訓(xùn)練選項(xiàng)將大大簡化您的工作。
啟動(dòng)訓(xùn)練作業(yè)最快的方法是使用 notebook 執(zhí)行功能,該功能將在 Vertex AI 代管式訓(xùn)練服務(wù)上逐個(gè)運(yùn)行 notebook 單元。
notebook 執(zhí)行功能
啟動(dòng)訓(xùn)練作業(yè)后,它將在作業(yè)完成后您無法訪問的機(jī)器上運(yùn)行。因此,您不希望將 TensorFlow 模型工件保存到本地路徑。您想要將其保存到 Google Cloud 的對象存儲(chǔ)空間 Cloud Storage 中,以便您可在其中存儲(chǔ)圖像、csv 文件、txt 文件和保存的模型工件。幾乎包括任何類型的內(nèi)容。
Cloud Storage 涉及“存儲(chǔ)分區(qū)”的概念,它用于存放數(shù)據(jù)。您可以通過界面創(chuàng)建存儲(chǔ)分區(qū)。Cloud Storage 中存儲(chǔ)的所有內(nèi)容都必須包含在存儲(chǔ)分區(qū)中。在存儲(chǔ)分區(qū)中,您可以創(chuàng)建文件夾來組織數(shù)據(jù)。
通過界面創(chuàng)建存儲(chǔ)分區(qū)
Cloud Storage 中的每個(gè)文件都有一個(gè)路徑,就像本地文件系統(tǒng)上的文件一樣,只是 Cloud Storage 路徑始終以gs:// 開頭
您需要更新訓(xùn)練代碼,以便將內(nèi)容保存到 Cloud Storage 存儲(chǔ)分區(qū)而非本地路徑中。
例如,在這里,我從 model.save('model_ouput"). 更新了 notebook 的最后一個(gè)單元,將工件保存到我在項(xiàng)目中創(chuàng)建的名為 nikita-flower-demo-bucket 的存儲(chǔ)分區(qū)中,而不是保存到本地。
現(xiàn)在,我們可以啟動(dòng)執(zhí)行了。
選擇“Execute”按鈕,為您的執(zhí)行命名,然后添加 GPU。在“環(huán)境”下方,選擇 TensorFlow 2.7 GPU 映像。該容器預(yù)安裝了 TensorFlow 和許多其他數(shù)據(jù)科學(xué)庫。
然后,點(diǎn)擊“SUBMIT”。
您可以在“EXECUTIONS”標(biāo)簽頁中跟蹤訓(xùn)練作業(yè)的狀態(tài)。作業(yè)完成后,您可以在“VIEW RESULT”下查看 notebook 和每個(gè)單元的輸出,它們存儲(chǔ)在 GCS 存儲(chǔ)分區(qū)中。這意味著,您始終可以將模型運(yùn)行與執(zhí)行的代碼關(guān)聯(lián)在一起。
訓(xùn)練完成后,您將能夠在存儲(chǔ)分區(qū)中看到 TensorFlow 保存的模型工件。
部署到端點(diǎn)
現(xiàn)在,您已經(jīng)了解到如何在 Google Cloud 上快速啟動(dòng)無服務(wù)器訓(xùn)練作業(yè)。但 ML 不僅僅只是用于訓(xùn)練。如果我們不使用模型來實(shí)際完成一些任務(wù),那么所有這些工作有什么意義呢?
就像訓(xùn)練一樣,我們可以通過調(diào)用 model.predict 直接從 notebook 執(zhí)行預(yù)測。但是,如果我們想要獲取對大量數(shù)據(jù)的預(yù)測,或在運(yùn)行中獲取低延遲預(yù)測,則需要比 notebook 更強(qiáng)大的工具。
讓我們回到 Vertex AI Workbench 代管式 notebook。您可以將下面的代碼粘貼到一個(gè)單元中,該單元會(huì)使用 Vertex AI Python SDK 將您剛剛訓(xùn)練的模型部署到 Vertex AI Prediction 服務(wù)。將模型部署到端點(diǎn)會(huì)將保存的模型工件與物理資源相關(guān)聯(lián),從而確保低延遲預(yù)測。
首先,導(dǎo)入 Vertex AI Python SDK。
Vertex AI Python SDK
然后,將您的模型上傳到 Vertex AI Model Registry。您需要為模型命名,并提供一個(gè)用于傳送的容器映像,這是將用于運(yùn)行您的預(yù)測的環(huán)境。Vertex AI 提供了用于傳送的預(yù)構(gòu)建容器,在本例中,我們使用的是 TensorFlow 2.8 映像。
Vertex AI Model Registry
預(yù)構(gòu)建容器
您還需要將 artifact_uri 替換為存儲(chǔ)保存的模型工件的存儲(chǔ)分區(qū)路徑。對我來說,該路徑是“nikita-flower-demo-bucket”。您還需要將 project 替換為您的項(xiàng)目 ID。
然后,將模型部署到端點(diǎn)。我目前使用的是默認(rèn)值,但如果您想詳細(xì)了解流量分配和自動(dòng)擴(kuò)縮,請務(wù)必查看相關(guān)文檔。請注意,如果您的用例不需要低延遲預(yù)測,則無需將模型部署到端點(diǎn),而是可以使用批量預(yù)測功能。
流量分配
自動(dòng)擴(kuò)縮
批量預(yù)測功能
部署完成后,您可以在控制臺(tái)中看到您的模型和端點(diǎn)。
獲取預(yù)測
現(xiàn)在,該模型已部署到端點(diǎn),您可以像使用任何其他 REST 端點(diǎn)一樣使用它。也就是說,您可以將模型集成到下游應(yīng)用中并獲取預(yù)測。
現(xiàn)在,我們直接在 Workbench 中測試該模型。
首先,打開一個(gè)新的 TensorFlow notebook。
在此 notebook 中,導(dǎo)入 Vertex AI Python SDK。
然后,創(chuàng)建端點(diǎn),替換 project_number 和 endpoit_id。
您可以在 Cloud Console 的“Endpoints”部分找到端點(diǎn) ID。
您可以在控制臺(tái)首頁找到項(xiàng)目編號(hào)。注意,該編號(hào)與項(xiàng)目 ID 不同。
當(dāng)您向在線預(yù)測服務(wù)器發(fā)送請求時(shí),HTTP 服務(wù)器會(huì)接收該請求。HTTP 服務(wù)器會(huì)從 HTTP 請求內(nèi)容正文中提取預(yù)測請求。提取的預(yù)測請求會(huì)被轉(zhuǎn)發(fā)到傳送函數(shù)。在線預(yù)測的基本格式是數(shù)據(jù)實(shí)例列表。此類列表可以是普通的值列表,也可以是 JSON 對象成員,具體取決于您如何在訓(xùn)練應(yīng)用中配置輸入。
為了測試端點(diǎn),我首先將一張花卉圖像上傳到 Workbench 實(shí)例。
下面的代碼使用 PIL 打開圖像并調(diào)整其大小,然后將其轉(zhuǎn)換為 NumPy 數(shù)組。
接下來,我們將 NumPy 數(shù)據(jù)轉(zhuǎn)換為 float32 類型和列表。我們將其轉(zhuǎn)換為列表,是由于 NumPy 數(shù)據(jù)不支持 JSON 序列化,因此我們不能在請求的正文中發(fā)送這些數(shù)據(jù)。請注意,不需要將數(shù)據(jù)擴(kuò)縮 255,因?yàn)樵摬襟E已通過 tf.keras.layers.Rescaling(1./255). 包含在我們的模型架構(gòu)中。為了避免調(diào)整圖像的大小,可以將 tf.keras.layers.Resizing 添加到模型中,而不是將其作為 tf.data 流水線的一部分。
然后,調(diào)用 predict
所得到的結(jié)果是模型的輸出,這是一個(gè)包含 5 個(gè)單元的 softmax 層??雌饋?a target="_blank">索引 2 的類(郁金香)得分最高。
提示:為了節(jié)省成本,如果您不打算使用端點(diǎn),請務(wù)必取消部署端點(diǎn)!要取消部署,轉(zhuǎn)到控制臺(tái)的“Endpoints”部分,選擇端點(diǎn),然后選擇“Undeploy model form endpoint”選項(xiàng)。如果需要,您可以隨時(shí)在未來重新部署。
在更加實(shí)際的例子中,您可能希望直接將圖像發(fā)送到端點(diǎn),而不是先將其加載到 NumPy 中。如果您想查看相關(guān)示例,可以參閱此 notebook 。
開始您的探索吧!
現(xiàn)在您已了解到如何從 notebook 實(shí)驗(yàn)過渡到云中部署。有了這一框架,您可以開始思考如何使用 notebooks 和 Vertex AI 構(gòu)建新的 ML 應(yīng)用啦。
審核編輯:劉清
-
gpu
+關(guān)注
關(guān)注
28文章
4729瀏覽量
128889 -
Notebook
+關(guān)注
關(guān)注
0文章
19瀏覽量
8595 -
REST
+關(guān)注
關(guān)注
0文章
32瀏覽量
9407
原文標(biāo)題:從 notebook 到部署模型的 5 個(gè)步驟
文章出處:【微信號(hào):tensorflowers,微信公眾號(hào):Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論