# PCM (Phased Consistency Model) 蒸留 [← README に戻る](../README.md) — 関連: [DMD2](dmd2.md) / [DMDX](dmdx.md) / [蒸留全般](distillation.md) > ❌ **重要: PCM の生成品質は低く、実用非推奨** > > 5000 step 完走 + 数値的に安定収束したが、**visual 品質が公式 Civitai Anima Turbo や DMDX に劣る**。 > cold-start の strategy が Anima では機能しなかったと推定。実用は **公式 Civitai Anima Turbo** を推奨。 > 本ドキュメントは失敗事例の記録 + 改善方向の参照用。 ## 概要 [Wang et al. NeurIPS 2024](https://arxiv.org/abs/2405.18407)、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/**](https://huggingface.co/darask0/anima-distill-loras/tree/main/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](distillation.md#41-phase-a-の詳細-postmortem5-層因果分析) の 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 系) に切り替え検討