|
| 1 | +#!/bin/bash |
| 2 | +# ============================================================================= |
| 3 | +# Frontier Slurm job — FT1 Feasibility Classification (bundled data-efficiency) |
| 4 | +# |
| 5 | +# Runs all sample sizes sequentially; within each sample size the 4 training |
| 6 | +# methods (full / partial / head_only / scratch) run concurrently with srun. |
| 7 | +# |
| 8 | +# Required env vars (set via sbatch --export or environment): |
| 9 | +# FT_ARCH HeteroSAGE | HeteroHEAT |
| 10 | +# |
| 11 | +# Optional env vars: |
| 12 | +# N_PER_RUN nodes per method (default: 8) |
| 13 | +# PRETRAINED_MODEL override pretrained model name |
| 14 | +# SAMPLE_SIZES space-separated list (default: 100 500 1000 2500 5000 |
| 15 | +# 10000 25000 50000 100000) |
| 16 | +# |
| 17 | +# Usage (from examples/opf/finetune/): |
| 18 | +# sbatch --export=ALL,FT_ARCH=HeteroSAGE \ |
| 19 | +# job-frontier-FT1-bundled.sh |
| 20 | +# ============================================================================= |
| 21 | +#SBATCH -A eng164 |
| 22 | +#SBATCH -J FT1-bundled |
| 23 | +#SBATCH -o /lustre/orion/lrn078/proj-shared/HydraGNN/FT1-bundled-%j.out |
| 24 | +#SBATCH -e /lustre/orion/lrn078/proj-shared/HydraGNN/FT1-bundled-%j.out |
| 25 | +#SBATCH -t 12:00:00 |
| 26 | +#SBATCH -p batch |
| 27 | +#SBATCH -N 32 |
| 28 | + |
| 29 | +# ----------------------------------------------------------------------------- |
| 30 | +# Configuration |
| 31 | +# ----------------------------------------------------------------------------- |
| 32 | +FT_ARCH=${FT_ARCH:-HeteroSAGE} |
| 33 | +N_PER_RUN=${N_PER_RUN:-8} |
| 34 | +PRETRAINED_MODEL=${PRETRAINED_MODEL:-${FT_ARCH}_best} |
| 35 | +read -ra SAMPLE_SIZES <<< "${SAMPLE_SIZES:-100 500 1000 2500 5000 10000 25000 50000 100000}" |
| 36 | + |
| 37 | +# ----------------------------------------------------------------------------- |
| 38 | +# Environment |
| 39 | +# ----------------------------------------------------------------------------- |
| 40 | +export all_proxy=socks://proxy.ccs.ornl.gov:3128/ |
| 41 | +export ftp_proxy=ftp://proxy.ccs.ornl.gov:3128/ |
| 42 | +export http_proxy=http://proxy.ccs.ornl.gov:3128/ |
| 43 | +export https_proxy=http://proxy.ccs.ornl.gov:3128/ |
| 44 | +export no_proxy='localhost,127.0.0.0/8,*.ccs.ornl.gov' |
| 45 | + |
| 46 | +HYDRAGNN_ROOT=/lustre/orion/lrn078/proj-shared/HydraGNN |
| 47 | + |
| 48 | +source /lustre/orion/lrn070/world-shared/mlupopa/module-to-load-frontier-rocm711.sh |
| 49 | +source activate /lustre/orion/lrn078/proj-shared/HydraGNN/installation_DOE_supercomputers/HydraGNN-Installation-Frontier/hydragnn_venv |
| 50 | + |
| 51 | +export PYTHONPATH=$HYDRAGNN_ROOT:${PYTHONPATH:-} |
| 52 | +export PYTHONPATH=/lustre/orion/lrn078/proj-shared/HydraGNN/installation_DOE_supercomputers/HydraGNN-Installation-Frontier/hydragnn_venv/lib/python3.11/site-packages/:${PYTHONPATH:-} |
| 53 | + |
| 54 | +module unload darshan-runtime |
| 55 | + |
| 56 | +export PLUGIN_PATH=/ccs/sw/crusher/amdsw/aws-ofi-nccl/aws-ofi-nccl |
| 57 | +export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PLUGIN_PATH}/lib |
| 58 | +export FI_MR_CACHE_MONITOR=kdreg2 |
| 59 | +export FI_CXI_DEFAULT_CQ_SIZE=131072 |
| 60 | +export FI_CXI_DEFAULT_TX_SIZE=2048 |
| 61 | +export FI_CXI_RX_MATCH_MODE=hybrid |
| 62 | +export FI_CXI_RDV_PROTO=alt_read |
| 63 | +export FI_CXI_DISABLE_HOST_REGISTER=1 |
| 64 | +export NCCL_NET_PLUGIN=${PLUGIN_PATH}/lib/librccl-net.so |
| 65 | +export NCCL_NET_GDR_LEVEL="PHB" |
| 66 | +export NCCL_CROSS_NIC=1 |
| 67 | +export NCCL_SOCKET_IFNAME=hsn0 |
| 68 | +export NCCL_NET="AWS Libfabric" |
| 69 | +export TORCH_NCCL_HIGH_PRIORITY=1 |
| 70 | +export GPU_MAX_HW_QUEUES=2 |
| 71 | +export HSA_FORCE_FINE_GRAIN_PCIE=1 |
| 72 | +export FI_CXI_RDZV_EAGER_SIZE=0 |
| 73 | +export FI_CXI_RDZV_GET_MIN=0 |
| 74 | +export FI_CXI_RDZV_THRESHOLD=0 |
| 75 | + |
| 76 | +# ----------------------------------------------------------------------------- |
| 77 | +# Derived |
| 78 | +# ----------------------------------------------------------------------------- |
| 79 | +FT_DIR=$HYDRAGNN_ROOT/examples/opf/finetune |
| 80 | +DATA_ROOT=$FT_DIR/../dataset |
| 81 | + |
| 82 | +echo "============================================================" |
| 83 | +echo " FT1 Feasibility Classification — bundled data-efficiency" |
| 84 | +echo " Arch : $FT_ARCH (pretrained: $PRETRAINED_MODEL)" |
| 85 | +echo " Methods : full / partial / head_only / scratch (concurrent)" |
| 86 | +echo " Nodes per run : $N_PER_RUN (total: $((N_PER_RUN * 4)))" |
| 87 | +echo " Sample sizes : ${SAMPLE_SIZES[*]}" |
| 88 | +echo " Job ID : $SLURM_JOB_ID" |
| 89 | +echo "============================================================" |
| 90 | + |
| 91 | +cd $FT_DIR |
| 92 | + |
| 93 | +# Helper: launch one srun in the background for a given regime and sample size |
| 94 | +_launch() { |
| 95 | + local REGIME="$1" |
| 96 | + local MAX_TRAIN_SAMPLES="$2" |
| 97 | + local SCRATCH_FLAG="${3:-}" |
| 98 | + local _scratch_tag="" |
| 99 | + [[ -n "$SCRATCH_FLAG" ]] && _scratch_tag="_scratch" |
| 100 | + local LOG_NAME="FT1_feasibility_${FT_ARCH}_${REGIME}${_scratch_tag}_n${MAX_TRAIN_SAMPLES}" |
| 101 | + local LOGFILE="$HYDRAGNN_ROOT/${LOG_NAME}-${SLURM_JOB_ID}.out" |
| 102 | + |
| 103 | + echo " Launching $LOG_NAME → $LOGFILE" |
| 104 | + |
| 105 | + srun --exact -N${N_PER_RUN} -n$((N_PER_RUN * 8)) -c7 \ |
| 106 | + --gpus-per-task=1 --gpu-bind=closest \ |
| 107 | + python -u train_opf_ft1_classify.py \ |
| 108 | + --inputfile FT1_feasibility_classification/config_${FT_ARCH}_${REGIME}.json \ |
| 109 | + --modelname "$LOG_NAME" \ |
| 110 | + --data_root $DATA_ROOT \ |
| 111 | + --pretrained_model_dir $HYDRAGNN_ROOT/examples/opf/pretrained_models \ |
| 112 | + --pretrained_model_name $PRETRAINED_MODEL \ |
| 113 | + --finetune_regime $REGIME \ |
| 114 | + $SCRATCH_FLAG \ |
| 115 | + --max_train_samples $MAX_TRAIN_SAMPLES \ |
| 116 | + > "$LOGFILE" 2>&1 & |
| 117 | +} |
| 118 | + |
| 119 | +# ----------------------------------------------------------------------------- |
| 120 | +# Main loop: iterate sample sizes sequentially, methods concurrently |
| 121 | +# ----------------------------------------------------------------------------- |
| 122 | +ROUND=0 |
| 123 | +for N in "${SAMPLE_SIZES[@]}"; do |
| 124 | + ROUND=$((ROUND + 1)) |
| 125 | + TOTAL=$((N * 2)) # balanced: N feasible + N infeasible |
| 126 | + echo "" |
| 127 | + echo "── Round $ROUND / ${#SAMPLE_SIZES[@]}: N=$N (total train samples=$TOTAL) ──" |
| 128 | + |
| 129 | + _launch full "$TOTAL" |
| 130 | + _launch partial "$TOTAL" |
| 131 | + _launch head_only "$TOTAL" |
| 132 | + _launch full "$TOTAL" "--no_pretrained" # scratch baseline |
| 133 | + |
| 134 | + echo " Waiting for round $ROUND to finish..." |
| 135 | + wait |
| 136 | + echo " Round $ROUND done." |
| 137 | +done |
| 138 | + |
| 139 | +echo "" |
| 140 | +echo "All rounds finished. Job ID: $SLURM_JOB_ID" |
0 commit comments