summaryrefslogtreecommitdiff
path: root/run_maze_a6000.sh
blob: 787647ac007f1b7af28624cf5c79304b5657eac5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/env bash
# Clone-and-run Maze training, defaulted for 2x A6000 (48G). Repo-relative; no hardcoded paths.
# Usage:
#   bash run_maze_a6000.sh              # 2x A6000, gbs 384 (default)
#   bash run_maze_a6000.sh 2 384        # explicit
#   bash run_maze_a6000.sh 1 192        # single A6000
#   SMOKE=1 bash run_maze_a6000.sh      # 200-step smoke test first (minutes)
set -eo pipefail

REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
NGPU="${1:-2}"
GBS="${2:-384}"
DATA="$REPO/data/maze-30x30-hard-1k"
TRM="$REPO/trm"
RUN_NAME="pretrain_att_maze30x30_${NGPU}gpu_gbs${GBS}"

# conda env (default 'rrm'); override with CONDA_ENV / CONDA_SH
CONDA_SH="${CONDA_SH:-}"
[[ -z "$CONDA_SH" ]] && for p in "$HOME/miniconda3/etc/profile.d/conda.sh" \
  "$HOME/anaconda3/etc/profile.d/conda.sh" "/opt/conda/etc/profile.d/conda.sh"; do
  [[ -f "$p" ]] && CONDA_SH="$p" && break; done
[[ -f "$CONDA_SH" ]] && source "$CONDA_SH" && conda activate "${CONDA_ENV:-rrm}"

[[ -d "$DATA" ]] || { echo "FATAL: dataset missing at $DATA"; exit 1; }
[[ -f "$TRM/pretrain.py" ]] || { echo "FATAL: trm/pretrain.py missing"; exit 1; }
cd "$TRM"
export WANDB_MODE=offline

EPOCHS=50000; EVAL=5000
if [[ "${SMOKE:-0}" == "1" ]]; then EPOCHS=200; EVAL=200; RUN_NAME="smoke_${RUN_NAME}"; fi

ARGS=(
  arch=trm
  "data_paths=[$DATA]"
  "evaluators=[]"
  epochs=$EPOCHS eval_interval=$EVAL
  lr=1e-4 puzzle_emb_lr=1e-4 weight_decay=1.0 puzzle_emb_weight_decay=1.0
  global_batch_size="$GBS"
  arch.L_layers=2 arch.H_cycles=3 arch.L_cycles=4
  +run_name="$RUN_NAME" ema=True
  +checkpoint_every_eval=true
)
LOG="$REPO/maze_${RUN_NAME}.log"

echo "launching $RUN_NAME on $NGPU GPU(s), gbs=$GBS  (epochs=$EPOCHS)"
if [[ "$NGPU" -gt 1 ]]; then
  nohup torchrun --nproc-per-node "$NGPU" --rdzv_backend=c10d --rdzv_endpoint=localhost:0 \
    --nnodes=1 pretrain.py "${ARGS[@]}" > "$LOG" 2>&1 &
else
  nohup python pretrain.py "${ARGS[@]}" > "$LOG" 2>&1 &
fi
echo "pid $!   log: $LOG"
echo "watch:  tail -f $LOG | grep -E 'exact|accuracy|Traceback|Error'"
echo "ckpts:  $TRM/checkpoints/maze-30x30-hard-1k.../$RUN_NAME/  (1 per ${EVAL} epochs)"