#!/bin/bash # A/B: option format v3 vs v4. Same start (v17s), same 100k-item random subset, 1 epoch each; then offline eval (by # option-count width), webgym held-out 7 kinds, suite C x2. cd /home/ckl/projects/S/laya && source env.sh until grep -q EVAL_DONE finetune/out/eval_v18s.log; do sleep 60; done export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True CKPT=1 COMPILE=0 LAYA_HEAD=768 P=.venv/bin/python; O=finetune/out; I="bash finetune/infra.sh"; export INFRA_DIR=${INFRA_DIR:-/tmp/laya-infra} $I stop_s1; SG=$(pgrep -f 'sglang.launch_serve[r]' | head -1); [ -n "$SG" ] && kill $SG; sleep 15 for F in 3 4; do CK=laya-browser-x$F echo "== train $CK (format v$F)"; LAYA_FMT=v$F LAYA_BASE=$PWD/$O/laya-browser-v17s $P finetune/train.py $O/items_x$F/train_items.pt $O/$CK 1 2>&1 | grep --line-buffered -E "=== epoch|saved|Error|Traceback|resumed" [ -f $O/$CK/model.safetensors ] || { echo "training of $CK interrupted; rerun to resume"; exit 0; } E=$O/items_s/eval_cases.jsonl LAYA_FMT=v$F $P finetune/calibrate.py $O/pages.jsonl $E $PWD/$O/$CK 2>&1 | grep -vE "TileLang|Warn|warn|Fetch" | tail -1 LAYA_FMT=v$F $P finetune/eval.py $O/pages.jsonl $E $PWD/$O/$CK 2>&1 | grep -E "operation acc| live | mind2web | width" done $I start_chrome >/dev/null; SGL_MEM=0.5 $I start_sglang Qwen/Qwen3-8B-AWQ >/dev/null; bash finetune/webgym/serve.sh restart >/dev/null until curl -s -m 3 http://127.0.0.1:30000/health >/dev/null; do sleep 5; done KINDS=$($P -c "import sys; sys.path.insert(0,'finetune/webgym'); import spec; print(','.join(spec.KINDS))") for F in 3 4; do CK=laya-browser-x$F $I start_s1 $PWD/$O/$CK 60 >/dev/null echo "== $CK webgym held-out"; (cd ../jev-ultrafast && GYM_OUT=$PWD/../laya/$O/gym7_$CK.json timeout 7200 .venv/bin/python ../laya/finetune/webgym/eval_gym.py 10 $KINDS 60 2>&1 | grep -E "^==") echo "== $CK suite C x2"; (cd ../jev-ultrafast && REPEATS=2 SUITE_OUT=$PWD/../laya/$O/suiteC_$CK.json timeout 5400 .venv/bin/python ../laya/apps/browser_suite_c.py 2>&1 | grep -E "^==") done echo AB_DONE