eval: skip unfinished runs; PCI GPU order
Browse files- experiments/evaluate.py +6 -0
- experiments/run_all.py +1 -1
experiments/evaluate.py
CHANGED
|
@@ -15,6 +15,7 @@ Outputs (experiments/results/eval/ by default; existing rows of other models are
|
|
| 15 |
"""
|
| 16 |
import argparse
|
| 17 |
import glob
|
|
|
|
| 18 |
import os
|
| 19 |
import time
|
| 20 |
|
|
@@ -63,8 +64,13 @@ def stage1_model(path, device):
|
|
| 63 |
def run_models(device, pattern):
|
| 64 |
out = {}
|
| 65 |
for p in sorted(glob.glob(pattern)):
|
|
|
|
| 66 |
ck = torch.load(p, map_location="cpu", weights_only=False)
|
| 67 |
cfg = ck["config"]
|
|
|
|
|
|
|
|
|
|
|
|
|
| 68 |
g = build_generator(**cfg); g.load_state_dict(ck["generator_state_dict"], strict=True)
|
| 69 |
name = os.path.basename(os.path.dirname(p))
|
| 70 |
out[name] = dict(model=g.to(device).eval(), kind="singlecell", in_channels=cfg["in_channels"], tanh=True,
|
|
|
|
| 15 |
"""
|
| 16 |
import argparse
|
| 17 |
import glob
|
| 18 |
+
import json
|
| 19 |
import os
|
| 20 |
import time
|
| 21 |
|
|
|
|
| 64 |
def run_models(device, pattern):
|
| 65 |
out = {}
|
| 66 |
for p in sorted(glob.glob(pattern)):
|
| 67 |
+
h = os.path.join(os.path.dirname(p), "history.json")
|
| 68 |
ck = torch.load(p, map_location="cpu", weights_only=False)
|
| 69 |
cfg = ck["config"]
|
| 70 |
+
done = os.path.exists(h) and len(json.load(open(h))) >= cfg.get("epochs", 0)
|
| 71 |
+
if not done and not os.environ.get("S2F_EVAL_UNFINISHED"):
|
| 72 |
+
print(f" skipping unfinished run {os.path.basename(os.path.dirname(p))} (set S2F_EVAL_UNFINISHED=1 to include)")
|
| 73 |
+
continue
|
| 74 |
g = build_generator(**cfg); g.load_state_dict(ck["generator_state_dict"], strict=True)
|
| 75 |
name = os.path.basename(os.path.dirname(p))
|
| 76 |
out[name] = dict(model=g.to(device).eval(), kind="singlecell", in_channels=cfg["in_channels"], tanh=True,
|
experiments/run_all.py
CHANGED
|
@@ -52,7 +52,7 @@ def gpu_queue(queue, gpus, num_workers, extra=()):
|
|
| 52 |
run_dir = os.path.join(RUNS_DIR, f"{v}_seed{seed}")
|
| 53 |
os.makedirs(run_dir, exist_ok=True)
|
| 54 |
log = open(os.path.join(run_dir, "train.log"), "a")
|
| 55 |
-
env = dict(os.environ, CUDA_VISIBLE_DEVICES=gpu, PYTHONUNBUFFERED="1")
|
| 56 |
cmd = [sys.executable, "-m", "experiments.train", "--variant", v, "--seed", seed, "--resume",
|
| 57 |
"--num-workers", num_workers] + list(extra)
|
| 58 |
running[gpu] = (subprocess.Popen(cmd, cwd=S2F_ROOT, env=env, stdout=log, stderr=subprocess.STDOUT), v, seed, log)
|
|
|
|
| 52 |
run_dir = os.path.join(RUNS_DIR, f"{v}_seed{seed}")
|
| 53 |
os.makedirs(run_dir, exist_ok=True)
|
| 54 |
log = open(os.path.join(run_dir, "train.log"), "a")
|
| 55 |
+
env = dict(os.environ, CUDA_DEVICE_ORDER="PCI_BUS_ID", CUDA_VISIBLE_DEVICES=gpu, PYTHONUNBUFFERED="1") # same numbering as nvidia-smi
|
| 56 |
cmd = [sys.executable, "-m", "experiments.train", "--variant", v, "--seed", seed, "--resume",
|
| 57 |
"--num-workers", num_workers] + list(extra)
|
| 58 |
running[gpu] = (subprocess.Popen(cmd, cwd=S2F_ROOT, env=env, stdout=log, stderr=subprocess.STDOUT), v, seed, log)
|