18
10

画像生成AI FLUX.1 をBlack Forest Labs リファレンス実装、Diffusers、ComfyUI で動かしてみた(セルフホスト)

Last updated at Posted at 2024-08-12

はじめに

Stable Diffusion の開発メンバーなどが立ち上げた Black Forest Labs の画像生成AIモデル FLUX.1 が話題になっています。プロンプトへの追随性能もなかなか良く、人物も指や四肢の破綻の少ない高品質な画像を生成することができます。また、[pro][dev][schnell]の3つのモデルのうち [dev][schnell] はモデルウェイトが公開されていて OCI のようなクラウドやローカル環境でセルフホスティングすることができます。

ComfyUI_00077_.png

ComfyUI_00132_.png

この記事では、ローカルの Windows 11 PC、それも、Nvidia GeForce RTX2060 VRAM 6GB という FLUX.1 のような巨大モデルには厳し過ぎる GPU 環境で様々な方法で動かしてみた経験をまとめています。

これらの 3つのセルフホスティング手法をいずれも Windows の共有GPUメモリが有効な状態で試しています。

プログラミングはしないのでノーコードで画像生成したい方は、後半の ComfyUI へ直行していただくのが良いかもしれません

どの方法も OCI などのクラウドの GPU インスタンスでも同じ手順が使えるはずです(インターネットからアクセスできないインスタンス上の Gradio や ComfyUI の WebUI は Pinggy や Localtunnel でトンネルさせることができます ⇒ OCI Cloud Shell でも VS Code を使いたい と同じ手順)

ちなみに、同じ弱弱GPU環境で Stable Diffusion 3 Medium を動かしてみたときの記事もありますので、やっぱりSDが好きという方はこちら ↓ も覗いてみてください。

FLUX.1 とは

高画質

ComfyUI_00064_.png

ComfyUI_00133_.png

アニメ風のイラストも得意

ComfyUI_00070_.png

ComfyUI_00131_.png

プロンプトの効きが良い

ComfyUI_00094_.png

ComfyUI_00091_.png

ComfyUI_00101_.png

ComfyUI_00100_.png

文字も綺麗(アルファベット)

ComfyUI_00116_.png

flux-schnell.png

巨大

12B(120億)パラメータ

FLUX.1 [dev]

  • オープンウェイト(モデルウェイトを公開)
  • クローズドソース(モデルウェイトを公開していない)モデルに匹敵するプロンプト追随性能
  • Guidance Distillation を使ってFLUX.1[pro]から直接蒸留したモデル。高品質なイメージを効率的に生成
  • 生成された出力は、個人的、科学的、商業的な目的で使用することが可能。出力、つまり、生成された画像は商用でも利用可能ですが出力以外の派生物(ファインチューニングしたモデルなど)は商業的な利用はできませんのでご注意ください。詳しくは、ライセンスの定義 flux-1-dev-non-commercial-license を参照してください

FLUX.1 [schnell]

  • オープンウェイト(モデルウェイトを公開)
  • クローズドウェイト(モデルウェイトを公開していない)モデルに匹敵するプロンプト追随性能
  • latent adversarial diffusion distillation により高品質なイメージを 1 ~ 4 ステップで生成できる最速モデル
  • 生成された出力は、個人的、科学的、商業的な目的で使用することが可能。ライセンスは、apache-2.0
    https://github.com/black-forest-labs/flux/blob/main/model_cards/FLUX.1-schnell.md

FLUX.1 [pro]

  • クローズドウェイト(モデルウェイトを公開していない)
  • FLUX.1の最高峰で、プロンプトの追従性、ビジュアルクオリティ、画像のディテール、出力の多様性など、最先端のパフォーマンスを備えた画像生成を提供

Black Forest Labs の APIサービス もしくは、Replicatefal.ai のサービスでのみ利用可能。(fal.ai については Black Forest Labs の公式ページに名前がありますが 2024/8/11 時点では fal.ai のサイト上に [pro] は見当たりません。[dev] と [schnell] は利用できるようです)

なお、[pro] はセルフホストできないためこの記事ではこれ以上は触れていません。

Black Forest Labs リファレンス実装

ComfyUI や AUTOMATIC1111氏の Stable Diffusion Web UI のような出来合いの UI からではなく自分でプログラムを組みたいときのリファレンス実装です。Text to Image と Image to Image(FLUX.1 [dev] のみ) の実装を確認&お試しできます。

Falconsai/nsfw_image_detection を使った NSFW(Not Safe for Work:職場での閲覧に適さない画像) の検知なども実装されていてとても参考になりますね

前提条件

インストール

インストール先のフォルダ(ディレクトリ)にリファレンス実装のリポジトリをクローンします

git clone https://github.com/black-forest-labs/flux
cd flux

Python 仮想環境を作成します(推奨)。ここでは、venv を使います

Python仮想環境の作成(Windows Git Bash の場合)
py -3.11 -m venv .venv
source .venv/Scripts/activate
Python仮想環境の作成(Linux の場合)
python3.11 -m venv .venv
source .venv/bin/activate

依存するパッケージをインストールします

依存パッケージのインストール
pip install -e '.[all]'

PyTorch の確認

CUDA対応の PyTorch がインストールされたことを確認します

PyTorchバージョン確認
pip show torch
出力例
$ pip show torch
Name: torch
Version: 2.4.0+cu124
Summary: Tensors and Dynamic neural networks in Python with strong GPU acceleration
Home-page: https://pytorch.org/
Author: PyTorch Team
Author-email: packages@pytorch.org
License: BSD-3
Location: d:\lab\FLUX\FLUX.1\.venv\Lib\site-packages
Requires: filelock, fsspec, jinja2, networkx, sympy, typing-extensions
Required-by: accelerate, optimum-quanto

この出力例のように Version に バージョン番号に続いて +cu124 のような CUDA Toolkit バージョンが表示されていれば正しくCUDA対応の PyTorch がインストールされています。Version: 2.4.0 のように PyTorch のバージョン番号だけが表示された場合は、CUDA 対応ではありませんので、CUDA 対応 PyTorch をインストールします。その場合は、PyTorch をアンインストールして、再度適切な PyTorch をインストールします。PyTorch と CUDA Toolkit のバージョンコンパチビリティの確認でインストールコマンドを確認することができます。

CUDA 対応 PyTorch のインストール(上の確認結果で必要な場合のみ)

torch のアンインストール
pip uninstall torch
CUDA Toolkit のバージョン確認
nvcc --version
nvcc 出力例
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Thu_Mar_28_02:30:10_Pacific_Daylight_Time_2024
Cuda compilation tools, release 12.4, V12.4.131
Build cuda_12.4.r12.4/compiler.34097967_0

最後の行の Build cuda_ の後に CUDA Toolkit のバージョンが表示されています
これの例では 12.4 であることがわかります
PyTorch と CUDA Toolkit のバージョンコンパチビリティの確認でインストールコマンドを確認します。
image.png

この例の場合のインストールコマンドは次のようになります。

PyTorchインストールコマンド
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124

FLUX.1 を使用するためには torchtorchvision だけあれば良いので torchaudio を除いた以下のコマンドでも大丈夫です

PyTorchインストール
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu124

CUDA対応の PyTorch がインストールされたかどうか確認します

PyTorchバージョン確認
pip show torch
torchvision バージョン確認
pip show torchvision

ライセンス条件への同意とHugging Face へログイン(Dev を使用する場合のみ)

FLUX.1 Dev を使用する場合には Hugginface にログインして認証してもらう必要があります。ライセンス条件に同意したアカウントでログインしていないとこのようなエラーが出てモデルをダウンロードできません。

Cannot access gated repo for url https://huggingface.co/black-forest-labs/FLUX.1-dev/resolve/main/model_index.json.
Access to model black-forest-labs/FLUX.1-dev is restricted. You must be authenticated to access it.
  • Hugging Face のアカウントを取得します(Hugging Face アカウント作成ページ で無料で登録することができます)
  • Hugging Face の User Access Token を取得します(Hugging Face User Access Token 作成ページ で無料で取得できます。"Type" は、"READ")
  • FLUX.1-dev の Model Card に表示されている "You need to agree to share your contact information to access this model" から Hugging Face にログインしてモデルなどのコンテンツにアクセスする条件に同意する必要があります(一度、同意するとこの表示は現れなくなります)

image.png

Hugging Face CLI のインストール

pip install huggingface_hub

Hugging Face にログイン

ターミナル(コマンドプロンプト)で次のコマンドを実行します

huggingface-cli login

Hugging Face のバナーが表示されてトークン(User Access Token)の入力を促されます

(.venv) Japanese_Stable_VLM $ huggingface-cli login

    _|    _|  _|    _|    _|_|_|    _|_|_|  _|_|_|  _|      _|    _|_|_|      _|_|_|_|    _|_|      _|_|_|  _|_|_|_|
    _|    _|  _|    _|  _|        _|          _|    _|_|    _|  _|            _|        _|    _|  _|        _|
    _|_|_|_|  _|    _|  _|  _|_|  _|  _|_|    _|    _|  _|  _|  _|  _|_|      _|_|_|    _|_|_|_|  _|        _|_|_|
    _|    _|  _|    _|  _|    _|  _|    _|    _|    _|    _|_|  _|    _|      _|        _|    _|  _|        _|
    _|    _|    _|_|      _|_|_|    _|_|_|  _|_|_|  _|      _|    _|_|_|      _|        _|    _|    _|_|_|  _|_|_|_|

    To login, `huggingface_hub` requires a token generated from https://huggingface.co/settings/tokens .
Token can be pasted using 'Right-Click'.
Enter your token (input will not be visible):

ここで Hugging Face のトークン(User Access Token)を入力します

Add token as git credential? (Y/n)

ここで、トークンを Git の認証情報として追加するかを選択します。どちらでも本アプリケーションの実行には影響ありません
トークンが正しければ次のように表示されてログイン完了です

Token is valid (permission: read).
Your token has been saved to C:\Users\yujim\.cache\huggingface\token
Login successful

公式リファレンス実装デモ(Gradio版)を実行

起動

python demo_gr.py --offload --share --device cuda

--offload は、コンポーネントが必要な時にだけ GPU VRAM へロードされ使われていないときには CPU(にぶら下がっている)メモリへオフロードするよう指示しています。RTX 2060 の VRAM が 6GB しかないためこれを指定しています
--share は、Gradio アプリケーションにインターネット経由でアクセスできるようにパブリックURLを割り当ててトラフィックをトンネルさせる指定です。クラウド環境を使うような場合に便利です
--device で GPU を使用するように指示しています。これはデフォルトですのでなくても大丈夫です
ここでは指定していませんが --name で使いたいモデルを flux-schnellflux-dev で指定できます。flux-schnell がデフォルトです。

なお、起動オプションはヘルプで確認できます

$ python demo_gr.py -h
usage: demo_gr.py [-h] [--name {flux-dev,flux-schnell}] [--device DEVICE]
                  [--offload] [--share]

Flux

options:
  -h, --help            show this help message and exit
  --name {flux-dev,flux-schnell}
                        Model name
  --device DEVICE       Device to use
  --offload             Offload model to CPU when not in use
  --share               Create a public link to your demo

上記の起動コマンドを実行するとモデルのダウンロード/ロードが行われ Gradio サーバが起動すると以下のようなメッセージが表示されます

Running on local URL:  http://127.0.0.1:7860
Running on public URL: https://xxxxxxxxxxxxx.gradio.live

初回は、Hugging Face からモデルをダウンロードするためかなり時間がかかります。2回目以降も UI のサーバを起動する前にモデルをローカルキャッシュからメモリへのロードするため環境よっては時間がかかります(ディスクが遅いなど)。
このメッセージが表示されたらローカルで実行している場合は local URL: http://127.0.0.1:7860 を、クラウドなどのリモートで実行している場合は public URL: https://xxxxxxxxxxxxx.gradio.live をブラウザで開きます(xxxxxxxxxx は都度異なります)。Gradio の UI が表示されます
image.png

生成(Text to Image)

"Generate" をクリックします。"Prompt" にはデフォルトのプロンプトが仕込まれています。
生成が完了するとこのような画像が生成されます。
ea6e1684-b625-4a6b-8eac-d470a0580990.jpg

このときの生成中のGPU メモリ使用量の最大値は 26.4GB(専用 GPU メモリ:5.7G + 共有 GPU メモリ:20.7GB)でした。4 Step で生成できる Schnell でも 7000秒 もかかってしまいました.... Difffusers ではこのようなことは起こらなかった ので理由は理解できていません(Diffuses でも、bfloat16 を使った際に似たようなことが起きていました。RTX2060には bfloat のハードウェアサポートが無いためと思われます。Diffusers では、bfloat16 の代わりに float16 を使ってしのいでいます。同じ原因の可能性もあります)....私の弱弱GPUのような環境の方は Hugging Face Diffusers を、プログラミングには興味が無い方はComfyUIを試された方がいいかもしれません。

プロンプトを変えて生成してみます。左上の ”Prompt” に別のプロンプトを入力して生成してみます。

ComfyUI Examples の Flux.1 公式の workflow に設定されているケモ耳の女の子プロンプトに「大きな丸い眼鏡をかけている」を追加したプロンプトを使ってみました。生成された画像はこちらです

2f498faf-679b-49b9-b280-8a31284120bb.jpg

cute anime girl with massive fluffy fennec ears and a big fluffy tail blonde messy long hair blue eyes wearing a maid outfit with a long black gold leaf pattern dress, wearing big round glasses and a white apron mouth open holding a fancy black forest cake with candles on top in the kitchen of an old dark Victorian mansion lit by candlelight with a bright window to the foggy forest and very expensive stuff everywhere

※ Dev を使用する際のデフォルトは 50 Step ですが 20 Step 程度でも良い結果が得られると思います。Gradio UI の "Advanced Options" にある "Number of steps" を 調整して生成します

Image to Image (Flux.1 [dev] のみ)

"Prompt" の直下の "Image to Image" のチェックボックスにチェックを入れます。すると画像をアップロードするエリアが表示されます

image.png

画像をアップロートして、"Prompt" を設定して "Generate" をクリックします

image.png

Hugging Face Diffusers

Diffusers とは?

Diffusersは、Hugging Faceが開発した拡散モデル(Diffusion Model)のためのオープンソースライブラリです

Diffusers の特徴

  • 簡潔さ : 数行のコードで画像生成などの複雑なタスクを実行できます
  • 柔軟さ : モデルのカスタマイズや新しいモデルの開発が容易にできます
  • 豊富な事前学習済みモデル : Hugging Face Hub からStable Diffusion、FLUX等の多数の事前学習済みモデルを簡単にダウンロードして使用できます

FLUX.1 [dev] @ Hugging Face

デモ(Hugging Face Spaces)

モデルカード

FLUX.1 [schnell] @ Hugging Face

デモ(Hugging Face Spaces)

モデルカード


Diffusers を使ったサンプルコード

このサンプルコード(私、kutsushitaneko版)は、起動時の指定で Optimum Quanto を使った量子化に対応しています。Optimum Quanto は、Hugging Face Optimum の量子化バックエンドです。

前提条件

サンプルコードの取得

Github のリポジトリからクローンします

git clone https://github.com/kutsushitaneko/flux1-diffusers.git
cd flux1-diffusers

Python 仮想環境を作成します(推奨)。ここでは、venv を使います

Python仮想環境の作成
python3.10 -m venv .venv
source .venv/bin/activate

PyTorch のインストール

CUDA 対応 PyTorch のインストール(上の確認結果で必要な場合のみ) の手順で CUDA 対応バージョンの PyTorch をインストールします

Hugging Face へログイン(Dev を使用する場合のみ)

こちら の手順で Hugging Face にログインします

依存パッケージのインストール

依存パッケージインストール
pip install -r requirements.txt

Diffusers版サンプルコードの実行

ヘルプ(オプション)の表示
FLUX1Quantize_and_Generate.py -h
ヘルプの出力
$ python FLUX1Quantize_and_Generate.py -h
usage: FLUX1Quantize_and_Generate.py [-h] [--model {flux-schnell,flux-dev}] [--offload] [--weight {int2,int4,int8,fp8,none}] [--share] [--inbrowser]

Flux.1 with Diffusers demo app

options:
  -h, --help            show this help message and exit
  --model {flux-schnell,flux-dev}
                        Model name(default: flux-schnell)
  --offload             Offload model to CPU when not in use
  --weight {int2,int4,int8,fp8,none}
                        quantization precision(default: int8)
  --share               Create a public link to your demo
  --inbrowser           Launch the demo in the browser

モデルには、FLUX.1 Schnell(デフォルト) を int8 量子化(デフォルト)、Model Offload あり、Public URL で共有あり、自動的にブラウザに表示でアプリを起動するには次のコマンドを使います

アプリ起動
python FLUX1Quantize_and_Generate.py --offload --share --inbrowser

起動には、量子化(weight に int2, int4, init8(デフォルト), fp8 を指定)した場合は 私の環境 で 4分程度、量子化しない場合(weight に none を指定した場合)に 1分程度かかります

アプリが起動すると次のようなメッセージが表示されます

コンソールメッセージ
...
...
パイプラインの作成時間: 52.15 秒
Running on local URL:  http://127.0.0.1:7860
Running on public URL: https://xxxxxxxx.gradio.live

This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from Terminal to deploy to Spaces (https://huggingface.co/spaces)

ブラウザが自動的に立ち上がらない場合は、ローカル環境であれば local URL の http://127.0.0.1:7860 を、クラウドなどのリモート環境であれば public URL の https://xxxxxxxx.gradio.live をブラウザで開きます(xxxxxxxx は都度異なります)。この public URL は アプリを終了しない限り 72時間有効です。アプリを終了する際は Ctrl-C で終了します

画像生成

image.png

量子化しない(weight = none)場合の表示例

詳細設定をクリックすると画像のサイズなどを設定できます

image.png

左上の "Prompt" に生成したい画像のプロンプト(英語)を入力して「画像生成」ボタンをクリックすると生成が始まります

生成完了時の画面

image.png

生成画像例

flux-schnell-output2.png

flux-schnell-output.png

A cat holding a sign that says Hello Kitty A cute anime girl is standing on the hill. She has black hair, a bob, a white beret, and a red cardigan over a white blouse. Her skirt is a white fluffy mini frill skirt with a large spread. She is wearing white knee-high socks. Her shoes are pink. Cherry blossoms are dancing on the asphalt slope leading to the hill. The composition is looking up at her from the bottom of the hill

aek3s-wuk7r.png

a079f-y2om1.png

3D animation style graphics reminiscent of Pixar of a magical girl in a pink costume. She is holding a magic wand. Beside her is a white cat Cat driving a motorcycle

サンプルコードの説明

Diffusers FluxPipeline のインポート
from diffusers import FluxPipeline

FLUX.1 でテキストから画像を生成する pipeline のクラスです

Diffusers Pipeline の生成
def create_pipe(model: str, offload = True, weight = "int8"):
    if model == "flux-schnell":
        bfl_repo = "black-forest-labs/FLUX.1-schnell"
    elif model == "flux-dev":
        bfl_repo = "black-forest-labs/FLUX.1-dev"
    else:
        raise ValueError(f"Invalid model name: {model}")

    start_time = time.time()
    pipe = FluxPipeline.from_pretrained(
        bfl_repo, torch_dtype=torch.float16
    )

    if weight != "none":
        quantize(pipe.transformer, weights=UNET_QTYPES[weight], exclude=["proj_out", "x_embedder", "norm_out", "context_embedder"])
        freeze(pipe.transformer)
        quantize(pipe.text_encoder_2, weights=UNET_QTYPES[weight])
        freeze(pipe.text_encoder_2)

    if offload:
        pipe.enable_model_cpu_offload()
    else:
        pipe.to("cuda")

    end_time = time.time()
    execution_time = end_time - start_time
    print(f"パイプラインの作成時間: {execution_time:.2f}")
    return pipe

FluxPipeline.from_pretrained(bfl_repo, torch_dtype=torch.float16)bfl_repo に指定された Hugging Face Hub のリポジトリからモデルをダウンロードして、text2image の pipeline を生成しています

torch_dtype=torch.float16 としていますが本来は、float16 ではなく bfloat16 です。私の PC の GPU RTX2060 には bfloat16 のハードウェアサポートがなく非常に遅くなるため RTX2060 でもハードウェアサポートがある float16 としています。

bfloat16float16 では生成される画像が異なります。この問題への対処方法は Diffusers のドキュメントのRunning FP16 inferenceに記載がありますが、このサンプルコードでは未対応です。
bfloat16 に対応した GPU を使う場合は bfloat16 を使ってください。

起動パラメータの weight に none 以外が指定された場合、Optimum Quanto の quantize() を使って量子化しています。量子化することで GPU の VRAM 消費量を減らすことができます。ただし、量子化処理に CPU 側のメモリを大量に必要とします。CPU側のメモリが 64GBあれば余裕で量子化できますが 32GB だと厳しいかもしれません

また、起動パラメータ offload が指定された場合は、enable_model_cpu_offload()で Model Offloading しています。これは、モデルのコンポーネントが必要なときにだけ GPU VRAM に載り、使用していないときには CPU側のメモリへ退避することで GPU VRAM の必要量を削減する機能です

さらに GPU VRAM の使用量を抑制するには、以下の機能の利用が考えられます

  • enable_sequential_cpu_offload()
  • vae.enable_slicing()
  • vae.enable_tiling()

詳しくは、Diffusers のドキュメントの Reduce memory usage に詳しい説明があります

LoRA

LoRA (Low-Rank Adaptation) は、大規模な事前学習済みモデルを効率的にファインチューニングするための技術です。特に画像生成AIの分野で元のモデルの画風を変えたり特定の種類の画像を意図したとおりに生成されやすくする目的で多く活用されています
Diffusers を使った LoRA の適用については別のブログを書きました。こちら ↓ です。

さらに、別の LoRA を試した続編↓です。

ComfyUI

ComfyUI のインストール

動作環境毎(Windows/Linux/Mac)のインストール手順はこちら ↓ に説明があります

ここでは Windows の場合だけ説明します

Windows での前提条件

Windows へのComfyUIインストール手順

  • ダウンロードファイルのダイレクトリンク から 7-Zip ファイルをダウンロードします
  • ダウンロードしたファイルを 7-Zip で解凍します
  • ComfyUI_windows_portable というフォルダが現れますのでこれを開きます
  • update フォルダを開きます
  • update_comfyui_and_python_dependencies.bat をダブルクリックします(CUDA Toolkit 12.1 対応の PyTorch が決め打ちでインストールされます。私は CUDA Toolkit 11.8 ですが、このまま 12.1 対応 PyTorch がインストールされた状態で動作しています。動作に問題があるようでしたら PyTorch だけ適切なバージョンを入れなおしてみるもの良いかもしれません。その場合は、PyTorch の確認CUDA 対応 PyTorch のインストール(上の確認結果で必要な場合のみ) を参考にしてみてください)
  • ComfyUI_windows_portable フォルダに戻ります

ComfyUI における FLUX.1 の使い方

こちら ↑ の公式サイトに記載がありますが、以下に私がやってみたときのメモをまとめておきます。

FLUX.1 モデルのダウンロード

ComfyUI 用の FLUX.1 のモデルには、Dev と Schnell のそれぞれに

  • FP8 Checkpoint Version(シングルファイル)
  • Regular Full Version(テキストエンコーダー、VAE、拡散モデルが別々のファイル)

があります。Regular Full Version は、fp16 で 32GB 以上の GPU VRAM を必要とします。私のような小さな VRAM の GPU しか持っていない人は FP8 Checkpoint Version が向いていそうです。

しかし、私の RTX2060 では、FP8 Checkpoint Version は画像生成が永遠に終わりません。実際には永遠には試していませんが数時間経過しても 1 Step も生成が進みません。RTX2060 には fp8 のハードウェアサポートが無いからでしょうか...とはいえ、Diffusers で量子化した際には int8 も fp8 の生成時間に差は見られなかったので謎です...

ということで、Regular Full Version を使用します。あれ?32GB GPU VRAM が必要なのではと思われたと思いますが Windows では共有GPUメモリという OS 仮想メモリのスワップアウトのような仕組みがあり GPU の VRAM からあふれた分は CPU にぶら下がっている通常のメモリにスワップアウトしてくれます。もちろん、速度は大幅に落ちてしまいますがそもそもこんな古いGPUで動かそうとしているので贅沢は言えません。動くだけ有難いということで。(fp8 がうまく動作しないのは私の環境問題か何か手順でミスをしているのかもしれません。試してみたい方は Simple to use FP8 Checkpoint version に手順があります。生成時に CFG を 1.0 にするのを忘れないようにしましょう)

テキストエンコーダー

FLUX.1 のテキストエンコーダーは CLIP と T5 の2つがあります。SD3 Medium では、CLIP だけで動作させることができましたが FLUX.1 では両方必要なようです(下記の workflow で試す限りは CLIP だけではエラーとなりました)。Dev と Schnell による違いはありません。

CLIP のダウンロード

Hugging Face Hub の comfyanonymous/flux_text_encoders リポジトリ から clip_l.safetensors をダウンロードします。ファイルは、ComfyUI/models/clip/ フォルダに配置します。Windows の場合、インストール時に ComfyUI の 7-Zip ファイルを解凍すると ComfyUI_windows_portable というフォルダができていて、その直下に ComfyUI フォルダがあるはずです。

T5 のダウンロード

Hugging Face Hub の comfyanonymous/flux_text_encoders リポジトリ から t5xxl_fp16.safetensors をダウンロードします。ファイルは、CLIP のときと同様に ComfyUI/models/clip/ フォルダに配置します。

T5 には、FP16 の t5xxl_fp16.safetensors と FP8 の t5xxl_fp8_e4m3fn.safetensors があります。公式には、メモリ消費量を抑えるためには t5xxl_fp8_e4m3fn.safetensors が使える、しかし、32GB 以上のメモリがあれば t5xxl_fp16.safetensors を勧めると書かれています。私の共有GPUメモリ必須な 6GB VRAM 環境ではどちらを使っても生成時間に差は見られませんでした。これだけ環境が弱弱だともはや五十歩百歩ということなのでしょうか。それとも GPU VRAM に載っていないといけない領域の局所性が高いということなのでしょうか。このあたりよく理解できていません。というのは、公式のリファレンス実装や Diffusers では共有GPUメモリを使うと生成時間が実用性がまるでないレベルになるのに ComfyUI では、テキストエンコーダーも拡散モデルも FP16 を使っているのに公式のリファレンス実装よりも10倍も生成速度が速いのです。ComfyUI が何か工夫をしているのだと思います。ということで精度が高い t5xxl_fp16.safetensors を使っています。

VAE のダウンロード

VAE も Dev と Schnell で共通です。
Hugging Face Hub の black-forest-labs/FLUX.1-schnell リポジトリ から ae.safetensors をダウンロードします。ファイルは、ComfyUI/models/vae/ フォルダに配置します。

FLUX.1 拡散モデル

拡散モデルは、 Dev か Schnell か使いたいモデルによって異なります。

FLUX.1 Dev 拡散モデルのダウンロード(Dev を使用する場合のみ)

Hugging Face Hub の black-forest-labs/FLUX.1-dev リポジトリ から flux1-dev.safetensors をダウンロードします。ファイルは、ComfyUI/models/unet/ フォルダに配置します。

FLUX.1 Schnell 拡散モデルのダウンロード(Schnell を使用する場合のみ)

Hugging Face Hub の black-forest-labs/FLUX.1-dev リポジトリ から flux1-schnell.safetensors をダウンロードします。ファイルは、ComfyUI/models/unet/ フォルダに配置します。

画像生成

ComfyUI で画像生成を行うためには workflow を定義する必要があります。Dev 用の workflow と Schnell 用の workflow が埋め込まれた画像がそれぞれ公式から提供されています。

CompyUI を起動

Windows の場合、ComfyUI の7-Zip ファイルを解凍して作られた ComfyUI_windows_portable フォルダの run_nvidia_gpu.bat をダブルクリックします。ブラウザに ComfyUI が表示されます

FLUX.1 Dev workflow のセットアップ(Dev を使用する場合のみ)
Dev 用 workflow をロード

ComfyUI Examples Flux Dev にアクセスして、ケーキを持ったケモ耳の女の子の画像を ComfyUI へドラッグ&ドロップしてます。もしくは、この画像をダウンロードして、ComfyUI の右端の"Load"ボタンからロードします。以下の画像をクリックして拡大表示したものをドラッグ&ドロップでも大丈夫です。

flux_dev_example.png
FLUX.1 Schnell workflow のセットアップ(Schnell を使用する場合のみ)
Schnell 用 workflow をロード

ComfyUI Examples Flux Schnell にアクセスして、鮮やかなボトルと地球が入ったワイングラスの画像を ComfyUI へドラッグ&ドロップしてます。もしくは、この画像をダウンロードして、ComfyUI の右端の"Load"ボタンからロードします。以下の画像をクリックして拡大表示したものをドラッグ&ドロップでも大丈夫です。

flux_schnell_example.png
画像生成(Dev / Schnell で操作は共通)
プロンプトの設定

ComfyUI 中央の緑色の"CLIP Text Encoder(Positive Prompt)"に英語でプロンプトを設定します。AUTOMATIC1111氏の Stable Diffusion Web UI のようなカンマ区切りで単語を並べて行ったり括弧で特定の単語の効果を強調したりといったお作法はありませんので、普通に英語の文章で描きたい情景を記述します。
例えば、上の公式サンプルのケモ耳の女の子のプロンプトはこうなっています。

cute anime girl with massive fluffy fennec ears and a big fluffy tail blonde messy long hair blue eyes wearing a maid outfit with a long black gold leaf pattern dress and a white apron mouth open holding a fancy black forest cake with candles on top in the kitchen of an old dark Victorian mansion lit by candlelight with a bright window to the foggy forest and very expensive stuff everywhere

日本語に訳すとこんな感じでしょうか

かわいいアニメの少女で、巨大でふわふわのフェネックの耳と大きなふわふわの尻尾を持ち、金髪の乱れた長い髪と青い目をしています。メイド服を着ており、長い黒の金箔模様のドレスと白いエプロンを身につけています。口を開けて、豪華なブラックフォレストケーキを持っています。ケーキの上にはろうそくが立っています。場所は古い暗いビクトリア朝の邸宅のキッチンで、ろうそくの明かりで照らされています。霧のかかった森に面した明るい窓があり、周りには非常に高価な物がたくさん置かれています。

自分で書くときは、DeepL 、ChatGPT、Claude や OCI Generative AI の Command R/R+ のプレイグラウンドなどで日本語から英語に翻訳すると楽ですね。

※ Dev / Schnell を入れ替えて試したい場合や FP8 も試したい場合は、workflow をロードしなおします。左上の "Load Diffusion Model" で選びなおせない~と焦らないでくださいね(⇒自分)

画像生成実行

ComfyUI 右上の "Queue Prompt" をクリックするとキューイングされ生成が開始されます。デフォルトではキューイングすると noise_seed がランダムに更新されますので、そのまま繰り返し"Queue Prompt" をクリックしてキューイングすれば noise_seed を変えて同じプロンプトの画像を続けて生成できます。生成中もプロンプトの変更ができますので、別の画像生成指示もキューイングできます。

生成例

ComfyUI_00128_.png

ComfyUI_00076_.png

LoRA

LoRA (Low-Rank Adaptation) は、大規模な事前学習済みモデルを効率的にファインチューニングするための技術です。特に画像生成AIの分野で元のモデルの画風を変えたり特定の種類の画像を意図したとおりに生成されやすくする目的で多く活用されています。
ここでは、__Modern Anime LoRA Adapter for FLUX.1 dev__を使ってモダンアニメスタイルの画像を生成してみます

手順
  • Modern Anime LoRA Adapter for FLUX.1 devのリポジトリ から modern-anime-lora-2.safetensors のモデルウェイト をダウンロードして、ComfyUI\models\loras に配置します
  • Modern Anime LoRA Adapter for FLUX.1 devのワークフロー anime-workflow.json をダウンロードして、ComfyUI にドラッグ&ドロップするか右側のメニューの"Load"からロードします
  • プロンプトに "modern anime style," というトリガーワード を追加します。Modern Anime LoRA Adapter for FLUX.1 dev は、プロンプトにこの トリガーワードがあった場合にだけ効果を表します
  • "Queue Prompt" をクリックして生成します
LoRA を使った生成例

この作例では、あえて LoRA なしの場合もありの場合も「トリガーワード」を追加したプロンプトを使って、LoRA なしの通常のワークフローとLoRAありのワークフローで比較しています。プロンプトの違いではなくあくまでも LoRAの効果を見るためです。シード値は同じ値にしてあります

LoRA なし LoRA あり

ComfyUI_00139_.png

ComfyUI_00136_.png

modern anime style, a cute Japanese idle singer girl, long marine blue hair, She is singing ,holding a microphone, wearing white idle costume, standing on the stage .This is a flashy concert with 3D holograms and laser effects modern anime style, a cute Japanese idle singer girl, long marine blue hair, She is singing ,holding a microphone, wearing white idle costume, standing on the stage .This is a flashy concert with 3D holograms and laser effects
seed: 112233344 seed: 112233344

どちらも "modern anime style," というプロンプトが入っているためアニメ絵にはなっていますが、LoRA によって少し雰囲気が変わっていることは見て取れます...とはいえ、FLUX.1 自体がオリジナルモデルでも結構良いアニメ絵を生成できますので違いがわかりにくいですね

えっと、あとがきです

もうアップデートはないという噂を鵜呑みにして Stable Diffusion WebUI Forge を見ていなかったのですが 2024/8/15 に大型アップデートがあり FLUX.1 もサポートされました。ComfyUI はとても上手に GPU VRAM を使っているようですが Forge も期待です。

AUTOMATIC1111は独自実装が多いから時間かかるかな?

それはそうと、FLUX のControlNet や In-Painting も追いたいし、そもそも1年くらいさわってなかった Meta の SAM(Segment Anythin Model)に大型アップデートの2が出たのでさわらなきゃと思いつつ画像のベクトル検索とかしてる間に FLUX 出て来て、もうわけわかりませんね。以前作ったSAMのノートブック「Stable Diffusion XL 1.0 と Segment Anything Model で始める画像生成から自動マスク生成、インペインティングまで」まだ動くかな?Amazon SageMaker JumpStart に完全依存で作ってるけどだいぶ変わってますよね Jumstart。 SAM2 対応&FLUXセルフホスティングでアップデートしたい。

おまけ

他にもいろいろ記事を書いていますので良かったらお立ち寄りください。

18
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
10