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