2090741942justin's picture
Add CPU multi-node generation orchestration
23e02ba
Raw
History Blame Contribute Delete
2.48 kB
#!/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"