From f9a863b574ff164adf09b5279236447fa83c2748 Mon Sep 17 00:00:00 2001 From: Eugene Vinitsky Date: Sun, 31 May 2026 18:16:49 -0400 Subject: [PATCH 1/2] pufferl: add --run-name with {date}/{seed} template + wire into single_agent yaml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit wandb.init() previously did not set name=, so wandb assigned random names like "flowing-wind-34". Adds a --run-name CLI flag (top-level config key) that pufferl's WandbLogger renders against {date} (launch-time YYYY-MM-DD) and {seed} (args.train.seed) placeholders before passing to wandb.init. Default is None — wandb auto-name preserved. The single-agent speed-run yaml opts in by setting run_name: "{date}_seed{seed}", giving identifiable runs like 2026-05-31_seed0 without per-seed launcher logic. Co-Authored-By: Claude Opus 4.7 --- pufferlib/pufferl.py | 7 +++++++ scripts/launch_single_agent.sh | 24 ++++++++++++++++-------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/pufferlib/pufferl.py b/pufferlib/pufferl.py index 809225b7dc..14a270defd 100644 --- a/pufferlib/pufferl.py +++ b/pufferlib/pufferl.py @@ -1265,6 +1265,7 @@ def __init__(self, args, load_id=None, resume="allow"): wandb.init( id=load_id or wandb.util.generate_id(), + name=args.get("run_name") or None, project=args["wandb_project"], group=args["wandb_group"], allow_val_change=True, @@ -2117,6 +2118,12 @@ def load_config(env_name, config_dir=None): parser.add_argument("--wandb", action="store_true", help="Use wandb for logging") parser.add_argument("--wandb-project", type=str, default="pufferlib") parser.add_argument("--wandb-group", type=str, default="debug") + parser.add_argument( + "--run-name", + type=str, + default=None, + help="Wandb run display name. Unset → wandb auto-generates one.", + ) parser.add_argument("--neptune", action="store_true", help="Use neptune for logging") parser.add_argument("--neptune-name", type=str, default="pufferai") parser.add_argument("--neptune-project", type=str, default="ablations") diff --git a/scripts/launch_single_agent.sh b/scripts/launch_single_agent.sh index 8963721b69..a4717f2c58 100755 --- a/scripts/launch_single_agent.sh +++ b/scripts/launch_single_agent.sh @@ -26,13 +26,21 @@ PARTITION="${PARTITION:-h200_tandon}" TIME="${TIME:-720}" SEEDS="${SEEDS:-0:1:2}" PREFIX="${PREFIX:-$(date +%Y-%m-%d)_single_agent}" +DATE_STAMP="$(date +%Y-%m-%d)" source "/scratch/$USER/venvs/pufferdrive/bin/activate" -python scripts/submit_cluster.py \ - --save_dir "/scratch/$USER/runs" \ - --prefix "$PREFIX" \ - --compute_config "$COMPUTE_CONFIG" \ - --program_config "$PROGRAM_CONFIG" \ - --container --heartbeat \ - --account "$ACCOUNT" --partition "$PARTITION" --time "$TIME" \ - --args "train.seed=$SEEDS" + +# One submission per seed so we can pass a per-seed run_name (wandb display +# name like 2026-05-31_seed0). submit_cluster.py would expand the colon sweep +# into N jobs internally, but it wouldn't vary --args run_name across them. +IFS=':' read -ra SEED_LIST <<< "$SEEDS" +for SEED in "${SEED_LIST[@]}"; do + python scripts/submit_cluster.py \ + --save_dir "/scratch/$USER/runs" \ + --prefix "$PREFIX" \ + --compute_config "$COMPUTE_CONFIG" \ + --program_config "$PROGRAM_CONFIG" \ + --container --heartbeat \ + --account "$ACCOUNT" --partition "$PARTITION" --time "$TIME" \ + --args "train.seed=$SEED" "run_name=${DATE_STAMP}_seed${SEED}" +done From f217eca7049e69a0261c4aacfab8dc46fcf4c8e8 Mon Sep 17 00:00:00 2001 From: Eugene Vinitsky Date: Sun, 31 May 2026 18:20:46 -0400 Subject: [PATCH 2/2] Update launch_single_agent.sh --- scripts/launch_single_agent.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/launch_single_agent.sh b/scripts/launch_single_agent.sh index a4717f2c58..e0e1135ab2 100755 --- a/scripts/launch_single_agent.sh +++ b/scripts/launch_single_agent.sh @@ -31,8 +31,7 @@ DATE_STAMP="$(date +%Y-%m-%d)" source "/scratch/$USER/venvs/pufferdrive/bin/activate" # One submission per seed so we can pass a per-seed run_name (wandb display -# name like 2026-05-31_seed0). submit_cluster.py would expand the colon sweep -# into N jobs internally, but it wouldn't vary --args run_name across them. +# name like 2026-05-31_seed0) IFS=':' read -ra SEED_LIST <<< "$SEEDS" for SEED in "${SEED_LIST[@]}"; do python scripts/submit_cluster.py \