Flux Dev 簡単クッキング - Zuntan03/EasyForge GitHub Wiki

Flux Dev 簡単クッキング

Flux Dev モデルに Flux Dev 用 の LoRA をマージしつつ、自分好みのモデルに調理するチュートリアルです。
画像生成時にさらに追加の Dev 用 LoRA を使えるようにします。

成人向けの作例は こちら です。

画像には生成情報が残してあり、Forge の PNG Info などで確認できます。

チュートリアルではマージした 3 LoRA にキャラとシチュエーションで、計 5 種の LoRA を使って画像生成しています。

モデルに LoRA をマージすると LoRA の適用時に発生しうる Patching LoRAs の時間 をゼロにできます。
複数 LoRA 使用時の生成時間の増加も、モデルにマージした LoRA の分だけ低減できます。

デメリットとしては画像生成時にマージした LoRA の組み合わせや強度を変更できません。
ですので自分好みのモデルの方向性が定まっていると、特に有用です。

LoRA の学習は取り扱いませんが、マージする LoRA を自分で作成する こともできます(要 VRAM 12GB)。
好みの LoRA が他の LoRA との相性が悪い時に、LoRA で生成した画像で LoRA を作成する手もありそうです。

マージ手順の簡易まとめ

[ 注意 ] モデルへの LoRA マージには 64GB のメインメモリが必要です。

  1. flux1-dev-hyper8(かflux1-dev)にマージする LoRA を選んで、画像生成で LoRA の重みを決めます。
    • LoRA の重みを低めに抑えると、最終的なモデルで他の LoRA を追加しやすくなります。
  2. flux_tool/ModelMergeLora.bat を実行して、モデルや LoRA をドラッグ&ドロップでマージします。
    • ファイル名末尾が -sds(sd-scripts), -ait(ai-toolkit) の2つのモデルが出力され、どちらかが当たりです。
  3. マージしたモデルで画像を正常に生成できたら、GGUFQ8_0Q6_KQ4_K_S に圧縮します。
    • flux_tool/ConvertGguf.batを実行して、モデルをドラッグ&ドロップで圧縮します。
    • fp8nf4 では画像生成時に追加の LoRA が効きにくくなります。
  4. 圧縮済みのモデルで様々なプロンプトや追加 LoRA で画像を生成して、動作に問題がないことを確認します。

サンプルモデル

チュートリアルで作成したモデル『FluxDev8AnimeNsfw』です。
Dev 用 LoRA の効果がとても下がってしまう fp8nf4 は用意していません。

サンプルモデルダウンロード

download/Flux-Recommended.bat を実行すると、FluxDev8AnimeNsfw-Q8_0 をダウンロードします。

NSFW 抜きモデル

8step 生成とアニメ調に対応した FluxDev8Anime です。
NSFW LoRA が混ざっていない分、画像生成時に他の LoRA を扱いやすくなってます。

サンプルモデル利用上の注意

  • [ 重要 ] Forge の画面上部の設定
    • VAE / Text Encodert5xxl_fp16.safetensors, ae.safetensors, clip_l.safetensors を設定します。 公式解説
      • *.safetensorsdownload/Flux-Minimum.bat でダウンロードします。
    • Diffusion in Low BitsAutomatic (fp16 LoRA) を設定します。 公式解説
    • GPU Weights (MB)(VRAM サイズ - 3GB) * 1024 を設定します。 公式解説
      • Geforce RTX 3060 12GB なら 12 - 3 から 9 * 10249216 を設定します。
      • もし OutOfMemoryError が発生したら、エラーが出なくなるまで 512~1024MB ずつ下げます。
    • CheckpointFluxDev8AnimeNsfw-Q8_0 を指定します。
      • [] カッコ内の fca_style anime がアニメ調のキーワードですので、プロンプトの最初に入力します。
      • Q8_0 より軽量な Q6_KQ4_K_S がありますが、画像生成時に追加する LoRA の効果が悪くなります。

  • Forge の Generation の設定
    • Sampling steps8 を忘れず設定します。
      • 画像生成時に追加する LoRA との相性で、1012 に上げることもあります。
    • Sampling methodEulerSchedule typeSimple を設定します。
      • 複数 LoRA との相性がある都合上、オーソドックスな設定が無難です。
    • Width896Height1152 など、896~1280 程度の解像度を設定します。
      • Flux Dev は FullHD を直接生成できますが、LoRA が高解像度との相性が悪い場合があります。
      • 普通の解像度で生成できることを確認したうえで、高解像度にチャレンジしてください。
    • Distilled CFG Scale3.5CFG Scale1 を設定します。
      • Sampling steps を上げた場合に、Distilled CFG Scale2 あたりまで下げる場合があります。
      • 複数 LoRA との相性がある都合上、オーソドックスな設定が無難です。

  • プロンプトの設定
    • プロンプトの最初に fca_style anime, を含めてください。
    • プロンプトにはなるべく写真関連の単語を含めないようにしてください。
      • realistic, photo, camera, selfie などで、写実的な表現に引き寄せられます。
    • LoRA 用のキーワードなどで同じモノを指す言葉が複数ある場合は、より詳細なひとつのみを残してください。
      • 要素を引き出すために hatcap の両方を定義すると、画像のその部分が崩れがちです。
    • 各種サンプル画像を Forge の PNG Info で読み込んで、プロンプトを参考にしてください。

よく使う LoRA を Flux Dev モデルにマージする

モデルへの LoRA マージは、どのモデルに・どの LoRA を・どんな強度でマージするかの 3点からなります。

マージ対象のモデルは LoRA が大量にリリースされている Flux Dev を選択します。
手順と時間の節約のため、オリジナルの flux1-dev.safetensors(23GB, 20step) ではなく flux1-dev-hyper8.safetensors(23GB, 8step) で進めますが、オリジナルに読み替えても問題はありません。

マージする LoRA はいつも使う・できの良い LoRA をマージします。
キャラやシチュエーションの LoRA は画像生成時に変更するため、マージせずに普通に利用します。

まずはアニメ画風の LoRA をマージしてみます。
できの良い LoRA を自分で調べるのは大変ですので、Civitai の週間や月間ランキングの上位から選択するのが楽です。

今回はflux1-dev-hyper8.safetensors に『Flat Color Anime v3.3』をマージします。

モデルと LoRA の用意

  1. download/Stable-diffusion/FluxD-Base/flux1-dev-hyper8.bat を実行して、モデルをダウンロードします。
  2. LoRA 強度の調査用として flux1-dev-hyper8-Q8_0.bat(高精度)もダウンロードします。
    • download/Flux-Minimum.bat ですでにダウンロード済みであれば、実行してもスキップされます。
  3. Forge の Civitai Helper タブで Download ModelCivitai URL に Flat Color Anime v3.3 の URL https://civitai.com/models/180891?modelVersionId=776656 を入力して Get Model Info by Civitai Url します。
    • Civitai からのダウンロードや Civitai Helper の利用には、Civitai の API キー登録が必要になります。
      • Settings-Civitai HelperAPI key for authenticating with Civitai. に Civitai の API キーを貼り付けて Apply settings します。
      • API キーの取得方法は こちら、API キーを取得できるアカウントページはこちら(下から 2番目の API Keys)。
  4. Sub-folder で保存先のサブフォルダを指定して、Download Model します。

LoRA の強度を決める

X/Y/Z plot で LoRA の最適な強度を探ります。

基本的な設定(必要がなければデフォルト値を採用します)

  • Checkpoint: flux1-dev-hyper8-Q8_0
  • VAE / Text Encoder: t5xxl_fp16, ae, clip_l
  • Diffusion in Low Bits: Automatic (fp16 LoRA)

まずは LoRA 配布元のサンプルプロンプトを元にして、X/Y/Z plot します。

  • Y typePrompt S/R にして、Y values:1>,:0.8>,:0.6>,:0> などとして LoRA の強度による変化を比べます。
    • LoRA が実際に効いているかどうかの確認のために、最初は強度 0 を含めたほうが安全です。
    • 0.6 近辺が良さそうなら :0.7>,:0.6>,:0.5> とさらに細かく調べます。
    • LoRA 定義が複数ある場合は <lora:AAA:1.0><lora:BBB:1> と数値の表記を使い分けることで、別々にプロットできます。
  • X type-1,-1,-1 とすると、3枚のシード値違いを生成できます。
  • X type"プロンプトA","プロンプトB" とすることで、複数のサンプルプロンプトを切り替えられます。
    • プロンプトにダブルクォーテーションが含まれている場合は、シングルクォーテーションに置き換えます。

サンプル以外のプロンプトなども試して、最適と思える LoRA の重みを決定します。
なるべく低い重みにすると、オリジナルの Flux Dev と近くなり、他の LoRA が効きやすくなります。

今回はキーワードの fca_styleanime も加えることで、LoRA の重みを 0.5 まで抑えています(selfie などの写真系単語への耐性も付くようです)。
ただし、anime キーワードを加えることで Flat Color Anime LoRA 特有のアニメ表現が薄れてしまう点にはご注意ください。

LoRA をマージする

  1. LoRA の重みを決めたら flux_tool/ModelMergeLora.bat を実行してモデルに LoRA を混ぜます。
  2. マージの準備が整ったら Flux モデル (*.safetensors) をドラッグアンドドロップして Enter してください。 とコンソールに表示されますので、モデルをドラッグ&ドロップして、コンソールで Enter します。
  3. 同様に Flux LoRA (*.safetensors) をドラッグアンドドロップして Enter してください。 と表示されますので、LoRA をドラッグ&ドロップして Enter します。
  4. Flux LoRA の強度を数値で入力してください(デフォルト: 1.0 )。 と表示されますので、LoRA の重みを入力して Enter します。
  5. [モデル名]+[LoRA名]x[重み]-(sds|ait).safetensors のふたつのモデルが元デルの場所に生成されます。
    • ファイル名の末尾が -sds なら sd-scripts で作成した LoRA としてマージされています。
      同じく -ait なら ai-toolkit で作成した LoRA としてマージされています。
  6. プロンプトから LoRA 呼び出しを削除して、-sds-ait の両方のモデルで画像を生成し、正しくマージされているモデルを選びます。

Flux モデルを圧縮して仕上げる

モデルへの LoRA マージが完了したら、モデル品質と生成速度のコスパに優れた GGUF に圧縮します。

GGUF に圧縮する

  1. flux_tool/ConvertGguf.bat を実行して Flux モデル (*.safetensors) をドラッグアンドドロップして Enter してください。 と表示されたら元モデルをドラッグ&ドロップして Enter です。
  2. 元モデルの場所に Q8_0Q6_KQ4_K_S が保存されます。
    • 他の量子化レベルを追加したい場合は、flux_tool/env/ConvertGgufFormat.txt を編集します。

ふたつの LoRA をマージする

LoRA の強度さえ決まればマージは単なる作業なのですが、LoRA の数が増えると互いの相性や強度が影響しあい、LoRA や強度を決めるのが難しくなります。
何を守って何を諦めるかは好みの問題ですので、X/Y/Z plot で地道に調べます。

LoRA の重みが相互に影響するため、マージするふたつの LoRA の重みを同時に調査します。
画像生成時に使いたい LoRA も、プロット用のプロンプトに含めます。
LoRA の相性もありますが、すべての LoRA の重み合計が一線を超えると、絵が崩れだします。

  • Y typeZ typePrompt S/R"<lora:AAA:1.0> AAA keyword","<lora:BBB:1.0> BBB keyword" とすると、複数の LoRA を切り替えられます。
  • ふたつの LoRA の重みをそれぞれプロットする場合は、プロンプトを <lora:AAA:1> AAA keyword, <lora:BBB:1.0> BBB keyword として、Y typePrompt S/R:1>,:0.8>,:0.6>Z type:1.0>,:0.7>,:0.4> のようにすることで別々の重みをプロットできます。

ふたつの LoRA の重みを仮決めできたら、自身が求める範囲の X/Y/Z plot で動作に問題が無いことを確認します。

NSFW の動作確認プロット例 SFW の動作確認プロット例

動作確認が済んだ LoRA の重みでマージを 2回して、GGUF に圧縮します。
GGUF の Q8_0 を設定し、プロンプトから LoRA 定義を取り除いて、再び自身が求める範囲の X/Y/Z plot で問題が無いことを確認できれば完了です。

まとめ

大量に配布されている Flux Dev の LoRA をちゃんと使おうとすると、Schnell やそのマージモデルおよび fp8nf4 の高速低精度を使うのは難しい印象です。

GGUF の高精度で Flux Dev のオリジナルからなるべく離れないようにすることで、より快適に Flux Dev 用 LoRA を利用することができるのではないでしょうか。

⚠️ **GitHub.com Fallback** ⚠️