#!/usr/bin/env bash set -euo pipefail ROOT=${ROOT:-/workspace/mp_20_pxrdnet} ENV_ACTIVATE=${ENV_ACTIVATE:-/workspace/miniforge/bin/activate} ENV_NAME=${ENV_NAME:-pxrdnet} MODEL_PATH=${MODEL_PATH:-${ROOT}/hydra/singlerun/2026-07-20/pxrdgen_raw512_run02} OUTPUT_ROOT=${OUTPUT_ROOT:-${ROOT}/paper_results_pxrdgen_match_only/cpu_multinode/full_test} TOTAL_MATERIALS=${TOTAL_MATERIALS:-9046} CHUNK_SIZE=${CHUNK_SIZE:?Set CHUNK_SIZE to the best single-node material count.} NODE_INDEX=${NODE_INDEX:-${SLURM_ARRAY_TASK_ID:-0}} FIRST_IDX=$((NODE_INDEX * CHUNK_SIZE)) if (( FIRST_IDX >= TOTAL_MATERIALS )); then echo "NODE_INDEX=${NODE_INDEX} starts at ${FIRST_IDX}, beyond TOTAL_MATERIALS=${TOTAL_MATERIALS}; nothing to do." exit 0 fi REMAINING=$((TOTAL_MATERIALS - FIRST_IDX)) if (( REMAINING < CHUNK_SIZE )); then NUM_MATERIALS=${REMAINING} else NUM_MATERIALS=${CHUNK_SIZE} fi OUTPUT_DIR=${OUTPUT_DIR:-${OUTPUT_ROOT}/node_$(printf "%05d" "${NODE_INDEX}")} CPU_WORKERS=${CPU_WORKERS:-0} TORCH_THREADS_PER_WORKER=${TORCH_THREADS_PER_WORKER:-0} NUM_STARTING_POINTS=${NUM_STARTING_POINTS:-1} NUM_GRADIENT_STEPS=${NUM_GRADIENT_STEPS:-5000} N_STEP_EACH=${N_STEP_EACH:-100} PROGRESS_LOG_INTERVAL=${PROGRESS_LOG_INTERVAL:-500} PROGRESS_MININTERVAL=${PROGRESS_MININTERVAL:-10} source "${ENV_ACTIVATE}" "${ENV_NAME}" cd "${ROOT}" export PROJECT_ROOT="${ROOT}" export HYDRA_JOBS="${ROOT}/hydra" export WABDB_DIR="${ROOT}/wabdb" export PYTHONPATH="${ROOT}:${ROOT}/scripts:${PYTHONPATH:-}" export WANDB_MODE=disabled export CUDA_VISIBLE_DEVICES="" export PIP_CACHE_DIR="${PIP_CACHE_DIR:-/workspace/.cache/pip}" export TMPDIR="${TMPDIR:-/workspace/tmp}" mkdir -p "${OUTPUT_DIR}" echo "Running node chunk:" echo " NODE_INDEX=${NODE_INDEX}" echo " FIRST_IDX=${FIRST_IDX}" echo " NUM_MATERIALS=${NUM_MATERIALS}" echo " CHUNK_SIZE=${CHUNK_SIZE}" echo " OUTPUT_DIR=${OUTPUT_DIR}" python -W ignore "${ROOT}/cpu_generation_benchmark/run_cpu_generation_benchmark.py" \ --model-path "${MODEL_PATH}" \ --output-dir "${OUTPUT_DIR}" \ --first-idx "${FIRST_IDX}" \ --num-materials "${NUM_MATERIALS}" \ --num-starting-points "${NUM_STARTING_POINTS}" \ --workers "${CPU_WORKERS}" \ --torch-threads-per-worker "${TORCH_THREADS_PER_WORKER}" \ --num-gradient-steps "${NUM_GRADIENT_STEPS}" \ --n-step-each "${N_STEP_EACH}" \ --progress-log-interval "${PROGRESS_LOG_INTERVAL}" \ --progress-mininterval "${PROGRESS_MININTERVAL}" \ 2>&1 | tee "${OUTPUT_DIR}/benchmark.log"