本系列介紹 開發(fā)和部署 ( M L ) 模型。在本文中, 你將學(xué)習(xí)如何部署 ML 模型到 Google 云平臺(tái). 第 1 部分給出了 ML 工作流概括 ,考慮了使用機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)來實(shí)現(xiàn)商業(yè)價(jià)值所涉及的各個(gè)階段。在第 2 部分中,您將學(xué)習(xí)訓(xùn)練并保存 ML 模型并將其部署為 ML 系統(tǒng)的一部分。
在為 ML 系統(tǒng)構(gòu)建端到端管道時(shí),最后一步是將經(jīng)過訓(xùn)練的模型部署到生產(chǎn)環(huán)境中。成功的部署意味著 ML 模型已從研究環(huán)境中移出并集成到生產(chǎn)環(huán)境中,例如,作為一個(gè)實(shí)時(shí)應(yīng)用程序。
在本文中,您將學(xué)習(xí)使用 Google 云平臺(tái)( GCP )將 ML 模型投入生產(chǎn)的三種方法。雖然您可以使用其他幾種環(huán)境,例如 AWS 、 Microsoft Azure 或本地硬件,但本教程使用 GCP 部署 web 服務(wù)。
正在設(shè)置
通過您的 Google 帳戶注冊(cè) Google Cloud Platform 。系統(tǒng)會(huì)提示您填寫一些信息,包括您的信用卡詳細(xì)信息。但是,您注冊(cè)該平臺(tái)將不收取任何費(fèi)用。您還可以在前 90 天獲得價(jià)值 300 美元的免費(fèi)信貸。
創(chuàng)建帳戶后, 創(chuàng)建新的項(xiàng)目并將其命名為 GCP-deployment-example 。不要將項(xiàng)目鏈接到組織。
確保已將當(dāng)前項(xiàng)目更改為新創(chuàng)建的項(xiàng)目。
在 Google App Engine 上部署 ML 模型
在您可以在 GoogleAppEngine 上部署模型之前,還有一些額外的模塊要添加到代碼中。
本節(jié)中使用的代碼可以在 /kurtispykes/gcp-deployment-example GitHub repo 中找到。
第一步是在predict.py模塊中創(chuàng)建推理邏輯:
import joblib import pandas as pd model = joblib.load("logistic_regression_v1.pkl") def make_prediction(inputs): """ Make a prediction using the trained model """ inputs_df = pd.DataFrame( inputs, columns=["sepal_length_cm", "sepal_width_cm", "petal_length_cm", "petal_width_cm"] ) predictions = model.predict(inputs_df) return predictions
本模塊中的步驟包括:
將持久化模型加載到內(nèi)存中。
創(chuàng)建一個(gè)將一些輸入作為參數(shù)的函數(shù)。
在函數(shù)中,將輸入轉(zhuǎn)換為 pandas DataFrame并進(jìn)行預(yù)測(cè)。
接下來,推理邏輯必須封裝在 web 服務(wù)中。我用 Flask 包裝模型。有關(guān)詳細(xì)信息,請(qǐng)參閱main.py:
import numpy as np from flask import Flask, request from predict import make_prediction app = Flask(__name__) @app.route("/", methods=["GET"]) def index(): """Basic HTML response.""" body = ( "" "" "
Welcome to my Flask API
" "" "" ) return body @app.route("/predict", methods=["POST"]) def predict(): data_json = request.get_json() sepal_length_cm = data_json["sepal_length_cm"] sepal_width_cm = data_json["sepal_width_cm"] petal_length_cm = data_json["petal_length_cm"] petal_width_cm = data_json["petal_width_cm"] data = np.array([[sepal_length_cm, sepal_width_cm, petal_length_cm, petal_width_cm]]) predictions = make_prediction(data) return str(predictions) if __name__ == "__main__": app.run()
在代碼示例中,您創(chuàng)建了兩個(gè)端點(diǎn):
index:可以看作是主頁
/predict:用于與部署的模型交互。
您必須創(chuàng)建的最后一個(gè)文件是 app.yaml ,其中包含用于運(yùn)行應(yīng)用程序的運(yùn)行時(shí)。
runtime: python38
在 Google Cloud 控制臺(tái)中,執(zhí)行以下步驟:
在切換菜單上,選擇 App Engine 。您可能必須選擇 View all products 才能訪問 App Engine ,它與 Serverless 產(chǎn)品一起列出)。
從 App Engine 頁面,選擇 Create Application 。
選擇要在其中創(chuàng)建應(yīng)用程序的區(qū)域。
將應(yīng)用程序語言設(shè)置為 Python 并使用 Standard 環(huán)境。
在右上角,選擇終端圖標(biāo)。這將激活云外殼,這意味著您不必下載云 SDK 。
在部署應(yīng)用程序之前,必須上載所有代碼。由于通過 web 服務(wù)與 ML 模型交互所需的所有代碼都上傳到 gcp-deployment-example/app_engine/ 中的 GitHub 上,因此您可以從云外殼中克隆此存儲(chǔ)庫。
將代碼 URL 復(fù)制到剪貼板并導(dǎo)航回 GCP 上的云外殼。向 shell 輸入以下命令:
git clone https://github.com/kurtispykes/gcp-deployment-example.git
通過輸入以下命令導(dǎo)航到代碼存儲(chǔ)庫:
cd gcp-deployment-example/app_engine
接下來, initialize the application 。確保您選擇了最近創(chuàng)建的項(xiàng)目。
現(xiàn)在,部署應(yīng)用程序。從云 shell 運(yùn)行以下命令。如果系統(tǒng)提示您繼續(xù),請(qǐng)輸入Y。
gcloud app deploy
部署完成后,您將獲得服務(wù)部署位置的 URL 。打開提供的 URL 以驗(yàn)證應(yīng)用程序是否正常運(yùn)行。您應(yīng)該看到 歡迎使用我的 Flask API 消息。
接下來,測(cè)試/predict端點(diǎn)。
使用 Postman 發(fā)送 POST 請(qǐng)求以測(cè)試成功部署
您可以使用 Postman 向/predict端點(diǎn)發(fā)送 POST 請(qǐng)求。 Postman 是開發(fā)人員設(shè)計(jì)、構(gòu)建、測(cè)試和迭代 API 的 API 平臺(tái)。
要開始,請(qǐng)選擇 免費(fèi)注冊(cè) 。有一個(gè)完整的教程,但為了本篇文章的目的,請(qǐng)直接跳到主頁。
從那里,選擇 Workspaces 、 My Workspace 、 New ,然后選擇 HTTP Request 。
接下來,將 HTTP 請(qǐng)求從GET更改為POST,并在請(qǐng)求 URL 中插入到已部署服務(wù)的鏈接。
之后,導(dǎo)航到Body標(biāo)頭并選擇raw,以便插入示例實(shí)例。選擇send。
圖 1 。 Postman 測(cè)試的預(yù)測(cè)終點(diǎn)
您向/predict端點(diǎn)發(fā)送了 POST 請(qǐng)求,其中包含一些定義模型輸入的原始數(shù)據(jù)。在響應(yīng)中,模型返回[‘Iris-setosa’],這是模型成功部署的積極指示。
您還可以使用 GCP 上提供的其他服務(wù)部署模型。
在 Google 云功能上部署 ML 模型
云功能是 GCP 上可用的無服務(wù)器技術(shù)之一。我對(duì)代碼做了一些更改,以使部署到云功能無縫。第一個(gè)也是最明顯的區(qū)別是不再從本地存儲(chǔ)庫導(dǎo)入序列化模型。相反,您正在調(diào)用 Google 云存儲(chǔ)中的模型。
將模型上傳到 Google 云存儲(chǔ)
在 GCP 部署示例項(xiàng)目中,選擇切換菜單。導(dǎo)航到 Cloud Storage 并選擇 Buckets 、 Create Bucket 。這將提示您為存儲(chǔ)桶和其他配置提供名稱。我把我的名字命名為model-data-iris。
創(chuàng)建桶后,下一個(gè)任務(wù)是上傳持久化模型。選擇 Upload Files ,導(dǎo)航到存儲(chǔ)模型的位置,然后選擇它。
現(xiàn)在,您可以使用 Google Cloud 中的各種服務(wù)來訪問此文件。要訪問云存儲(chǔ),必須從google.cloud導(dǎo)入storage對(duì)象。
下面的代碼示例顯示了如何從 Google 云存儲(chǔ)中訪問模型。您也可以在 gcp-deployment-example/cloud_functions/main.py 中看到完整的示例。
import joblib import numpy as np from flask import request from google.cloud import storage storage_client = storage.Client() bucket = storage_client.get_bucket("model-iris-data") # remember to change the bucket name blob = bucket.blob("logistic_regression_v1.pkl") blob.download_to_filename("/tmp/logistic_regression_v1.pkl") model = joblib.load("/tmp/logistic_regression_v1.pkl") def predict(request): data_json = request.get_json() sepal_length_cm = data_json["sepal_length_cm"] sepal_width_cm = data_json["sepal_width_cm"] petal_length_cm = data_json["petal_length_cm"] petal_width_cm = data_json["petal_width_cm"] data = np.array([[sepal_length_cm, sepal_width_cm, petal_length_cm, petal_width_cm]]) predictions = model.predict(data) return str(predictions)
在 Google Cloud 控制臺(tái)的切換菜單上,選擇 Cloud Functions 。要查看菜單,您可能必須選擇 View all products 并展開 Serverless 類別。
接下來,選擇 Create Function 。如果這是您第一次創(chuàng)建云函數(shù),則要求您啟用 API 。選擇 Enable 繼續(xù)。
還要求您進(jìn)行以下配置設(shè)置:
函數(shù)名稱= Predict 。
Trigger type = HTTP 。
Allow unauthenticated invocations =已啟用。
在運(yùn)行時(shí)、構(gòu)建、連接和安全設(shè)置部分中還有其他配置,但對(duì)于本示例,默認(rèn)值是可以的,因此選擇 Next 。
在下一頁中,要求您設(shè)置運(yùn)行時(shí)并定義源代碼的來源。在 Runtime 部分,選擇您正在使用的 Python 版本。我使用的是 Python 3.8 。確保在源代碼頭中選擇了 Inline Editor 。
復(fù)制并粘貼云函數(shù)用作main.py文件入口點(diǎn)的以下代碼示例。
{ "sepal_length_cm" : 5.1, "sepal_width_cm" : 3.5, "petal_length_cm" : 1.4, "petal_width_cm" : 0.2 }
使用內(nèi)聯(lián)編輯器更新 requirements.txt :
flask >= 2.2.2, <2.3.0 numpy >= 1.23.3, <1.24.0 scitkit-learn >=1.1.2, <1.2.0 google-cloud-storage >=2.5.0, <2.6.0
確保將 Entry point 值更改為端點(diǎn)的名稱。在這種情況下,它是predict。
完成所有更改后,選擇 Deploy 。部署可能需要幾分鐘的時(shí)間來安裝依賴項(xiàng)并啟動(dòng)應(yīng)用程序。完成后,您會(huì)看到成功部署的模型的函數(shù)名稱旁邊有一個(gè)綠色的勾號(hào)圖標(biāo)。
現(xiàn)在,您可以在 Testing 選項(xiàng)卡上測(cè)試應(yīng)用程序是否正常工作。使用以下示例代碼進(jìn)行測(cè)試:
{ "sepal_length_cm" : 5.1, "sepal_width_cm" : 3.5, "petal_length_cm" : 1.4, "petal_width_cm" : 0.2 }
如果您使用與前面相同的輸入,則會(huì)得到相同的響應(yīng)。
現(xiàn)在,您已經(jīng)學(xué)會(huì)了使用 GoogleCloudFunctions 部署 ML 模型。使用此部署,您不必?fù)?dān)心服務(wù)器管理。您的云功能僅在收到請(qǐng)求時(shí)執(zhí)行,并且 Google 管理服務(wù)器。
在 Google AI 云上部署 ML 模型
之前的兩個(gè)部署要求您編寫不同程度的代碼。在谷歌人工智能云上,你可以提供經(jīng)過訓(xùn)練的模型,他們?yōu)槟愎芾硪磺小?/p>
在云控制臺(tái)上,從切換菜單導(dǎo)航到 AI Platform 。在 Models 選項(xiàng)卡上,選擇 Create Model 。
您可能會(huì)注意到一條警告消息,通知您 Vertex AI ,這是另一個(gè)將 AutoML 和 AI 平臺(tái)結(jié)合在一起的托管 AI 服務(wù)。這一討論超出了本文的范圍。
在下一個(gè)屏幕上,系統(tǒng)會(huì)提示您選擇一個(gè)區(qū)域。選擇區(qū)域后,選擇 Create Model 。為模型命名,相應(yīng)地調(diào)整區(qū)域,然后選擇 Create 。
轉(zhuǎn)到創(chuàng)建模型的區(qū)域,您應(yīng)該可以看到模型。選擇型號(hào)并選擇 Create a Version 。
接下來,您必須將模型鏈接到云存儲(chǔ)中存儲(chǔ)的模型。本節(jié)有幾個(gè)重要事項(xiàng)需要注意:
AI 平臺(tái)上scikit-learn的最新模型框架版本是 1.0.1 版,因此您必須使用此版本來構(gòu)建模型。
模型必須存儲(chǔ)為model.pkl或model.joblib。
為了遵守 GCP AI 平臺(tái)的要求,我使用所需的模型版本創(chuàng)建了一個(gè)新的腳本,將模型序列化為model.pkl,并將其上傳到谷歌云存儲(chǔ)。有關(guān)更多信息,請(qǐng)參閱 /kurtispykes/gcp-deployment-example GitHub repo 中的更新代碼。
Model name: logistic_regression_model
選中 Use regional endpoint 復(fù)選框。
Region: 歐洲西部 2
在 models 部分,確保僅選擇 europe-west2 區(qū)域。
為要?jiǎng)?chuàng)建的模型版本選擇 Save 。創(chuàng)建模型版本可能需要幾分鐘的時(shí)間。
通過選擇模型版本并導(dǎo)航到 Test & Use 標(biāo)題來測(cè)試模型。輸入輸入數(shù)據(jù)并選擇 Test 。
-
Google
+關(guān)注
關(guān)注
5文章
1765瀏覽量
57530 -
NVIDIA
+關(guān)注
關(guān)注
14文章
4986瀏覽量
103058 -
AI
+關(guān)注
關(guān)注
87文章
30896瀏覽量
269087
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論