Black Forest Labsの最近リリースされたFluxモデルは、その印象的な画像生成機能で人気を博しています。ただし、そのサイズは当初、標準の消費者ハードウェアでの使用を妨げていました。この制限は、ローカルモデルの負荷を回避するためにAPIサービスの使用に拍車をかけました。ただし、GPUの要件により、オンプレミスの展開は費用がかかりました。幸いなことに、Hugging FaceのDiffusers Libraryは、BitsandBytesを介した量子化をサポートし、8GBのGPU RAMのみのマシンにフラックス推論を可能にします。
学習目標:
この記事は、Data Science Blogathonの一部です。
目次:
フラックスとは何ですか?
Black Forest Labs(安定した拡散の作成者)によって開発されたフラックスは、テキストからイメージモデルの重要な進歩を表しています。安定した拡散に基づいており、パフォーマンスと出力の品質が向上します。当初はリソースが集中していましたが、最適化により、消費者ハードウェアで効率的な実行が可能になります。この記事では、量子化がフラックスのアクセシビリティをどのように強化するかを示しています。以下の画像は、創造的な可能性と計算コストのトレードオフを示しています。
Fluxは、いくつかの重要なアーキテクチャコンポーネントを誇っています。
フラックスは、フラックスシュネル(オープンソース)、フラックスデフ(オープン、より制限的なライセンスを備えた)、およびフラックス-Pro(クローズドソース、APIアクセス可能)のいくつかのバージョンで利用できます。
なぜ量子化が重要なのですか?
量の少ないビットを使用してパラメーターを保存することでモデルサイズを縮小する手法である量子化は、限られたハードウェアで大きなモデルを実行するために重要です。画像生成ではあまり一般的ではありませんが、パフォーマンスの大幅な損失なしにメモリフットプリントを大幅に削減します。ニューラルネットワークパラメーターは通常32ビットで保存されますが、量子化はこれを4ビットに減らすことができます。
bitsandbytesによる量子化
BitsandBytesライブラリは、Pytorchの効率的なKビット量子化を可能にします。 Diffusersライブラリへの統合により、8GB GPUの流動性が実現可能になります。
bitsandbytesはどのように機能しますか?
BitsandBytesは、8および4ビット精度に量的になります。 8ビットの量子化は、パフォーマンスの劣化を最小限に抑えるために異なる方法で外れ値を処理します。 4ビット量子化は、モデルをさらに圧縮し、微調整にQloraでよく使用されます。
消費者ハードウェアの流動性を実行します
ステップ1:環境のセットアップ
GPU対応環境(例、NVIDIA T4/L4またはGoogle Colab)を確保します。必要なパッケージをインストールします:
!pip install -uq git https://github.com/huggingface/diffusers@main !PIPインストール-UQ git https://github.com/huggingface/transformers@main !ピップインストール-UQビットアンドバイト
依存関係のインポート:
ディフューザーをインポートします トランスを輸入します BNBとしてbitsandBytesをインポートします DiffusersからImport FluxPipeline、FluxTransformer2DModel トランスからT5ENCODERMODELをインポートします トーチをインポートします GCをインポートします
ステップ2:GPUメモリ管理
モデル負荷間でGPUメモリをクリアする関数を定義します。
def flush(): gc.collect() torch.cuda.empty_cache() torch.cuda.reset_max_memory_allocated() torch.cuda.reset_peak_memory_stats() フラッシュ()
ステップ3:4ビットT5テキストエンコーダーのロード
4ビット量子化を使用してT5エンコーダーをロードします。
ckpt_id = "Black-Forest-labs/flux.1-dev" ckpt_4bit_id = "hf-internal-testing/flux.1-dev-nf4-pkg" PROMP =「パリの写真撮影のかわいい犬」 text_encoder_2_4bit = t5encodermodel.from_pretrained( ckpt_4bit_id、 subfolder = "text_encoder_2"、 ))
ステップ4:テキストの埋め込みを生成します
量子化されたエンコーダーを使用してプロンプトをエンコードします。
pipeline = fluxpipeline.from_pretrained( 「Black-Forest-Labs/Flux.1-dev」、 text_encoder_2 = text_encoder_2_4bit、 トランス=なし、 vae = none、 torch_dtype = torch.float16、 )) torch.no_grad()を使用して: PROMPT_EMBEDS、Pooled_prompt_embeds、text_ids = pipeline.encode_prompt( PROMP = PROMPT、PROMPT_2 =なし、max_sequence_length = 256 )) デルパイプライン フラッシュ()
ステップ5:4ビットトランスとVAEのロード
トランスとVAEを4ビットモードでロードします。
transformer_4bit = fluxtransformer2dmodel.from_pretrained(ckpt_4bit_id、subfolder = "transformer") pipeline = fluxpipeline.from_pretrained( ckpt_id、 text_encoder = none、 text_encoder_2 = none、 トークネイザー=なし、 tokenizer_2 = none、 Transformer = Transformer_4bit、 torch_dtype = torch.float16、 )) pipeline.enable_model_cpu_offload()
ステップ6:画像生成
画像を生成します:
print( "denoisingの実行。") 高さ、幅= 512、768 画像=パイプライン( PROMPT_EMBEDS = PROMPT_EMBEDS、 pooled_prompt_embeds = pooled_prompt_embeds、 num_inference_steps = 50、 Guidance_scale = 5.5、 高さ=高さ、 幅=幅、 output_type = "pil"、 ).images 画像[0]
デバイス上の画像生成の未来
量子化と効率的なモデル処理は、強力なAIを消費者ハードウェアにもたらし、高度な画像生成へのアクセスを民主化します。
結論
流束は、量子化と組み合わせて、8GB GPUで高品質の画像生成を可能にします。この進歩により、洗練されたAIはより多くの聴衆がアクセスできます。
重要なテイクアウト:
diffusers
とtransformers
画像生成を簡素化します。よくある質問(オリジナルと同じですが、より良い読みやすさのために再フォーマットされています)
Q1。 4ビット量子化の目的? 4ビットの量子化により、メモリの使用量が減少し、フラックスなどの大規模なモデルが限られたリソースで効率的に実行できるようになります。
Q2。テキストプロンプトを変更しますか? prompt
変数を目的のテキスト説明に置き換えます。
Q3。画質/スタイルを調整しますか? pipelineコールでnum_inference_steps
(Quality)とguidance_scale
(プロンプトアドヒアランス)を調整します。
Q4。コラブのメモリエラーの処理? GPUの使用、4ビット量子化、および混合精度を確保します。 num_inference_steps
を下げるか、CPUオフロードを使用することを検討してください。
Q5。スクリプトをローカルに実行しますか?はい。ただし、十分なGPUリソースとメモリを確認してください。
以上が8GB GPU RAMでフラックスモデルをどのように実行しますか? - 分析Vidhyaの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。