| # Submit all fusion experiments as individual 1-GPU SLURM jobs | |
| # SLURM scheduler will automatically place them on any available GPU | |
| PYTHON=python | |
| SCRIPT=${PULSE_ROOT}/experiments/train_exp1.py | |
| OUTDIR=${PULSE_ROOT}/results/exp1 | |
| LOGDIR=${OUTDIR}/slurm_logs | |
| mkdir -p $LOGDIR | |
| COMMON_ARGS="--model transformer --epochs 100 --batch_size 16 --lr 1e-3 --weight_decay 1e-4 --hidden_dim 128 --downsample 5 --patience 15 --seed 42 --output_dir $OUTDIR" | |
| FUSIONS=(weighted_late gated_late stacking product moe late attention) | |
| MODALITIES=("mocap,emg,eyetrack" "mocap,emg,eyetrack,imu,pressure") | |
| for fusion in "${FUSIONS[@]}"; do | |
| for mods in "${MODALITIES[@]}"; do | |
| mod_tag=$(echo $mods | tr ',' '-') | |
| job_name="f_${fusion}_${mod_tag}" | |
| sbatch \ | |
| -J "$job_name" \ | |
| -p gpuA800 \ | |
| --gres=gpu:1 \ | |
| -N 1 -n 1 \ | |
| --cpus-per-task=8 \ | |
| --mem=32G \ | |
| -t 3:00:00 \ | |
| -o "${LOGDIR}/${job_name}_%j.out" \ | |
| -e "${LOGDIR}/${job_name}_%j.err" \ | |
| --export=ALL \ | |
| --wrap="export PYTHONUNBUFFERED=1; cd ${PULSE_ROOT}; $PYTHON $SCRIPT --fusion $fusion --modalities $mods $COMMON_ARGS" | |
| echo "Submitted: $job_name" | |
| done | |
| done | |
| echo "All 14 fusion experiments submitted!" | |