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 包含許多不同產品,可支援端對端機器學習工作流程。本研究室將著重於以下產品:Predictions 和 Workbench
3. 設定環境
完成「使用 Vertex AI 訓練自訂模型」研究室中的步驟,完成環境設定作業。
4. 將模型上傳至登錄檔
我們必須先將模型上傳至 Vertex AI Model Registry,這是可用於管理機器學習模型生命週期的存放區,才能用於取得預測結果。
您可以在設定自訂訓練工作時上傳模型,如下所示。
或者,只要您將已儲存的模型構件儲存在 Cloud Storage 值區中,就能在訓練工作完成後匯入模型。我們會在本研究室中使用這個選項。
前往控制台的「Models」(模型) 專區。
選取「匯入」
選取「匯入為新模型」,然後為模型命名
在「模型設定」下方,匯入含有預先建構容器的模型,並使用 TensorFlow 2.8。您可以在這裡查看預建預測容器的完整清單。
接著,請提供 Cloud Storage 值區的路徑,也就是您在自訂訓練工作中儲存模型構件的路徑。應該會像 gs://{PROJECT_ID}-bucket/model_output
這樣
我們將略過可解釋性部分,但如要進一步瞭解 Vertex Explainable AI,請查看說明文件。
匯入模型後,您會在註冊表中看到該模型。
請注意,如果您想透過 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」(部署至端點)。
為端點命名,然後保留其他設定,並按一下「繼續」
端點支援自動調度資源功能,也就是說您可以設定下限和上限,運算節點就會在這些範圍內調度資源,以滿足流量需求。
由於本實驗室僅供示範,我們不會使用這個端點處理高流量,因此您可以將計算筆記數量上限設為 1,並選取 n1-standard-4 做為機器類型。
我們將略過模型監控功能,但如要進一步瞭解這項功能,請參閱說明文件。
然後按一下「部署」
部署作業需要幾分鐘才能完成,但作業完成後,您就會看到模型的部署狀態已變更為「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 筆記本。
匯入 Vertex AI Python SDK、numpy 和 PIL
from google.cloud import aiplatform
import numpy as np
from PIL import Image
請下載下列圖片,並上傳至 Workbench 執行個體。我們將使用蒲公英圖片測試模型。
首先,請定義端點。您需要替換下方的 {PROJECT_NUMBER}
和 {ENDPOINT_ID}
。
endpoint = aiplatform.Endpoint(
endpoint_name="projects/{PROJECT_NUMBER}/locations/us-central1/endpoints/{ENDPOINT_ID}")
您可以在 Cloud 控制台的「Endpoints」(端點) 部分找到 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 個單位的軟性最大值層。如要編寫自訂邏輯以傳回字串標籤而非索引,可以使用自訂預測處理常式。
批次預測
設定批次預測資料格式的方法有很多種。為簡化操作,我們會將 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,請在控制台的「模型」專區中選取模型名稱和版本,然後選取「版本詳細資料」。
最後,使用 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',)
您可以在控制台的「批次預測」專區中追蹤工作進度。請注意,為單一圖片執行批次預測工作並不符合效益。
後續步驟
在本例中,我們會先將測試圖片轉換為 NumPy,再進行預測呼叫。在更貼近實際情況的用途中,您可能會想要傳送圖片本身,而不需要先將圖片載入 NumPy。如要這麼做,您需要調整 TensorFlow Serving 函式,將圖片位元組解碼。這需要多做一點工作,但對於較大的圖片和應用程式建構作業,效率會大幅提升。您可以在這個 Notebook 中查看範例。
🎉 恭喜!🎉
您已瞭解如何使用 Vertex AI 執行下列作業:
- 將模型上傳至 Vertex AI Model Registry
- 取得批次和線上預測
如要進一步瞭解 Vertex 的其他部分,請參閱說明文件。
7. 清理
如果您不打算使用模型,建議您從端點取消部署模型。您也可以完全刪除端點。如有需要,您隨時可以將模型重新部署至端點。
Workbench 管理的 Notebook 會在閒置 180 分鐘後自動逾時,因此您不必擔心要關閉執行個體。如果您想手動關閉執行個體,請按一下控制台 Vertex AI Workbench 專區中的「停止」按鈕。如要完全刪除筆記本,請按一下「刪除」按鈕。
如要刪除儲存體值區,請使用 Cloud 控制台的「導覽」選單,前往「儲存體」頁面,選取所需值區,然後按一下「刪除」: