cosmos-robometer-private-code / scripts /run_phase21a_robometer_low_lora_seeds.py
ar-mine's picture
Phase 2.1A Robometer-Low training kit v2
e41bef1 verified
Raw History Blame Contribute Delete
3.04 kB
#!/usr/bin/env python3
"""Run the three Phase 2.1A v2 Robometer-Low-LoRA seeds serially with resume."""
from __future__ import annotations
import argparse
import subprocess
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
TRAINER = ROOT / "scripts" / "train_phase21a_robometer_low_lora.py"
def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument("--output-root", type=Path, required=True)
parser.add_argument("--snapshot", type=Path, required=True)
parser.add_argument(
"--manifest",
type=Path,
default=ROOT / "manifests" / "phase2_remediation_pairs_v1.jsonl",
)
parser.add_argument(
"--processed-root",
type=Path,
default=ROOT / "artifacts" / "data_views" / "phase1_official" / "processed_datasets",
)
parser.add_argument("--seeds", type=int, nargs="+", default=[7, 17, 27])
parser.add_argument("--optimizer-steps", type=int, default=3000)
parser.add_argument("--micro-batch-pairs", type=int, default=32)
parser.add_argument("--gradient-accumulation", type=int, default=2)
parser.add_argument("--lora-lr", type=float, default=2.0e-6)
parser.add_argument("--head-lr", type=float, default=1.0e-4)
parser.add_argument("--checkpoint-every", type=int, default=250)
parser.add_argument("--eval-every", type=int, default=250)
parser.add_argument("--eval-micro-batch-pairs", type=int, default=32)
parser.add_argument("--early-stop-min-steps", type=int, default=1000)
parser.add_argument("--early-stop-patience-evals", type=int, default=4)
parser.add_argument("--early-stop-min-delta", type=float, default=5.0e-3)
args = parser.parse_args()
for seed in args.seeds:
output = args.output_root / f"seed_{seed}"
if (output / "summary.json").is_file():
continue
command = [
sys.executable,
str(TRAINER),
"--snapshot", str(args.snapshot),
"--manifest", str(args.manifest),
"--processed-root", str(args.processed_root),
"--seed", str(seed),
"--optimizer-steps", str(args.optimizer_steps),
"--micro-batch-pairs", str(args.micro_batch_pairs),
"--gradient-accumulation", str(args.gradient_accumulation),
"--lora-lr", str(args.lora_lr),
"--head-lr", str(args.head_lr),
"--checkpoint-every", str(args.checkpoint_every),
"--eval-every", str(args.eval_every),
"--eval-micro-batch-pairs", str(args.eval_micro_batch_pairs),
"--early-stop-min-steps", str(args.early_stop_min_steps),
"--early-stop-patience-evals", str(args.early_stop_patience_evals),
"--early-stop-min-delta", str(args.early_stop_min_delta),
"--output-dir", str(output),
]
if (output / "latest_training_state.pt").is_file():
command.append("--resume")
subprocess.run(command, check=True)
if __name__ == "__main__":
main()