unparallelled commited on
Commit
5bacf6f
·
verified ·
1 Parent(s): 73fb7d3

Upload scripts/abl_phase1.sh with huggingface_hub

Browse files
Files changed (1) hide show
  1. scripts/abl_phase1.sh +19 -6
scripts/abl_phase1.sh CHANGED
@@ -30,6 +30,13 @@ EXE=./build/bluscriptCP_exec
30
 
31
  ARM=${ARM:?set ARM=const or ARM=cosine}
32
  GPU=${GPU:?set GPU=0 or 1}
 
 
 
 
 
 
 
33
  T=16384; SCALE=4; ORIG=4096
34
  STEPS=${STEPS:-1200}
35
  WARM=$(( STEPS / 100 )) # 1% of this phase's steps
@@ -43,7 +50,7 @@ GB=524288
43
  DATA=Data_Loader/Data/ablmix16
44
  CK=checkpoints_bluscriptcp/rank_0
45
  PARENT="$CK/varybatch.ckpt"
46
- LOG=p1_${ARM}_logs; mkdir -p "$LOG"; M="$LOG/master.log"
47
  say(){ echo "[$(date -u +%H:%M:%S)] [$ARM] $*" | tee -a "$M" >&2; }
48
  die(){ say "FATAL: $*"; exit 1; }
49
 
@@ -56,18 +63,19 @@ grep -q 'CP_FUSED_ROPE=1' "$S" && grep -q 'CP_ATTN_SPLIT=1' "$S" || die "binary
56
  [ "$STABLE" -eq 0 ] || [ $(( WARM + STABLE )) -lt $(( STEPS - 1 )) ] || die "WSD guard would fire"
57
  $PY -c "import tiktoken" 2>/dev/null || die "tiktoken missing"
58
 
 
59
  ARCH="CP_N_EMBD=1536 CP_N_LAYER=24 CP_N_HEAD=12 CP_N_KVHEAD=4 CP_FFN=4096 CP_WEIGHT_TYING=1"
60
  BASE="CP_SIZE=1 CP_ATTN_MODE=ring CP_ATTN_FUSION=split CP_T=$T \
61
  YARN_SCALE=$SCALE YARN_ORIG_MAXPOS=$ORIG CP_ROPE_THETA=500000 \
62
  CP_ZERO=1 CP_ZERO_V2=1 CP_BF16=1 \
63
- CP_OPTIMIZER=muon CP_MAX_LR=$MAXLR CP_MIN_LR=$MINLR \
64
  CP_WARMUP=$WARM CP_REWARMUP=$WARM CP_REWARMUP_PEAK=1.0 \
65
  CP_STABLE=$STABLE CP_CKPT=1 CP_CKPT_FREQ=200 CP_CKPT_KEEP=3 \
66
- CP_CKPT_DIR=checkpoints_${ARM}"
67
 
68
- say "=== phase 1: 4k -> 16k, arm=$ARM on GPU $GPU ==="
69
  say "LR : max $MAXLR min $MINLR warmup $WARM (1% of $STEPS) stable $STABLE"
70
- say "optim : Muon (>=2-D matrices) + aux AdamW, both at the SAME lr"
71
  say "parent : varybatch data: $DATA steps: $STEPS"
72
 
73
  if [ ! -f "$LOG/probe.ok" ]; then
@@ -82,7 +90,12 @@ if [ ! -f "$LOG/probe.ok" ]; then
82
  [ "$RC" -eq 0 ] && [ "$N" -ge 1 ] || { say "PROBE FAILED rc=$RC steps=$N"; tail -14 "$LOG/probe.log" >&2; exit 1; }
83
  # ASSERT the trainer actually took the new env vars -- all three were no-ops
84
  # until today, and a silent fallback would look like a healthy run.
85
- grep -qai 'muon' "$LOG/probe.log" || die "no Muon in probe log -- CP_OPTIMIZER did not take"
 
 
 
 
 
86
  LR0=$(grep -aoE '^step +0 \|.*lr [0-9.e+-]+' "$LOG/probe.log" | grep -oE 'lr [0-9.e+-]+' | awk '{print $2}')
87
  say "PROBE OK: $N steps, peak $P, step-0 lr=$LR0 (expect ~8.0e-05 at warmup 1/$WARM)"
88
  touch "$LOG/probe.ok"
 
30
 
31
  ARM=${ARM:?set ARM=const or ARM=cosine}
32
  GPU=${GPU:?set GPU=0 or 1}
33
+ # OPT=muon (default, reproduces the 2026-09-18 arms) or OPT=adamw.
34
+ # adamw is the CONTROL that separates the two variables yesterday's run confounded:
35
+ # p1final 1.8e-4 WSD + AdamW
36
+ # const/muon 8e-5 const + Muon <- differs from p1final in BOTH
37
+ # const/adamw 8e-5 const + AdamW <- differs from each in exactly ONE
38
+ OPT=${OPT:-muon}
39
+ case "$OPT" in muon|adamw) ;; *) echo "OPT must be muon or adamw"; exit 1 ;; esac
40
  T=16384; SCALE=4; ORIG=4096
41
  STEPS=${STEPS:-1200}
42
  WARM=$(( STEPS / 100 )) # 1% of this phase's steps
 
50
  DATA=Data_Loader/Data/ablmix16
51
  CK=checkpoints_bluscriptcp/rank_0
52
  PARENT="$CK/varybatch.ckpt"
53
+ LOG=p1_${ARM}_${OPT}_logs; mkdir -p "$LOG"; M="$LOG/master.log"
54
  say(){ echo "[$(date -u +%H:%M:%S)] [$ARM] $*" | tee -a "$M" >&2; }
55
  die(){ say "FATAL: $*"; exit 1; }
56
 
 
63
  [ "$STABLE" -eq 0 ] || [ $(( WARM + STABLE )) -lt $(( STEPS - 1 )) ] || die "WSD guard would fire"
64
  $PY -c "import tiktoken" 2>/dev/null || die "tiktoken missing"
65
 
66
+ OPTENV=""; [ "$OPT" = muon ] && OPTENV="CP_OPTIMIZER=muon"
67
  ARCH="CP_N_EMBD=1536 CP_N_LAYER=24 CP_N_HEAD=12 CP_N_KVHEAD=4 CP_FFN=4096 CP_WEIGHT_TYING=1"
68
  BASE="CP_SIZE=1 CP_ATTN_MODE=ring CP_ATTN_FUSION=split CP_T=$T \
69
  YARN_SCALE=$SCALE YARN_ORIG_MAXPOS=$ORIG CP_ROPE_THETA=500000 \
70
  CP_ZERO=1 CP_ZERO_V2=1 CP_BF16=1 \
71
+ ${OPTENV} CP_MAX_LR=$MAXLR CP_MIN_LR=$MINLR \
72
  CP_WARMUP=$WARM CP_REWARMUP=$WARM CP_REWARMUP_PEAK=1.0 \
73
  CP_STABLE=$STABLE CP_CKPT=1 CP_CKPT_FREQ=200 CP_CKPT_KEEP=3 \
74
+ CP_CKPT_DIR=checkpoints_${ARM}_${OPT}"
75
 
76
+ say "=== phase 1: 4k -> 16k, arm=$ARM opt=$OPT on GPU $GPU ==="
77
  say "LR : max $MAXLR min $MINLR warmup $WARM (1% of $STEPS) stable $STABLE"
78
+ say "optim : $([ "$OPT" = muon ] && echo "Muon (>=2-D matrices) + aux AdamW, same lr" || echo "AdamW only (ZeRO-1 v2)")"
79
  say "parent : varybatch data: $DATA steps: $STEPS"
80
 
81
  if [ ! -f "$LOG/probe.ok" ]; then
 
90
  [ "$RC" -eq 0 ] && [ "$N" -ge 1 ] || { say "PROBE FAILED rc=$RC steps=$N"; tail -14 "$LOG/probe.log" >&2; exit 1; }
91
  # ASSERT the trainer actually took the new env vars -- all three were no-ops
92
  # until today, and a silent fallback would look like a healthy run.
93
+ # Assert the CONSTRUCTED optimizer, in both directions. The [ZeRO-1] line
94
+ # used to print configured state, so a Muon run and an AdamW run were
95
+ # indistinguishable in the log -- which is how CP_OPTIMIZER stayed a no-op
96
+ # across every run before 2026-09-18.
97
+ WANT=$([ "$OPT" = muon ] && echo "optimizer=MUON+adamw-aux" || echo "optimizer=adamw")
98
+ grep -qa "$WANT" "$LOG/probe.log" || die "probe built the WRONG optimizer -- wanted '$WANT', log says '$(grep -ao "optimizer=[A-Za-z+-]*" "$LOG/probe.log" | head -1)'"
99
  LR0=$(grep -aoE '^step +0 \|.*lr [0-9.e+-]+' "$LOG/probe.log" | grep -oE 'lr [0-9.e+-]+' | awk '{print $2}')
100
  say "PROBE OK: $N steps, peak $P, step-0 lr=$LR0 (expect ~8.0e-05 at warmup 1/$WARM)"
101
  touch "$LOG/probe.ok"