Download scripts/ext_32k.sh from unparallelled/BluScriptCP: direct link, hf CLI and curl.
- Browser
- Download file 6.71 kB
-
https://huggingface.co/unparallelled/BluScriptCP/resolve/main/scripts/ext_32k.sh
- Command line
-
hf download hf://unparallelled/BluScriptCP/scripts/ext_32k.sh
-
curl -L -o ext_32k.sh https://huggingface.co/unparallelled/BluScriptCP/resolve/main/scripts/ext_32k.sh
6.71 kB
| # ============================================================================= | |
| # ext_32k.sh -- YaRN-extend the best 16k model to 32k, then evaluate. | |
| # | |
| # WHY THIS RUN EXISTS | |
| # The length ladder ended in a tie: l3 (b3, 16-32k docs TRUNCATED to the 16k | |
| # window) matched l2 (b2, 8-16k docs that FIT) to the decimal at 16,360 -- | |
| # 35.0 vs 35.0, and -6.0/+2.0/+0.0 pp across 4k/8k/16k, none resolvable. | |
| # Conclusion: document length helps only while documents fit inside the window. | |
| # So widen the window first, THEN feed b3, whose documents now fit. | |
| # | |
| # PARENT: l2, the best 16k arm, not run7'. l2 is where the 16k ladder topped out. | |
| # | |
| # THE YaRN INVARIANT that cost 27pp when it was wrong: | |
| # YARN_SCALE * YARN_ORIG_MAXPOS must equal CP_T EXACTLY, and ORIG_MAXPOS must | |
| # be the length the weights were ACTUALLY trained at (16384 here, not the | |
| # 1024 default at YARNOps.cpp:57). | |
| # 2 * 16384 = 32768 == CP_T OK | |
| # | |
| # MEMORY -- 2 GPUS IS TIGHT. cp cannot exceed the GPU count, so cp=2 puts | |
| # T/2 = 16,384 tokens on each rank: | |
| # projected 130.8 GB/GPU = 91.4% of an H200's 143 GB | |
| # That is close enough that fragmentation may still OOM, so STEP 1 is a 3-step | |
| # probe and the script aborts rather than wasting hours. This does NOT fit an | |
| # 80 GB H100 (measured: it OOMs). | |
| # | |
| # TOKEN BUDGET: 750 steps x 1,048,576 = 786 M tokens, matching run7's original | |
| # 4k->16k extension exactly, so the two extension stages are comparable. | |
| # | |
| # GATE ON SHORT CONTEXT, NOT PERPLEXITY. The 2026-09-02 mismatch condition | |
| # IMPROVED 16k (0 -> 14-17%) while COLLAPSING 4k from 74% to 16%. Perplexity at | |
| # the new length would have looked fine. The eval therefore spans 1k..32k and a | |
| # regression at 1k/4k is a failure even if 32k improves. | |
| # ============================================================================= | |
| set -uo pipefail | |
| cd "$(dirname "$0")" | |
| ROOT="$(cd ../.. && pwd)" | |
| export LD_LIBRARY_PATH="$ROOT/Tensor-Implementations/lib:$ROOT/Profiler/lib:${LD_LIBRARY_PATH:-}" | |
| export OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 | |
| PY=/root/Adhi/BluTrain/envv/bin/python | |
| EXE=./build/bluscriptCP_exec | |
| CK=checkpoints_bluscriptcp/rank_0 | |
| LOG=ext32k_logs; mkdir -p "$LOG" | |
| M="$LOG/master.log" | |
| say(){ echo "[$(date -u +%H:%M:%S)] $*" | tee -a "$M" >&2; } | |
| die(){ say "FATAL: $*"; exit 1; } | |
| T=32768; NP=${NP:-2}; GPUS=${GPUS:-0,1} | |
| ORIG=16384; SCALE=2 | |
| STEPS=${STEPS:-750} | |
| PARENT="$CK/lenbucket_l2_blumodelcp_run2_step_400.ckpt" | |
| DATA=lendata/b3_16384_32768 | |
| ARCH="CP_N_EMBD=1536 CP_N_LAYER=36 CP_N_HEAD=12 CP_N_KVHEAD=4 CP_FFN=4096 CP_WEIGHT_TYING=0" | |
| [ $(( SCALE * ORIG )) -eq $T ] || die "YaRN invariant broken: $SCALE * $ORIG != $T" | |
| $PY -c "import tiktoken" 2>/dev/null || die "tiktoken missing: $PY -m pip install tiktoken" | |
| [ -x "$EXE" ] || die "$EXE not built (make libtensor SM_ARCH=90 && make CP_FUSED_ROPE=1 CP_ATTN_SPLIT=1 SM_ARCH=90 bluscript-cp)" | |
| [ -f "$PARENT" ] || die "parent l2 missing: $PARENT" | |
| [ -d "$DATA" ] || die "b3 data missing: $DATA" | |
| say "=== 16k -> 32k YaRN extension ===" | |
| say "CP_T=$T YARN_SCALE=$SCALE YARN_ORIG_MAXPOS=$ORIG (product $(( SCALE*ORIG )) == $T)" | |
| say "parent $(basename $PARENT), data $DATA, cp=$NP, $STEPS steps x 1,048,576 = 786 M tokens" | |
| COMMON="CP_SIZE=$NP CP_ATTN_MODE=ring CP_ATTN_FUSION=split CP_T=$T \ | |
| YARN_SCALE=$SCALE YARN_ORIG_MAXPOS=$ORIG \ | |
| CP_ZERO=1 CP_ZERO_V2=1 CP_ZERO_SYMMETRIC=1 CP_BF16=1 CP_OPTIMIZER=muon \ | |
| CP_MAX_LR=1e-3 CP_MIN_LR=1e-4" | |
| # ---- STEP 1: 3-step memory probe ------------------------------------------- | |
| if [ ! -f "$LOG/probe.ok" ]; then | |
| say "probe: 3 steps at T=$T to confirm it fits before committing hours" | |
| env $ARCH $COMMON CP_REWARMUP=1 CP_REWARMUP_PEAK=0.3 CP_CKPT=0 \ | |
| CP_INIT_FROM="$PWD/$PARENT" CP_DATA_ROOT="$PWD/$DATA" \ | |
| CP_B=1 CP_GLOBAL_BATCH=65536 CP_MAX_STEPS=3 \ | |
| CUDA_VISIBLE_DEVICES=$GPUS mpirun --allow-run-as-root -np $NP "$EXE" \ | |
| > "$LOG/probe.log" 2>&1 | |
| if grep -qaiE 'out of memory|bad_alloc' "$LOG/probe.log"; then | |
| say "PROBE OOM at T=$T with cp=$NP. Projected 130.8 GB/GPU." | |
| say " This needs more ranks: cp=4 -> 67.5 GB/GPU. Not runnable on $NP GPUs." | |
| exit 1 | |
| fi | |
| grep -aE '^step +[0-9]+ \|' "$LOG/probe.log" | tail -1 | sed 's/^/ probe: /' | tee -a "$M" | |
| say "probe peak mem: $(grep -aoE 'mem: [0-9]+MB' "$LOG/probe.log" | tail -1)" | |
| touch "$LOG/probe.ok" | |
| else | |
| say "probe already passed" | |
| fi | |
| # ---- STEP 2: the extension -------------------------------------------------- | |
| if [ -f "$LOG/ext.ckpt" ] && [ -f "$(cat "$LOG/ext.ckpt")" ]; then | |
| say "extension already done -> $(cat "$LOG/ext.ckpt")" | |
| else | |
| say "training $STEPS steps" | |
| env $ARCH $COMMON CP_REWARMUP=50 CP_REWARMUP_PEAK=0.3 \ | |
| CP_CKPT=1 CP_CKPT_KEEP=2 CP_CKPT_FREQ=50 CP_CKPT_NEW_RUN=1 \ | |
| CP_INIT_FROM="$PWD/$PARENT" CP_DATA_ROOT="$PWD/$DATA" \ | |
| CP_B=1 CP_GLOBAL_BATCH=1048576 CP_MAX_STEPS=$STEPS \ | |
| CUDA_VISIBLE_DEVICES=$GPUS mpirun --allow-run-as-root -np $NP "$EXE" \ | |
| >> "$LOG/ext.log" 2>&1 | |
| grep -qaiE 'out of memory|bad_alloc' "$LOG/ext.log" && die "OOM during training" | |
| RN=$(grep -aoE 'CP_Training_log[0-9]+' "$LOG/ext.log" | tail -1 | grep -oE '[0-9]+') | |
| [ -n "$RN" ] || die "no run number" | |
| CKF=$(ls -t $CK/blumodelcp_run${RN}_step_*.ckpt 2>/dev/null | head -1) | |
| [ -n "$CKF" ] || die "no checkpoint written" | |
| bn=$(basename "$CKF"); n=$(ls checkpoints_bluscriptcp/rank_*/"$bn" 2>/dev/null | wc -l) | |
| [ "$n" -ge "$NP" ] || die "only $n/$NP rank shards for $bn" | |
| echo "$CKF" > "$LOG/ext.ckpt" | |
| say "ext32k -> run $RN, $bn, final loss $(grep -aE '^step ' "$LOG/ext.log" | tail -1 | grep -oE 'loss: [0-9.]+')" | |
| fi | |
| # ---- STEP 3: eval 1k..32k, matched cache ----------------------------------- | |
| EXT=$(basename "$(cat "$LOG/ext.ckpt")") | |
| EXTRA="l2=lenbucket_l2_blumodelcp_run2_step_400.ckpt ext32k=$EXT" | |
| say "eval: l2 (16k parent) vs ext32k, matched YARN_ORIG=$ORIG SCALE=$SCALE" | |
| # PROMPT_LEN + MAX_NEW must pad up to <= CP_T (PAD=256): 32744+24 = 32768 exactly | |
| for LEN in 1024 4096 16360 32744; do | |
| say "PROMPT_LEN=$LEN" | |
| GEN_DATA_ROOT=$DATA HAY="$PWD/lendata/haystack/b2val_haystack.bin" \ | |
| PY=$PY OUT=ext32k_len_$LEN TASKS="niah_single" CKPTS="l2 ext32k" N=100 \ | |
| PROMPT_LEN=$LEN MAX_NEW=24 T=$T DEPTHS="0.0,0.25,0.5,0.75,1.0" \ | |
| YARN=$SCALE YARN_ORIG=$ORIG GPUS=$GPUS JOBS_PER_GPU=1 BF16=1 GREEDY=1 \ | |
| CKPT_EXTRA="$EXTRA" ./run_longeval.sh >> "$LOG/eval_$LEN.log" 2>&1 \ | |
| || say " WARN nonzero at $LEN" | |
| say " -> $(sed -n 1p ext32k_len_$LEN/summary.csv 2>/dev/null) / $(sed -n 2p ext32k_len_$LEN/summary.csv 2>/dev/null)" | |
| done | |
| say "=== 32k EXTENSION DONE ===" | |
| say "REGRESSION CHECK: compare 1024 and 4096 against l2. A 32k gain bought with a" | |
| say " short-context collapse is the 2026-09-02 mismatch failure repeating." | |