新しいStable Diffusion WebUI ForgeでFLUX.1を試す(Windows)
※ Last update 8-19-2024
※ 旧ver.用の導入記事もあります。
※ (8-19) LoRA、分割されたモデル、GGUF版モデルの利用について、4.に記載しました。
※ (8-15) XのGrokに搭載されたFLUX.1の生成機能についての記事を書きました。
※ (8-14) 更新後に「--reinstall-torch」が必要な場合の対応を3.2に記載しました。
※ (8-12) 3-1.に、過去の状態へ戻す方法を記載しました。問題が発生した場合のみお試しください。
▼ 0. 本記事について
0-1. 概要
Stable Diffusion WebUI Forge(Forge版SD WebUI)がFLUX.1に対応したとの情報がありましたので、テスト環境を用意して試してみます。詳細な情報は下記を参照してください。重要な情報が多いので確認を推奨します。
[Major Update] BitsandBytes Guidelines and Flux #981
https://github.com/lllyasviel/stable-diffusion-webui-forge/discussions/981
このツールは現在、実験的なプロジェクトとなっています。動作に不具合を生じる場合がありますので、十分に留意の上でご利用ください。
0-2. 余談
本記事と直接の関係はありませんが、SDXL用として筆者が現役利用している旧バージョンの構築や設定に関する記事です。
0-3. 余談2
ComfyUIを利用してFLUX.1で生成を行う方法です。Forge版SD WebUIは実験の位置づけのため、安定した動作を望むのであればComfyUIの方が良いかもしれません。
▼ 1. インストール
1-1. 注意点
執筆時点ではCUDA 12.4用とCUDA 12.1用があります。CUDA 12.4用を起動したときに下記のメッセージが表示されて起動できない場合は、12.1用を使用してください(筆者の環境では12.4用はNGでした)。
RuntimeError: Your device does not support the current version of Torch/CUDA! Consider download another version:
https://github.com/lllyasviel/stable-diffusion-webui-forge/releases/tag/latest
1-2. ダウンロード
今回は「git clone」を使用せず、ポータブル版を使用します。まずは下記のURLへアクセスしてください。
https://github.com/lllyasviel/stable-diffusion-webui-forge
下の方に行くと「one-click installation package」がありますので、いずれかをダウンロードして適当なディレクトリに解凍します。通常は「Recommended」を選んでください。
解凍したディレクトリに入り、「update.bat」を実行します。最新版で問題が発生した場合は、3-1.を参照して巻き戻してみてください。
1-3. モデルの設置
初回の起動前に必ず行ってください(モデルが入っていないと、別のモデルがダウンロードされてしまいます)。FLUX.1のモデルをダウンロードして、「webui\models\Stable-diffusion」に移動します。
(※LoRAを利用する場合はFP8版を使用してください。)
NF4版
https://huggingface.co/lllyasviel/flux1-dev-bnb-nf4
flux1-dev-bnb-nf4.safetensors
flux1-dev-bnb-nf4-v2.safetensors (推奨)FP8版
https://huggingface.co/lllyasviel/flux1_dev
flux1-dev-fp8.safetensors
上記以外のモデルは、下記の記事(と、そこからリンクされている過去の記事)を参照してください。
また、LoRA、分割されたモデル、GGUF版モデルの扱い方については4.を参照してください。
▼ 2. 実行
2-1. 起動
起動は「run.bat」を実行するだけです。
コマンドプロンプトの画面に下記のような表示が出て止まりますので、指示されたURL(http://127.0.0.1:7860/)へアクセスしてください。
Running on local URL: http://127.0.0.1:7860
To create a public link, set `share=True` in `launch()`.
Startup time: 19.6s (prepare environment: 4.8s, launcher: 2.9s, import torch: 4.5s, initialize shared: 0.1s, other imports: 1.2s, load scripts: 2.4s, create ui: 2.2s, gradio launch: 1.4s).
2-2. 設定と生成
今回はFLUX.1専用として使用するので、「UI」を「flux」に変更します。「checkpoint」も選択してください。通常は、おすすめのモデル「flux1-dev-bnb-nf4.safetensors」が良いでしょう。ただし、LoRAを使用する場合は「flux1-dev-fp8.safetensors」を選択してください。
あとは「Prompt」を入力し、お好みで「width」と「height」を変更してから「Generate」をクリックします。生成が終わるまでしばらくお待ちください。
生成した画像は、「webui\outputs\txt2img-images」の中に保存されています。
2-3. 生成にかかる時間
生成時間は、生成した画像の下の方に「Time taken: ***.* sec.」の形で表示されます。「Generate」をクリックしてから再度クリックできるようになるまでの時間とは、若干ですが異なるようです。
筆者の環境(Ryzen 5 3600、DDR4-3200_32GB、GeForve RTX 3060_12GB)にて、解像度1024x1024でのTime takenは下記のとおりでした。CLIPは「t5xxl_fp8_e4m3fn」を使用しています。
20 Steps - FP8 (flux1-dev-fp8.safetensors)
95 秒程度,10.6 GB / 12.0 GB20 Steps - NF4 (flux1-dev-bnb-nf4.safetensors)
80 秒程度,8.0 GB / 12.0GB20 Steps - GGUF (flux1-dev-Q5_0.safetensors)
123 秒程度,10.4GB / 12.0GB20 Steps - GGUF (flux1-dev-Q4_0.safetensors)
96 秒程度,8.7GB / 12.0GB
なお、FLUX.1に対応した初期の頃は、VRAM使用量が過剰になる問題がありました。現在は、基本的には解決したようです。
低Steps時の生成時間は下記のとおりです。時間等は多少のばらつきが発生します。
4 Steps -FP8 (flux1-schnell-fp8.safetensors)
23 秒,10.8 GB / 12.0 GB4 Steps - NF4 (flux1-schnell-bnb-nf4.safetensors)
16 秒,8.2 GB / 12.0 GB
▼ 3. トラブルシューティング
3-1. 過去のコミットへ巻き戻す
アップデートを行って問題が発生した場合は、暫定的に特定の時点まで巻き戻すことで解決できます。ここでは、巻き戻したり最新に戻したりするバッチファイルを作って対応します。
ポータブル版の「run.bat」「update.bat」のあるディレクトリに、2つのファイルを作成してください。
まずは、巻き戻すための「rollback.bat」です。2944で始まる羅列(コミットID)は適宜変更する必要があります。
@echo off
set PATH=%DIR%\git\bin;%PATH%
git -C "%~dp0webui" checkout 294416ed55cad69eb8a01393854457e35207a2d4
pause
次は、巻き戻した状態を取り消して最新の状態に戻す「rollfoward.bat」です。巻き戻している時だけ使えます。
@echo off
set PATH=%DIR%\git\bin;%PATH%
git -C "%~dp0webui" checkout main
pause
どの時点(コミットID)まで巻き戻すかを決めるため、下記のURLへアクセスしてください。ブランチの内容は刻々と更新され、一番上の行が最新のコミットとなっています。
https://github.com/lllyasviel/stable-diffusion-webui-forge/commits/main/
どの時点に戻せば直るかは、やってみないと分かりません。ここでは、作者が「Verified」を付けたコミットのみに注目しました。この方法が論的に正しいわけではないので、更新の時系列も確認してみてください。
コミットIDの先頭が表示されているので、右側のアイコンをクリックしてクリップボードにコピーします。「rollback.bat」のコミットIDの部分を、コピーした内容で置き換えてください。
あとは、「rollback.bat」を実行すると指定した時点まで戻るので、起動して動作を確認してください。戻している最中に「rollfoward.bat」を実行すると最新の状態に復帰します。これらのバッチファイルを実行すると色々とメッセージが表示されますが、気にする必要はありません。
3-2. 「--reinstall-torch」が必要な場合
アップデート後、下記のようなメッセージが表示されました。この場合は、「webui\webui-user.bat」を一時的に変更して起動する方法があります。ただし、後で元に戻す必要があります。
You are running torch 2.1.2+cu121.
The program is tested to work with torch 2.3.1.
そこで、ポータブル版の「run.bat」「update.bat」のあるディレクトリに、「run(reinstall-torch).bat」を作ることにします。
@echo off
call environment.bat
set COMMANDLINE_ARGS=--reinstall-torch
cd %~dp0webui
call webui.bat
もし「--reinstall-torch」が必要になった場合は、「run(reinstall-torch).bat」を実行して、起動が完了したら終了します。その後、通常の起動を行ってください。
▼ 4. LoRA,分割モデル,GGUFの対応
4-1. アップデート情報
紹介が遅れましたが、Forge版SD WebUIはLoRA、分割されたモデル、GGUF版モデルに対応しています。
[GGUF and Flux full fp16 Model] loading T5, CLIP + new VAE UI #1050
https://github.com/lllyasviel/stable-diffusion-webui-forge/discussions/1050
また、UIが少しだけ変更されています。上部に「VAE / Text Encoder」「Diffusion in Low Bits」の項目が無い場合はアップデートの必要があります。なお、最新版の動作が安定しているとは限りません(実験的なプロジェクトであることを思い出してください)。任意の時点に戻したい場合は3-1.を参照してください。
4-2. LoRAの利用方法
FLUX.1においても、LoRAは従来と同様の方法で利用できます。プロンプトに入れておくトリガーワードが決められている場合があるので、配布されているLoRAの説明を確認してください。
執筆時点での、LoRAを利用する際の注意点を挙げます。
NF4版モデルへの適用や、「Diffusion in Low Bits=bnb-nf4, bnb-fp4」の設定は避ける(GPUメモリを大量に消費するため)。
将来これが改善したとしても、モデルとLoRAの形式は合わせた方が良い。よって、特に記載が無ければFP8/FP16版のモデルを使用する。モデルにLoRAを適用する際に少々時間がかかる(モデルやLoRAの変更がなければ1回目のみ)。
LoRAのファイルを「models\lora\」に移動しておくと、UIの「txt2img」→「LoRA」のタブに一覧が表示されます。クリックするとPrompt欄に入力されます(もちろん手動でファイル名を入れても構いません)。後ろの数字は強度なので、適宜変更します。
LoRAが適用されると、生成した画像の下に表示されるパラメーターの中に「Lora hashes」の項目が追加されます。これが無い場合は適用されていません。
5.のおまけに、LoRA適用前後の画像を掲載しておきました。
4-3. 分割されたモデルの利用方法 (1)
元々は統合されたモデルのみに対応していたところ、分割されたモデルにも対応しました。特定のファイルをコピーして設定するだけで、いままで利用できなかったモデルも利用できるようになります。
まずはVAEです。下記のURLからファイルをダウンロードして、指定のディレクトリに移動します。
https://huggingface.co/black-forest-labs/FLUX.1-schnell/tree/main
ae.safetensors (319MB)
「models\VAE」 に移動する
次はCLIP text encoderです。ComfyUI用に掲載されたものをダウンロードして、指定のディレクトリに移動します。
https://huggingface.co/comfyanonymous/flux_text_encoders/tree/main
clip_l.safetensors (234MB)
t5xxl_fp16.safetensors (9.11GB)
または
t5xxl_fp8_e4m3fn.safetensors (4.55GB)1.と2.を「models\text_encoder」に移動する
最後はUNETです。FLUX.1 DevをNF4化したモデルが出ていたので、こちらを利用することにします。また、統合されたモデルと分割されたモデルが混合されてしまうのを防ぐため、unetのディレクトリを作って分けることにしました。
https://huggingface.co/silveroxides/flux1-nf4-unet/tree/main
flux1-dev-nf4-unet.safetensors (5.7GB)
flux1-schnell-nf4-unet.safetensors (5.7GB)
上記のいずれかを「models\Stable-diffusion\unet」に移動する
※LoRAを利用する場合は下記のFP8版を使用してください。
https://huggingface.co/Kijai/flux-fp8
flux1-dev-fp8.safetensors (11.1GB)
flux1-schnell-fp8.safetensors (11.1GB)
移動先は同じ
参考まで、下記の記事にある「unet」のモデルも利用できます。
4-4. 分割されたモデルの利用方法 (2)
モデルの設置が終わったら起動します。「Checkpoint」を選択して、「VAE / Text Encoder」で「ae」「clip_l」「t5xxl(fp8の方が省リソース)」の3種類をすべて選択します。
これで生成の準備は整いました。モデルによって「Sampling steps」の値が異なる点に注意してください。Shcnell相当のモデルは4以上、Dev相当のモデルは20前後かそれ以上です。
4-5. GGUF版モデルの利用方法
Forge版SD WebUIは、GGUF形式のモデルにも対応しました。LLMのモデル等で利用されている形式で、小容量であればGPUメモリの使用量を減らせるメリットがあります(精度は落ちます)。
ここでは、下記URLで配布されているGGUF版のFLUX.1 Devを利用します。こちらは単体利用ができない分割されたモデルなので、4-2.と4-3.を参照して足りないモデルを設定してください。
https://huggingface.co/city96/FLUX.1-dev-gguf
flux1-dev-Q2_K.gguf (3.8GB)
~
flux1-dev-Q4_0.gguf (6.3GB)
flux1-dev-Q4_1.gguf (7.0GB)
flux1-dev-Q5_0.gguf (7.7GB)
flux1-dev-Q5_1.gguf (8.4GB)
~
flux1-dev-Q8_0.gguf (11.8GB)
上記のいずれかを「models\Stable-diffusion\unet」に移動する(※CLIPやVAEが内蔵されたモデルと区別するため推奨)https://huggingface.co/city96/FLUX.1-schnell-gguf (Schnell版)
参考まで、比較用の画像を貼っておきます。NF4同様、GGUFのQ4やQ5であっても、特に気になる感じはしませんでした。Q3はギリギリで、Q2はあからさまに劣化するようです。
▼ 5. おまけ
5-1. 掲載画像
お手本のプロンプトを提示して、それとは全く異なるシチュエーションを指示する方法でプロンプトを作成しました。Geminiを使用しています。
下記は追加の画像です。「anime screencap Flux LoRA」が適用されています。anime screencapというトリガーワードがあるようですが、入れなくても効いています。
LoRAを適用しなかった画像も掲載します。雰囲気がかなり違うのが分かります。
下記は追加の画像です。従来のプロンプトの記法を再現する、Claude上の自作Projectsを用いています。
▼ 6. その他
私が書いた他の記事は、メニューよりたどってください。
noteのアカウントはメインの@Mayu_Hiraizumiに紐付けていますが、記事に関することはサブアカウントの@riddi0908までお願いします。
この記事が気に入ったらサポートをしてみませんか?