File size: 3,546 Bytes
b0e01a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/bin/bash
# ============================================================================
# ViTViz β€” SLURM array job: 30 tasks (6 models Γ— 5 seeds)
#
# Config is selected via VITVIZ_CONFIG env var:
#
#   Run 1 (classical attacks, rollout, ~21h wall time on A100):
#     VITVIZ_CONFIG=configs/experiments/exp_run1_classical_rollout.yaml \
#     sbatch --array=0-29%2 scripts/apuana_sweep_array.sh
#
#   Run 2 (TGR+SAGA, rollout, ~52h wall time on A100):
#     VITVIZ_CONFIG=configs/experiments/exp_run2_vit_attacks_rollout.yaml \
#     sbatch --array=0-29%2 scripts/apuana_sweep_array.sh
#
#   Run 3 (all attacks, GMAR-L2, ~50h wall time on A100):
#     VITVIZ_CONFIG=configs/experiments/exp_run3_all_gmar.yaml \
#     sbatch --array=0-29%2 scripts/apuana_sweep_array.sh
#
# %2 = real GPU limit (QoS simple: 2 GPUs max per user simultaneously)
# A100 nodes forced via --nodelist; jobs queue if busy (acceptable).
# ============================================================================

#SBATCH --job-name=vitviz_sweep
#SBATCH --partition=long-simple
#SBATCH --qos=simple
#SBATCH --gres=gpu:1
#SBATCH --nodelist=cluster-node[6-10]
#SBATCH --cpus-per-task=8
#SBATCH --mem=32G
#SBATCH --time=1-06:00:00          # 30h β€” safe for A100; adjust if needed
#SBATCH --output=logs/sweep_%A_%a.out
#SBATCH --error=logs/sweep_%A_%a.err

# ── Config ───────────────────────────────────────────────────────────────────
CONFIG="${VITVIZ_CONFIG:-configs/experiments/exp_run3_all_gmar.yaml}"

# ── Model Γ— seed mapping ─────────────────────────────────────────────────────
MODELS=(
    "ViT-S/32 Β· ImageNet-1k"
    "ViT-S/16 Β· ImageNet-1k"
    "ViT-B/32 Β· ImageNet-1k"
    "ViT-B/16 Β· ImageNet-1k"
    "ViT-L/32 Β· ImageNet-1k"
    "ViT-L/16 Β· ImageNet-1k"
)
SEEDS=(42 123 456 789 2026)

MODEL_IDX=$(( SLURM_ARRAY_TASK_ID / 5 ))
SEED_IDX=$(( SLURM_ARRAY_TASK_ID % 5 ))

MODEL="${MODELS[$MODEL_IDX]}"
SEED="${SEEDS[$SEED_IDX]}"

echo "======================================================"
echo "Array job   : $SLURM_ARRAY_JOB_ID[$SLURM_ARRAY_TASK_ID]"
echo "Config      : $CONFIG"
echo "Model       : $MODEL"
echo "Seed        : $SEED"
echo "Node        : $(hostname)"
echo "GPU         : $(nvidia-smi --query-gpu=name --format=csv,noheader 2>/dev/null | head -1)"
echo "======================================================"

# ── Environment ──────────────────────────────────────────────────────────────
cd "$HOME/ViTViz" || { echo "ERROR: ~/ViTViz not found"; exit 1; }

source "$HOME/vitviz_venv/bin/activate" \
    || source ".venv/bin/activate" \
    || { echo "ERROR: venv not found"; exit 1; }

mkdir -p logs

# ── Run ──────────────────────────────────────────────────────────────────────
python experiments/run_attack_sweep.py \
    --config "$CONFIG" \
    --model-name "$MODEL" \
    --seed "$SEED" \
    --resume

EXIT_CODE=$?
echo "======================================================"
echo "Finished with exit code $EXIT_CODE"
echo "======================================================"
exit $EXIT_CODE