BentoMLを使ったDeepFloyd IFのデプロイ

TL;DR

Hugging Faceは、オープンソースのモデル提供フレームワークであるBentoMLを使用してDeepFloyd IFをデプロイするワークフローを詳細に説明しています。この統合により、開発者は異なるGPUリソース間で推論ランナーを独立してスケーリングすることで、DeepFloyd IFの複雑でマルチステージなアーキテクチャを管理し、本番環境のパフォーマンスを最適化できます。

DeepFloyd IFのアーキテクチャと機能

DeepFloyd IFは、ピクセル空間で直接動作するオープンソースのテキストから画像へのモデルであり、Stable Diffusionのような潜在拡散モデルとは異なります。これは、凍結されたテキストエンコーダと3つのカスケードされたピクセル拡散モジュールからなるモジュラー構造を利用しています:

  • Stage 1: 64x64ピクセルのベース画像を生成します。
  • Stage 2 and 3: 画像を最終的に1024x1024ピクセルの解像度に段階的にアップスケールします。

複雑なプロンプトの言語理解を向上させるため、DeepFloyd IFはテキストエンコーダとしてT5-XXL-1.1 Large Language Model (LLM)を統合しています。

BentoMLを使った本番デプロイ

BentoMLは、Hugging Face Hubから本番対応のAIアプリケーションへモデルを移行するための統一されたフレームワークを提供します。デプロイメントプロセスは以下の5段階のライフサイクルに従います:

  1. モデルを定義: PyTorchやTensorFlowなどのライブラリで訓練されたモデルを利用します。
  2. モデルを保存: BentoMLローカルモデルストアにモデルを保存し、管理とサービスへのアクセスを行います。
  3. BentoMLサービスを作成: service.pyファイルを使用してモデルをラップし、Runnersを介してサービスロジックを定義します。Runnersはスケールでのモデル推論を処理し、入出力処理のためのAPIを公開します。
  4. Bentoをビルド: サービスとモデルを「Bento」にパッケージ化します。これはYAML構成ファイルを通じて必要なすべてのコードと依存関係を含むデプロイ可能なアーティファクトです。
  5. Bentoをデプロイ: BentoをDockerイメージにコンテナ化してKubernetesへのデプロイを行うか、Yataiを使用してKubernetes上で自動スケーリングを行います。

技術的実装とリソース管理

DeepFloyd IFのデプロイには相当な計算リソースが必要です。推奨ハードウェアは、少なくとも2×16GB VRAMのGPUまたは1×40GB VRAMのGPUです。本番グレードのサービングでは、単一のTesla T4は推奨されません。

GPU割り当て戦略

BentoMLは、DeepFloyd IFパイプラインの各ステージのランナーを独立してスケーリングできるようにし、開発者が各ステージの特定のニーズに基づいてリソースを割り当てることを可能にします:

  • High VRAM (40GB+): すべてのモデルを単一のGPUで実行できます。
  • Dual Tesla T4 (15GB each): Stage 1を最初のGPUに割り当て、Stages 2と3を2番目のGPUに割り当てることができます。
  • Mixed GPU Setup: Stage 1をプライマリGPU(例:T4)に割り当て、Stages 2と3をVRAMが小さい2つの追加GPUに分散させることができます。

デプロイワークフロー

このセットアップを実装するために、開発者はimport_models.pyを使用して必要なステージをBentoML Model Storeにダウンロードし、service.pyを使用してJSONプロンプトとネガティブプロンプトを受け取り、生成された画像を返すAPIを定義します。最終的なアーティファクトはbentoml buildを使用してパッケージ化され、bentoml serveでローカルで提供したり、bentoml containerizeを使用してクラウドにデプロイすることができます。

Sources