FLUX Schnell で LoRA を学習する手順|ai-toolkit と 12GB VRAM での設定値

FLUX Schnell で LoRA を学習する手順|ai-toolkit と 12GB VRAM での設定値

※本記事にはプロモーション(広告・アフィリエイトリンク)を含みます。

FLUX.1 [schnell] に LoRA を学習させると、自分で用意した人物・商品・スタイルを呼び出せるようになります。学習ツールには ostris 製の ai-toolkit が広く使われており、FLUX への公式対応が進んでいます。本記事では環境構築からデータセット準備、YAML 設定ファイルの書き方まで、12GB VRAM 環境を念頭にまとめます。

FLUX Schnell と LoRA の関係を整理する

FLUX.1 には [dev] と [schnell] の2種類があります(執筆時点)。

モデル ライセンス 推論ステップ
FLUX.1 [schnell] Apache 2.0 4
FLUX.1 [dev] Non-commercial 25〜50

商用目的なら schnell 一択です。dev は高品質ですが Non-commercial ライセンスのため商用利用に制限があります。

両者は同じアーキテクチャを共有しているため、dev で学習した LoRA が schnell で動作するケースがあります。ただし、学習に使ったチェックポイントのライセンスが LoRA の利用条件に影響する可能性があるため、商用利用時はライセンスを必ず確認してください。

FLUX は 12B パラメータのモデルです。LoRA 学習には本来 24GB 以上の VRAM が必要とされることが多く、NF4 量子化を使うことで 12GB 環境でも動かせる可能性があります。

環境構築

Python 3.10 以上、CUDA 12.1 以上を前提とします。

git clone https://github.com/ostris/ai-toolkit.git
cd ai-toolkit
git submodule update --init --recursive

# PyTorch(CUDA 12.1 の場合)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

pip install -r requirements.txt

FLUX のチェックポイントは Hugging Face から取得します。事前に huggingface-cli login でアカウントトークンを設定してください。

huggingface-cli download black-forest-labs/FLUX.1-schnell \
  --local-dir models/flux1-schnell

ダウンロードサイズは約 34GB(執筆時点)です。HDD など容量のある場所を選んでください。

データセットの準備

LoRA の品質はデータの質に直結します。

以下はコミュニティで広く言われている目安です。環境や被写体によって最適枚数は異なります。

用途 目安枚数 解像度
人物 15〜30 枚 512〜1024px
商品・スタイル 10〜20 枚 512〜768px

各画像に同名の .txt キャプションファイルを置きます。キャプションは「トリガーワード+内容の説明」の形式です。トリガーワードは既存の単語と重複しない文字列(例: mytoken01)を使います。

mytoken01, a person wearing a blue denim jacket, white studio background

フォルダ構成:

dataset/
  img_001.jpg
  img_001.txt
  img_002.jpg
  img_002.txt

自動キャプションには Florence-2 などが使われますが(環境によって異なります)、内容は必ず人手で確認・修正してください。間違ったラベルが混ざると、トリガーワードの効きが悪くなる可能性があります。

設定ファイル(YAML)の書き方

ai-toolkit は YAML で学習設定を記述します。以下は 12GB VRAM 向けの構成例です。

job: extension
config:
  name: "flux_schnell_lora_v1"
  process:
    - type: sd_trainer
      training_folder: "output/flux_schnell_lora_v1"
      device: cuda:0
      trigger_word: "mytoken01"

      network:
        type: lora
        linear: 8        # VRAM が足りなければ 4 に下げる
        linear_alpha: 8

      save:
        dtype: float16
        save_every: 250
        max_step_saves_to_keep: 4

      datasets:
        - folder_path: "/path/to/dataset"
          caption_ext: txt
          caption_dropout_rate: 0.05
          cache_latents_to_disk: true
          resolution: [512, 768]

      train:
        batch_size: 1
        steps: 1000
        gradient_accumulation_steps: 1
        gradient_checkpointing: true
        train_unet: true
        train_text_encoder: false
        noise_scheduler: flowmatch
        optimizer: adamw8bit
        lr: 1e-4
        dtype: bf16

      model:
        name_or_path: "black-forest-labs/FLUX.1-schnell"
        is_flux: true
        quantize: true

      sample:
        sampler: flowmatch
        sample_every: 250
        width: 512
        height: 512
        prompts:
          - "mytoken01, wearing a red jacket, studio background"
        seed: 42
        guidance_scale: 0
        sample_steps: 4

12GB で OOM が出る場合のチェックリスト:

  • linear: 4 に下げる
  • resolution: [512] に固定する
  • 他の GPU プロセス(ComfyUI など)を停止する
  • cache_latents_to_disk: true が有効になっているか確認する

guidance_scale: 0 は schnell 特有の設定です。schnell は蒸留モデルのため、CFG を高くすると出力が崩れやすい傾向があります。この「低 CFG で高速生成」という性質は LCM-LoRA の高速生成 と共通しており、CFG を低く保つことがポイントになります。

train_text_encoder: false にすることで VRAM 消費を抑えています。テキストエンコーダーも学習したい場合は VRAM に余裕があるときだけ有効にしてください。

学習の実行と結果の確認

設定ファイルを config/flux_lora.yaml に保存して実行します。

python run.py config/flux_lora.yaml

sample_every: 250 を設定しておくと、250 ステップごとにサンプル画像が output/flux_schnell_lora_v1/samples/ に保存されます。過学習の手前で止めるかどうかをサンプルで判断できます。

学習完了後、output/flux_schnell_lora_v1/ に .safetensors が生成されます。ComfyUI で使う場合は ComfyUI/models/loras/ に配置してください。

推論時の設定値:

パラメーター 推奨値 備考
steps 4 schnell のデフォルト
cfg / guidance 1.0 前後 高いと出力が崩れる
sampler euler flowmatch 系
LoRA 強度 0.8〜1.0 被写体への影響度で調整

プロンプトには必ずトリガーワード(mytoken01)を含めてください。LoRA 強度を 1.0 より下げると、ベースモデルの汎用性を保ちながらトリガーだけを反映させやすくなると考えられます。

まとめ

FLUX Schnell の LoRA 学習を 12GB VRAM で動かすには、quantize: true(NF4 量子化)と gradient_checkpointing: true の組み合わせが前提になります。ランクは linear: 4〜8、解像度は 512 固定からスタートするのが安全です。

まず 10〜15 枚の小さいデータセットで steps: 500 の試し学習を走らせ、250 ステップ時点のサンプルでトリガーワードが機能しているかを確認してみてください。問題がなければステップ数と枚数を増やしていく、という順序が効率的と考えられます。

よくある質問

FLUX Schnell と FLUX Dev、どちらで LoRA を学習すればよいですか?

商用目的なら Apache 2.0 ライセンスの FLUX Schnell で学習してください。Dev は高品質ですが Non-commercial ライセンスのため商用利用に制限があります。両者はアーキテクチャが同じため LoRA の互換性があるケースもありますが、ライセンス上は別物として扱ってください。

RTX 3060 12GB で FLUX LoRA の学習はできますか?

ai-toolkit の NF4 量子化(quantize: true)と gradient checkpointing を有効にすることで動作する可能性があります。linear ランクを 4〜8 に抑え、解像度を 512 に固定するのが前提です。OOM が出た場合はランクをさらに下げ、他の GPU プロセスを停止してください。環境によって結果は異なります。

何ステップ学習させればよいですか?

15〜30 枚のデータセットなら 500〜1500 ステップが目安です。多すぎると過学習でベースモデルの品質が失われます。sample_every を設定してサンプル画像を定期的に確認しながら調整するのが実用的な方法です。

トリガーワードはどう決めればよいですか?

辞書に載っていない造語を選ぶのが基本です。「sks」「mytoken01」のように、既存の英単語や概念と重複しない文字列を使います。一般的な単語と重複するとモデルの既存知識と混在し、意図した制御が難しくなります。