#!/bin/bash # Submit the 16 compression jobs for the LLaDA-8B-INSTRUCT table. # # Calib is REUSED from the Base table -- not rebuilt. Verified equivalent: # the Instruct tokenizer is a strict superset of Base (adds only # <|start_header_id|>/<|end_header_id|>/<|eot_id|> at ids 126346-126348; no # id remapping, same MASK_ID 126336), and build_windows/apply_noise depend on # (tokenizer, corpus, seed) alone -- no model forward. Checked on 4000 real C4 # docs plus an end-to-end rebuild: the shipped calib's window hashes reproduce # exactly under the Instruct tokenizer. # # Node policy differs from the Base run: compress.sbatch hardcodes # --exclude=node1..node4 to force L40S (5.7x faster). node6 is currently full # and 48 foreign jobs are queued, so we override to exclude only the # drained/draining nodes and take whichever GPU frees first. A5000 is proven # for this path (base/all_m08_c4 finished there in 8.57h) and fits --time=24h. set -euo pipefail cd /home/tl356/LLaDA/trajmc_main MODEL=/home/tl356/LLaDA-8B-Instruct CLEAN=results/calib/base_c4_n1400_s42_full_2c9a327_calib.pt TRAJ=results/calib/ours_c4_n1400_s42_full_2c9a327_calib.pt W=weights_instruct AVOID="node3,node5" # drain / draining for f in "$CLEAN" "$TRAJ"; do [ -s "$f" ] || { echo "missing calib: $f" >&2; exit 1; }; done [ -d "$MODEL" ] || { echo "missing model: $MODEL" >&2; exit 1; } # NOTE: label is an explicit arg, not $(basename save_path) -- gptq and awq # share the w4g128_c4_clean basename and would collide in squeue. # Skip a target that is already finished OR already in flight, so this script can be # re-run safely after a partial failure. compress*.py are themselves idempotent on the # summary file, but that only helps AFTER a job has burned a GPU slot; the squeue check # is what stops a re-run from double-submitting the jobs still running from last time. _skip () { #