Download flex_train_wrap.py from Indianakamura/flexpi-parc: direct link, hf CLI and curl.
- Browser
- Download file 1.67 kB
-
https://huggingface.co/Indianakamura/flexpi-parc/resolve/main/flex_train_wrap.py
- Command line
-
hf download hf://Indianakamura/flexpi-parc/flex_train_wrap.py
-
curl -L -o flex_train_wrap.py https://huggingface.co/Indianakamura/flexpi-parc/resolve/main/flex_train_wrap.py
1.67 kB
| """scripts/train.py を包む。Trainer が「DiT 以外を凍結」した直後に、環境変数 FLEX_FREEZE_REGEX に | |
| 合うパラメータを追加で凍結する(F2 = 動画専門家 mot.mixtures.video を凍結し行動側だけ学習)。 | |
| upstream は編集しない。学習可能パラメータ数を印字して、凍結が実際に効いたことを目で確かめる。""" | |
| import os, re, sys, runpy | |
| sys.path.insert(0, "/workspace/flexpi_repo/src") | |
| import flexpi.trainer as T | |
| _orig = T.Wan22Trainer.__dict__["_apply_dit_only_train_mode"].__func__ | |
| def _patched(model): | |
| _orig(model) | |
| pat = os.environ.get("FLEX_FREEZE_REGEX", "") | |
| frozen = 0 | |
| if pat: | |
| rx = re.compile(pat) | |
| for n, p in model.named_parameters(): | |
| if p.requires_grad and rx.search(n): | |
| p.requires_grad_(False); frozen += p.numel() | |
| tr = sum(p.numel() for p in model.parameters() if p.requires_grad) | |
| tot = sum(p.numel() for p in model.parameters()) | |
| heads = {} | |
| for n, p in model.named_parameters(): | |
| if p.requires_grad: | |
| k = ".".join(n.split(".")[:3]); heads[k] = heads.get(k, 0) + p.numel() | |
| top = sorted(heads.items(), key=lambda x: -x[1])[:8] | |
| print(f"[wrap] 学習可能 {tr/1e9:.3f}B / 全体 {tot/1e9:.3f}B regex 凍結 {frozen/1e9:.3f}B pattern={pat!r}", flush=True) | |
| print("[wrap] 学習可能の内訳(上位): " + " ".join(f"{k}={v/1e6:.0f}M" for k, v in top), flush=True) | |
| T.Wan22Trainer._apply_dit_only_train_mode = staticmethod(_patched) | |
| os.chdir("/workspace/flexpi_repo") | |
| sys.argv = ["scripts/train.py"] + sys.argv[1:] | |
| runpy.run_path("scripts/train.py", run_name="__main__") | |