diff options
| author | YurenHao0426 <Blackhao0426@gmail.com> | 2026-07-30 16:34:30 -0500 |
|---|---|---|
| committer | YurenHao0426 <Blackhao0426@gmail.com> | 2026-07-30 16:34:30 -0500 |
| commit | 716205eba862076c1d0fbbff016601272e4614f2 (patch) | |
| tree | dc8c31dcfefa49d53c98d305fe35419da76e58c9 /experiments/run_a6000_matrix.py | |
| parent | 906d17e896329e4d2dd8d7f728e4d5a234afe0e4 (diff) | |
experiment: package portable A6000 crossover
Diffstat (limited to 'experiments/run_a6000_matrix.py')
| -rwxr-xr-x | experiments/run_a6000_matrix.py | 182 |
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() |
