diff options
Diffstat (limited to 'scripts')
| -rwxr-xr-x | scripts/run_ogb_act_task.sh | 119 | ||||
| -rwxr-xr-x | scripts/run_ogb_act_two_gpu.sh | 87 |
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 |
