在 Hugging Face 使用 TF Serving 部署 TensorFlow 視覺模型

Hugging Face 詳細說明了一個工作流程,用於使用 TensorFlow Serving(TF Serving)部署來自 Transformers 庫的基於 TensorFlow 的視覺模型。此方法允許開發者將最先進的模型——包括 Vision Transformer(ViT)、Masked Autoencoders、RegNet 和 ConvNeXt——作為高效能的 REST 或 gRPC 端點公開,並內建支援伺服器端批次處理與模型預熱。

為 TF Serving 保存模型

要使用 TF Serving 部署模型,模型必須採用 SavedModel 格式。Hugging Face Transformers 庫中的 TensorFlow 模型提供 save_pretrained() 方法,可將權重序列化為 h5 與 SavedModel 兩種格式。

對於 Vision Transformer(ViT)模型,流程包括透過 TFViTForImageClassification.from_pretrained() 載入模型,然後呼叫 save_pretrained(saved_model=True)。預設情況下,這會建立 TF Serving 所需的版本化目錄結構(例如 {model_dir}/saved_model/{version})。

為前處理與後處理實作模型手術

標準的機器學習模型需要特定的前處理與後處理。為了減少訓練與服務之間的偏差,並降低開發者的認知負擔,這些操作可以透過「模型手術」直接嵌入模型的計算圖中。

前處理管線

對於 ViT 模型,必要的前處理步驟包括:

  • Scaling:將影像像素值轉換至 [0, 1] 範圍。
  • Normalization:使用模型特定的均值與標準差,將像素值縮放至 [-1, 1] 範圍。
  • Resizing:將影像調整至 224x224 的空間解析度。
  • Transposition:將通道維度移至最前,以符合 Hugging Face 模型使用的 channel‑first 格式。

為了最佳化請求負載並防止尺寸膨脹,指南建議接受 base64 編碼的字串作為輸入,然後在計算圖中使用 tf.io.decode_base64tf.io.decode_jpeg 進行解碼與處理。

後處理與匯出

後處理將原始模型 logits 轉換為人類可讀的標籤。透過從模型的 call() 方法衍生具體函式,開發者可以將模型包裝在 serving_fn 中,該函式會:

  1. 執行前處理管線。
  2. 執行模型推論。
  3. 對 logits 套用 softmax 函式以取得信心分數。
  4. 使用模型的 id2label 設定,將產生的索引映射為字串標籤。

此包裝函式隨後使用 tf.saved_model.save() 匯出為 serving_default 簽名,將模型的輸入需求從 4D 張量改為字串,輸出則改為包含標籤與信心分數的字典。

使用 TensorFlow Serving 部署

模型匯出後,即可使用 tensorflow_model_server 指令進行部署。主要的設定參數包括:

  • rest_api_port:REST 端點的埠號(預設通常為 8501)。
  • model_name:呼叫 API 時使用的識別名稱。
  • model_base_path:TF Serving 載入最新模型版本的目錄路徑。

TF Serving 提供兩種主要方式來查詢已部署的模型:

REST 端點

REST API 適用於線上預測情境。請求以 JSON 負載形式傳送,包含 instances 列表中的 base64 編碼影像。端點格式為:http://localhost:8501/v1/models/{model_name}:predict

gRPC 端點

對於低延遲、高可擴展性與分散式系統,gRPC 是首選的部署方式。這需要透過 grpc.insecure_channel 開啟通訊頻道,並使用 PredictionServiceStub 送出 PredictRequest 負載。gRPC 會回傳包含信心分數與預測標籤的結構化輸出。

Sources