在 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_count與max_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
- OriginalDeploying 🤗 ViT on Vertex AI