設計原型至實際工作環境:從自訂訓練模型取得預測結果

1. 總覽

在這個研究室中,您將使用 Vertex AI,透過自訂訓練模型取得線上和批次預測結果。

這個研究室是「Prototype to Production」系列影片的一部分。試用本研究室前,請務必完成上一個研究室。請觀看隨附的影片瞭解詳情:

課程內容

您將學習下列內容:

  • 將模型上傳至 Vertex AI Model Registry
  • 將模型部署至端點
  • 透過 UI 和 SDK 取得線上和批次預測結果

在 Google Cloud 中執行這個研究室的總費用約為 $1 美元。

2. Vertex AI 簡介

這個研究室使用 Google Cloud 最新的 AI 產品服務。Vertex AI 將 Google Cloud 中的機器學習產品整合到流暢的開發體驗中。先前使用 AutoML 訓練的模型和自訂模型,都能透過不同的服務存取。這項新產品會與其他新產品一起合併為一個 API。您也可以將現有專案遷移至 Vertex AI。

Vertex AI 提供許多不同的產品,可支援端對端機器學習工作流程。本研究室將著重介紹下列產品:PredictionsWorkbench

Vertex 產品總覽

3. 設定環境

完成「使用 Vertex AI 訓練自訂模型」研究室中的步驟,完成環境設定作業。

4. 將模型上傳至登錄檔

我們必須將模型上傳至 Vertex AI Model Registry,這是可用於管理機器學習模型生命週期的存放區,才能用於取得預測結果。

您可以在設定自訂訓練工作時上傳模型,如下所示。

training_prediction

也可以在訓練工作完成後匯入模型,不過只要將已儲存的模型成果儲存於 Cloud Storage 值區即可。這是本研究室將使用的選項。

前往控制台的「模型」專區。

模型選單

選取「匯入」

import_model

選取「匯入為新模型」,然後為模型命名

new_model

在「模型設定」下方,匯入含有預先建構容器的模型,並使用 TensorFlow 2.8。您可以在這裡查看預建預測容器的完整清單。

接著,請提供您在自訂訓練工作中儲存模型構件的 Cloud Storage 值區路徑。如下所示:gs://{PROJECT_ID}-bucket/model_output

我們會略過「可解釋性」部分,但如要進一步瞭解 Vertex Explainable AI,請查看說明文件

模型匯入後,會顯示在登錄檔中。

flower_model

請注意,如果您想透過 SDK (而非 UI) 執行這項操作,可以在 Workbench 筆記本中執行以下內容來上傳模型。

from google.cloud import aiplatform

my_model = aiplatform.Model.upload(display_name='flower-model',
                                  artifact_uri='gs://{PROJECT_ID}-bucket/model_output',
                                  serving_container_image_uri='us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest')

5. 將模型部署至端點

在 Vertex AI 中可執行兩種預測工作:批次和線上。

「批次預測」是非同步要求。如果您不需要立即取得回應,並想透過單一要求處理累積的資料,這是個不錯的選擇。

另一方面,如果想即時從傳送至模型的資料獲得低延遲預測,則可使用線上預測。

模型已存放於登錄檔中,就可以用於批次預測。

但如要取得線上預測,必須將模型部署至端點。這會將已儲存的模型構件與實體資源建立關聯,藉此進行低延遲預測。

如要部署至端點,請選取模型最右側的三點圖示,然後選取「部署至端點」

deploy_model

為端點命名,然後保留其餘設定並點選「繼續」

endpoint_name

端點支援自動調度資源,也就是說,您可以設定上下限,運算節點也會調整資源配置,以滿足這些邊界內的流量需求。

這個研究室僅供示範之用,我們不會將這個端點用於高流量,因此您可以將「運算附註數量上限」設為 1,並將「機器類型」設為 n1-standard-4。

endpoint_compute

我們將略過模型監控步驟,但如要進一步瞭解這項功能,請參閱說明文件

然後按一下「部署」

部署作業需要幾分鐘才能完成,但作業完成後,您就會看到模型的部署狀態已變更為「Deployed on Vertex AI」。

如要透過 SDK 部署模型,請執行下列指令。

my_model = aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}") 

endpoint = my_model.deploy(
     deployed_model_display_name='my-endpoint',
     traffic_split={"0": 100},
     machine_type="n1-standard-4",
     accelerator_count=0,
     min_replica_count=1,
     max_replica_count=1,
   )

6. 取得預測結果

線上預測

將模型部署至端點時,就像任何其他靜態端點一樣,您可以從雲端函式、聊天機器人、網頁應用程式等呼叫模型。

為方便示範,我們將從 Workbench 呼叫這個端點。

返回您在先前研究室中建立的筆記本。在啟動器中建立新的 TensorFlow 2 筆記本。

tf_kernel

匯入 Vertex AI Python SDK、numpy 和 PIL

from google.cloud import aiplatform

import numpy as np
from PIL import Image

下載下方圖片並上傳至 Workbench 執行個體。我們會用這張天鵝絨圖像測試模型。

test_image

首先,定義端點您需要替換以下 {PROJECT_NUMBER}{ENDPOINT_ID}

endpoint = aiplatform.Endpoint(
    endpoint_name="projects/{PROJECT_NUMBER}/locations/us-central1/endpoints/{ENDPOINT_ID}")

您可以在 Cloud 控制台的「端點」部分找到端點_id。

endpoint_id

您可以在控制台首頁找到您的專案編號。請注意,這組 ID 與專案 ID 不同。

專案編號

下列程式碼會開啟,並使用 PIL 調整圖片大小。

IMAGE_PATH = "test-image.jpg"
im = Image.open(IMAGE_PATH)

接著,將 numpy 資料轉換為 float32 類型並轉換為清單。由於 numpy 資料並非 JSON 可序列化,因此我們將轉換為清單,因此我們無法在要求主體中傳送該資料。

x_test = np.asarray(im).astype(np.float32).tolist()

最後,呼叫 endpoint.predict

endpoint.predict(instances=x_test).predictions

然後得到模型輸出內容,也就是有 5 個單位的 softmax 層。如要編寫自訂邏輯以傳回字串標籤而非索引,可以使用自訂預測處理常式

批次預測

設定批次預測資料格式的方法有很多種。為簡單起見,我們會將 numpy 資料轉儲為 JSON 檔案,並將檔案儲存至 Cloud Storage。

with open('test-data.json', 'w') as fp:
    json.dump(x_test, fp)

!gsutil cp test-data.json gs://{YOUR_BUCKET}

接下來,請定義模型。這與定義端點類似,差別在於您需要提供 MODEL_ID,而不是 ENDPOINT_ID

my_model=aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}") 

如要查看模型 ID,請在控制台的「模型」專區中選取模型名稱和版本,然後選取「版本詳細資料」

model_id

最後,使用 SDK 呼叫批次預測工作,傳入您儲存 JSON 檔案的 Cloud Storage 路徑,並提供 Cloud Storage 位置來儲存預測結果。

batch_prediction_job = my_model.batch_predict(
    job_display_name='flower_batch_predict',
    gcs_source='gs://{YOUR_BUCKET}/test-data.json',
    gcs_destination_prefix='gs://{YOUR_BUCKET}/prediction-results',
    machine_type='n1-standard-4',)

您可以在主控台的「批次預測」部分追蹤工作進度。請注意,針對單張圖片執行批次預測工作並不有效率。

batch_pred

後續步驟

在本例中,我們先將測試圖片轉換為 NumPy,再發出預測呼叫。針對較實際的用途,您可能會想要傳送圖片本身,而不需要先將其載入 NumPy。如要這麼做,您需要調整 TensorFlow Serving 函式,將圖片位元組解碼。雖然這個做法需要多花點工夫,但可提升大型圖片和應用程式建構效率。您可以查看這個筆記本中的範例

🎉 恭喜!🎉

您已瞭解如何使用 Vertex AI 執行下列作業:

  • 將模型上傳至 Vertex AI Model Registry
  • 取得批次和線上預測

如要進一步瞭解 Vertex 的其他部分,請參閱說明文件

7. 清除

如果您不打算使用模型,建議您從端點取消部署模型。您可以完全刪除端點。如有需要,您隨時可以將模型重新部署至端點。

undeploy_model

Workbench 代管的筆記本會在 180 分鐘閒置後自動逾時,因此您不必擔心執行個體會關閉。如要手動關閉執行個體,請前往控制台的「Vertex AI Workbench」專區,然後按一下「Stop」按鈕。如想完全刪除筆記本,請按一下「刪除」按鈕。

停止執行個體

如要刪除 Storage 值區,請使用 Cloud 控制台中的導覽選單前往「Storage」(儲存空間)、選取值區,然後點選「Delete」(刪除):

刪除儲存空間