summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/run_ogb_act_task.sh119
-rwxr-xr-xscripts/run_ogb_act_two_gpu.sh87
2 files changed, 206 insertions, 0 deletions
diff --git a/scripts/run_ogb_act_task.sh b/scripts/run_ogb_act_task.sh
new file mode 100755
index 0000000..37eb1a6
--- /dev/null
+++ b/scripts/run_ogb_act_task.sh
@@ -0,0 +1,119 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+cd "${ROOT_DIR}"
+export PYTHONPATH="${ROOT_DIR}:${PYTHONPATH:-}"
+
+TASK="${TASK:-ogbg-molhiv}"
+DEVICE="${DEVICE:-cuda:0}"
+EPOCHS="${EPOCHS:-100}"
+SEEDS="${SEEDS:-${SEED:-0}}"
+HIDDEN="${HIDDEN:-128}"
+BS="${BS:-128}"
+LR="${LR:-}"
+EVAL_EVERY="${EVAL_EVERY:-10}"
+NUM_WORKERS="${NUM_WORKERS:-0}"
+T="${T:-1}"
+N_SUP="${N_SUP:-3}"
+HALT_MAX="${HALT_MAX:-8}"
+HALT_MIN="${HALT_MIN:-2}"
+HALT_TARGET="${HALT_TARGET:-loss}"
+HALT_LOSS_THRESHOLD="${HALT_LOSS_THRESHOLD:-0.2}"
+HALT_EXPLORATION_PROB="${HALT_EXPLORATION_PROB:-0.1}"
+LAM_Q="${LAM_Q:-0.1}"
+Q_WARMUP="${Q_WARMUP:-0}"
+ACT_TRAIN_MODE="${ACT_TRAIN_MODE:-stream}"
+EMA="${EMA:-0}"
+MAX_TRAIN_BATCHES="${MAX_TRAIN_BATCHES:-}"
+MAX_EVAL_BATCHES="${MAX_EVAL_BATCHES:-}"
+COLLECT="${COLLECT:-1}"
+VIEWS="${VIEWS:-gin gine gcn graphsage gatv2 graphconv transformer pna gen film resgated tag sgc cheb arma mf appnp}"
+
+mkdir -p runs logs summaries
+
+fmt_float() {
+ python3 - "$1" <<'PY'
+import sys
+print(f"{float(sys.argv[1]):g}")
+PY
+}
+
+result_path() {
+ local view="$1"
+ local seed="$2"
+ local target_tag="${HALT_TARGET}"
+ local loss_tag
+ local lam_tag
+ local hex_tag
+ local ema_tag=""
+ loss_tag="$(fmt_float "${HALT_LOSS_THRESHOLD}")"
+ lam_tag="$(fmt_float "${LAM_Q}")"
+ hex_tag="$(fmt_float "${HALT_EXPLORATION_PROB}")"
+ if [[ "${HALT_TARGET}" == "loss" ]]; then
+ target_tag="loss${loss_tag}"
+ fi
+ if [[ "$(fmt_float "${EMA}")" != "0" ]]; then
+ ema_tag="_ema$(fmt_float "${EMA}")"
+ fi
+ echo "runs/${TASK}_${view}_rrog-act_T${T}_ns${N_SUP}_${ACT_TRAIN_MODE}_hm${HALT_MAX}_hmin${HALT_MIN}_${target_tag}_lq${lam_tag}_hex${hex_tag}_qw${Q_WARMUP}_h${HIDDEN}_e${EPOCHS}${ema_tag}_s${seed}.json"
+}
+
+run_cell() {
+ local view="$1"
+ local seed="$2"
+ local out
+ out="$(result_path "${view}" "${seed}")"
+ if [[ -f "${out}" ]]; then
+ echo "[skip] ${out}"
+ return
+ fi
+
+ echo "[run] ${TASK} view=${view} compute=rrog-act mode=${ACT_TRAIN_MODE} T=${T} ns=${N_SUP} seed=${seed} device=${DEVICE}"
+ cmd=(
+ python3 -m rrog.cli run
+ --task "${TASK}"
+ --view "${view}"
+ --compute rrog-act
+ --epochs "${EPOCHS}"
+ --hidden "${HIDDEN}"
+ --bs "${BS}"
+ --T "${T}"
+ --n_sup "${N_SUP}"
+ --halt_max_steps "${HALT_MAX}"
+ --halt_min_steps "${HALT_MIN}"
+ --halt_target "${HALT_TARGET}"
+ --halt_loss_threshold "${HALT_LOSS_THRESHOLD}"
+ --halt_exploration_prob "${HALT_EXPLORATION_PROB}"
+ --lam_q "${LAM_Q}"
+ --q_warmup_epochs "${Q_WARMUP}"
+ --act_train_mode "${ACT_TRAIN_MODE}"
+ --eval_every "${EVAL_EVERY}"
+ --num_workers "${NUM_WORKERS}"
+ --seed "${seed}"
+ --device "${DEVICE}"
+ )
+ if [[ -n "${LR}" ]]; then
+ cmd+=(--lr "${LR}")
+ fi
+ if [[ "$(fmt_float "${EMA}")" != "0" ]]; then
+ cmd+=(--ema "${EMA}")
+ fi
+ if [[ -n "${MAX_TRAIN_BATCHES}" ]]; then
+ cmd+=(--max_train_batches "${MAX_TRAIN_BATCHES}")
+ fi
+ if [[ -n "${MAX_EVAL_BATCHES}" ]]; then
+ cmd+=(--max_eval_batches "${MAX_EVAL_BATCHES}")
+ fi
+ "${cmd[@]}"
+}
+
+for seed in ${SEEDS}; do
+ for view in ${VIEWS}; do
+ run_cell "${view}" "${seed}"
+ done
+done
+
+if [[ "${COLLECT}" == "1" ]]; then
+ python3 -m rrog.cli results --epochs "${EPOCHS}" | tee "summaries/ogb_graphprop_act_${TASK}_e${EPOCHS}.md"
+fi
diff --git a/scripts/run_ogb_act_two_gpu.sh b/scripts/run_ogb_act_two_gpu.sh
new file mode 100755
index 0000000..3c31176
--- /dev/null
+++ b/scripts/run_ogb_act_two_gpu.sh
@@ -0,0 +1,87 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+cd "${ROOT_DIR}"
+export PYTHONPATH="${ROOT_DIR}:${PYTHONPATH:-}"
+
+GPU0="${GPU0:-cuda:0}"
+GPU1="${GPU1:-cuda:1}"
+TASKS_GPU0="${TASKS_GPU0:-ogbg-molhiv ogbg-molbbbp ogbg-molsider ogbg-molbace}"
+TASKS_GPU1="${TASKS_GPU1:-ogbg-molesol ogbg-mollipo ogbg-moltox21 ogbg-molclintox}"
+EPOCHS="${EPOCHS:-100}"
+SEEDS="${SEEDS:-${SEED:-0}}"
+HALT_MAX="${HALT_MAX:-8}"
+HALT_MIN="${HALT_MIN:-2}"
+HALT_TARGET="${HALT_TARGET:-loss}"
+HALT_LOSS_THRESHOLD="${HALT_LOSS_THRESHOLD:-0.2}"
+HALT_EXPLORATION_PROB="${HALT_EXPLORATION_PROB:-0.1}"
+LAM_Q="${LAM_Q:-0.1}"
+Q_WARMUP="${Q_WARMUP:-0}"
+ACT_TRAIN_MODE="${ACT_TRAIN_MODE:-stream}"
+
+mkdir -p logs summaries
+
+fmt_float() {
+ python3 - "$1" <<'PY'
+import sys
+print(f"{float(sys.argv[1]):g}")
+PY
+}
+
+target_log_tag() {
+ local target_tag="${HALT_TARGET}"
+ if [[ "${HALT_TARGET}" == "loss" ]]; then
+ target_tag="loss$(fmt_float "${HALT_LOSS_THRESHOLD}")"
+ fi
+ echo "${ACT_TRAIN_MODE}_hm${HALT_MAX}_hmin${HALT_MIN}_${target_tag}_lq$(fmt_float "${LAM_Q}")_hex$(fmt_float "${HALT_EXPLORATION_PROB}")_qw${Q_WARMUP}_e${EPOCHS}_s${SEEDS// /-}"
+}
+
+run_queue() {
+ local device="$1"
+ shift
+ local tasks=("$@")
+ local task
+ local tag
+ tag="$(target_log_tag)"
+ for task in "${tasks[@]}"; do
+ if [[ -z "${task}" ]]; then
+ continue
+ fi
+ echo "[task] ${task} on ${device}"
+ TASK="${task}" DEVICE="${device}" EPOCHS="${EPOCHS}" SEEDS="${SEEDS}" \
+ HALT_MAX="${HALT_MAX}" HALT_MIN="${HALT_MIN}" HALT_TARGET="${HALT_TARGET}" \
+ HALT_LOSS_THRESHOLD="${HALT_LOSS_THRESHOLD}" HALT_EXPLORATION_PROB="${HALT_EXPLORATION_PROB}" \
+ LAM_Q="${LAM_Q}" Q_WARMUP="${Q_WARMUP}" \
+ ACT_TRAIN_MODE="${ACT_TRAIN_MODE}" COLLECT=0 \
+ ./scripts/run_ogb_act_task.sh 2>&1 | tee "logs/${task}_act_${tag}.log"
+ done
+}
+
+tasks0=()
+tasks1=()
+if [[ -n "${TASKS_GPU0}" ]]; then
+ read -r -a tasks0 <<< "${TASKS_GPU0}"
+fi
+if [[ -n "${TASKS_GPU1}" ]]; then
+ read -r -a tasks1 <<< "${TASKS_GPU1}"
+fi
+
+pids=()
+if (( ${#tasks0[@]} > 0 )); then
+ echo "[launch] ${GPU0}: ${tasks0[*]}"
+ run_queue "${GPU0}" "${tasks0[@]}" &
+ pids+=("$!")
+fi
+if (( ${#tasks1[@]} > 0 )); then
+ echo "[launch] ${GPU1}: ${tasks1[*]}"
+ run_queue "${GPU1}" "${tasks1[@]}" &
+ pids+=("$!")
+fi
+
+for pid in "${pids[@]}"; do
+ wait "${pid}"
+done
+
+echo "[done] collecting summaries"
+OGB_EPOCHS="${EPOCHS}" ./scripts/collect_results.sh