tiny-agent-112m / code /scripts /rl_pipeline_r2.sh
darioooooo0o's picture
tiny-agent-112m: base + RL weights, tokenizer, code, model card
4397e12 verified
Raw History Blame Contribute Delete
2.15 kB
#!/bin/bash
# RL run 2 (2026-10-07): wait for the SFT warm start (runs/sft1) to finish, evaluate it on the fixed
# eval set, then run GRPO r2 under the liveness watchdog. If the warm start cost more than 5 points
# in-distribution versus final.pt (best score 0.894; differences under ~5 points are eval noise),
# r2 starts from final.pt instead. Log: $TA_DATA/logs/rl_pipeline.log
# setsid nohup bash scripts/rl_pipeline_r2.sh >/dev/null 2>&1 < /dev/null &
set -u
cd "$(dirname "$0")/.."
source env.sh
SFT=$TA_DATA/runs/sft1
OUT=$TA_DATA/rl/r2
L=$TA_DATA/logs/rl_pipeline.log
log() { echo "[$(date '+%F %T')] $*" | tee -a "$L"; }
trainer() { ps -eo pid,args | awk '$3=="scripts/train.py" && $0 ~ /runs\/sft1/ {print $1}' | head -1; }
log "waiting for the SFT warm start ($SFT/final.pt)"
while [ ! -f "$SFT/final.pt" ] || [ -n "$(trainer)" ]; do
if [ -z "$(trainer)" ] && [ ! -f "$SFT/final.pt" ]; then log "SFT trainer gone without final.pt; see runs/sft1.out"; break; fi
sleep 30
done
CK=$TA_DATA/runs/main/final.pt
if [ -f "$SFT/final.pt" ]; then
log "SFT done: $(tail -1 "$SFT/log.jsonl" | cut -c1-160)"
$TA_PY scripts/eval_agent.py --ckpt "$SFT/final.pt" --tasks 150 --k 8 --verbose 0 > "$TA_DATA/logs/eval_sft1.json" 2>> "$L"
verdict=$($TA_PY -c "
import json
r = json.load(open('$TA_DATA/logs/eval_sft1.json'))
i, h = r['_in_dist']['pass1'], r['_held_out']['pass1']
print('ok' if i >= 0.894 - 0.05 else 'worse', i, h, {k: v['pass1'] for k, v in r.items() if k in ('multi_hop', 'log_count', 'write_fact')})" 2>&1)
log "SFT eval (k=8): $verdict"
if [ "${verdict%% *}" = "ok" ]; then
CK=$SFT/final.pt
mkdir -p "$OUT" && cp "$TA_DATA/logs/eval_sft1.json" "$OUT/baseline.json"
else
log "SFT cost too much in-distribution; r2 starts from final.pt (new kinds then have no demos)"
mkdir -p "$OUT" && cp "$TA_DATA/logs/eval_final.json" "$OUT/baseline.json"
fi
fi
log "starting r2 from $CK under the watchdog"
RL_OUT=$OUT RL_CKPT=$CK bash scripts/rl_watchdog.sh --prefill_rows 8 --vary 0.7 --invented_penalty 0.3
log "r2 pipeline finished: $(tail -2 "$TA_DATA/logs/rl_watchdog.log" | tr '\n' ' ' | cut -c1-300)"