close
Skip to content

OFTv2 / BOFT のネットワークモジュールを追加#2357

Open
umisetokikaze wants to merge 1 commit into
kohya-ss:mainfrom
umisetokikaze:oftv2_boft
Open

OFTv2 / BOFT のネットワークモジュールを追加#2357
umisetokikaze wants to merge 1 commit into
kohya-ss:mainfrom
umisetokikaze:oftv2_boft

Conversation

@umisetokikaze
Copy link
Copy Markdown
Contributor

概要

SD1/SD2/SDXL の network training 向けに、直交変換系アダプタの新しい network module を追加しました。

  • networks.oft_v2

    • OneTrainer / PEFT 形式に近い OFTv2 対応
    • oft_R.weight の保存・読み込みに対応
    • 学習、既存重み読み込み、merge flow に対応
  • networks.boft

    • PEFT 形式に近い BOFT 対応
    • boft_R / boft_s の保存・読み込みに対応
    • 学習、既存重み読み込み、merge flow に対応

既存の legacy networks.oft は変更していません。

対象範囲

今回の対象としたのは、train_network.py / sdxl_train_network.py 経由の SD1/SD2/SDXL 向け network training です。

今回のPRで、以下のアーキテクチャ群はひとまず対象外にしました。

  • Flux
  • SD3
  • Hunyuan
  • Lumina
  • Anima 固有の network module

互換性

新規モジュールでは、以下の形式を読み込めるようにしました。

  • sd-scripts native 形式
    • 例: lora_unet_...oft_R.weight
  • OneTrainer 由来の OFTv2 形式
    • oft_R.weight
  • PEFT 由来の OFT / BOFT adapter 形式
    • sd-scripts側の対象module名とsuffixが一致する場合に読み込み

BOFT は PEFT の保存形式に合わせ、保存対象を以下にしています。

  • boft_R
  • boft_s

boft_P は実行時に再構築するため保存しません。

使い方の例

OFTv2:

accelerate launch --num_cpu_threads_per_process 1 sdxl_train_network.py \
  --pretrained_model_name_or_path="/path/to/sdxl_model.safetensors" \
  --dataset_config="/path/to/config.toml" \
  --output_dir="./output" \
  --output_name="sdxl_oftv2_test" \
  --save_model_as=safetensors \
  --network_module=networks.oft_v2 \
  --network_dim=32 \
  --network_args "coft=false" "block_share=false" \
  --network_train_unet_only \
  --learning_rate=1e-4 \
  --unet_lr=1e-4 \
  --max_train_steps=20 \
  --train_batch_size=1 \
  --mixed_precision=fp16 \
  --no_half_vae \
  --sdpa \
  --gradient_checkpointing \
  --cache_latents

検証

 - 追加ファイルの py_compile を確認
 - 軽量テストで forward hook と merge 後の出力一致を確認
 - PEFT風の oft_R.weight / boft_R / boft_s キーから network を作成できることを確認
 - Ubuntu 環境で sdxl_train_network.py による SDXL OFTv2 の短時間学習が完走することを確認

その他

Codex 使用時の作業ファイルを管理対象外にするため、.gitignore に .codex を追加しました。

- add shared orthogonal adapter helpers
- support OFTv2 and BOFT training, loading, and merge flows
- add compatibility tests for PEFT-style adapter keys
- ignore local .codex reference artifacts
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant