# Setup — Flow-CoPD experiments Method: **Flow-CoPD** (Contrastive On-Policy Distillation for flow). See `refine-logs/FINAL_PROPOSAL.md` + `refine-logs/EXPERIMENT_PLAN.md`. ## Codebase decision **Base codebase = Flow-GRPO** (`third_party/flow_grpo`, NeurIPS'25, `github.com/yifan123/flow_grpo`). Reason: it is the de-facto flow-matching online-RL/OPD codebase (SD3.5-M + LoRA + ODE→SDE sampling), and it already ships the exact pieces our experiment plan needs: | Our plan needs | Already in flow_grpo | |---|---| | positive-only OPD base (A0, = Flow-OPD/DiffusionOPD repro) | `scripts/train_sd3.py` + `config/grpo.py` | | **Diffusion-DPO control (Block B1)** | `scripts/train_sd3_dpo.py` + `config/dpo.py` | | reward models (PickScore / aesthetic / CLIP / OCR / ImageReward) | `flow_grpo/{pickscore,aesthetic,clip,ocr,imagereward}_scorer.py` | | Flow-GRPO-Fast (1–2 step training, single-GPU friendly) | `scripts/train_sd3_fast.py` | | over-optimization / reward-hacking baseline | `scripts/train_sd3_GRPO_Guard.py` (relevant to our hacking-suppression claim) | Baselines cloned alongside: - `third_party/DiffusionNFT` (`NVlabs/DiffusionNFT`) — **Block B2 control** (negative-aware but GRPO-framed, no teacher). Our method code (to be written) goes in `flow_copd/` — a new `train_sd3_copd.py` + a contrastive-negative loss module, reusing flow_grpo's sampler/reward/teacher-loading. ## Models | Role | HF id | Where | Notes | |---|---|---|---| | Base | `stabilityai/stable-diffusion-3.5-medium` | HF cache (`.hf_cache`) | **GATED — needs your HF token + license** | | Teacher T1 (preference) | `jieliu/SD3.5M-FlowGRPO-PickScore` | `checkpoints/teachers/pickscore` | public **LoRA**, no training needed | | Teacher T2 (text/OCR) | `jieliu/SD3.5M-FlowGRPO-Text` | `checkpoints/teachers/text` | public **LoRA**, no training needed | | Reward: PickScore | `laion/CLIP-ViT-H-14-laion2B-s32B-b79K` + `yuvalkirstain/PickScore_v1` | HF cache | public | | Reward: aesthetic/CLIP | `openai/clip-vit-large-patch14` (+ repo asset MLP head) | HF cache / repo | public | | Reward: OCR | PaddleOCR | local cache | installed in `setup_env.sh` | > 💡 Big win: the Flow-GRPO **task experts double as our teachers** (LoRA adapters), so the ~20–30 GPU·h "teacher prep" in the experiment plan is **eliminated** — just download them. ## Setup order ```bash # 1. Environment (dedicated conda env; repo pins py3.10.16 / torch2.6.0) bash scripts/setup_env.sh # 2a. Public weights (teachers + reward models) — no token needed bash scripts/download_weights.sh # 2b. Gated base model — AFTER you accept the license + log in: # https://huggingface.co/stabilityai/stable-diffusion-3.5-medium huggingface-cli login # or: export HF_TOKEN=hf_xxx bash scripts/download_weights.sh --all # 3. Always export this when training (so code finds cached base + reward models): export HF_HOME=/workspace/Research/UMM/.hf_cache ``` ## ⚠️ The one thing only you can do `stabilityai/stable-diffusion-3.5-medium` is gated. Accept the license and run `huggingface-cli login` (or `export HF_TOKEN=...`). Everything else (code, teachers, reward models, OCR) is public and set up automatically. ## Layout ``` third_party/flow_grpo # BASE codebase third_party/DiffusionNFT # Block B2 baseline scripts/{setup_env,download_weights}.sh checkpoints/teachers/{pickscore,text} # teacher LoRA adapters .hf_cache/ # base + reward models (HF_HOME) flow_copd/ # OUR method code (next step via /experiment-bridge) refine-logs/ # proposal + experiment plan ```