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ベース自動マスク | 中 |
安全なインストール手順¶
- Forge停止
config.json/ui-config.jsonをバックアップ- Extensions → Install from URL で1つずつインストール
- Forge再起動 → テスト生成1枚で動作確認
- 問題なければ次へ
ロールバック手順¶
- Forge停止
extensions/{問題の拡張}/フォルダを削除(または_disabled_にリネーム)- バックアップから
config.json/ui-config.jsonを復元 - 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週間)¶
ローカル学習フロー¶
- Forge を停止(VRAM確保のため)
- kohya_ss GUI を起動(ポート 7861)
- 学習実行(15〜30分)
- kohya_ss 停止 → Forge 再起動
- 生成テストで各エポックを評価
注意: 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でタグ付け・設定確認だけしたい場合:
Step 3-2: ベースモデルの準備¶
illustriousXL_v01.safetensorsをlora-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: 評価ワークフロー¶
- 各エポックLoRAを Forgeの
models/Lora/にコピー - 固定プロンプト・固定シードで LoRA強度 0.5/0.7/0.8/1.0 の4枚を生成
evaluations/sinon_v2/epoch{N}_samples/に保存evaluation_log.mdに最良エポックと理由を記録- 採用版を
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自動切り替え
ロールバック戦略まとめ¶
拡張機能¶
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