AsianPlayer/TriDrive / code /eval /run_joint_evals_final_udwm.sh
AsianPlayer's picture
download
raw
3.93 kB
#!/usr/bin/env bash
# cwm3/eval/run_joint_evals_final_udwm.sh — owner experiment C (2026-09-17; pre-registration docs/decisions.md 2026-09-17T07:00:22Z): paired evaluations of the
# Driver-WM-like driver branch, CPU, layout guards on, <= 3 pairings in parallel (xargs -P 3; each pairing holds ~4 GB, waits for MemAvailable >= MIN_AVAIL_GB).
# Runs I1_{indep,all_minus_road2drv}_s<k>_final_udwm (U base *_udwm = the FINAL U recipe with the Driver-WM temporal encoder at its published width, models/u_driverwm.py)
# vs the FROZEN main I1_all_minus_road2drv_s<k>_final and I1_indep_s<k>_final (read-only). Identical rows, driver populations from the v2 causal kin targets
# (eval/pc_joint_locked.py conventions: n_boot 1000 device-cluster resamples, Δ = A − B, flock-guarded append to results/paired_compare.csv); every tag idempotent.
# finalc_s<k>_allminusudwm_vs_allminus (a) the pre-registered Table 3 comparison: udwm main vs FROZEN main (four driver cells, vehicle cells, D road cells, hazard-NLL costs)
# finalc_s<k>_allminusudwm_vs_indepudwm (b) interaction effect on the udwm bases (B2-style)
# finalc_s<k>_indepudwm_vs_indep (c) the U-base swap alone (assembled bases, no training)
# finalP_s<k>_{allminusudwm_vs_allminus, allminusudwm_vs_indepudwm, indepudwm_vs_indep} P road cells (eval/pressure_eval.py)
# finalcv_s<k>_allminusudwm_vs_allminus (a) on the VALIDATION split (descriptive; the pre-registered placement is a Table 3 row regardless of direction)
# bash eval/run_joint_evals_final_udwm.sh "0 1 2" [render=1] [parallel=3]
set -u
cd "$(dirname "$0")/.."
PY=python
export OMP_NUM_THREADS=4 MKL_NUM_THREADS=4 PY
MIN_AVAIL_GB="${MIN_AVAIL_GB:-8}"; export MIN_AVAIL_GB
C="--kin-targets causal_routes --kin-version v2"
done_run() { [[ -f results/runs/$1/PRED_DONE && -f results/runs/$1/TRAIN_DONE ]]; }
have_tag() { grep -q ",$1,$2,$3," results/paired_compare.csv 2>/dev/null; } # tag regime split
JOBS=$(mktemp)
add() { # kind tag a b split [extra...]
local kind="$1" tag="$2" a="$3" b="$4" split="$5"; shift 5
done_run "$a" && done_run "$b" || { echo "skip $tag ($a / $b not finished)"; return; }
for reg in manual engaged; do
have_tag "$tag" "$reg" "$split" && continue
echo "$kind|$tag|$a|$b|$split|$reg|$*" >> "$JOBS"
done
}
for s in ${1:-0 1 2}; do
AU=I1_all_minus_road2drv_s${s}_final_udwm; IU=I1_indep_s${s}_final_udwm; AM=I1_all_minus_road2drv_s${s}_final; I=I1_indep_s${s}_final
add pc "finalc_s${s}_allminusudwm_vs_allminus" $AU $AM test $C
add pc "finalc_s${s}_allminusudwm_vs_indepudwm" $AU $IU test $C
add pc "finalc_s${s}_indepudwm_vs_indep" $IU $I test $C
add pe "finalP_s${s}_allminusudwm_vs_allminus" $AU $AM test
add pe "finalP_s${s}_allminusudwm_vs_indepudwm" $AU $IU test
add pe "finalP_s${s}_indepudwm_vs_indep" $IU $I test
add pc "finalcv_s${s}_allminusudwm_vs_allminus" $AU $AM val $C
done
run_one() { # one job line
IFS='|' read -r kind tag a b split reg extra <<< "$1"
while [[ $(awk '/MemAvailable/ {printf "%d", $2/1048576}' /proc/meminfo) -lt $MIN_AVAIL_GB ]]; do sleep 30; done
echo "== $tag $reg ($split, $kind)"
if [[ "$kind" == pc ]]; then
$PY eval/pc_joint_locked.py --regime "$reg" --split "$split" --a "results/runs/$a" --b "results/runs/$b" --tag "$tag" $extra 2>&1 | grep -E "appended|Error|Traceback|File \"|LAYOUT GUARD" | cut -c1-220
else
$PY eval/pressure_eval.py --regime "$reg" --a "results/runs/$a" --b "results/runs/$b" --tag "$tag" 2>&1 | grep -E "appended|Error|Traceback|File \"|LAYOUT GUARD" | cut -c1-220
fi
}
export -f run_one
echo "$(wc -l < "$JOBS") pairings to run (<= ${3:-3} parallel)"
xargs -P "${3:-3}" -I{} bash -c 'run_one "$@"' _ {} < "$JOBS"
rm -f "$JOBS"
if [[ "${2:-1}" == "1" ]]; then S=${1:-0 1 2}
$PY eval/report_final_udwm.py --seeds ${S// /,} --out results/tables/stage_final_udwm.md 2>&1 | grep -E "written|VERDICT|ROW"
fi
echo FINAL_UDWM_EVALS_DONE

Xet Storage Details

Size:
3.93 kB
·
Xet hash:
59f93c7d1fb47a62fb95cb5bf8c2cff47d3bfc49aff95803623c1a0fe8bdbea5

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.