summaryrefslogtreecommitdiff
path: root/experiments/run_a6000_matrix.py
diff options
context:
space:
mode:
authorYurenHao0426 <Blackhao0426@gmail.com>2026-07-30 16:34:30 -0500
committerYurenHao0426 <Blackhao0426@gmail.com>2026-07-30 16:34:30 -0500
commit716205eba862076c1d0fbbff016601272e4614f2 (patch)
treedc8c31dcfefa49d53c98d305fe35419da76e58c9 /experiments/run_a6000_matrix.py
parent906d17e896329e4d2dd8d7f728e4d5a234afe0e4 (diff)
experiment: package portable A6000 crossover
Diffstat (limited to 'experiments/run_a6000_matrix.py')
-rwxr-xr-xexperiments/run_a6000_matrix.py182
1 files changed, 182 insertions, 0 deletions
diff --git a/experiments/run_a6000_matrix.py b/experiments/run_a6000_matrix.py
new file mode 100755
index 0000000..e5330ef
--- /dev/null
+++ b/experiments/run_a6000_matrix.py
@@ -0,0 +1,182 @@
+#!/usr/bin/env python3
+"""Sequential, restart-safe launcher for the complete A6000 81-cell matrix."""
+import argparse
+import os
+import subprocess
+import sys
+
+
+ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+sys.path.insert(0, ROOT)
+from experiments.crossover_hardware import physical_gpu_report
+from experiments.resnet_crossover_r2 import selector_report as resnet_selector
+from experiments.transformer_crossover_t2 import (
+ selector_report as transformer_selector,
+)
+
+
+def run(command, cwd, environment, dry_run):
+ rendered = " ".join(command)
+ print(f"[{cwd}] {rendered}", flush=True)
+ if not dry_run:
+ subprocess.run(command, cwd=cwd, env=environment, check=True)
+
+
+def require_file(path, label):
+ if not os.path.isfile(path):
+ raise RuntimeError(f"{label} is not frozen in this run packet: {path}")
+
+
+def main():
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--plain-root", required=True)
+ parser.add_argument("--plain-python", required=True)
+ parser.add_argument(
+ "--family",
+ choices=("all", "plain", "resnet", "transformer"),
+ default="all",
+ )
+ parser.add_argument("--dry-run", action="store_true")
+ args = parser.parse_args()
+
+ plain_root = os.path.abspath(args.plain_root)
+ plain_python = os.path.abspath(args.plain_python)
+ require_file(plain_python, "plain-CNN Python executable")
+ require_file(
+ os.path.join(plain_root, "crossover_grid.py"),
+ "patched plain-CNN runner",
+ )
+ gpu = physical_gpu_report("a6000", args.dry_run)
+ print(f"hardware lock: {gpu}", flush=True)
+
+ environment = os.environ.copy()
+ environment["SDIL_HARDWARE_PROFILE"] = "a6000"
+ environment["SDIL_MAIN_ROOT"] = ROOT
+ families = (
+ ("plain", "resnet", "transformer")
+ if args.family == "all" else (args.family,)
+ )
+
+ plain_audit = os.path.join(plain_root, "runs", "plain-p2-audit.json")
+ if "plain" in families:
+ run(
+ [
+ plain_python,
+ "tests/local_rules_smoke.py",
+ ],
+ plain_root,
+ environment,
+ args.dry_run,
+ )
+ run(
+ [
+ plain_python,
+ "crossover_grid.py",
+ "--stage", "p2",
+ "--hardware-profile", "a6000",
+ ],
+ plain_root,
+ environment,
+ args.dry_run,
+ )
+ run(
+ [
+ plain_python,
+ "analyze_p2.py",
+ "--output", plain_audit,
+ ],
+ plain_root,
+ environment,
+ args.dry_run,
+ )
+
+ resnet_selector_path = os.path.join(
+ ROOT, "results", "resnet_crossover", "p1_selector.json"
+ )
+ if "resnet" in families:
+ require_file(resnet_selector_path, "complete ResNet P1 selector")
+ if not args.dry_run:
+ resnet_selector(resnet_selector_path)
+ run(
+ [
+ sys.executable,
+ "experiments/resnet_crossover_smoke.py",
+ ],
+ ROOT,
+ environment,
+ args.dry_run,
+ )
+ run(
+ [
+ sys.executable,
+ "experiments/resnet_crossover_r2.py",
+ "--hardware-profile", "a6000",
+ ],
+ ROOT,
+ environment,
+ args.dry_run,
+ )
+ run(
+ [
+ sys.executable,
+ "experiments/analyze_resnet_crossover_r2.py",
+ ],
+ ROOT,
+ environment,
+ args.dry_run,
+ )
+
+ transformer_selector_path = os.path.join(
+ ROOT, "results", "transformer_crossover", "p1_selector.json"
+ )
+ if "transformer" in families:
+ require_file(
+ transformer_selector_path, "complete Transformer T1 selector"
+ )
+ if not args.dry_run:
+ transformer_selector(transformer_selector_path)
+ run(
+ [
+ sys.executable,
+ "experiments/transformer_feedback_smoke.py",
+ ],
+ ROOT,
+ environment,
+ args.dry_run,
+ )
+ run(
+ [
+ sys.executable,
+ "experiments/transformer_crossover_t2.py",
+ "--hardware-profile", "a6000",
+ ],
+ ROOT,
+ environment,
+ args.dry_run,
+ )
+ run(
+ [
+ sys.executable,
+ "experiments/analyze_transformer_crossover_t2.py",
+ ],
+ ROOT,
+ environment,
+ args.dry_run,
+ )
+
+ if args.family == "all":
+ require_file(plain_audit, "complete plain-CNN P2 audit")
+ run(
+ [
+ sys.executable,
+ "experiments/analyze_crossover_81.py",
+ "--plain", plain_audit,
+ ],
+ ROOT,
+ environment,
+ args.dry_run,
+ )
+
+
+if __name__ == "__main__":
+ main()