rapid-anima / docs /dmd2.md
darask0's picture
DMD2 完走、3 手法 + Turbo 比較反映
b791469 verified
|
Raw
History Blame Contribute Delete
5.81 kB

DMD2 (NVIDIA cosmos-predict2.5 流派) 蒸留

← README に戻る — 関連: PCM / DMDX / 蒸留全般

概要

NVIDIA cosmos-predict2.5 公式の DMD2 + TrigFlow 流派を Anima 移植。同 base に 2 つの独立 PEFT adapter (student / fake_score) を attach し set_adapter() で runtime 切替、TTUR (alt 5 critic : 1 generator)。

実装: scripts/distill/{dmd2_official_loss,train_dmd2_official}.py Modal: modal_app.py::train_dmd2_official_distill

設計の鍵

  • 2 adapter / single base → memory 効率 (teacher は別 deepcopy)
  • TrigFlow time sampling: s ∈ shifted_uniform(shift=3-5) → t = arctan(s/(1-s))
  • DMD2 gradient trick (逆 KL): grad = (x0_fake - x0_teacher) / |x_hat - x0_teacher|.mean()loss = ((x_hat - (x_hat - grad).detach())**2).mean()
  • Critic phase: weighted denoise with 1/sin(t)**2 factor
  • few-step rollout (n=1..4)、grad は最終 step のみ (memory efficient)

訓練設定 (実走、2026-05-18 - 19)

項目
Base anima-base-v1.0.safetensors
Method DMD2 + TrigFlow (cosmos-predict2.5)
LoRA target wide (980 keys) × 2 (student + fake_score)
LoRA rank 32
Total outer 5000 (1 outer = 5 critic + 1 generator)
n_student_steps 4
Teacher CFG 4.5 (Anima 公式推奨に整合、過去 preview3 試行の 3.0 から変更)
Student CFG 1.0 (CFG embedded)
Shift 3.0 (Anima sigma_shift と一致、過去の 5.0 から変更)
LR (gen / critic) 5e-6 / 1e-5 (TTUR)
Warm-start /models/loras/anima_turbo.safetensors (Civitai 公式 Turbo、968/1016 keys 一致)
GPU B200
訓練時間 step 660 まで ~40 min、resume + 4500 outer ~7h
コスト 累計 ~$48-55 想定 (rate 6.2s/outer parallel 時)

試行履歴 (2026-05-18 - 19)

1st run (/output/dmd2_v1/)

  • 設定: warm-start (Anima Turbo) + 5000 outer
  • 経過: step 660/5000 で KeyboardInterrupt
  • 原因: Modal workspace billing cycle spend limit reached (DMDX 並列起動で予算限度超過)
  • 保存: step 500 ckpt のみ無事 (volume commit 済)

Resume (/output/dmd2_v1_resume/)

  • 設定: step 500 ckpt を warm-lora、残り 4500 outer
  • warm-load: 980/980 keys 完全一致 (自前 LoRA 同 architecture)
  • 完走済 (outer 4500/4500、累計 7.7h、$48): dmd2_student_final.safetensors + 9 個の intermediate ckpt 保存
  • 中断による rate slowdown あり (3.66s → 6.15s/outer、並列実行 + Modal capacity の影響)

結論: warm-start dominance (DMDX と同じ問題)

5000 outer 完走したが、student LoRA は warm-start (Civitai Anima Turbo) からほぼ移動せず、 視覚的に Turbo と区別困難。DMDX と全く同じ症状で、手法ではなく warm-start anchor が支配的

Loss 推移 (順調)

outer l_dmd_critic l_dmd_gen 評価
0 0.0364 1.5780 warm-start 直後
100 0.07 1.18 gen 急速降下中
500 0.06 1.30 spike あるが healthy
660 (中断) 0.0471 0.16 健全な状態で中断
resume 0 0.0364 1.5771 warm-load から再開、原 outer 0 と類似
resume 500 0.058 1.29 期待通り
resume 1000 0.054 0.89 順調収束

magnitude (x_hat / teacher / fake): ~0.3-0.5 範囲で揃って distill 方向収束。

検証結果

step 500 (resume 開始時、4-step / er_sde+simple)

  • 2 キャラ (Flandre / Remilia) 正確分離
  • Civitai Turbo に近い品質 (warm-start 支配的、step 500 で大幅変化なし)
  • 生成時間 10.95s

final (5000 outer 完走、4-step / er_sde+simple)

  • step 500 と視覚的にほぼ同一
  • Civitai Anima Turbo baseline と区別困難
  • 5000 outer 訓練を完走したが student LoRA の重みが warm-start からほぼ動かなかった

ローカル DL 済: ~/Downloads/anima_loras/dmd2/dmd2_v1_step00500.safetensors

配布

HF: darask0/anima-distill-loras/dmd2/

PEFT + ComfyUI 両形式 + 専用 README + 比較サンプル画像 (Turbo vs DMD2 final) を upload 済。 実用としては Civitai Anima Turbo と差異なし、研究目的の配布。

ComfyUI 推奨設定

LoraLoaderModelOnly:
  lora_name: dmd2_v1_step00500.safetensors
  strength_model: 1.0

ModelSamplingAuraFlow:
  shift: 3.0

KSampler:
  steps: 4
  cfg: 1.0
  sampler_name: er_sde
  scheduler: simple

過去の preview3 試行との対比

migration_log.md §5.7 の preview3 DMD2 では:

  • 8-step: 絵画調シフト、洗色傾向
  • 4-step: シルエットのみ、ボケすぎ

→ 改善要因 (v1.0 試行):

  • warm-start (Civitai Turbo) 必須化
  • teacher_cfg 3.0 → 4.5 (Anima 公式推奨)
  • shift 5.0 → 3.0 (Anima sigma_shift 整合、sampler 互換性向上)
  • ✅ v1.0 base 直接 (preview3 ベース LoRA の style drift 回避)

知見

  • 2 adapter peft set_adapter() で必須: 毎 forward で明示切替しないと片方の重みが leak (operations.md 参照)
  • No module named 'modal' の volume commit 失敗: subprocess 内で modal lib 未参照、harmless warning (function 終了時に Modal 自動 commit)
  • billing limit による KeyboardInterrupt: Modal の workspace spend limit に達すると cloud function に SIGINT が送られて停止する。ローカル CLI の interrupt とは別経路、Modal dashboard で billing を確認・上げる必要
  • parallel rate 低下: 並列 (DMDX と) で 3.66s/outer → 6.2s/outer (~1.7x 遅い)、別 B200 アロケート時の混雑度に依存