# LoRA Training Guide for Anima using `anima_train_network.py` / `anima_train_network.py` を用いたAnima モデルのLoRA学習ガイド This document explains how to train LoRA (Low-Rank Adaptation) models for Anima using `anima_train_network.py` in the `sd-scripts` repository.
日本語 このドキュメントでは、`sd-scripts`リポジトリに含まれる`anima_train_network.py`を使用して、Anima モデルに対するLoRA (Low-Rank Adaptation) モデルを学習する基本的な手順について解説します。
## 1. Introduction / はじめに `anima_train_network.py` trains additional networks such as LoRA for Anima models. Anima adopts a DiT (Diffusion Transformer) architecture based on the MiniTrainDIT design with Rectified Flow training. It uses a Qwen3-0.6B text encoder, an LLM Adapter (6-layer transformer bridge from Qwen3 to T5-compatible space), and a Qwen-Image VAE (16-channel, 8x spatial downscale). Qwen-Image VAE and Qwen-Image VAE have same architecture, but [official Anima weight is named for Qwen-Image VAE](https://huggingface.co/circlestone-labs/Anima/tree/main/split_files/vae). This guide assumes you already understand the basics of LoRA training. For common usage and options, see the [train_network.py guide](train_network.md). Some parameters are similar to those in [`sd3_train_network.py`](sd3_train_network.md) and [`flux_train_network.py`](flux_train_network.md). **Prerequisites:** * The `sd-scripts` repository has been cloned and the Python environment is ready. * A training dataset has been prepared. See the [Dataset Configuration Guide](./config_README-en.md). * Anima model files for training are available.
日本語 `anima_train_network.py`は、Anima モデルに対してLoRAなどの追加ネットワークを学習させるためのスクリプトです。AnimaはMiniTrainDIT設計に基づくDiT (Diffusion Transformer) アーキテクチャを採用しており、Rectified Flow学習を使用します。テキストエンコーダーとしてQwen3-0.6B、LLM Adapter (Qwen3からT5互換空間への6層Transformerブリッジ)、およびQwen-Image VAE (16チャンネル、8倍空間ダウンスケール) を使用します。 Qwen-Image VAEとQwen-Image VAEは同じアーキテクチャですが、[Anima公式の重みはQwen-Image VAE用](https://huggingface.co/circlestone-labs/Anima/tree/main/split_files/vae)のようです。 このガイドは、基本的なLoRA学習の手順を理解しているユーザーを対象としています。基本的な使い方や共通のオプションについては、[`train_network.py`のガイド](train_network.md)を参照してください。また一部のパラメータは [`sd3_train_network.py`](sd3_train_network.md) や [`flux_train_network.py`](flux_train_network.md) と同様のものがあるため、そちらも参考にしてください。 **前提条件:** * `sd-scripts`リポジトリのクローンとPython環境のセットアップが完了していること。 * 学習用データセットの準備が完了していること。(データセットの準備については[データセット設定ガイド](./config_README-en.md)を参照してください) * 学習対象のAnimaモデルファイルが準備できていること。
## 2. Differences from `train_network.py` / `train_network.py` との違い `anima_train_network.py` is based on `train_network.py` but modified for Anima. Main differences are: * **Target models:** Anima DiT models. * **Model structure:** Uses a MiniTrainDIT (Transformer based) instead of U-Net. Employs a single text encoder (Qwen3-0.6B), an LLM Adapter that bridges Qwen3 embeddings to T5-compatible cross-attention space, and a Qwen-Image VAE (16-channel latent space with 8x spatial downscale). * **Arguments:** Uses the common `--pretrained_model_name_or_path` for the DiT model path, `--qwen3` for the Qwen3 text encoder, and `--vae` for the Qwen-Image VAE. The LLM adapter and T5 tokenizer can be specified separately with `--llm_adapter_path` and `--t5_tokenizer_path`. * **Incompatible arguments:** Stable Diffusion v1/v2 options such as `--v2`, `--v_parameterization` and `--clip_skip` are not used. `--fp8_base` is not supported. * **Timestep sampling:** Uses the same `--timestep_sampling` options as FLUX training (`sigma`, `uniform`, `sigmoid`, `shift`, `flux_shift`). * **LoRA:** Uses regex-based module selection and per-module rank/learning rate control (`network_reg_dims`, `network_reg_lrs`) instead of per-component arguments. Module exclusion/inclusion is controlled by `exclude_patterns` and `include_patterns`.
日本語 `anima_train_network.py`は`train_network.py`をベースに、Anima モデルに対応するための変更が加えられています。主な違いは以下の通りです。 * **対象モデル:** Anima DiTモデルを対象とします。 * **モデル構造:** U-Netの代わりにMiniTrainDIT (Transformerベース) を使用します。テキストエンコーダーとしてQwen3-0.6B、Qwen3埋め込みをT5互換のクロスアテンション空間に変換するLLM Adapter、およびQwen-Image VAE (16チャンネル潜在空間、8倍空間ダウンスケール) を使用します。 * **引数:** DiTモデルのパスには共通引数`--pretrained_model_name_or_path`を、Qwen3テキストエンコーダーには`--qwen3`を、Qwen-Image VAEには`--vae`を使用します。LLM AdapterとT5トークナイザーはそれぞれ`--llm_adapter_path`、`--t5_tokenizer_path`で個別に指定できます。 * **一部引数の非互換性:** Stable Diffusion v1/v2向けの引数(例: `--v2`, `--v_parameterization`, `--clip_skip`)は使用されません。`--fp8_base`はサポートされていません。 * **タイムステップサンプリング:** FLUX学習と同じ`--timestep_sampling`オプション(`sigma`、`uniform`、`sigmoid`、`shift`、`flux_shift`)を使用します。 * **LoRA:** コンポーネント別の引数の代わりに、正規表現ベースのモジュール選択とモジュール単位のランク/学習率制御(`network_reg_dims`、`network_reg_lrs`)を使用します。モジュールの除外/包含は`exclude_patterns`と`include_patterns`で制御します。
## 3. Preparation / 準備 The following files are required before starting training: 1. **Training script:** `anima_train_network.py` 2. **Anima DiT model file:** `.safetensors` file for the base DiT model. 3. **Qwen3-0.6B text encoder:** Either a HuggingFace model directory, or a single `.safetensors` file (uses the bundled config files in `configs/qwen3_06b/`). 4. **Qwen-Image VAE model file:** `.safetensors` or `.pth` file for the VAE. 5. **LLM Adapter model file (optional):** `.safetensors` file. If not provided separately, the adapter is loaded from the DiT file if the key `llm_adapter.out_proj.weight` exists. 6. **T5 Tokenizer (optional):** If not specified, uses the bundled tokenizer at `configs/t5_old/`. 7. **Dataset definition file (.toml):** Dataset settings in TOML format. (See the [Dataset Configuration Guide](./config_README-en.md).) In this document we use `my_anima_dataset_config.toml` as an example. Model files can be obtained from the [Anima HuggingFace repository](https://huggingface.co/circlestone-labs/Anima). **Notes:** * The T5 tokenizer only needs the tokenizer files (not the T5 model weights). It uses the vocabulary from `google/t5-v1_1-xxl`.
日本語 学習を開始する前に、以下のファイルが必要です。 1. **学習スクリプト:** `anima_train_network.py` 2. **Anima DiTモデルファイル:** ベースとなるDiTモデルの`.safetensors`ファイル。 3. **Qwen3-0.6Bテキストエンコーダー:** HuggingFaceモデルディレクトリまたは単体の`.safetensors`ファイル(バンドル版の`configs/qwen3_06b/`の設定ファイルが使用されます)。 4. **Qwen-Image VAEモデルファイル:** VAEの`.safetensors`または`.pth`ファイル。 5. **LLM Adapterモデルファイル(オプション):** `.safetensors`ファイル。個別に指定しない場合、DiTファイル内に`llm_adapter.out_proj.weight`キーが存在すればそこから読み込まれます。 6. **T5トークナイザー(オプション):** 指定しない場合、`configs/t5_old/`のバンドル版トークナイザーを使用します。 7. **データセット定義ファイル (.toml):** 学習データセットの設定を記述したTOML形式のファイル。(詳細は[データセット設定ガイド](./config_README-en.md)を参照してください)。例として`my_anima_dataset_config.toml`を使用します。 モデルファイルは[HuggingFaceのAnimaリポジトリ](https://huggingface.co/circlestone-labs/Anima)から入手できます。 **注意:** * T5トークナイザーを別途指定する場合、トークナイザーファイルのみ必要です(T5モデルの重みは不要)。`google/t5-v1_1-xxl`の語彙を使用します。
## 4. Running the Training / 学習の実行 Execute `anima_train_network.py` from the terminal to start training. The overall command-line format is the same as `train_network.py`, but Anima specific options must be supplied. Example command: ```bash accelerate launch --num_cpu_threads_per_process 1 anima_train_network.py \ --pretrained_model_name_or_path="" \ --qwen3="" \ --vae="" \ --dataset_config="my_anima_dataset_config.toml" \ --output_dir="" \ --output_name="my_anima_lora" \ --save_model_as=safetensors \ --network_module=networks.lora_anima \ --network_dim=8 \ --learning_rate=1e-4 \ --optimizer_type="AdamW8bit" \ --lr_scheduler="constant" \ --timestep_sampling="sigmoid" \ --discrete_flow_shift=1.0 \ --max_train_epochs=10 \ --save_every_n_epochs=1 \ --mixed_precision="bf16" \ --gradient_checkpointing \ --cache_latents \ --cache_text_encoder_outputs \ --vae_chunk_size=64 \ --vae_disable_cache ``` *(Write the command on one line or use `\` or `^` for line breaks.)* The learning rate of `1e-4` is just an example. Adjust it according to your dataset and objectives. This value is for `alpha=1.0` (default). If increasing `--network_alpha`, consider lowering the learning rate. If loss becomes NaN, ensure you are using PyTorch version 2.5 or higher. **Note:** `--vae_chunk_size` and `--vae_disable_cache` are custom options in this repository to reduce memory usage of the Qwen-Image VAE.
日本語 学習は、ターミナルから`anima_train_network.py`を実行することで開始します。基本的なコマンドラインの構造は`train_network.py`と同様ですが、Anima特有の引数を指定する必要があります。 コマンドラインの例は英語のドキュメントを参照してください。 ※実際には1行で書くか、適切な改行文字(`\` または `^`)を使用してください。 学習率1e-4はあくまで一例です。データセットや目的に応じて適切に調整してください。またこの値はalpha=1.0(デフォルト)での値です。`--network_alpha`を増やす場合は学習率を下げることを検討してください。 lossがNaNになる場合は、PyTorchのバージョンが2.5以上であることを確認してください。 注意: `--vae_chunk_size`および`--vae_disable_cache`は当リポジトリ独自のオプションで、Qwen-Image VAEのメモリ使用量を削減するために使用します。
### 4.1. Explanation of Key Options / 主要なコマンドライン引数の解説 Besides the arguments explained in the [train_network.py guide](train_network.md), specify the following Anima specific options. For shared options (`--output_dir`, `--output_name`, `--network_module`, etc.), see that guide. #### Model Options [Required] / モデル関連 [必須] * `--pretrained_model_name_or_path=""` **[Required]** - Path to the Anima DiT model `.safetensors` file. The model config (channels, blocks, heads) is auto-detected from the state dict. ComfyUI format with `net.` prefix is supported. * `--qwen3=""` **[Required]** - Path to the Qwen3-0.6B text encoder. Can be a HuggingFace model directory or a single `.safetensors` file. The text encoder is always frozen during training. * `--vae=""` **[Required]** - Path to the Qwen-Image VAE model `.safetensors` or `.pth` file. Fixed config: `dim=96, z_dim=16`. #### Model Options [Optional] / モデル関連 [オプション] * `--llm_adapter_path=""` *[Optional]* - Path to a separate LLM adapter weights file. If omitted, the adapter is loaded from the DiT file when the key `llm_adapter.out_proj.weight` exists. * `--t5_tokenizer_path=""` *[Optional]* - Path to the T5 tokenizer directory. If omitted, uses the bundled config at `configs/t5_old/`. #### Anima Training Parameters / Anima 学習パラメータ * `--timestep_sampling=` - Timestep sampling method. Choose from `sigma`, `uniform`, `sigmoid` (default), `shift`, `flux_shift`. Same options as FLUX training. See the [flux_train_network.py guide](flux_train_network.md) for details on each method. * `--discrete_flow_shift=` - Shift for the timestep distribution in Rectified Flow training. Default `1.0`. This value is used when `--timestep_sampling` is set to **`shift`**. The shift formula is `t_shifted = (t * shift) / (1 + (shift - 1) * t)`. * `--sigmoid_scale=` - Scale factor when `--timestep_sampling` is set to `sigmoid`, `shift`, or `flux_shift`. Default `1.0`. * `--qwen3_max_token_length=` - Maximum token length for the Qwen3 tokenizer. Default `512`. * `--t5_max_token_length=` - Maximum token length for the T5 tokenizer. Default `512`. * `--attn_mode=` - Attention implementation to use. Choose from `torch` (default), `xformers`, `flash`, `sageattn`. `xformers` requires `--split_attn`. `sageattn` does not support training (inference only). This option overrides `--xformers`. * `--split_attn` - Split attention computation to reduce memory usage. Required when using `--attn_mode xformers`. #### Component-wise Learning Rates / コンポーネント別学習率 These options set separate learning rates for each component of the Anima model. They are primarily used for full fine-tuning. Set to `0` to freeze a component: * `--self_attn_lr=` - Learning rate for self-attention layers. Default: same as `--learning_rate`. * `--cross_attn_lr=` - Learning rate for cross-attention layers. Default: same as `--learning_rate`. * `--mlp_lr=` - Learning rate for MLP layers. Default: same as `--learning_rate`. * `--mod_lr=` - Learning rate for AdaLN modulation layers. Default: same as `--learning_rate`. Note: modulation layers are not included in LoRA by default. * `--llm_adapter_lr=` - Learning rate for LLM adapter layers. Default: same as `--learning_rate`. For LoRA training, use `network_reg_lrs` in `--network_args` instead. See [Section 5.2](#52-regex-based-rank-and-learning-rate-control--正規表現によるランク学習率の制御). #### Memory and Speed / メモリ・速度関連 * `--blocks_to_swap=` - Number of Transformer blocks to swap between CPU and GPU. More blocks reduce VRAM but slow training. Maximum values depend on model size: - 28-block model: max **26** (Anima-Preview) - 36-block model: max **34** - 20-block model: max **18** - Cannot be used with `--cpu_offload_checkpointing` or `--unsloth_offload_checkpointing`. * `--unsloth_offload_checkpointing` - Offload activations to CPU RAM using async non-blocking transfers (faster than `--cpu_offload_checkpointing`). Cannot be combined with `--cpu_offload_checkpointing` or `--blocks_to_swap`. * `--cache_text_encoder_outputs` - Cache Qwen3 text encoder outputs to reduce VRAM usage. Recommended when not training text encoder LoRA. * `--cache_text_encoder_outputs_to_disk` - Cache text encoder outputs to disk. Auto-enables `--cache_text_encoder_outputs`. * `--cache_latents`, `--cache_latents_to_disk` - Cache Qwen-Image VAE latent outputs. * `--vae_chunk_size=` - Chunk size for Qwen-Image VAE processing. Reduces VRAM usage at the cost of speed. Default is no chunking. * `--vae_disable_cache` - Disable internal caching in Qwen-Image VAE to reduce VRAM usage. #### Incompatible or Unsupported Options / 非互換・非サポートの引数 * `--v2`, `--v_parameterization`, `--clip_skip` - Options for Stable Diffusion v1/v2 that are not used for Anima training. * `--fp8_base` - Not supported for Anima. If specified, it will be disabled with a warning.
日本語 [`train_network.py`のガイド](train_network.md)で説明されている引数に加え、以下のAnima特有の引数を指定します。共通の引数については、上記ガイドを参照してください。 #### モデル関連 [必須] * `--pretrained_model_name_or_path=""` **[必須]** - Anima DiTモデルの`.safetensors`ファイルのパスを指定します。モデルの設定はstate dictから自動検出されます。`net.`プレフィックス付きのComfyUIフォーマットもサポートしています。 * `--qwen3=""` **[必須]** - Qwen3-0.6Bテキストエンコーダーのパスを指定します。HuggingFaceモデルディレクトリまたは単体の`.safetensors`ファイルが使用できます。 * `--vae=""` **[必須]** - Qwen-Image VAEモデルのパスを指定します。 #### モデル関連 [オプション] * `--llm_adapter_path=""` *[オプション]* - 個別のLLM Adapterの重みファイルのパス。 * `--t5_tokenizer_path=""` *[オプション]* - T5トークナイザーディレクトリのパス。 #### Anima 学習パラメータ * `--timestep_sampling` - タイムステップのサンプリング方法。`sigma`、`uniform`、`sigmoid`(デフォルト)、`shift`、`flux_shift`から選択。FLUX学習と同じオプションです。各方法の詳細は[flux_train_network.pyのガイド](flux_train_network.md)を参照してください。 * `--discrete_flow_shift` - Rectified Flow学習のタイムステップ分布シフト。デフォルト`1.0`。`--timestep_sampling`が`shift`の場合に使用されます。 * `--sigmoid_scale` - `sigmoid`、`shift`、`flux_shift`タイムステップサンプリングのスケール係数。デフォルト`1.0`。 * `--qwen3_max_token_length` - Qwen3トークナイザーの最大トークン長。デフォルト`512`。 * `--t5_max_token_length` - T5トークナイザーの最大トークン長。デフォルト`512`。 * `--attn_mode` - 使用するAttentionの実装。`torch`(デフォルト)、`xformers`、`flash`、`sageattn`から選択。`xformers`は`--split_attn`の指定が必要です。`sageattn`はトレーニングをサポートしていません(推論のみ)。 * `--split_attn` - メモリ使用量を減らすためにattention時にバッチを分割します。`--attn_mode xformers`使用時に必要です。 #### コンポーネント別学習率 これらのオプションは、Animaモデルの各コンポーネントに個別の学習率を設定します。主にフルファインチューニング用です。`0`に設定するとそのコンポーネントをフリーズします: * `--self_attn_lr` - Self-attention層の学習率。 * `--cross_attn_lr` - Cross-attention層の学習率。 * `--mlp_lr` - MLP層の学習率。 * `--mod_lr` - AdaLNモジュレーション層の学習率。モジュレーション層はデフォルトではLoRAに含まれません。 * `--llm_adapter_lr` - LLM Adapter層の学習率。 LoRA学習の場合は、`--network_args`の`network_reg_lrs`を使用してください。[セクション5.2](#52-regex-based-rank-and-learning-rate-control--正規表現によるランク学習率の制御)を参照。 #### メモリ・速度関連 * `--blocks_to_swap` - TransformerブロックをCPUとGPUでスワップしてVRAMを節約。`--cpu_offload_checkpointing`および`--unsloth_offload_checkpointing`とは併用できません。 * `--unsloth_offload_checkpointing` - 非同期転送でアクティベーションをCPU RAMにオフロード。`--cpu_offload_checkpointing`および`--blocks_to_swap`とは併用できません。 * `--cache_text_encoder_outputs` - Qwen3の出力をキャッシュしてメモリ使用量を削減。 * `--cache_latents`, `--cache_latents_to_disk` - Qwen-Image VAEの出力をキャッシュ。 * `--vae_chunk_size` - Qwen-Image VAEのチャンク処理サイズ。メモリ使用量を削減しますが速度が低下します。デフォルトはチャンク処理なし。 * `--vae_disable_cache` - Qwen-Image VAEの内部キャッシュを無効化してメモリ使用量を削減します。 #### 非互換・非サポートの引数 * `--v2`, `--v_parameterization`, `--clip_skip` - Stable Diffusion v1/v2向けの引数。Animaの学習では使用されません。 * `--fp8_base` - Animaではサポートされていません。指定した場合、警告とともに無効化されます。
### 4.2. Starting Training / 学習の開始 After setting the required arguments, run the command to begin training. The overall flow and how to check logs are the same as in the [train_network.py guide](train_network.md#32-starting-the-training--学習の開始).
日本語 必要な引数を設定したら、コマンドを実行して学習を開始します。全体の流れやログの確認方法は、[train_network.pyのガイド](train_network.md#32-starting-the-training--学習の開始)と同様です。
## 5. LoRA Target Modules / LoRAの学習対象モジュール When training LoRA with `anima_train_network.py`, the following modules are targeted by default: * **DiT Blocks (`Block`)**: Self-attention (`self_attn`), cross-attention (`cross_attn`), and MLP (`mlp`) layers within each transformer block. Modulation (`adaln_modulation`), norm, embedder, and final layers are excluded by default. * **Embedding layers (`PatchEmbed`, `TimestepEmbedding`) and Final layer (`FinalLayer`)**: Excluded by default but can be included using `include_patterns`. * **LLM Adapter Blocks (`LLMAdapterTransformerBlock`)**: Only when `--network_args "train_llm_adapter=True"` is specified. * **Text Encoder (Qwen3)**: Only when `--network_train_unet_only` is NOT specified and `--cache_text_encoder_outputs` is NOT used. The LoRA network module is `networks.lora_anima`. ### 5.1. Module Selection with Patterns / パターンによるモジュール選択 By default, the following modules are excluded from LoRA via the built-in exclude pattern: ``` .*(_modulation|_norm|_embedder|final_layer).* ``` You can customize which modules are included or excluded using regex patterns in `--network_args`: * `exclude_patterns` - Exclude modules matching these patterns (in addition to the default exclusion). * `include_patterns` - Force-include modules matching these patterns, overriding exclusion. Patterns are matched against the full module name using `re.fullmatch()`. Example to include the final layer: ``` --network_args "include_patterns=['.*final_layer.*']" ``` Example to additionally exclude MLP layers: ``` --network_args "exclude_patterns=['.*mlp.*']" ``` ### 5.2. Regex-based Rank and Learning Rate Control / 正規表現によるランク・学習率の制御 You can specify different ranks (network_dim) and learning rates for modules matching specific regex patterns: * `network_reg_dims`: Specify ranks for modules matching a regular expression. The format is a comma-separated string of `pattern=rank`. * Example: `--network_args "network_reg_dims=.*self_attn.*=8,.*cross_attn.*=4,.*mlp.*=8"` * This sets the rank to 8 for self-attention modules, 4 for cross-attention modules, and 8 for MLP modules. * `network_reg_lrs`: Specify learning rates for modules matching a regular expression. The format is a comma-separated string of `pattern=lr`. * Example: `--network_args "network_reg_lrs=.*self_attn.*=1e-4,.*cross_attn.*=5e-5"` * This sets the learning rate to `1e-4` for self-attention modules and `5e-5` for cross-attention modules. **Notes:** * Settings via `network_reg_dims` and `network_reg_lrs` take precedence over the global `--network_dim` and `--learning_rate` settings. * Patterns are matched using `re.fullmatch()` against the module's original name (e.g., `blocks.0.self_attn.q_proj`). ### 5.3. LLM Adapter LoRA / LLM Adapter LoRA To apply LoRA to the LLM Adapter blocks: ``` --network_args "train_llm_adapter=True" ``` In preliminary tests, lowering the learning rate for the LLM Adapter seems to improve stability. Adjust it using something like: `"network_reg_lrs=.*llm_adapter.*=5e-5"`. ### 5.4. Other Network Args / その他のネットワーク引数 * `--network_args "verbose=True"` - Print all LoRA module names and their dimensions. * `--network_args "rank_dropout=0.1"` - Rank dropout rate. * `--network_args "module_dropout=0.1"` - Module dropout rate. * `--network_args "loraplus_lr_ratio=2.0"` - LoRA+ learning rate ratio. * `--network_args "loraplus_unet_lr_ratio=2.0"` - LoRA+ learning rate ratio for DiT only. * `--network_args "loraplus_text_encoder_lr_ratio=2.0"` - LoRA+ learning rate ratio for text encoder only.
日本語 `anima_train_network.py`でLoRAを学習させる場合、デフォルトでは以下のモジュールが対象となります。 * **DiTブロック (`Block`)**: 各Transformerブロック内のSelf-attention(`self_attn`)、Cross-attention(`cross_attn`)、MLP(`mlp`)層。モジュレーション(`adaln_modulation`)、norm、embedder、final layerはデフォルトで除外されます。 * **埋め込み層 (`PatchEmbed`, `TimestepEmbedding`) と最終層 (`FinalLayer`)**: デフォルトで除外されますが、`include_patterns`で含めることができます。 * **LLM Adapterブロック (`LLMAdapterTransformerBlock`)**: `--network_args "train_llm_adapter=True"`を指定した場合のみ。 * **テキストエンコーダー (Qwen3)**: `--network_train_unet_only`を指定せず、かつ`--cache_text_encoder_outputs`を使用しない場合のみ。 ### 5.1. パターンによるモジュール選択 デフォルトでは以下のモジュールが組み込みの除外パターンによりLoRAから除外されます: ``` .*(_modulation|_norm|_embedder|final_layer).* ``` `--network_args`で正規表現パターンを使用して、含めるモジュールと除外するモジュールをカスタマイズできます: * `exclude_patterns` - これらのパターンにマッチするモジュールを除外(デフォルトの除外に追加)。 * `include_patterns` - これらのパターンにマッチするモジュールを強制的に含める(除外を上書き)。 パターンは`re.fullmatch()`を使用して完全なモジュール名に対してマッチングされます。 ### 5.2. 正規表現によるランク・学習率の制御 正規表現にマッチするモジュールに対して、異なるランクや学習率を指定できます: * `network_reg_dims`: 正規表現にマッチするモジュールに対してランクを指定します。`pattern=rank`形式の文字列をカンマで区切って指定します。 * 例: `--network_args "network_reg_dims=.*self_attn.*=8,.*cross_attn.*=4,.*mlp.*=8"` * `network_reg_lrs`: 正規表現にマッチするモジュールに対して学習率を指定します。`pattern=lr`形式の文字列をカンマで区切って指定します。 * 例: `--network_args "network_reg_lrs=.*self_attn.*=1e-4,.*cross_attn.*=5e-5"` **注意点:** * `network_reg_dims`および`network_reg_lrs`での設定は、全体設定である`--network_dim`や`--learning_rate`よりも優先されます。 * パターンはモジュールのオリジナル名(例: `blocks.0.self_attn.q_proj`)に対して`re.fullmatch()`でマッチングされます。 ### 5.3. LLM Adapter LoRA LLM AdapterブロックにLoRAを適用するには:`--network_args "train_llm_adapter=True"` 簡易な検証ではLLM Adapterの学習率はある程度下げた方が安定するようです。`"network_reg_lrs=.*llm_adapter.*=5e-5"`などで調整してください。 ### 5.4. その他のネットワーク引数 * `verbose=True` - 全LoRAモジュール名とdimを表示 * `rank_dropout` - ランクドロップアウト率 * `module_dropout` - モジュールドロップアウト率 * `loraplus_lr_ratio` - LoRA+学習率比率 * `loraplus_unet_lr_ratio` - DiT専用のLoRA+学習率比率 * `loraplus_text_encoder_lr_ratio` - テキストエンコーダー専用のLoRA+学習率比率
## 6. Using the Trained Model / 学習済みモデルの利用 When training finishes, a LoRA model file (e.g. `my_anima_lora.safetensors`) is saved in the directory specified by `output_dir`. Use this file with inference environments that support Anima, such as ComfyUI with appropriate nodes.
日本語 学習が完了すると、指定した`output_dir`にLoRAモデルファイル(例: `my_anima_lora.safetensors`)が保存されます。このファイルは、Anima モデルに対応した推論環境(例: ComfyUI + 適切なノード)で使用できます。
## 7. Advanced Settings / 高度な設定 ### 7.1. VRAM Usage Optimization / VRAM使用量の最適化 Anima models can be large, so GPUs with limited VRAM may require optimization: #### Key VRAM Reduction Options - **`--blocks_to_swap `**: Swaps blocks between CPU and GPU to reduce VRAM usage. Higher numbers save more VRAM but reduce training speed. See model-specific max values in section 4.1. - **`--unsloth_offload_checkpointing`**: Offloads gradient checkpoints to CPU using async non-blocking transfers. Faster than `--cpu_offload_checkpointing`. Cannot be combined with `--blocks_to_swap`. - **`--gradient_checkpointing`**: Standard gradient checkpointing to reduce VRAM at the cost of compute. - **`--cache_text_encoder_outputs`**: Caches Qwen3 outputs so the text encoder can be freed from VRAM during training. - **`--cache_latents`**: Caches Qwen-Image VAE outputs so the VAE can be freed from VRAM during training. - **Using Adafactor optimizer**: Can reduce VRAM usage: ``` --optimizer_type adafactor --optimizer_args "relative_step=False" "scale_parameter=False" "warmup_init=False" --lr_scheduler constant_with_warmup --max_grad_norm 0.0 ```
日本語 Animaモデルは大きい場合があるため、VRAMが限られたGPUでは最適化が必要です。 主要なVRAM削減オプション: - `--blocks_to_swap`: CPUとGPU間でブロックをスワップ - `--unsloth_offload_checkpointing`: 非同期転送でアクティベーションをCPUにオフロード - `--gradient_checkpointing`: 標準的な勾配チェックポイント - `--cache_text_encoder_outputs`: Qwen3の出力をキャッシュ - `--cache_latents`: Qwen-Image VAEの出力をキャッシュ - Adafactorオプティマイザの使用
### 7.2. Training Settings / 学習設定 #### Timestep Sampling The `--timestep_sampling` option specifies how timesteps are sampled. The available methods are the same as FLUX training: - `sigma`: Sigma-based sampling like SD3. - `uniform`: Uniform random sampling from [0, 1]. - `sigmoid` (default): Sample from Normal(0,1), multiply by `sigmoid_scale`, apply sigmoid. Good general-purpose option. - `shift`: Like `sigmoid`, but applies the discrete flow shift formula: `t_shifted = (t * shift) / (1 + (shift - 1) * t)`. - `flux_shift`: Resolution-dependent shift used in FLUX training. See the [flux_train_network.py guide](flux_train_network.md) for detailed descriptions. #### Discrete Flow Shift The `--discrete_flow_shift` option (default `1.0`) only applies when `--timestep_sampling` is set to `shift`. The formula is: ``` t_shifted = (t * shift) / (1 + (shift - 1) * t) ``` #### Loss Weighting The `--weighting_scheme` option specifies loss weighting by timestep: - `uniform` (default): Equal weight for all timesteps. - `sigma_sqrt`: Weight by `sigma^(-2)`. - `cosmap`: Weight by `2 / (pi * (1 - 2*sigma + 2*sigma^2))`. - `none`: Same as uniform. - `logit_normal`, `mode`: Additional schemes from SD3 training. See the [`sd3_train_network.md` guide](sd3_train_network.md) for details. #### Caption Dropout Caption dropout uses the `caption_dropout_rate` setting from the dataset configuration (per-subset in TOML). When using `--cache_text_encoder_outputs`, the dropout rate is stored with each cached entry and applied during training, so caption dropout is compatible with text encoder output caching. **If you change the `caption_dropout_rate` setting, you must delete and regenerate the cache.** Note: Currently, only Anima supports combining `caption_dropout_rate` with text encoder output caching.
日本語 #### タイムステップサンプリング `--timestep_sampling`でタイムステップのサンプリング方法を指定します。FLUX学習と同じ方法が利用できます: - `sigma`: SD3と同様のシグマベースサンプリング。 - `uniform`: [0, 1]の一様分布からサンプリング。 - `sigmoid`(デフォルト): 正規分布からサンプリングし、sigmoidを適用。汎用的なオプション。 - `shift`: `sigmoid`と同様だが、離散フローシフトの式を適用。 - `flux_shift`: FLUX学習で使用される解像度依存のシフト。 詳細は[flux_train_network.pyのガイド](flux_train_network.md)を参照してください。 #### 離散フローシフト `--discrete_flow_shift`(デフォルト`1.0`)は`--timestep_sampling`が`shift`の場合のみ適用されます。 #### 損失の重み付け `--weighting_scheme`でタイムステップごとの損失の重み付けを指定します。 #### キャプションドロップアウト キャプションドロップアウトにはデータセット設定(TOMLでのサブセット単位)の`caption_dropout_rate`を使用します。`--cache_text_encoder_outputs`使用時は、ドロップアウト率が各キャッシュエントリとともに保存され、学習中に適用されるため、テキストエンコーダー出力キャッシュと同時に使用できます。 **`caption_dropout_rate`の設定を変えた場合、キャッシュを削除し、再生成する必要があります。** ※`caption_dropout_rate`をテキストエンコーダー出力キャッシュと組み合わせられるのは、今のところAnimaのみです。
### 7.3. Text Encoder LoRA Support / Text Encoder LoRAのサポート Anima LoRA training supports training Qwen3 text encoder LoRA: - To train only DiT: specify `--network_train_unet_only` - To train DiT and Qwen3: omit `--network_train_unet_only` and do NOT use `--cache_text_encoder_outputs` You can specify a separate learning rate for Qwen3 with `--text_encoder_lr`. If not specified, the default `--learning_rate` is used. Note: When `--cache_text_encoder_outputs` is used, text encoder outputs are pre-computed and the text encoder is removed from GPU, so text encoder LoRA cannot be trained.
日本語 Anima LoRA学習では、Qwen3テキストエンコーダーのLoRAもトレーニングできます。 - DiTのみ学習: `--network_train_unet_only`を指定 - DiTとQwen3を学習: `--network_train_unet_only`を省略し、`--cache_text_encoder_outputs`を使用しない Qwen3に個別の学習率を指定するには`--text_encoder_lr`を使用します。未指定の場合は`--learning_rate`が使われます。 注意: `--cache_text_encoder_outputs`を使用する場合、テキストエンコーダーの出力が事前に計算されGPUから解放されるため、テキストエンコーダーLoRAは学習できません。
## 8. Other Training Options / その他の学習オプション - **`--loss_type`**: Loss function for training. Default `l2`. - `l1`: L1 loss. - `l2`: L2 loss (mean squared error). - `huber`: Huber loss. - `smooth_l1`: Smooth L1 loss. - **`--huber_schedule`**, **`--huber_c`**, **`--huber_scale`**: Parameters for Huber loss when `--loss_type` is `huber` or `smooth_l1`. - **`--ip_noise_gamma`**, **`--ip_noise_gamma_random_strength`**: Input Perturbation noise gamma values. - **`--fused_backward_pass`**: Fuses the backward pass and optimizer step to reduce VRAM usage. Only works with Adafactor. For details, see the [`sdxl_train_network.py` guide](sdxl_train_network.md). - **`--weighting_scheme`**, **`--logit_mean`**, **`--logit_std`**, **`--mode_scale`**: Timestep loss weighting options. For details, refer to the [`sd3_train_network.md` guide](sd3_train_network.md).
日本語 - **`--loss_type`**: 学習に用いる損失関数。デフォルト`l2`。`l1`, `l2`, `huber`, `smooth_l1`から選択。 - **`--huber_schedule`**, **`--huber_c`**, **`--huber_scale`**: Huber損失のパラメータ。 - **`--ip_noise_gamma`**: Input Perturbationノイズガンマ値。 - **`--fused_backward_pass`**: バックワードパスとオプティマイザステップの融合。 - **`--weighting_scheme`** 等: タイムステップ損失の重み付け。詳細は[`sd3_train_network.md`](sd3_train_network.md)を参照。
## 9. Related Tools / 関連ツール ### `networks/anima_convert_lora_to_comfy.py` A script to convert LoRA models to ComfyUI-compatible format. ComfyUI does not directly support sd-scripts format Qwen3 LoRA, so conversion is necessary (conversion may not be needed for DiT-only LoRA). You can convert from the sd-scripts format to ComfyUI format with: ```bash python networks/convert_anima_lora_to_comfy.py path/to/source.safetensors path/to/destination.safetensors ``` Using the `--reverse` option allows conversion in the opposite direction (ComfyUI format to sd-scripts format). However, reverse conversion is only possible for LoRAs converted by this script. LoRAs created with other training tools cannot be converted.
日本語 **`networks/convert_anima_lora_to_comfy.py`** LoRAモデルをComfyUI互換形式に変換するスクリプト。ComfyUIがsd-scripts形式のQwen3 LoRAを直接サポートしていないため、変換が必要です(DiTのみのLoRAの場合は変換不要のようです)。sd-scripts形式からComfyUI形式への変換は以下のコマンドで行います: ```bash python networks/convert_anima_lora_to_comfy.py path/to/source.safetensors path/to/destination.safetensors ``` `--reverse`オプションを付けると、逆変換(ComfyUI形式からsd-scripts形式)も可能です。ただし、逆変換ができるのはこのスクリプトで変換したLoRAに限ります。他の学習ツールで作成したLoRAは変換できません。
## 10. Others / その他 ### Metadata Saved in LoRA Models The following metadata is saved in the LoRA model file: * `ss_weighting_scheme` * `ss_logit_mean` * `ss_logit_std` * `ss_mode_scale` * `ss_timestep_sampling` * `ss_sigmoid_scale` * `ss_discrete_flow_shift`
日本語 `anima_train_network.py`には、サンプル画像の生成 (`--sample_prompts`など) や詳細なオプティマイザ設定など、`train_network.py`と共通の機能も多く存在します。これらについては、[`train_network.py`のガイド](train_network.md#5-other-features--その他の機能)やスクリプトのヘルプ (`python anima_train_network.py --help`) を参照してください。 ### LoRAモデルに保存されるメタデータ 以下のメタデータがLoRAモデルファイルに保存されます: * `ss_weighting_scheme` * `ss_logit_mean` * `ss_logit_std` * `ss_mode_scale` * `ss_timestep_sampling` * `ss_sigmoid_scale` * `ss_discrete_flow_shift`