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

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 bucket 中,您也可以在訓練工作完成後匯入模型。本實驗室將使用這個選項。

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

模型選單

選取「匯入」IMPORT

import_model

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

new_model

在「模型設定」下方,使用預建容器匯入模型,並使用 TensorFlow 2.8。如需預先建構的預測容器完整清單,請參閱這篇文章

然後提供雲端儲存空間值區的路徑,您已在自訂訓練工作中將模型構件儲存至該值區。畫面應如下所示: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

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

然後按一下「DEPLOY」

部署作業需要幾分鐘,完成後,模型部署狀態會變更為「已部署至 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 端點一樣使用模型,也就是說,您可以從 Cloud 函式、聊天機器人、網頁應用程式等呼叫模型。

為方便示範,我們將從 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 控制台的「端點」部分找到 endpoint_id。

endpoint_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 個單位的 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 服務函式,解碼圖片位元組。這需要多花一點時間,但對於大型圖片和應用程式建構來說,效率會高出許多。如需範例,請參閱這個筆記本

🎉 恭喜!🎉

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

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

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

7. 清除

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

undeploy_model

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

停止執行個體

如要刪除 Storage Bucket,請使用 Cloud 控制台中的導覽選單瀏覽至 Storage,選取 bucket,然後按一下「Delete」:

刪除儲存空間