在 Vertex AI 上部署 Hugging Face ViT

Hugging Face 詳細說明了在 Vertex AI 平台上部署 Vision Transformer(ViT)模型的工作流程。此方法讓開發者能夠獲得基於 Kubernetes 的部署可擴展性,同時減少基礎設施管理所需的程式碼量。

Vertex AI 的模型部署功能

Vertex AI 是一個受管的機器學習平台,提供統一的 API 以支援整個 ML 工作流程。針對模型部署,它提供多項可直接投入生產的功能:

  • 自動擴縮(Autoscaling): 依據進入流量自動調整資源。
  • 流量管理(Traffic Management): 支援在不同模型版本之間分流流量,並提供模型版本管理以便輕鬆回滾。
  • 運營控制(Operational Control): 包含驗證、速率限制,以及整合的模型監控與日誌記錄。
  • 預測支援(Prediction Support): 處理線上與批次預測請求。

雖然指南以 TensorFlow 為主,但 Vertex AI 也支援 PyTorch 與 scikit-learn 框架。

服務模型架構

此部署使用 TensorFlow 實作的 ViT B/16 模型。為了最小化訓練與服務之間的偏差,模型以 SavedModel 形式序列化,並將前處理與後處理操作直接嵌入圖中。

模型輸入與輸出:

  • 輸入(Input): 模型接受 base64 編碼的圖像字串,以防止在網路傳輸過程中被修改。前處理步驟包括將圖像調整為 224x224、標準化至 [-1, 1] 範圍,並轉置為 channels_first 記憶體布局。
  • 輸出(Output): 模型回傳預測標籤(字串)與信心分數(浮點數)。

模型工件必須先儲存在 Google Cloud Storage(GCS)桶中,才能部署至 Vertex AI。

部署工作流程

部署透過 google-cloud-aiplatform Python SDK 管理,分為四個步驟:

1. 模型上傳

SavedModel 會上傳至 Vertex AI Model Registry,這是一個全受管的註冊表,負責儲存與版本管理。此步驟需要一個指向 Vertex AI 提供的 TensorFlow 服務預建 Docker 映像的 container_spec

2. 端點建立

建立 Endpoint 作為接收請求與回傳回應的介面,為模型提供受管的入口點。

3. 模型部署

將已上傳的模型連結至端點。在此階段,於 dedicated_resources 中定義硬體規格:

  • 機器類型(Machine Type): 定義基礎計算資源(例如 n1-standard-8,具 8 個 vCPU 與 32GB RAM)。
  • 加速卡(Accelerator): 指定 GPU 類型(例如 NVIDIA_TESLA_T4)以及每個副本的加速卡數量。
  • 擴縮(Scaling): 設定 min_replica_countmax_replica_count 以啟用自動擴縮。

4. 預測請求

使用 PredictionServiceClient 進行預測。對於圖像等二進位資料,請求負載必須格式化為:{serving_input: {"b64": base64_encoded_string}}

效能與監控

Vertex AI 內建監控工具,可追蹤端點效能與資源使用情況,例如加速卡的占用率(duty cycle)。

負載測試結果: 使用 Locust 於本機執行負載測試,團隊處理約 17,230 筆請求,平均延遲為 646 毫秒。

價格概覽

費用依據計算節點的每小時費率以及任何附加的加速卡計算。以下為本文示例所使用的資源價格:

資源 規格 每小時價格(USD)
Machine Type n1-standard-8 (8vCPU, 30GB) $0.4372
Accelerator NVIDIA_TESLA_T4 $0.4024

使用者僅在節點實際處理預測請求時才會產生費用。

Sources