Vertex AI で Hugging Face ViT をデプロイする

Hugging Face は、Vertex AI プラットフォーム上で Vision Transformer (ViT) モデルをデプロイするためのワークフローを詳述しています。このアプローチにより、開発者はインフラ管理に必要なコード量を削減しながら、Kubernetes ベースのデプロイのスケーラビリティを実現できます。

モデルデプロイのための Vertex AI の機能

Vertex AI は、全体の ML ワークフローに対して統一された API を提供するマネージド機械学習プラットフォームです。モデルデプロイにおいて、いくつかの本番環境向け機能を提供します:

  • 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: モデルは予測ラベル(文字列)と信頼度スコア(浮動小数点数)を返します。

モデルアーティファクトは Vertex AI へデプロイする前に、Google Cloud Storage(GCS)バケットに保存する必要があります。

デプロイワークフロー

デプロイは google-cloud-aiplatform Python SDK を使用して管理され、4 つのステップで実行されます:

1. モデルアップロード

SavedModel は Vertex AI Model Registry にアップロードされます。これはストレージとバージョニングを管理するフルマネージドレジストリです。このステップでは、TensorFlow サービング用に Vertex AI が提供する事前構築 Docker イメージを指す container_spec が必要です。

2. エンドポイント作成

エンドポイントが作成され、リクエストの受信とレスポンスの送信のインターフェースとして機能します。これにより、モデルのマネージドエントリーポイントが提供されます。

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 は、エンドポイントのパフォーマンスやリソース使用率(例:アクセラレータのデューティサイクル)を追跡する組み込みのモニタリングツールを提供します。

ロードテスト結果: ローカルロードテストに Locust を使用し、チームは約 17,230 件のリクエストを処理し、平均レイテンシは 646 ミリ秒でした。

料金概要

コストはコンピュートノードと付随するアクセラレータの時間単価に基づきます。投稿で使用された例に基づくと:

リソース 仕様 時間単価 (USD)
Machine Type n1-standard-8 (8vCPU, 30GB) $0.4372
Accelerator NVIDIA_TESLA_T4 $0.4024

ユーザーはノードが実際に予測リクエストを処理している間のみ課金されます。

Sources