ベントMLを使用したHugging Faceモデルのデプロイ:DeepFloyd IFのアクション

ベントMLを使用したHugging Faceモデルのデプロイ

Hugging Faceは、モデルを簡単にアップロード、共有、展開することができるHubプラットフォームを提供しています。これにより、モデルをゼロからトレーニングするために必要な時間と計算リソースを開発者が節約することができます。ただし、実世界のプロダクション環境やクラウドネイティブの方法でモデルを展開することはまだ課題があります。

ここでBentoMLが登場します。BentoMLは、機械学習モデルのサービングと展開のためのオープンソースプラットフォームです。これは、従来の、事前トレーニング済みの、生成モデルおよび大規模言語モデルを組み込んだ本番向けのAIアプリケーションを構築、出荷、スケーリングするための統一されたフレームワークです。以下は、BentoMLフレームワークを高レベルで使用する方法です:

  1. モデルの定義:BentoMLを使用するには、機械学習モデル(または複数のモデル)が必要です。このモデルは、TensorFlowやPyTorchなどの機械学習ライブラリを使用してトレーニングできます。
  2. モデルの保存:トレーニング済みのモデルをBentoMLのローカルモデルストアに保存します。これは、すべてのトレーニング済みモデルをローカルで管理し、サービングにアクセスするために使用されます。
  3. BentoMLサービスの作成:モデルをラップし、サービスのロジックを定義するためにservice.pyファイルを作成します。これは、モデルの推論をスケールで実行するためのランナーを指定し、入力と出力の処理方法を定義するAPIを公開します。
  4. Bentoのビルド:構成YAMLファイルを作成することで、すべてのモデルとサービスをパッケージ化し、コードと依存関係を含む展開可能なアーティファクトであるBentoを作成します。
  5. 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.pyIFPipelineの各ステージのモデルを定義します。このファイルを使用して、すべてのモデルをローカルマシンにダウンロードし、単一のBentoにパッケージ化することができます。
  • requirements.txt:このプロジェクトに必要なすべてのパッケージと依存関係を定義します。
  • service.pyto_runnerメソッドを使用して作成された3つのランナーを含むBentoMLサービスを定義し、画像を生成するためのAPIを公開します。APIはJSONオブジェクト(プロンプトとネガティブプロンプト)を入力とし、モデルのシーケンスを使用して画像を出力します。
  • start-server.pyservice.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!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

機械学習

もし芸術が私たちの人間性を表現する方法であるなら、人工知能はどこに適合するのでしょうか?

MITのポストドクターであるジヴ・エプスタイン氏(SM '19、PhD '23)は、芸術やその他のメディアを作成するために生成的AIを...

人工知能

「ジンディのCEO兼共同創設者、セリーナ・リー― インタビューシリーズ」

「Celina Leeは、ZindiのCEO兼共同創設者であり、アフリカのデータサイエンティスト向けの最大の専門ネットワークです Celina...

人工知能

「トリントの創設者兼CEO、ジェフ・コフマンへのインタビューシリーズ」

ジェフ・コーフマンは、ABC、CBS、CBCニュースで30年のキャリアを持った後、Trintの創設者兼CEOとなりましたジェフは手作業の...

人工知能

「Ntropyの共同創設者兼CEO、ナレ・ヴァルダニアンについて - インタビューシリーズ」

「Ntropyの共同創設者兼CEOであるナレ・ヴァルダニアンは、超人的な精度で100ミリ秒以下で金融取引を解析することを可能にす...

人工知能

キャルレールの最高製品責任者、ライアン・ジョンソンへのインタビューシリーズ

ライアンは、初期のスタートアップからフォーチュン100の組織まで、多様なテクノロジーと製品開発のリーダーシップ経験を15年...

人工知能

「シフトのCEOであるクリス・ナーゲル – インタビューシリーズ」

クリスはSiftの最高経営責任者です彼は、Ping Identityを含むベンチャー支援および公開SaaS企業のシニアリーダーシップポジシ...