AsianPlayer/TriDrive / code /eval /run_joint_evals_r2_mtl.sh
AsianPlayer's picture
download
raw
3.69 kB
#!/usr/bin/env bash
# cwm3/eval/run_joint_evals_r2_mtl.sh — WP3 R2 MTL-block pairs on the FINAL assembly (pre-registered 2026-09-16T06:46:35Z; train/mtl.py runs of queue J3), CPU.
# bash eval/run_joint_evals_r2_mtl.sh ["0 1 2"] [parallel=3]
# Per seed k (identical rows; v2 causal kin targets, the flags of every finalc_* pair), A = I1_<mtl variant>_s<k>_final:
# finalc_s<k>_<v>_vs_indep, finalc_s<k>_<v>_vs_allminus FULL cell set (own / cross-leg / hazard-NLL cost cells) — feeds modality_ablation.md
# finalc_s<k>_naivefresh{uw,famo,pcgrad}_vs_naivefresh the MTL arm vs PLAIN SUMMATION on the SAME architecture / init — the pre-registered
# (allminuspcgrad vs allminus = the _vs_allminus pair above) criterion 'significantly better on any own cell' needs the onset cells only -> --only-onset
# (drv / veh / demand onset PR-AUC@3 s + veh_any; ≈ 11 min/call vs ≈ 13 for the full set — the onset bootstraps dominate)
# Unfinished runs are skipped (idempotent tags); calls run through eval/pc_joint_locked.py (private rows, flock-guarded append), `parallel` at a time; each call
# waits for MemAvailable >= PAIR_MIN_AVAIL_GB (default 20; a call takes ≈ 4 GB RSS) so the pairings never drain the host RAM (62 GB hard constraint).
# 2026-09-16 19:10Z fix: job lines carried a trailing blank when `extra` was empty and `xargs -L 1` treats a trailing blank as LINE CONTINUATION — two jobs were
# merged into one call (bogus 5th argument -> argparse error, lower-case, not caught by the case-sensitive grep) and only the odd --only-onset calls ran.
set -u
cd "$(dirname "$0")/.."
PY=python
export OMP_NUM_THREADS=4 MKL_NUM_THREADS=4
SEEDS="${1:-0 1 2}"; PAR="${2:-3}"
C="--kin-targets causal_routes --kin-version v2"
have_tag() { grep -q ",$1,$2,test," results/paired_compare.csv 2>/dev/null; }
done_run() { [[ -f results/runs/$1/PRED_DONE && -f results/runs/$1/TRAIN_DONE ]]; }
JOBS=$(mktemp /tmp/r2_mtl_jobs.XXXXXX)
add() { # tag a b extra
local tag="$1" a="$2" b="$3" extra="${4:-}"
done_run "$a" || { echo "skip $tag ($a not finished)"; return; }
done_run "$b" || { echo "skip $tag ($b not finished)"; return; }
for reg in manual engaged; do
have_tag "$tag" "$reg" && continue
echo "$tag $a $b $reg${extra:+ $extra}" >> "$JOBS" # NO trailing blank (xargs -L continuation)
done
}
declare -A DIR=( [naivefreshuw]=naive_fresh_uw [naivefreshfamo]=naive_fresh_famo [naivefreshpcgrad]=naive_fresh_pcgrad [allminuspcgrad]=all_minus_road2drv_pcgrad )
for s in $SEEDS; do
I=I1_indep_s${s}_final; M=I1_all_minus_road2drv_s${s}_final; NF=I1_naive_fresh_s${s}_final
for v in naivefreshuw naivefreshfamo naivefreshpcgrad allminuspcgrad; do
A=I1_${DIR[$v]}_s${s}_final
case $v in naivefresh*) add "finalc_s${s}_${v}_vs_naivefresh" $A $NF "--only-onset" ;; esac
add "finalc_s${s}_${v}_vs_indep" $A $I
add "finalc_s${s}_${v}_vs_allminus" $A $M
done
done
n=$(wc -l < "$JOBS" | tr -d ' ')
echo "[$(date -u +%H:%M:%SZ)] $n MTL pairing calls to run ($PAR in parallel)"
if [[ "$n" -gt 0 ]]; then
xargs -P "$PAR" -L 1 bash -c 'tag=$0; a=$1; b=$2; reg=$3; extra=${4:-}
while [ "$(awk "/MemAvailable/ {printf \"%d\", \$2/1048576}" /proc/meminfo)" -lt "${PAIR_MIN_AVAIL_GB:-20}" ]; do sleep 60; done
echo "[$(date -u +%H:%M:%SZ)] == $tag $reg $extra"; '"$PY"' eval/pc_joint_locked.py --regime "$reg" --a "results/runs/$a" --b "results/runs/$b" --tag "$tag" '"$C"' $extra 2>&1 | grep -iE "locked-append|appended|error|Traceback|File \"|LAYOUT GUARD|no rows"' < "$JOBS"
fi
rm -f "$JOBS"
echo "[$(date -u +%H:%M:%SZ)] R2_MTL_EVALS_DONE"

Xet Storage Details

Size:
3.69 kB
·
Xet hash:
53e3b0cc509d7bd4401eeaab629df2442a49a59b4109d73fd66778972f030d16

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