コンテンツにスキップ

SD WebUI Forge 学習・導入ロードマップ

📁 docs/ai-manga/artifact/20260312_SD_LoRA学習_導入計画.md

作成日: 2026-03-12 対象issue: #179 環境: RTX 5070 Ti (VRAM 16GB), Forge, waiNSFWIllustrious_v150


前提条件・方針

  • 学習サーバー: ローカル(RTX 5070 Ti, VRAM 16GB)→ 電気代のみ(約5円/回)
  • 学習環境: Docker(Forgeと同じ nvidia/cuda:12.8.0-devel-ubuntu22.04 + torch 2.7.0+cu128
  • 自動切替: train-lora.ps1 でForge停止→学習→Forge再起動を完全自動化(失敗時も必ずForge復帰)
  • VRAM管理: 学習中(〜12GB) + Forgeモデルロード(〜8GB) = OOMのため、学習中はForge自動停止
  • ロールバック: 全エポック保存 + 設定ファイル管理で確実に切り戻せる体制を先に構築
  • マニュアル: D:\Kazuma_Teramachi\kohya_ss\README.md 参照

Phase 0: バックアップ基盤の構築(1日)

LoRA学習・拡張機能導入の前に、ロールバック可能な状態を整える。

Forgeのスナップショット管理

拡張機能を追加するたびに以下をバックアップ:

D:\Kazuma_Teramachi\kaz_dev_stable-diffusion-webui-forge-backup\
└── YYYYMMDD_追加した内容\
    ├── config.json
    ├── ui-config.json
    ├── webui-user.bat
    └── extensions_list.txt

LoRAバージョン管理ディレクトリ

D:\Kazuma_Teramachi\lora-training\
├── datasets\               ← 学習データセット(画像+タグ)
│   ├── sinon_v2\
│   │   └── img\5_sn_sinon\
│   └── style_artist_x\
│       └── img\3_style_x\
├── base_models\            ← 学習用ベースモデル(推論環境と分離)
│   └── illustriousXL_v01.safetensors
├── outputs\                ← 全エポック保存
│   └── sinon_v2\
│       ├── sinon_v2_epoch005.safetensors
│       ├── sinon_v2_epoch010.safetensors
│       └── training_log.csv
├── configs\                ← kohya_ss設定ファイル(再学習に使える)
│   └── sinon_v2_config.json
├── evaluations\            ← エポック評価結果
│   └── sinon_v2\
│       ├── epoch005_samples\
│       └── evaluation_log.md
└── best\                   ← 採用版(Forgeのmodels/Lora/にコピー)
    └── sinon-06.safetensors

Phase 1: 拡張機能の導入(2〜3日)

LoRA学習より先に実施する理由: 既存パイプラインの品質が即座に向上し、LoRA評価にも使えるため。

導入順と優先度

優先度 拡張機能 用途 リスク
1 ADetailer 顔・手の自動修正(必須級)
2 Tag Autocomplete プロンプト補完・タグ確認 極低
3 Forge Couple 複数キャラの色移り防止
4 Ultimate SD Upscale 高解像度化
5 Inpaint Anything SAMベース自動マスク

安全なインストール手順

  1. Forge停止
  2. config.json / ui-config.json をバックアップ
  3. Extensions → Install from URL で1つずつインストール
  4. Forge再起動 → テスト生成1枚で動作確認
  5. 問題なければ次へ

ロールバック手順

  1. Forge停止
  2. extensions/{問題の拡張}/ フォルダを削除(または _disabled_ にリネーム)
  3. バックアップから config.json / ui-config.json を復元
  4. Forge再起動

インストールURL

# ADetailer
https://github.com/Bing-su/adetailer

# Tag Autocomplete
https://github.com/DominikDoom/a1111-sd-webui-tagcomplete

# Forge Couple
https://github.com/Haoming02/sd-forge-couple

# Ultimate SD Upscale
https://github.com/Coyote-A/ultimate-upscale-for-automatic1111

# Inpaint Anything (Forge対応版)
https://github.com/thadius83/sd-webui-inpaint-anything-forge

Phase 2: ADetailer の パイプライン統合(1〜2日)

ADetailerをパイプラインから呼び出せるようにする。

sd_client.py への変更(alwayson_scripts を追加)

"alwayson_scripts": {
    "ADetailer": {
        "args": [
            True,  # enable
            False, # skip_img2img
            {
                "ad_model": "face_yolov8n.pt",
                "ad_prompt": "",
                "ad_negative_prompt": "",
                "ad_confidence": 0.3,
                "ad_denoising_strength": 0.4,
            }
        ]
    }
}

config.yaml への追加

adetailer:
  enabled: true
  models:
    - name: "face_yolov8n.pt"
      confidence: 0.3
      denoising_strength: 0.4
    - name: "hand_yolov8n.pt"
      confidence: 0.3
      denoising_strength: 0.5

変更対象ファイル: - projects/ai-manga-pipeline/src/sd_client.py - projects/ai-manga-pipeline/config/config.yaml


Phase 3: ローカルでのLoRA学習(1週間)

ローカル学習フロー

  1. Forge を停止(VRAM確保のため)
  2. kohya_ss GUI を起動(ポート 7861)
  3. 学習実行(15〜30分)
  4. kohya_ss 停止 → Forge 再起動
  5. 生成テストで各エポックを評価

注意: ForgeとKohya_ssの同時起動はVRAM競合で学習失敗またはForgeがクラッシュする。必ず片方を止めてから起動する。

Step 3-1: kohya_ss セットアップ(Docker)

# Dockerイメージビルド(初回のみ)
cd D:\Kazuma_Teramachi\kohya_ss
docker compose build

# ビルド後の確認
docker images | grep kohya-ss

自動学習スクリプト(メイン):

# 設定ファイルを作成したら1コマンドで全自動
.\train-lora.ps1 -Config sinon_v2.toml
# → Forge自動停止 → 学習(20〜30分) → Forge自動再起動

GUIでタグ付け・設定確認だけしたい場合:

.\start-training.ps1   # http://localhost:7861 でkohya_ss GUI起動
.\stop-training.ps1    # 終了後にForge復帰

Step 3-2: ベースモデルの準備

  • illustriousXL_v01.safetensorslora-training/base_models/ に保存
  • Civitai等からダウンロード(Forgeのmodels/Stable-diffusion/とは分離)

Step 3-2: シノンLoRA v2(練習)

目標: まずプロセスを習得するため、既存LoRAがあるシノンで練習する

データセット要件: - 30〜40枚のシノン画像(多角度・多表情・多衣装) - 1024x1024以上にリサイズ - WD14 Taggerでタグ付け - キャラ固有タグ(blue hair, blue eyes等)を除外 - トリガーワード sn_sinon を各txtの先頭に追加

Step 3-3: RTX 5070 Ti (16GB) 向け推奨設定

network_dim: 64
network_alpha: 32
learning_rate: 0.0003         # UNET
text_encoder_lr: 0.00003      # TE
lr_scheduler: cosine
optimizer_type: AdamW8bit
train_batch_size: 2           # RTX 5070 Ti (16GB) は2が安全
max_train_epochs: 30
mixed_precision: bf16
gradient_checkpointing: true
fused_backward_pass: true
enable_bucket: true
min_bucket_reso: 1024
max_bucket_reso: 2048
save_every_n_epochs: 5

Step 3-4: 評価ワークフロー

  1. 各エポックLoRAを Forgeの models/Lora/ にコピー
  2. 固定プロンプト・固定シードで LoRA強度 0.5/0.7/0.8/1.0 の4枚を生成
  3. evaluations/sinon_v2/epoch{N}_samples/ に保存
  4. evaluation_log.md に最良エポックと理由を記録
  5. 採用版を best/sinon-06.safetensors として保存

既存の evaluator.py(Gemini Vision)を流用して評価を半自動化できる。


Phase 4: スタイルLoRA学習(1週間)

Phase 3でプロセスを習得してから着手。

キャラLoRAとの主な違い

項目 キャラLoRA スタイルLoRA
被写体 同一キャラクター 多様な被写体(スタイル統一)
タグ処理 キャラ固有タグを除外 被写体タグは残す
トリガーワード sn_sinon style_artistname
枚数 20〜40枚 20〜30枚

Phase 5: パイプライン統合(3〜5日)

config.yaml へのLoRA設定追加

lora:
  characters:
    sinon:
      file: "sinon-06.safetensors"
      trigger: "sn_sinon"
      default_weight: 0.8
  styles:
    artist_x:
      file: "style_x-01.safetensors"
      trigger: "style_x"
      default_weight: 0.6

変更対象ファイル

  • sd_client.py: ADetailer + Forge Couple の alwayson_scripts 対応
  • prompt_loader.py: LoRA自動付与(<lora:name:weight> をプロンプトに追加)
  • pipeline.py: キャラ切替時のLoRA自動切り替え

ロールバック戦略まとめ

拡張機能

問題発生 → Forge停止
         → extensions/{問題の拡張}/ を削除
         → バックアップからconfig復元
         → Forge再起動

LoRA(学習失敗・過学習)

問題発生 → outputs/ に全エポックがあるので前のエポックに戻す
         → evaluation_log.md で最良エポックを再選択
         → 設定変更して再学習する場合はconfigs/ を修正してローカルで再実行

Forge本体

問題発生 → git log で正常だったcommitを確認
         → git checkout <正常なcommit>
         → pip install -r requirements.txt で依存関係再構築

タイムライン

Week 1:
  Day 1    : Phase 0 - バックアップ基盤構築
  Day 2-3  : Phase 1 - 拡張機能導入(ADetailer → Forge Couple等)
  Day 3    : Phase 2 - ADetailer APIパイプライン統合

Week 2:
  Day 4    : Phase 3-1,2 - kohya_ssインストール、ベースモデル準備、データセット作成
  Day 5-6  : Phase 3-3 - シノンLoRA学習実行(Forge停止→学習→Forge再起動)
  Day 7    : Phase 3-4 - 各エポック評価、採用版選定

Week 3:
  Day 8-11 : Phase 4 - スタイルLoRAデータ収集・学習・評価

Week 4:
  Day 12-14: Phase 5 - パイプライン統合・結合テスト

注意点

  • kohya_ss と Forge の同時起動は避ける(VRAM競合)→ RunPodを使えば問題なし
  • RTX 5070 Ti (sm_120): kohya_ssをローカルで使う場合はPyTorch 2.7.0+cu128が必要(Forgeと同バージョン)
  • LoRA命名規則: {名前}-{バージョン番号}.safetensors(例: sinon-06.safetensors

参照ファイル

  • 調査レポート: docs/ai-manga/wip/20260312_SD_Forge_LoRA学習_拡張機能_調査レポート.md
  • パイプライン: projects/ai-manga-pipeline/src/sd_client.py