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

1. 總覽

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

這個實驗室屬於「從原型設計到投入實際工作環境」系列影片。請務必先完成前一個研究室,再試用這個研究室。如要瞭解詳情,請觀看隨附的影片:

課程內容

學習重點:

  • 將模型上傳至 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 值區中,就能在訓練工作完成後匯入模型。我們會在本研究室中使用這個選項。

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

模型選單

選取「匯入」

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 to endpoint」(部署至端點)

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. 取得預測結果

線上預測

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

為了示範,我們會從 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 控制台的「Endpoints」(端點) 部分找到 endpoint_id。

endpoint_id

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

project_number

以下程式碼會使用 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 個單位的軟性最大值層。如要編寫自訂邏輯以傳回字串標籤而非索引,可以使用自訂預測處理常式

批次預測

設定批次預測資料格式的方法有很多種。為簡化操作,我們會將 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 函式,將圖片位元組解碼。這需要多做一點工作,但對於較大的圖片和應用程式建構作業,效率會大幅提升。您可以在這個 Notebook 中查看範例。

🎉 恭喜!🎉

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

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

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

7. 清理

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

undeploy_model

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

停止執行個體

如要刪除儲存體值區,請使用 Cloud 控制台的「導覽」選單,前往「儲存體」頁面,選取所需值區,然後按一下「刪除」:

刪除儲存空間