ベントMLを使用したHugging Faceモデルのデプロイ:DeepFloyd IFのアクション
ベントMLを使用したHugging Faceモデルのデプロイ
Hugging Faceは、モデルを簡単にアップロード、共有、展開することができるHubプラットフォームを提供しています。これにより、モデルをゼロからトレーニングするために必要な時間と計算リソースを開発者が節約することができます。ただし、実世界のプロダクション環境やクラウドネイティブの方法でモデルを展開することはまだ課題があります。
ここでBentoMLが登場します。BentoMLは、機械学習モデルのサービングと展開のためのオープンソースプラットフォームです。これは、従来の、事前トレーニング済みの、生成モデルおよび大規模言語モデルを組み込んだ本番向けのAIアプリケーションを構築、出荷、スケーリングするための統一されたフレームワークです。以下は、BentoMLフレームワークを高レベルで使用する方法です:
- モデルの定義:BentoMLを使用するには、機械学習モデル(または複数のモデル)が必要です。このモデルは、TensorFlowやPyTorchなどの機械学習ライブラリを使用してトレーニングできます。
- モデルの保存:トレーニング済みのモデルをBentoMLのローカルモデルストアに保存します。これは、すべてのトレーニング済みモデルをローカルで管理し、サービングにアクセスするために使用されます。
- BentoMLサービスの作成:モデルをラップし、サービスのロジックを定義するために
service.py
ファイルを作成します。これは、モデルの推論をスケールで実行するためのランナーを指定し、入力と出力の処理方法を定義するAPIを公開します。 - Bentoのビルド:構成YAMLファイルを作成することで、すべてのモデルとサービスをパッケージ化し、コードと依存関係を含む展開可能なアーティファクトであるBentoを作成します。
- Bentoの展開:Bentoが準備できたら、Bentoをコンテナ化してDockerイメージを作成し、Kubernetes上で実行することができます。または、Bentoを直接Yataiに展開することもできます。Yataiは、Kubernetes上での機械学習デプロイメントを自動化および実行するためのオープンソースのエンドツーエンドソリューションです。
このブログ投稿では、上記のワークフローに従ってDeepFloyd IFをBentoMLと統合する方法をデモンストレーションします。
目次
- DeepFloyd IFの簡単な紹介
- 環境の準備
- BentoMLモデルストアへのモデルのダウンロード
- BentoMLサービスの開始
- Bentoのビルドとサービスの提供
- サーバーのテスト
- 次のステップ
DeepFloyd IFの簡単な紹介
DeepFloyd IFは、最先端のオープンソースのテキストから画像へのモデルです。Stable Diffusionのような潜在的な拡散モデルとは異なる運用戦略とアーキテクチャを持っています。
DeepFloyd IFは、高度な写真リアリズムと洗練された言語理解を提供します。Stable Diffusionとは異なり、DeepFloyd IFはピクセル空間で直接動作し、凍結されたテキストエンコーダと3つの連鎖したピクセル拡散モジュールを含むモジュラー構造を活用しています。各モジュールはプロセスで独自の役割を果たしています:Stage 1は、ベースの64×64 pxイメージの作成を担当し、Stage 2およびStage 3で徐々に1024×1024 pxにアップスケールされます。DeepFloyd IFの特徴的な側面のもう一つは、複雑なプロンプトの優れた理解を提供するLarge Language Model(T5-XXL-1.1)を統合していることです。詳細については、Stability AIのブログ投稿「DeepFloyd IFについて」を参照してください。
DeepFloyd IFアプリケーションが本番環境で高性能に実行されるようにするために、リソースを適切に割り当てて管理することが重要です。この点で、BentoMLを使用すると、各ステージのランナーを独立してスケーリングできます。たとえば、Stage 1のランナーにはより多くのPodを使用したり、よりパワフルなGPUサーバーを割り当てたりすることができます。
環境の準備
このGitHubリポジトリには、このプロジェクトに必要なすべてのファイルが保存されています。このプロジェクトをローカルで実行するためには、次のものが必要です:
- Python 3.8+
pip
がインストールされていること- 少なくとも2x16GB VRAMのGPUまたは1×40 VRAMのGPU。このプロジェクトでは、Google Cloudの
n1-standard-16
タイプのマシンに64 GBのRAMと2つのNVIDIA T4 GPUを使用しました。ただし、単一のT4でIFを実行することはできますが、本番向けのサービングには推奨されません。
前提条件が整ったら、プロジェクトリポジトリをローカルマシンにクローンし、ターゲットディレクトリに移動してください。
git clone https://github.com/bentoml/IF-multi-GPUs-demo.git
cd IF-multi-GPUs-demo
アプリケーションをビルドする前に、このディレクトリ内の主要なファイルを簡単に見てみましょう:
import_models.py
:IFPipeline
の各ステージのモデルを定義します。このファイルを使用して、すべてのモデルをローカルマシンにダウンロードし、単一のBentoにパッケージ化することができます。requirements.txt
:このプロジェクトに必要なすべてのパッケージと依存関係を定義します。service.py
:to_runner
メソッドを使用して作成された3つのランナーを含むBentoMLサービスを定義し、画像を生成するためのAPIを公開します。APIはJSONオブジェクト(プロンプトとネガティブプロンプト)を入力とし、モデルのシーケンスを使用して画像を出力します。start-server.py
:service.py
で定義されたサービスを使用してBentoML HTTPサーバーを起動し、ユーザーがプロンプトを入力して画像を生成するためのGradioウェブインターフェースを作成します。bentofile.yaml
:ビルドするBentoのメタデータを定義します。これには、サービス、Pythonパッケージ、およびモデルが含まれます。
依存関係の分離のために仮想環境を作成することをおすすめします。例えば、次のコマンドを実行してmyenv
をアクティベートします:
python -m venv venv
source venv/bin/activate
必要な依存関係をインストールします:
pip install -r requirements.txt
以前にコマンドラインでHugging Faceからモデルをダウンロードしていない場合は、まずログインする必要があります:
pip install -U huggingface_hub
huggingface-cli login
モデルをBentoMLモデルストアにダウンロードする
前述のように、DeepFloyd IFステージで使用するすべてのモデルをダウンロードする必要があります。環境をセットアップしたら、次のコマンドを実行してモデルをローカルのモデルストアにダウンロードします。このプロセスには時間がかかる場合があります。
python import_models.py
ダウンロードが完了したら、モデルをモデルストアで表示します。
$ bentoml models list
Tag Module Size Creation Time
sd-upscaler:bb2ckpa3uoypynry bentoml.diffusers 16.29 GiB 2023-07-06 10:15:53
if-stage2:v1.0 bentoml.diffusers 13.63 GiB 2023-07-06 09:55:49
if-stage1:v1.0 bentoml.diffusers 19.33 GiB 2023-07-06 09:37:59
BentoMLサービスの開始
start-server.py
ファイルを使用してBentoML HTTPサーバーを直接実行し、Gradioで動作するWeb UIを提供します。これにより、実行のカスタマイズとさまざまなステージ間でのGPUの割り当ての管理が可能になります。GPUのセットアップに応じて、異なるコマンドを使用する必要があります:
-
40GB以上のVRAMを持つGPUの場合、すべてのモデルを同じGPUで実行します。
python start-server.py
-
各15GBのVRAMを持つ2つのTesla T4の場合、ステージ1のモデルを最初のGPUに割り当て、ステージ2とステージ3のモデルを2番目のGPUに割り当てます。
python start-server.py --stage1-gpu=0 --stage2-gpu=1 --stage3-gpu=1
-
15GBのVRAMを持つTesla T4 1台とVRAMサイズが小さい2つの追加のGPUの場合、ステージ1のモデルをT4に、ステージ2とステージ3のモデルを2番目と3番目のGPUに割り当てます。
python start-server.py --stage1-gpu=0 --stage2-gpu=1 --stage3-gpu=2
すべてのカスタマイズ可能なオプション(サーバーのポートなど)を表示するには、次のコマンドを実行します:
python start-server.py --help
サーバーのテスト
サーバーが起動したら、http://localhost:7860 でWeb UIにアクセスできます。BentoMLのAPIエンドポイントも http://localhost:3000 でアクセスできます。以下はプロンプトとネガティブプロンプトの例です。
プロンプト:
オレンジと黒、路上のライトの下に立っている女性のヘッドショット、ダークテーマ、フランク・ミラー、シネマ、超リアル、雰囲気、驚くほど詳細で複雑、ハイパーリアル、8k解像度、フォトリアル、高いテクスチャ、複雑なディテール
ネガティブプロンプト:
タイリング、描かれた手が下手、描かれた足が下手、描かれた顔が下手、フレーム外、変異、変異した、余分な手足、余分な足、余分な腕、変形、ゆがんだ、斜視、フレーム外の体、ぼやけた、下手なアート、下手な解剖学、ぼやけた、テキスト、透かし、粒状
結果:
Bentoのビルドと提供
DeepFloyd IFをローカルで正常に実行したので、プロジェクトディレクトリで以下のコマンドを実行してそれをBentoにパッケージ化できます。
$ bentoml build
'IF-stage1' を小文字に変換しています: 'if-stage1'。
'IF-stage2' を小文字に変換しています: 'if-stage2'。
DeepFloyd-IF を小文字に変換しています: deepfloyd-if。
BentoMLサービス "deepfloyd-if:6ufnybq3vwszgnry" をビルドコンテキスト "/Users/xxx/Documents/github/IF-multi-GPUs-demo" からビルドしています。
モデル "sd-upscaler:bb2ckpa3uoypynry" をパックしています
モデル "if-stage1:v1.0" をパックしています
モデル "if-stage2:v1.0" をパックしています
PyPIパッケージのバージョンをロックしています。
██████╗░███████╗███╗░░██╗████████╗░█████╗░███╗░░░███╗██╗░░░░░
██╔══██╗██╔════╝████╗░██║╚══██╔══╝██╔══██╗████╗░████║██║░░░░░
██████╦╝█████╗░░██╔██╗██║░░░██║░░░██║░░██║██╔████╔██║██║░░░░░
██╔══██╗██╔══╝░░██║╚████║░░░██║░░░██║░░██║██║╚██╔╝██║██║░░░░░
██████╦╝███████╗██║░╚███║░░░██║░░░╚█████╔╝██║░╚═╝░██║███████╗
╚═════╝░╚══════╝╚═╝░░╚══╝░░░╚═╝░░░░╚════╝░╚═╝░░░░░╚═╝╚══════╝
Bento(tag="deepfloyd-if:6ufnybq3vwszgnry") のビルドに成功しました。
ローカルのBentoストアでBentoを表示します。
$ bentoml list
タグ サイズ 作成時刻
deepfloyd-if:6ufnybq3vwszgnry 49.25 GiB 2023-07-06 11:34:52
Bentoは、本番環境で提供する準備ができました。
bentoml serve deepfloyd-if:6ufnybq3vwszgnry
Bentoをよりクラウドネイティブな方法で展開するには、次のコマンドを実行してDockerイメージを生成します。
bentoml containerize deepfloyd-if:6ufnybq3vwszgnry
その後、モデルをKubernetes上に展開できます。
次は何ですか?
BentoMLは、Hugging Faceモデルを本番環境に展開するための強力で直感的な方法を提供します。さまざまなMLフレームワークのサポートと使いやすいAPIを備えているため、モデルを短時間で本番環境にデプロイできます。DeepFloyd IFモデルまたはHugging Face Model Hubの他のモデルで作業している場合でも、BentoMLを使用してモデルを活用することができます。
BentoMLとそのエコシステムツールで作成できるものや、BentoMLに関する情報については、以下のリソースをご覧ください。
- OpenLLM – プロダクションでの大規模言語モデル(LLM)の運用のためのオープンプラットフォーム。
- StableDiffusion – 任意の拡散モデルを使用して、独自のテキストから画像へのサービスを作成します。
- Transformer NLPサービス – Transformer NLPモデルのオンライン推論API。
- Slack上でBentoMLコミュニティに参加してください。
- TwitterとLinkedInでフォローしてください。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles