9.5 KiB
flux_train_network.py を用いたFLUX.1モデルのLoRA学習ガイド
このドキュメントでは、sd-scriptsリポジトリに含まれるflux_train_network.pyを使用して、FLUX.1モデルに対するLoRA (Low-Rank Adaptation) モデルを学習する基本的な手順について解説します。
1. はじめに
flux_train_network.pyは、FLUX.1モデルに対してLoRAなどの追加ネットワークを学習させるためのスクリプトです。FLUX.1はStable Diffusionとは異なるアーキテクチャを持つ画像生成モデルであり、このスクリプトを使用することで、特定のキャラクターや画風を再現するLoRAモデルを作成できます。
このガイドは、基本的なLoRA学習の手順を理解しているユーザーを対象とし、train_network.pyでの学習経験があることを前提としています。基本的な使い方や共通のオプションについては、train_network.pyのガイドを参照してください。
前提条件:
sd-scriptsリポジトリのクローンとPython環境のセットアップが完了していること。- 学習用データセットの準備が完了していること。(データセットの準備についてはデータセット設定ガイドを参照してください)
2. train_network.py との違い
flux_train_network.pyはtrain_network.pyをベースに、FLUX.1モデルに対応するための変更が加えられています。主な違いは以下の通りです。
- 対象モデル: FLUX.1モデル(dev版またはschnell版)を対象とします。
- モデル構造: Stable Diffusionとは異なり、FLUX.1はTransformerベースのアーキテクチャを持ちます。Text EncoderとしてCLIP-LとT5-XXLの二つを使用し、VAEの代わりに専用のAutoEncoder (AE) を使用します。
- 必須の引数: FLUX.1モデル、CLIP-L、T5-XXL、AEの各モデルファイルを指定する引数が追加されています。
- 一部引数の非互換性: Stable Diffusion向けの引数の一部(例:
--v2,--clip_skip,--max_token_length)はFLUX.1の学習では使用されません。 - FLUX.1特有の引数: タイムステップのサンプリング方法やガイダンススケールなど、FLUX.1特有の学習パラメータを指定する引数が追加されています。
3. 準備
学習を開始する前に、以下のファイルが必要です。
-
学習スクリプト:
flux_train_network.py -
FLUX.1モデルファイル: 学習のベースとなるFLUX.1モデルの
.safetensorsファイル(例:flux1-dev.safetensors)。 -
Text Encoderモデルファイル:
- CLIP-Lモデルの
.safetensorsファイル。 - T5-XXLモデルの
.safetensorsファイル。
- CLIP-Lモデルの
-
AutoEncoderモデルファイル: FLUX.1に対応するAEモデルの
.safetensorsファイル。 -
データセット定義ファイル (.toml): 学習データセットの設定を記述したTOML形式のファイル。(詳細はデータセット設定ガイドを参照してください)。
- 例として
my_flux_dataset_config.tomlを使用します。
- 例として
4. 学習の実行
学習は、ターミナルからflux_train_network.pyを実行することで開始します。基本的なコマンドラインの構造はtrain_network.pyと同様ですが、FLUX.1特有の引数を指定する必要があります。
以下に、基本的なコマンドライン実行例を示します。
accelerate launch --num_cpu_threads_per_process 1 flux_train_network.py
--pretrained_model_name_or_path="<path to FLUX.1 model>"
--clip_l="<path to CLIP-L model>"
--t5xxl="<path to T5-XXL model>"
--ae="<path to AE model>"
--dataset_config="my_flux_dataset_config.toml"
--output_dir="<output directory for training results>"
--output_name="my_flux_lora"
--save_model_as=safetensors
--network_module=networks.lora
--network_dim=16
--network_alpha=1
--learning_rate=1e-4
--optimizer_type="AdamW8bit"
--lr_scheduler="constant"
--sdpa
--max_train_epochs=10
--save_every_n_epochs=1
--mixed_precision="fp16"
--gradient_checkpointing
--apply_t5_attn_mask
--blocks_to_swap=18
※実際には1行で書くか、適切な改行文字(\ または ^)を使用してください。
4.1. 主要なコマンドライン引数の解説(train_network.pyからの追加・変更点)
train_network.pyのガイドで説明されている引数に加え、以下のFLUX.1特有の引数を指定します。共通の引数(--output_dir, --output_name, --network_module, --network_dim, --network_alpha, --learning_rateなど)については、上記ガイドを参照してください。
モデル関連 [必須]
--pretrained_model_name_or_path="<path to FLUX.1 model>"[必須]- 学習のベースとなるFLUX.1モデル(dev版またはschnell版)の
.safetensorsファイルのパスを指定します。Diffusers形式のディレクトリは現在サポートされていません。
- 学習のベースとなるFLUX.1モデル(dev版またはschnell版)の
--clip_l="<path to CLIP-L model>"[必須]- CLIP-L Text Encoderモデルの
.safetensorsファイルのパスを指定します。
- CLIP-L Text Encoderモデルの
--t5xxl="<path to T5-XXL model>"[必須]- T5-XXL Text Encoderモデルの
.safetensorsファイルのパスを指定します。
- T5-XXL Text Encoderモデルの
--ae="<path to AE model>"[必須]- FLUX.1に対応するAutoEncoderモデルの
.safetensorsファイルのパスを指定します。
- FLUX.1に対応するAutoEncoderモデルの
FLUX.1 学習パラメータ
--t5xxl_max_token_length=<integer>- T5-XXL Text Encoderで使用するトークンの最大長を指定します。省略した場合、モデルがschnell版なら256、dev版なら512が自動的に設定されます。データセットのキャプション長に合わせて調整が必要な場合があります。
--apply_t5_attn_mask- T5-XXLの出力とFLUXモデル内部(Double Block)のアテンション計算時に、パディングトークンに対応するアテンションマスクを適用します。精度向上が期待できる場合がありますが、わずかに計算コストが増加します。
--guidance_scale=<float>- FLUX.1 dev版は特定のガイダンススケール値で蒸留されているため、学習時にもその値を指定します。デフォルトは
3.5です。schnell版では通常無視されます。
- FLUX.1 dev版は特定のガイダンススケール値で蒸留されているため、学習時にもその値を指定します。デフォルトは
--timestep_sampling=<choice>- 学習時に使用するタイムステップ(ノイズレベル)のサンプリング方法を指定します。
sigma,uniform,sigmoid,shift,flux_shiftから選択します。デフォルトはsigmaです。
- 学習時に使用するタイムステップ(ノイズレベル)のサンプリング方法を指定します。
--sigmoid_scale=<float>timestep_samplingにsigmoidまたはshift,flux_shiftを指定した場合のスケール係数です。デフォルトは1.0です。
--model_prediction_type=<choice>- モデルが何を予測するかを指定します。
raw(予測値をそのまま使用),additive(ノイズ入力に加算),sigma_scaled(シグマスケーリングを適用) から選択します。デフォルトはsigma_scaledです。
- モデルが何を予測するかを指定します。
--discrete_flow_shift=<float>- Flow Matchingで使用されるスケジューラのシフト値を指定します。デフォルトは
3.0です。
- Flow Matchingで使用されるスケジューラのシフト値を指定します。デフォルトは
メモリ・速度関連
--blocks_to_swap=<integer>[実験的機能]- VRAM使用量を削減するために、モデルの一部(Transformerブロック)をCPUとGPU間でスワップする設定です。スワップするブロック数を整数で指定します(例:
18)。値を大きくするとVRAM使用量は減りますが、学習速度は低下します。GPUのVRAM容量に応じて調整してください。gradient_checkpointingと併用可能です。 --cpu_offload_checkpointingとは併用できません。
- VRAM使用量を削減するために、モデルの一部(Transformerブロック)をCPUとGPU間でスワップする設定です。スワップするブロック数を整数で指定します(例:
非互換・非推奨の引数
--v2,--v_parameterization,--clip_skip: Stable Diffusion特有の引数のため、FLUX.1学習では使用されません。--max_token_length: Stable Diffusion v1/v2向けの引数です。FLUX.1では--t5xxl_max_token_lengthを使用してください。--split_mode: 非推奨の引数です。代わりに--blocks_to_swapを使用してください。
4.2. 学習の開始
必要な引数を設定し、コマンドを実行すると学習が開始されます。基本的な流れやログの確認方法はtrain_network.pyのガイドと同様です。
5. 学習済みモデルの利用
学習が完了すると、指定したoutput_dirにLoRAモデルファイル(例: my_flux_lora.safetensors)が保存されます。このファイルは、FLUX.1モデルに対応した推論環境(例: ComfyUI + ComfyUI-FluxNodes)で使用できます。
6. その他
flux_train_network.pyには、サンプル画像の生成 (--sample_promptsなど) や詳細なオプティマイザ設定など、train_network.pyと共通の機能も多く存在します。これらについては、train_network.pyのガイドやスクリプトのヘルプ (python flux_train_network.py --help) を参照してください。