rapid-anima / docs /migration_log.md
darask0's picture
Initial commit: rapid-anima distillation codebase
77cc641 verified

既存実装の移植 — 2026-05 試行ログ

← README に戻る — 前章: distillation.md

⚠️ 本ドキュメントは 2026-05-17 時点のスナップショットを含む。Modal volume の 状態 (LoRA path、cache 内容など) は時間とともに変動するので、最新状態は modal volume ls で確認すること。配布済 LoRA は HF の darask0/anima-distill-loras に集約。

§4 失敗分析 の 5 回失敗を受け、「自前で書き下す」のを諦めて 既存の動く実装を最小改造で Anima に移植する 方針に転換。survey と smoke test を経て 5 手法 を実装、 本リポジトリに収録 (scripts/distill/)。

5.0 全体マップ

                         ┌── Z-Image trajectory imitation (DiffSynth-Studio 由来)
                         ├── DMD2 + TrigFlow      (NVIDIA cosmos-predict2.5 公式)
        蒸留 5 候補 ────┼── LADD                 (AMD Nitro-1 移植、PixArt 由来)
                         ├── Reflow / InstaFlow   (rfpp NeurIPS 2024 知見適用)
                         └── PCM                  (G-U-N/Phased-Consistency-Model、SD3 変種)
        
        無料補完  ────── ComfyUI-CapitanFlowMatch / ZiT-Scheduler (推論側 scheduler)
        
        survey で却下 ── DMDR / Hyper-SD / NitroFusion / ADD (訓練コード非公開)

5.1 採用 5 手法の概要

# 手法 カテゴリ 中核ファイル 設計の鍵
Z-Image trajectory imitation trajectory matching scripts/distill/{traj_scheduler,traj_loss,train_traj}.py critic なし、teacher 50-step CFG=2 trajectory を student 8-step に align
DMD2 + TrigFlow (cosmos-predict2.5) score matching scripts/distill/{dmd2_official_loss,train_dmd2_official}.py 同じ base に 2 LoRA adapter (student + fake_score)、set_adapter() 切替、alt 5:1
LADD (AMD Nitro-1) adversarial + recon scripts/distill/{anima_ladd_disc,train_ladd}.py + precompute_teacher_x0.py D backbone = teacher MiniTrainDIT (frozen)、5 spectral-norm head、Smooth-L1 recon anchor
Reflow / InstaFlow flow alignment scripts/distill/train_reflow.py (cache は --save-noise 必須) Anima は元から RF、U-shape t + Huber + 間欠 LPIPS、1 grad-through で最安
PCM (Phased Consistency Model) consistency scripts/distill/{pcm_scheduler,train_pcm}.py SD3-PCM 流派 (FlowMatch + v-pred)、Anima RF と math 一致、N=50 を K=4 phase に分割

全手法に共通の前提:

  • wide LoRA (attach_wide_lora() で AdaLN + attn + MLP 全 Linear、454 modules、~72M trainable)
  • warm-start = Civitai 公式 Anima Turbo LoRA (matched 968/1016 keys、x_embedder/t_embedder の 12 keys のみ skip)
  • B200 GPU + dataset は /dataset/raw (5000 caption、品質タグは未掃除でも蒸留には影響なし)

5.2 R3GAN との決定的な違い (なぜ LADD は動く可能性が高いか)

失敗パターン R3GAN LADD
D が無信号 → mean collapse CNN を一から学習、16ch latent prior なし D backbone = **teacher MiniTrainDIT (frozen)**、Anima latent を既に理解
D 爆発 γ (gradient penalty) calibration 困難 spectral norm + BatchNormLocal で D の Lipschitz 制約
anchor 不在で発散 DMD2 単独だと mean に潰れる Smooth-L1 recon loss (vs teacher x0) で「絶対に teacher から離れない」床を作る

LADD smoke (5 step、l_g_adv ≈ ln(2) ≈ 0.69, l_d_total ≈ 2·ln(2) ≈ 1.39) — R3GAN 試行で 1 度も達成できなかった「stable initialization」が初手で出る。

5.3 LoRA-only + warm-start + precompute cache の三位一体

3 つを組み合わせて実コストを大幅圧縮:

  1. LoRA-only (~72M trainable / 2B base) — gen と D backbone は frozen、optimizer state も小さい
  2. warm-start (Civitai Turbo LoRA) — cold-start より convergence が早く、品質下限が保証される
  3. precompute teacher x0 cache — teacher の 20-step CFG=4.5 rollout を 1 度だけ実行 (~$11 / 5000 サンプル)、 その後の蒸留で 複数手法が同じ cache を共有 (LADD / PCM が利用)
                  precompute_teacher_x0_cache  (1回, $11)
                          │
                          ├── LADD train     (cache の x0 を real として使用)
                          └── PCM train      (cache の emb を流用、x0 は teacher rollout source)
        
        precompute_for_reflow  (--save-noise 付き、別 cache, $11)
                          │
                          └── Reflow train   (noise + x0 + emb triplet)

5.4 採用しなかった手法 (survey 結果)

手法 却下理由
DMDR (vvvvvjdy/dmdr) ImageNet/SiT のクラス条件 toy のみ公開、T2I (Z-Image, SD3.5) パイプラインは未公開
Hyper-SD / Hyper-FLUX (ByteDance) 訓練コード非公開 (HF model card のみ)、コミュニティ port なし
NitroFusion / NitroSD-Vibrant (ChenDarYen) 訓練コード "Coming Soon" のまま停滞、リポジトリは 6 commit で凍結
ADD / LADD-DINOv2 (StabilityAI) 訓練コード非公開 (issues wontfix)、AMD 版で代替

5.5 inference 側補完: AYS / TeaCache / GGUF / sageattention の適用可否

手法 Anima 適用可否 理由
AYS (NVIDIA Align Your Steps) ComfyUI 公式実装は SD1/SDXL/SVD の sigma schedule を hardcode で rectified flow 未対応
TeaCache (timestep 残差 cache) ⚠️ base 高 step 用のみ 4-8 step 蒸留 LoRA とは構造的に non-compatible (連続 step の差分が大きすぎてスキップ不可)。base 28-50 step での 2x 速 には使える、porting ~250 LoC
ComfyUI-GGUF Q8/Q4 量子化 ⚠️ Anima 未対応 FLUX/SD3/Hunyuan 系のみ。Anima loader 追加 + GGUF 変換が必要
CapitanFlowMatch / CapitanZiT-Scheduler rectified flow / Cosmos-Predict2 兄弟向け scheduler、ComfyUI ノード追加だけ
sageattention torch SDPA 置換で 1.2-1.5x 推論速、pip install sageattention_base_image に同梱済
DPM-Solver++ 高次 / UniPC sampler ノード切替のみ、Anima 標準 er_sde の代替

実用推奨: 蒸留 LoRA + sageattention + CapitanFlowMatch scheduler のスタックが最も効率的。 TeaCache は「LoRA 使わず base 高品質モード」用の補完として将来 porting する価値あり (~250 LoC, ~$10 calibration)。

5.6 これから挑む人へ

  • survey をサボらない: 4 つの「有名手法」が実は訓練コード非公開で詰む。GitHub の README を見るだけでなく train.py / run.sh を実際に開いて確認
  • scripts/distill/anima_loader.py は再利用build_anima() + AnimaBundle で diffusion-pipe の罠 (namespace shadow、padding_mask 必須、dtype object vs str など) を全部吸収済
  • smoke test を必ず 1 step 走らせる — sign / dtype / 配線ミスを $1-2 で発見、本番 $30-50 をドブに捨てるリスク回避
  • MSYS_NO_PATHCONV=1 PYTHONIOENCODING=utf-8 PYTHONUTF8=1 を modal CLI に毎回つける (Windows JP locale 必須)

5.7 実画像比較 (2026-05、同 prompt × seed)

5 prompt × 2 seed × {8 step, 4 step} × {base CFG=4.5, Civitai 公式 Turbo CFG=1, ① Z-Image trajectory imitation CFG=1, ② DMD2 CFG=1} = 80 枚 を Modal compare_distill_loras で 生成 + v1.0 base 上で 13 条件 1 prompt 1 seedverify_completed_loras で生成。 同 noise seed なので 1:1 で比較可能 (実装: modal_app.py)。

観察された明確な順位 (8-step CFG=1、preview3 base、5 prompt × 2 seed = 80 枚):

Rank 手法 評価
🥇 Civitai 公式 Anima Turbo シャープ、彩度高、盾の紋章/松明の光まで完備、キャラ識別正確
🥈 ① Z-Image traj imitation (本 repo) 鮮明・安定、ディテール OK
🥉 ② DMD2 (本 repo) 絵画調シフト、やや洗色傾向
base 30step→8step 暗め・シンプル、品質劣化大

4-step での頑健性順位:

Rank 手法 評価
🥇 Civitai 公式 Anima Turbo 8-step とほぼ同等品質を維持
🥈 ① Z-Image エッジ甘くなる (8-step 訓練だったため)
② DMD2 シルエットのみ、ボケすぎ
base ほぼ崩壊、使用不可

v1.0 base での生成時間 (sageattention 有効、1024×1024、er_sde/simple/shift=3):

step / 条件 時間 備考
4-step LoRA (全 6 LoRA) 3.5-4.0s 公式 Turbo / ① Z-Image / ② DMD2 / ④ Reflow / ⑩ DRaFT+ 系すべて
8-step LoRA (全 6 LoRA) 4.0-4.7s 同上
30-step base CFG=4.5 10.7s LoRA 無効、品質基準

4-step LoRA = base 30 step の 3 倍速、sageattention 効果込み。Modal B200 のコスト換算で 1 画像 ~$0.006 (4-step LoRA) vs ~$0.018 (base 30 step)。

正直な結論: CircleStone Labs 公式 Turbo (Civitai) に予算 ~$300 で勝つのは現状困難。 公式は遥かに多い GPU 時間と専門知見を投入した結果。本 repo の自前蒸留は:

  • base からの 品質向上は明白 (8-step CFG=1 が実用レベル)
  • 公式 Turbo に 代替/補完 できる位置 (ライセンス遵守、自前カスタマイズ可)
  • 学習目的・特定スタイル特化・蒸留パイプライン理解 には十分価値

5.7.1 v1.0 base 切替で観察された style drift

2026-05-17 に base を anima-preview3-base.safetensorsanima-base-v1.0.safetensors に 切替。既存 LoRA はすべて preview3 で訓練済だが v1.0 でも動作する (アーキ互換)。ただし:

  • 出力 style がデフォルメ寄りに変化 — verify_v1_sage の 13 条件すべてで chibi/SD 風が強く 出た。preview3 base での同じ LoRA の出力 (compare_z_vs_dmd2) は比較的写実寄り
  • 原因仮説: v1.0 base が「young girl appearance」prompt を v1.0 の aesthetic prior でより 強く解釈する。preview3 とは prior 分布が異なる
  • LoRA を再訓練するなら v1.0 base 上で行うのが筋。preview3 ベース LoRA を v1.0 で使う場合は style ドリフトを受け入れる前提

5.8 まだ試せる方向 (諦める理由はない)

公式 Turbo に勝てないと判明しても、以下は試す価値がある:

  1. 訓練 step を増やす — ① Z-Image を 2000 → 8000 step に延長 (+$54)、loss はまだ plateau の手前で振動していた
  2. 蒸留 LoRA に DRaFT+ HPSv2 reward を追加学習検証済、推奨せず (§5.10 参照)。 HPSv2 score は +13 上昇したが視覚的には reward hacking で劣化 (anime → 西洋イラスト 風にドリフト、キャラ固有要素曖昧化、prompt adherence 落下)
  3. より高解像度 teacher rollout — 768 → 1024 で precompute (+$22 / cache、+$20 / train)
  4. スタイル/キャラ特化蒸留 — 公式 Turbo は汎用向け、特定ドメイン (例: 単一キャラ、 特定 artist style) なら自前のほうが優位の可能性
  5. LoRA rank を上げる — 32 → 64 / 128 (--lora-rank 64)、より大きな容量で teacher の細部を学べる可能性
  6. 既存実装 (LADD/Reflow/PCM/SiD2/Shortcut) の本番結果を待つ — 進行中、Z-Image を 超える手法が出る可能性は残る
  7. **8 手法の アンサンブル — 複数 LoRA を runtime で blend (ComfyUILoraLoaderModelOnly を 2 個直列に挟むだけ)、相補的に効くケースあり
  8. v1.0 base で再訓練 — 既存 LoRA は preview3 起点、v1.0 で訓練し直すと aesthetic 一致でさらに伸びる可能性 (§5.7.1 参照)

「公式に勝つ」のではなく「公式とは違う強みを持つ自前 LoRA」を作る方が現実解。 本 repo の 7 実装は どれもライセンス上自由に派生可能 で、warm-start の柔軟性が あるのが公式 Turbo にはない利点。

5.8.1 ファインチューニング dataset 生成 (進行中、2026-05-17)

目的: hakushiMixAnima_v02 base + anima-highres-aesthetic-boost LoRA を組み合わせて、 特定 4 artist のスタイル mix LoRA を fine-tune するための合成 dataset を生成。

Artist tags (固定 4 名、本 repo では秘匿 ♥):

@artist_1, @artist_2, @artist_3, @artist_4
  • 本ドキュメントではセキュリティ / プライバシーの観点から具体的 artist 名を伏せる
  • 実 artist tag は scripts/finetune_prompts*.txt (Modal volume の private prompts ファイル) と user の脳内にのみ存在する
  • Claude (AI assistant) が処理上 artist tag の実値が必要になった場合は、必ず user に質問 して聞き出すこと。推測や前回会話履歴からの引用で済まそうとしない (privacy 保護)
  • 4 artist は毎 prompt 必ず含まれる (artist drop なし、style mix を強固に学習させる狙い)

Dataset 構成:

subdir safety themes seeds 想定枚数 内容
/dataset/finetune_raw/ safe 60 16 960 SFW v1: 単体キャラ + couple + group + 環境
/dataset/finetune_raw_v2/ safe 60 16 960 SFW v2: animal/mytho/sports/cyberpunk/etc
/dataset/finetune_raw_v3/ safe 60 16 960 SFW v3: 職業/世界観 (idol/detective/scholar/etc)
/dataset/finetune_raw_nsfw/ nsfw 30 16 480 suggestive (bath/lingerie/bedroom/etc)
/dataset/finetune_raw_explicit/ explicit 30 16 480 explicit sex acts #1-30
/dataset/finetune_raw_explicit_v2/ explicit 60 16 960 explicit sex acts #31-90、consensual framing 8 件修正
合計 300 themes ~4800

訓練時は AnimaImageCaptionDataset の rglob で全 subdir 自動取り込み (親 /dataset/ を指定)。

5.8.2 ファインチューニング訓練計画

完成後 train_finetune_4variants で 4 hyperparam 並列実行 (各 B200):

variant rank lr epochs drop_artist 狙い
A baseline 32 2e-5 3 0.0 Anima 公式推奨そのまま
B higher capacity 64 2e-5 3 0.0 rank 倍で細部表現↑
C safer LR 32 1e-5 4 0.0 過学習回避 + step ↑
D artist focus 32 3e-5 3 0.0 lr 強めで style 強化

llm_adapter_lr = 0 必須 (Anima 公式既知識保護、本 repo configs/phase1_anima.toml 既設定)。

5.9 実走中の状態スナップショット (2026-05-17 時点)

⚠️ このセクションは 2026-05-17 時点のスナップショット。実際の Modal volume 上の path / 中身は時間と共に変わる。最新は modal volume ls anima-outputs で確認。 現在配布済の LoRA は HF darask0/anima-distill-loras に集約。

このリポジトリで現在 Modal 上に保存されている / 訓練中の LoRA とその想定用途。 中断/再開時の参照用:

LoRA path on anima-outputs volume source method 状態 (当時) コスト
traj_final /output/traj_full/traj_final.safetensors ① Z-Image trajectory imitation ✅ 完走 (2000 step) $18
traj_extended /output/traj_extended_8000/traj_final.safetensors ① Z-Image 延長 (6000 step 追加) 🟢 進行中 ~$54
traj_rank128 /output/traj_rank128/traj_final.safetensors ① rank 32→128 cold-start 🟢 進行中 ~$50
dmd2_student_final /output/dmd2_full/dmd2_student_final.safetensors ② DMD2 + TrigFlow ✅ 完走 (3000 outer) $19
ladd_v2_fast /output/ladd_v2_fast/ladd_student_final.safetensors ③ LADD-v2 (bug 修正版) 🟢 進行中 ~$17
reflow_final /output/reflow_full/reflow_final.safetensors ④ Reflow (rfpp) 🟢 進行中 (~7000 step) ~$8
pcm_final /output/pcm_full/pcm_final.safetensors ⑤ PCM (SD3 流派) 🟢 進行中 ~$36
sid_student_final /output/sid_full/sid_student_final.safetensors ⑥ SiD2 (data-free) 🟢 進行中 ~$18
shortcut_final /output/shortcut_full/shortcut_final.safetensors ⑦ Shortcut Models (d-head) 🟢 進行中 ~$25
draftp_final (Z-Image warm) /output/draftp_full/draftp_final.safetensors ⑧ DRaFT+ HPSv2 on ① ✅ 完走 $3
draftp_on_turbo /output/draftp_on_turbo/draftp_final.safetensors ⑧ DRaFT+ HPSv2 on Civitai Turbo ✅ 完走 $3

中間 cache:

  • /dataset/teacher_x0_cache/ — 5000 サンプル、teacher 20-step CFG=4.5 の x0 + Qwen3 emb
  • /dataset/reflow_cache/ — 同上 + noise も保存 (Reflow / Shortcut 用)
  • /dataset/teacher_x0_smoke/ — 50 サンプル smoke 用
  • /models/loras/anima_turbo.safetensors — Civitai 公式 (warm-start 用)
  • /models/hpsv2/HPS_v2_compressed.pt — DRaFT+ 用 reward model

比較生成: compare_distill_loras (4 条件) と compare_all_methods (全 9-11 条件、final LoRA 存在を自動判定) の 2 種を modal_app.py に実装済。後者は 5 残り手法の本番完了後に走らせる。

実コスト累計 (2026-05-17 時点): ~$200 (smoke + 失敗 + 完走 + 進行中の使用済分込み)、 予算 $300 の 67%。

5.9.2 Modal volume 構成 (4 volumes)

本リポジトリは 4 つの Modal volume を使い分けて状態を持つ。volume mount は modal_app.py::VOLUMES で定義。

A. anima-models (~30 GB) — base モデル + 全 LoRA + reward weights

mount: /models、create_if_missing=True

checkpoints/
  anima-base-v1.0.safetensors          ← 現用 base (4.18 GB)
  hakushiMixAnima_v02.safetensors      ← (symlink, comfyui-anima-models から)
  qwen_3_06b_base.safetensors          ← text encoder
  qwen_image_vae.safetensors           ← VAE
  phase_a_distilled.safetensors        ← 旧 Phase A 失敗 ckpt (~$70 で失敗、残ってる)
  phase_a_step1000.safetensors         ← 旧 Phase A 中間
  anima-preview3-base.safetensors      ← ❌ 削除済 (v1.0 切替時)

loras/
  anima_turbo.safetensors               ← Civitai 公式 (warm-start のデファクト)
  z_image_traj_final.safetensors        ← ① Z-Image 蒸留 (preview3 起点、完走 LoRA)
  dmd2_student_final.safetensors        ← ② DMD2 (preview3 起点、完走 LoRA)
  reflow_final.safetensors              ← ④ Reflow (preview3 起点、完走 LoRA)
  draftp_on_zimage.safetensors          ← ⑩ DRaFT+ on Z-Image (品質追加学習)
  draftp_on_turbo.safetensors           ← B: DRaFT+ on Civitai Turbo (reward hacking 検証済、品質劣化)
  ladd_v2_step500.safetensors           ← ③ LADD v2 部分 (停止前 step 500)
  pcm_step500.safetensors               ← ⑤ PCM 部分 (停止前 step 500)
  anima-highres-aesthetic-boost.safetensors ← (symlink, comfyui-anima-models から)
  phase_b/d/f_4step_lora.safetensors    ← 旧 R3GAN 試行の残骸 LoRA

hpsv2/
  HPS_v2_compressed.pt                  ← DRaFT+ 用 reward model (1.97 GB)

torchhub/                                ← torch.hub cache
cache/                                   ← misc cache (sageattention 等)

B. anima-dataset (~40 GB) — 全データセット + 比較生成出力

mount: /dataset、create_if_missing=True

A. 元データ / self-distillation:

  • raw/ — Anima base 自己生成 5000 (.png + .txt)、初期 distill 用
  • samples/, turbo_test/, compare/ — 過去の動作確認生成

B. 蒸留用 precompute cache:

  • teacher_x0_smoke/ — 50 サンプル smoke 用
  • teacher_x0_cache/ — 5000 サンプル × (x0 + emb)、LADD/PCM/SiD2 用
  • reflow_cache/ — 同上 + noise 保存、Reflow / Shortcut 用

C. 比較 / 検証生成:

  • compare_z_vs_dmd2/ — 80 PNG (base / turbo / ① / ② × 8/4 step)
  • verify_completed/ — 旧 verify (workflow bug で 0 images、失敗)
  • verify_v1_sage/ — v1.0 + sageattention で 13 条件 verify (1 prompt × 13)
  • ckpt_health_check/ — quick_check_ckpt 出力 (PCM step 500 等)

D. ファインチューニング dataset (現在進行中、~4800 枚予定):

  • finetune_raw/ — SFW v1 (60 themes × 16 seeds = 960)
  • finetune_raw_v2/ — SFW v2 (animal/mytho/sports 60×16 = 960)
  • finetune_raw_v3/ — SFW v3 (職業/世界観 60×16 = 960)
  • finetune_raw_nsfw/ — NSFW suggestive (30×16 = 480)
  • finetune_raw_explicit/ — EXPLICIT v1 (30×16 = 480)
  • finetune_raw_explicit_v2/ — EXPLICIT v2 #31-90 (60×16 = 960)

C. anima-outputs (~30 GB) — 訓練 LoRA / ckpt の保存先

mount: /output、create_if_missing=True

完走 (preview3 起点):

  • traj_full/ — ① Z-Image final ($18)
  • dmd2_full/ — ② DMD2 final ($19)
  • reflow_full/ — ④ Reflow final ($13)
  • draftp_full/ — ⑩ DRaFT+ on Z final ($3)
  • draftp_on_turbo/ — B: DRaFT+ on Turbo final ($3)

中断 / 部分 (preview3、~$80-100 浪費):

  • ladd_v2_fast/ — ③ LADD v2 step 500 ckpt まで
  • pcm_full/ — ⑤ PCM step 500 ckpt まで
  • sid_full/ — ⑦ SiD2 outer ~4200 まで (停止時)
  • traj_extended_8000/ — A: Z-Image extend (停止)
  • traj_rank128/ — E: rank 128 (停止)
  • shortcut_full/ — ⑦ Shortcut 異常遅延 step 500 まで ($63 損)

旧 R3GAN 試行 (5 連続失敗の残骸):

  • distill/, distill_e/, distill_f/, distill_f_full/ — Phase A/B/C 試行

smoke 各種:

  • *_smoke/ — 各手法の smoke test 出力 (1-5 step、debug 用)

D. comfyui-anima-models (~5 GB) — user アップロード外部モデル

mount: /comfyui_anima_models、create_if_missing=False (user が事前アップロード)

diffusion_models/
  hakushiMixAnima_v02.safetensors      ← ファインチューニング用 base
loras/
  anima-highres-aesthetic-boost.safetensors ← ファインチューニング用 quality boost LoRA
text_encoders/, vae/                    ← 空 (将来用 placeholder)

ファインチューニング用 dataset 生成時に /models/{checkpoints,loras} へ symlink される (generate_finetune_chunk 内で自動)。

累計サイズ + コスト

volume 概算サイズ 月額保管料 (Modal $0.15/GB/月)
anima-models ~30 GB ~$4.5
anima-dataset ~40 GB ~$6
anima-outputs ~30 GB ~$4.5
comfyui-anima-models ~5 GB ~$0.75
合計 ~105 GB ~$16/月

不要 dir は cleanup_checkpoints Modal function 等で適時間引きが推奨 (古い phase_a/b/c 系、 shortcut_full、放置 smoke 各種、要らない finetune subdir は数十 GB 占有してる)。

5.9.1 Anima 公式推奨 prompt / 推論設定 / ファインチューニング設定

CircleStone Labs/Anima HF README から 抜粋した推奨設定。本リポジトリの全 workflow / generate_dataset / fine-tune script は この推奨に準拠している。

Prompt format:

[quality/meta/year/safety] [1girl/1boy/etc] [character] [series] [@artist] [general]
  • Quality prefix (positive 先頭): masterpiece, best quality, score_7, safe
  • Negative: worst quality, low quality, score_1, score_2, score_3, artist name
  • tag は lowercase + space 区切り (underscore は score タグだけ: score_7)
  • Danbooru タグより Gelbooru タグを優先
  • artist tag は @ プレフィックス必須 (なしだと効果激減)、[artist] 位置に置く
    • 多語 artist は半角 space (例: @nnn yryr)
    • 別解釈 disambiguator がある場合は paren escape (例: @artist_name \(circle_name\))
    • 複数 artist を , 区切りで列挙可

Recommended sampler / scheduler / CFG / steps:

推奨 値 / 説明
sampler er_sde (中立、フラット彩色、シャープライン)、euler_a (柔らかめ、2.5D 傾向)、dpmpp_2m_sde_gpu (バラエティ豊か、暴走しがち)
scheduler simple (デフォルト)、beta57 (RES4LYF custom node、リアル系・絵画調用)
sigma_shift 3.0 (ModelSamplingAuraFlow で必須、本リポジトリ全 workflow で設定済)
CFG 4-5
step 30-50
resolution 512² から 1536² までサポート (1024² 中心が無難)
VAE qwen_image_vae.safetensors
Text encoder qwen_3_06b_base.safetensors
Diffusion model anima-base-v1.0.safetensors

Fine-tuning best practices (Anima 公式抜粋):

  • llm_adapter_lr = 0 必須 — adapter は影響力が強く既知識を多く持つため訓練すると壊れる (本 repo configs/phase1_anima.toml で設定済)
  • 低 LR start: rank 32 LoRA で lr = 2e-5 から
  • light touch training — モデルが既に多様な visual concept を持っているので無理に押し込まない
  • captioning は Danbooru tag + 自然言語の併用 OK
  • 例: 公式 style LoRA on Civitai (dataset + config 公開)

Content policy / restrictions:

  • safety tag: safe / sensitive / nsfw / explicit を positive / negative 両方で使い分ける
  • text rendering は弱い (長文を画像に書かせない)
  • 複数キャラ: character 名 → 基本属性の順で書くと混同回避
  • prompt weighting は SDXL より強めに必要 (例: (chibi:2))
  • 自然言語 prompt は 最低 2 文以上 が安定 (極端に短いと予測不能)
  • 非商用ライセンス縛り、商用問い合わせ tdrussell@circlestone.ai

5.10 品質評価の方法論 (reward hacking 実証あり)

「ディテール多い・彩度高い」≠「良い」。蒸留 LoRA や reward fine-tuning の出力を評価 する際は、必ず以下の軸で分解して判断する:

評価軸 確認内容
(a) target style 維持 anime 系を期待しているなら anime のままか? 西洋イラスト / リアル系にドリフトしていないか?
(b) キャラクター固有要素の精度 例: Touhou Flandre Scarlet なら金髪+赤目+クリスタル翼、Remilia なら青髪+赤目+コウモリ翼 が正確か?
(c) prompt adherence 指示したポーズ (例: hands raised pointing toward viewer with open palms)、構図、背景要素を反映しているか?
(d) 破綻ポイント 手指の本数・関節・方向、複数キャラの顔混じり、関節破綻、bad anatomy
(e) 生成時間 per-image gen_time (_summary.json から)、step 数 × sampler × LoRA 構成で比較

DRaFT+ HPSv2 reward fine-tuning の reward hacking 実証 (2026-05-17):

  • 仮説: 公式 Anima Turbo に HPSv2 reward fine-tuning (DRaFT+ K=1 LV、kl_coeff=0.2、1500 step、 $3) を後付けすれば品質が公式超えできる?
  • 結果: HPSv2 score は 25.78 → 38.99 (+13.21) と大幅向上 (loss 順調、KL 0.2-0.3 安定)
  • しかし視覚的には劣化 (ユーザー評価): 西洋イラスト風にドリフト、Flandre/Remilia の固有 翼が曖昧化、両キャラの衣装がほぼ同じに、prompt の手のポーズが崩れる、装飾過多 (シャンデリア
    • ランプ + 飾り) でゴチャゴチャ
  • 原因: HPSv2 は「人間が好きそうな generic な見栄え」preference を学習しており、Touhou anime style や character accuracy を直接最適化していない。reward が指す方向と用途が乖離した

教訓:

  • reward score 上昇 ≠ 品質向上。reward 系は必ず視覚検証
  • HPSv2 / PickScore / ImageReward 等は「平均的に綺麗」を上げるだけ、特定 niche style には不向き
  • 蒸留 LoRA の評価では、必ず 「複数の評価軸を分解」して判定。1 軸だけ (例: ディテール量) で判断しない
  • 「score が上がった」「ディテールが増えた」を理由に勝者宣言しない、視覚的に必ず確認する

verify 用 prompt の設計指針 (scripts/verify_prompts.txt):

単純な single-character prompt では LoRA の差が出ない。「壊れにくいもの」より「壊れやすい もの」をテストする:

  • 複数キャラクター (face mix / 属性入れ替えが起きやすい)
  • キャラ毎に異なる属性 (髪色、目色、翼種別)
  • 手・指の特定ポーズ (open palms、pointing)
  • 詳細背景 + foreground キャラ両立
  • target style の制約 (anime style 維持を強制)

これで初めて LoRA 間の優劣が顕在化する。

5.11 次セッション引き継ぎ (2026-05-17 23:xx 中断時点)

⚠️ 2026-05-17 時点のスナップショット。現在は v1.0 base で PCM が cold-start 完走済 (darask0/anima-distill-loras/pcm)。 本セクションは当時の状態を歴史記録として保持。

1. 完走済 (Anima preview3 base 起点、すべて使用可)

LoRA 出力 path コスト
① Z-Image traj imitation /output/traj_full/traj_final.safetensors $18
② DMD2 + TrigFlow /output/dmd2_full/dmd2_student_final.safetensors $19
④ Reflow rfpp /output/reflow_full/reflow_final.safetensors $13
⑩ DRaFT+ on ① Z-Image /output/draftp_full/draftp_final.safetensors $3
B: DRaFT+ on Civitai Turbo /output/draftp_on_turbo/draftp_final.safetensors $3 ⚠️ reward hacking 検証で 品質劣化 確認

2. 中断 (preview3 起点、user が「古いから止めて」と判断し全停止 2026-05-17)

手法 部分 ckpt 中断時 step 浪費コスト
③ LADD v2 /output/ladd_v2_fast/ladd_student_step00500.safetensors ~500/5000 ~$5
⑤ PCM /output/pcm_full/pcm_step00500.safetensors ~760/5000 ~$30
⑦ SiD2 /output/sid_full/ (sample_every=500 で step ~4000 までの ckpt) ~4200/5000 ~$15
⑧ Shortcut /output/shortcut_full/shortcut_step00500.safetensors ~560/4000 (64s/step 異常遅延で abort) $63
A: Z-Image extend /output/traj_extended_8000/ (step ~1360 までの ckpt) ~1360/6000 ~$13
E: rank 128 /output/traj_rank128/ (step ~1440 までの ckpt) ~1440/2000 ~$13

中断合計浪費: ~$139ファイルは残してある、user 判断で再開 or 削除。

3. ファインチューニング dataset (新規、hakushi base、ほぼ完成)

subdir safety 完了状況
/dataset/finetune_raw/ safe ✅ 960
/dataset/finetune_raw_v2/ safe ✅ 960
/dataset/finetune_raw_v3/ safe ✅ 960
/dataset/finetune_raw_nsfw/ nsfw ✅ 480
/dataset/finetune_raw_explicit/ explicit ✅ 480
/dataset/finetune_raw_explicit_v2/ explicit ✅ 960
合計 4800 / 4800 完成

訓練 prompt: scripts/finetune_prompts*.txt、artist tag は 秘密 ♥ (§5.8.1 参照)。

4. 次セッションで user 判断待ちのこと (最重要)

ファインチューニング dataset 完成後、どちらに進むか user 判断:

Path A (推奨): ファインチューニング集中

  • train_finetune_4variants で 4 hyperparam 並列 (A: rank 32 lr 2e-5 / B: rank 64 lr 2e-5 / C: rank 32 lr 1e-5 epochs 4 / D: rank 32 lr 3e-5)
  • 各 ~3-4h、計 ~$120
  • 蒸留は公式 Anima Turbo に任せる (compare_z_vs_dmd2 で Turbo 圧勝が実証済)
  • 自前 fine-tune LoRA × 公式 Turbo の スタック が現実解

Path B: v1.0 base で蒸留 LoRA を再訓練

  • 既存の /dataset/raw/ (preview3 self-distill) は base 違いで不適
  • v1.0 base で self-distillation dataset 新規生成必要 (~$25)
  • その後 5 蒸留手法を v1.0 で再訓練 (~$80-120)
  • 計 ~$120-145
  • 公式 Turbo に勝てる見込み低 (前回比較で実証)

Path C: 両方やる

  • Path A 先行で完成見て、余力あれば Path B
  • 計 ~$250-280

2026-05-18 update: PCM を Path B 流に v1.0 base で cold-start 完走、 HF 配布まで完了 (詳細は HF model card)。

5. 次 Claude が必ず守るルール

  • Artist tag は秘密 (§5.8.1)。Claude が prompt 生成で必要な場合、user に直接質問する。 推測 / 履歴引用しない。scripts/finetune_prompts*.txt には実 tag が入ってるが README / chat 出力では具体名を引用しない
  • Modal CLI on Windows 必須 prefix: MSYS_NO_PATHCONV=1 PYTHONIOENCODING=utf-8 PYTHONUTF8=1
  • 画像品質評価: 「ディテール多い ≠ 良い」、必ず user judgment を仰ぐ (§5.10 reward hacking 実証)
  • workflow JSON node ID: positive=5, latent=7, KSampler=8 (generate_dataset.py::patch_workflow が hardcode)
  • base 切替の影響: preview3 LoRA を v1.0 で使うと style drift する (§5.7.1)
  • rank 違いの LoRA は warm-start 不可 (load_warm_lora で 0 keys matched エラー)、cold-start 必要
  • LADD discriminator bug fix: gradient_to_input フラグ追加済、G phase は True、D phase は False
  • Modal function param は lowercase: 大文字 K: int は Modal CLI で k=1 に変換され抹消、k_grad などに
  • sageattention 有効: _base_image に同梱、generate_dataset.py で auto-enable

6. 現コスト累計 + 予算

  • 完走 LoRA + smoke + 失敗 retry + dataset: ~$200
  • 中断蒸留訓練の浪費: ~$139
  • 当初予算 $300 → ~$339 で +$39 超過
  • 推定 ファインチューニング 4 並列: +$120 → 完成時総額 ~$460
  • user が「金は OK」と承認 (実コストは全部 Modal dashboard で監視可能)

7. 中断時 Modal で active な task

セッション終了時に bash background は全部止めてよい (Modal cloud は無影響)。 ただし Modal app は app_stop コマンドで明示停止が必要 (止めないと課金続行):

modal app list                      # 全 app 確認
modal app stop <ap-xxxxx> --yes     # 個別停止

次セッション開始時は modal app list で再確認して、無駄に残った app が無いか確認推奨。 本セッション中断時には:

  • 6 訓練 (LADD v2 / PCM / SiD2 / A / E / Shortcut) はすべて停止済
  • dataset 生成: ✅ 全 6 subdir 4800 枚完成 (SFW v3 も 2026-05-17 終わり際で完了)
  • 残 active task なし、Modal 課金は volume 保管料 ($16/月) のみ