Google Cloud 上でのサーバーレス Transformers パイプラインのデプロイ

A Hugging Face コミュニティメンバーである Maxence Dominici 氏は、Google Cloud Platform (GCP) 上に感情分析マイクロサービスをデプロイするためのワークフローを詳細に説明しています。最終的な実装では、Google Cloud Run を介したサーバーレスアーキテクチャを使用しており、リクエスト量が少ないパターンに対して distilbert-base-uncased-finetuned-sst-2-english モデルをコスト効率よくデプロイすることが可能です。

Google Cloud Run によるサーバーレスデプロイ

Google Cloud Run は、トランスフォーマーモデルのロードに必要となるメモリや vCPU の柔軟な構成が可能なため、本番環境として選定されました。最終的なアーキテクチャは、Docker コンテナにラップされた Flask アプリケーションで構成され、マネージドサービスとしてデプロイされます。

技術的コンポーネント

  • モデル: distilbert-base-uncased-finetuned-sst-2-english モデル、具体的には PyTorch バージョン (pytorch_model.bin, config.json, vocab.txt) が使用されます。
  • アプリケーションロジック: main.py ファイルが GET リクエストを処理し、基本的なセキュリティのためにレビュー文字列と API キーを必要とします。
  • コンテナ化: python:3.7 ベースの Dockerfile を使用し、gunicorn をエントリポイントとして Flask アプリをサーブします。
  • 依存関係: 環境には Flask==1.1.2, torch===1.7.1, transformers~=4.2.0, および gunicorn>=20.0.0 が必要です。

リソース構成

メモリ不足のエラーを回避し、コストを制御するために、インスタンスは以下のように構成されています:

  • メモリ: デフォルトの 256 MB から 4 GB にアップグレード。
  • 並行性 (Concurrency): Gunicorn の設定は --workers 1 --threads 1 に設定されています。これにより、1 つのプロセスと 1 つのスレッドのみがアクティブになり、複数のインスタンスが過剰なメモリを消費して請求額が増加することを防ぎます。

GCP サービスの評価

Cloud Run に決定する前に、Hugging Face パイプラインをデプロイするための最も実行可能なパスを判断するために、いくつかの Google Cloud サービスがテストされました:

サービス 結果 拒否の理由
AI-Platform Prediction 失敗 モデルはチェックポイントであり、「純粋な TensorFlow」の保存済みモデルではありません。また、ベータ版の安定性の問題に遭遇しました。
App Engine 失敗 TensorFlow のインストール中にシステム依存関係ファイルが不足していることに遭遇しました。PyTorch は動作しましたが、インスタンスあたり 2 つ以上のリクエストを処理できませんでした。
Cloud Run 成功 Docker イメージを介して必要なメモリと vCPU の制御を提供しました。

パフォーマンスとコスト分析

レイテンシ

リクエスト処理は通常、モデルのロードと予測を含めて 5 秒未満かかります。コールドスタートにより、約 10 秒の追加レイテンシが発生する場合があります。著者は、パフォーマンスをさらに向上させるために「warming

Sources