rapid-anima / docs /pcm.md
darask0's picture
PCM 非推奨化、DMDX 訓練効率 advantage 追記
18cfc4e verified
|
Raw
History Blame Contribute Delete
5.72 kB

PCM (Phased Consistency Model) 蒸留

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

重要: PCM の生成品質は低く、実用非推奨

5000 step 完走 + 数値的に安定収束したが、visual 品質が公式 Civitai Anima Turbo や DMDX に劣る。 cold-start の strategy が Anima では機能しなかったと推定。実用は 公式 Civitai Anima Turbo を推奨。 本ドキュメントは失敗事例の記録 + 改善方向の参照用。

概要

Wang et al. NeurIPS 2024、G-U-N/Phased-Consistency-Model SD3 流派を Anima v1.0 base に移植。FlowMatch + v-pred で Anima の rectified flow と math 一致、ε↔v 変換不要。

実装: scripts/distill/{pcm_scheduler,train_pcm}.py Modal: modal_app.py::train_pcm_distill

設計の鍵

  • num_euler_timesteps N=50 を K=4 phase に均等分割 → 4-step inference に最適化
  • ランダム index sampling → phase 終端まで Euler 1 step 進める
  • pseudo-Huber loss (c=1e-3) で stable convergence
  • 1 grad-through + 3 no_grad forward / step → ~60-80 GB on B200 (LoRA-only)
  • CFG-augmentation: w ∈ [4.0, 5.0] を訓練に embed → 推論 CFG=1.0 で teacher CFG=4.5 効果

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

項目
Base anima-base-v1.0.safetensors
Method Phased Consistency Model
LoRA target wide (AdaLN + attn + MLP の全 Linear、980 keys)
LoRA rank 32
Total steps 5000 (sample_every=500)
Batch / grad accum 1 / 4
Resolution 768
Euler N / Phases K 50 / 4
sigma_shift 3.0
CFG-aug w range [4.0, 5.0]
Huber c 1e-3
LR 5e-6
Optimizer AdamW (wd 0.01)
Warm-start 無し (cold-start on v1.0 base)
GPU B200
訓練時間 ~3.4h (1.72s/step、想定 6.5h の半分)
コスト ~$22 (B200 $6.25/h)

Loss 推移

  • 早期 (step 0-100): 0.001-0.14 範囲、warm-start 無しでも安定
  • 中盤 (step 1000-3500): 0.001-0.007 で healthy plateau
  • 後半 (step 4000-5000): 同水準維持、divergence なし
step 20  loss=0.0013  (初期 random spike 後すぐ低下)
step 130 loss=0.4468  (single spike、shifted sampling の hard spot)
step 500-4500 loss=0.001-0.007 範囲で平均化

mean collapse・NaN・OOM の発生 なし

検証結果 (4-step 生成、user 評価で品質不足)

同 prompt × seed=42、Anima v1.0 base、er_sde / simple / sigma_shift=3.0:

ckpt sampler / scheduler 時間 評価
step 3500 er_sde + simple 8.8s 2 キャラは描けるが、Turbo / DMDX より明らかに品質低い
step 4000 res_multistep + beta 11.2s 同等の品質劣化 (sampler 差で改善せず)
final (step 5000) 同上、user 判定で 実用不可

両 sampler とも 4-step CFG=1.0 で動作はするが、Civitai Turbo や DMDX の出力と比較すると 細部のシャープさ・色彩・ディテール表現が劣る。numerical 収束したが visual 品質が伸びなかった失敗例

配布

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

  • pcm_final_peft.safetensors (diffusers / peft 用)
  • pcm_final_comfy.safetensors (ComfyUI 用、980 keys)
  • README.md (使い方 + 訓練詳細)
  • samples/ (step 3500 / 4000 検証画像)

ComfyUI 推奨設定

LoraLoaderModelOnly:
  lora_name: pcm_final_comfy.safetensors
  strength_model: 1.0

ModelSamplingAuraFlow:
  shift: 3.0

KSampler:
  steps: 4
  cfg: 1.0
  sampler_name: er_sde  (or res_multistep)
  scheduler: simple     (or beta with res_multistep)

知見 (失敗分析含む)

数値上は成功した

  • cold-start でも数値的に安定 — phase consistency が numerical anchor となり divergence なし
  • rate 想定より速い — README 試算 4.7s/step → 実測 1.72s/step (B200 sageattention 効果含む)
  • single grad-through で memory 余裕 — DMD2 の dual adapter 構成より軽量

しかし visual 品質は低い (実用非推奨)

5000 step 完走 + loss 健全に推移したが、生成画像の品質が Civitai Anima Turbo / DMDX より明らかに劣る。 推測される原因:

原因候補 詳細
cold-start の限界 warm-start (公式 Turbo の既存 4-step 知識) なしで Anima 系の蒸留は厳しい可能性
phase consistency が style anchor として弱い data 分布の mean に向かう gradient はあるが、anime style の鋭さを保つ adversarial signal がない
CFG-augmentation embed が不完全 w∈[4.0, 5.0] の embed が teacher CFG=4.5 を完全再現していない可能性
データセット規模 5000 sample は cold-start には不十分の可能性 (公式 Turbo は数万-数十万規模)

教訓 (重要)

  • loss が健全でも visual 品質を保証しないdistillation.md §4.1 Layer 4-5 の Phase A ステルス失敗と同根
  • 中間 ckpt の visual 検証が必須 — quick_check_ckpt で 500 step ごとに見るべきだった
  • Anima 系 distill の cold-start は警戒: 公式 Turbo の warm-start が事実上必須

改善方向

  • warm-start (Civitai Turbo) を導入して semi-fine-tune に切り替え
  • dataset 規模拡大 (5000 → 20000+)
  • LADD 流の Smooth-L1 anchor 追加 (PCM では消えるが phase loss と組合せ可能)
  • 他の蒸留手法 (DMD2 + R3GAN、Hyper-SD 系) に切り替え検討