| #!/bin/bash |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| set -euo pipefail |
|
|
| PROJECT_DIR="${PROJECT_DIR:-$SLURM_SUBMIT_DIR}" |
| DATASET="${DATASET:?Set DATASET to the matching CIL directory}" |
| RUN_ROOT="${RUN_ROOT:?Set RUN_ROOT to the matching training root}" |
| MODE="${MODE:-full}" |
| PYTHON="${PYTHON:-$PROJECT_DIR/.venv/bin/python}" |
| EVAL_DEVICE="${EVAL_DEVICE:-cpu}" |
| TASK_INDEX="${SLURM_ARRAY_TASK_ID:-0}" |
| USE_VISUAL_CONTAINER="${USE_VISUAL_CONTAINER:-0}" |
|
|
| if [[ "$MODE" == "full" ]]; then |
| SEED="$((TASK_INDEX / 2))" |
| if (( TASK_INDEX % 2 == 0 )); then |
| OBJECTIVE="lattice_field" |
| else |
| OBJECTIVE="legacy" |
| fi |
| RUN_DIR="$RUN_ROOT/$OBJECTIVE/seed_$SEED" |
| elif [[ "$MODE" == "scaling" ]]; then |
| K="${K:?Set K for scaling evaluation}" |
| SEED="$TASK_INDEX" |
| RUN_DIR="$RUN_ROOT/k_$K/seed_$SEED" |
| elif [[ "$MODE" == "visual" ]]; then |
| VISUAL_SEEDS="${VISUAL_SEEDS:-3}" |
| if (( TASK_INDEX >= VISUAL_SEEDS )); then |
| echo "skip visual eval index $TASK_INDEX: VISUAL_SEEDS=$VISUAL_SEEDS" |
| exit 0 |
| fi |
| SEED="$TASK_INDEX" |
| RUN_DIR="$RUN_ROOT/lattice_field/seed_$SEED" |
| USE_VISUAL_CONTAINER=1 |
| elif [[ "$MODE" == "field_only" ]]; then |
| SEED="$TASK_INDEX" |
| OBJECTIVE="${OBJECTIVE:-lattice_field}" |
| RUN_DIR="$RUN_ROOT/$OBJECTIVE/seed_$SEED" |
| elif [[ "$MODE" == "baseline" ]]; then |
| BASELINE="${BASELINE:?Set BASELINE for baseline evaluation}" |
| SEED="$TASK_INDEX" |
| RUN_DIR="$RUN_ROOT/$BASELINE/seed_$SEED" |
| else |
| echo "MODE must be full, scaling, visual, or baseline" >&2 |
| exit 2 |
| fi |
|
|
| EVAL_EXTRA_ARGS=() |
| if [[ "$MODE" == "scaling" ]]; then |
| EVAL_EXTRA_ARGS+=(--training-k "$K" --all-groups) |
| fi |
| if [[ "${ALL_GROUPS:-0}" == "1" ]]; then |
| EVAL_EXTRA_ARGS+=(--all-groups) |
| fi |
|
|
| cd "$PROJECT_DIR" |
| export OMP_NUM_THREADS=1 |
| export OPENBLAS_NUM_THREADS=1 |
| export MKL_NUM_THREADS=1 |
| export DOVLA_TORCH_THREADS=1 |
|
|
| if (( USE_VISUAL_CONTAINER )); then |
| SCRATCH_ROOT="/scratch/$USER/dovla" |
| SIF="${SIF:-$SCRATCH_ROOT/containers/pytorch_2.7.1_cuda12.8.sif}" |
| CONTAINER_PYTHON="${CONTAINER_PYTHON:-$SCRATCH_ROOT/envs/maniskill/bin/python}" |
| module load StdEnv/2023 apptainer/1.4.5 |
| APPTAINER_GPU_ARGS=() |
| if [[ "$EVAL_DEVICE" == cuda* ]]; then |
| APPTAINER_GPU_ARGS+=(--nv) |
| fi |
| PYTHON_COMMAND=( |
| apptainer exec |
| "${APPTAINER_GPU_ARGS[@]}" |
| --env "OMP_NUM_THREADS=1,OPENBLAS_NUM_THREADS=1,MKL_NUM_THREADS=1,DOVLA_TORCH_THREADS=1" |
| -B "$PROJECT_DIR:$PROJECT_DIR" |
| -B "/scratch/$USER:/scratch/$USER" |
| "$SIF" |
| "$CONTAINER_PYTHON" |
| ) |
| else |
| PYTHON_COMMAND=("$PYTHON") |
| fi |
|
|
| test -f "$RUN_DIR/best.pt" |
| "${PYTHON_COMMAND[@]}" scripts/eval_lattice_checkpoint.py \ |
| --checkpoint "$RUN_DIR/best.pt" \ |
| --dataset "$DATASET" \ |
| --out "$RUN_DIR/lattice_eval.json" \ |
| --device "$EVAL_DEVICE" \ |
| "${EVAL_EXTRA_ARGS[@]}" |
|
|