diff options
Diffstat (limited to 'ep_run/dipfarm_freezer.py')
| -rw-r--r-- | ep_run/dipfarm_freezer.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/ep_run/dipfarm_freezer.py b/ep_run/dipfarm_freezer.py new file mode 100644 index 0000000..49cdead --- /dev/null +++ b/ep_run/dipfarm_freezer.py @@ -0,0 +1,38 @@ +"""Consolidated trajectory freezer for the 4-seed dip farm (runs anywhere on the shared NFS): +copies runs/dipfarm_sN.pt -> runs/dipfarm_sN_traj/s<step>.pt whenever a new step line appears. +Feeds the ARPACK dip-screening (stability-dip statistics: rate, width, screenable yield).""" +import time, os, re, shutil + +os.chdir("/home/yurenh2/ept/ep_run") +SEEDS = (1, 2, 3, 4) +seen = {s: set() for s in SEEDS} +for s in SEEDS: + os.makedirs(f"runs/dipfarm_s{s}_traj", exist_ok=True) +t0 = time.time() +while time.time() - t0 < 24 * 3600: + time.sleep(20) + done = 0 + for s in SEEDS: + log, ck = f"runs/dipfarm_s{s}.log", f"runs/dipfarm_s{s}.pt" + try: + ls = [l for l in open(log) if l.startswith("step")] + except Exception: + continue + if not ls: + continue + m = re.search(r"step +(\d+)/", ls[-1]) + if not m: + continue + step = int(m.group(1)) + if step not in seen[s] and os.path.exists(ck) and os.path.getsize(ck) > 1e6: + try: + shutil.copy2(ck, f"runs/dipfarm_s{s}_traj/s{step}.pt") + seen[s].add(step) + print(f"froze s{s}/{step}", flush=True) + except Exception: + pass + if step >= 4000 or "DONE" in ls[-1]: + done += 1 + if done == len(SEEDS): + break +print("dipfarm freezer done:", {s: len(v) for s, v in seen.items()}, flush=True) |
