Add run_decay_only.sh (decay-only from pretrain branch ckpts)
Browse files- run_decay_only.sh +132 -0
run_decay_only.sh
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env bash
|
| 2 |
+
set -euo pipefail
|
| 3 |
+
|
| 4 |
+
# ============================================================================
|
| 5 |
+
# [Decay-only] ์ ํํ Stage1 branch ์ฒดํฌํฌ์ธํธ๋ก๋ถํฐ *decay(annealing)๋ง* ์ํ.
|
| 6 |
+
# (run_stage2_3_from_ckpt.sh ์ (1) decay ๋จ๊ณ๋ง ๋ผ์ด๋ธ ๊ฒ. stage2/3 ๋ ํ์ง ์์.)
|
| 7 |
+
#
|
| 8 |
+
# - SETTINGS : run_stage1_sweep.sh ์์ ์ด ๊ฒ๊ณผ ๋์ผํ (hidden-depth-heads) ์ธํธ.
|
| 9 |
+
# - EPOCHS : ๋ชฉํ stage1 "์ด budget"(decay ํฌํจ) epoch ๋ค. SAVE_EVERY ์ ๋ฐฐ์์ฌ์ผ
|
| 10 |
+
# stage1 ์์ ์ ์ฅ๋ branch ์ฒดํฌํฌ์ธํธ์ ์ ํํ ๋ง์ต๋๋ค.
|
| 11 |
+
#
|
| 12 |
+
# ๊ฐ (setting, budget) ์กฐํฉ๋ง๋ค:
|
| 13 |
+
# branch ckpt(= interval_epoch_BRANCH_EP.ckpt) ์ ๊ฐ์ค์น์์ ์์ํด
|
| 14 |
+
# LR ์ DECAY_LR -> DECAY_ETA_MIN ์ผ๋ก DECAY_EPOCHS ๋งํผ decay ํฉ๋๋ค.
|
| 15 |
+
#
|
| 16 |
+
# โป decay ๊ธธ์ด๋ *๋น์จ ๊ธฐ๋ฐ*(stage1 ์ branch ์ ์ฅ๊ณผ ๋์ผ ๊ณต์):
|
| 17 |
+
# DECAY_EPOCHS(E) = ceil(max(DECAY_RATIO*E, MIN_DECAY_EPOCHS))
|
| 18 |
+
# BRANCH_EP(E) = E - DECAY_EPOCHS(E)
|
| 19 |
+
# ์ด budget E = BRANCH_EP stable + DECAY_EPOCHS decay (๊ธธ์ด E ๋จ์ผ WSD run ๊ณผ ๋ฑ๊ฐ).
|
| 20 |
+
# โ ๏ธ DECAY_RATIO / MIN_DECAY_EPOCHS ๋ run_stage1_sweep.sh ์ *๋ฐ๋์ ๋์ผ*ํด์ผ
|
| 21 |
+
# BRANCH_EP ๊ฐ stage1 ์ด ์ ์ฅํ branch epoch ๊ณผ ์ผ์นํฉ๋๋ค.
|
| 22 |
+
#
|
| 23 |
+
# โป ์ถ๋ ฅ ๊ฒฝ๋ก/์ด๋ฆ์ run_stage2_3_from_ckpt.sh ์ decay ๋จ๊ณ์ ๋์ผํ๊ฒ ๋ง์ถฐ์,
|
| 24 |
+
# ์ํ๋ฉด ๋์ค์ ๊ทธ ์คํฌ๋ฆฝํธ๋ก stage2/3 ๋ง ์ด์ด์ ๋๋ฆด ์ ์์ต๋๋ค
|
| 25 |
+
# (๊ทธ ๊ฒฝ์ฐ decay ๋ last.ckpt ์๋ resume ์ผ๋ก ์ฆ์ ํต๊ณผ).
|
| 26 |
+
# ============================================================================
|
| 27 |
+
|
| 28 |
+
CMD="python train.py"
|
| 29 |
+
CFG_DECAY="/workspace/stormer/configs/decay_finetune.yaml"
|
| 30 |
+
DATA_ROOT="/workspace/stormer/wb2_h5df"
|
| 31 |
+
|
| 32 |
+
S1_RESULTS_ROOT="/workspace/stormer/results/pretrain"
|
| 33 |
+
DECAY_RESULTS_ROOT="/workspace/stormer/results/decay"
|
| 34 |
+
|
| 35 |
+
# ---- stage1 ๊ณผ ๋์ผํ (hidden-depth-heads) ์ธํธ ----
|
| 36 |
+
SETTINGS=(
|
| 37 |
+
"128-24-2"
|
| 38 |
+
)
|
| 39 |
+
|
| 40 |
+
# ---- โญ ๋ชฉํ stage1 "์ด budget"(decay ํฌํจ) epoch ๋ค (SAVE_EVERY ๋ฐฐ์) ----
|
| 41 |
+
EPOCHS=(20 40 80 100)
|
| 42 |
+
|
| 43 |
+
PATCH_SIZE=4
|
| 44 |
+
BATCH_SIZE=1
|
| 45 |
+
|
| 46 |
+
# ---- decay(annealing) ์ค์ ----
|
| 47 |
+
# โ ๏ธ DECAY_RATIO / MIN_DECAY_EPOCHS ๋ run_stage1_sweep.sh ์ ๋์ผํ๊ฒ!
|
| 48 |
+
DECAY_RATIO=0.1 # decay ๊ธธ์ด ๋น์จ (budget ๋๋น)
|
| 49 |
+
MIN_DECAY_EPOCHS=1 # decay ์ต์ ๊ธธ์ด(epoch)
|
| 50 |
+
DECAY_LR=5e-4 # decay ์์ LR = stage1 ์ stable LR ๊ณผ ๋์ผํ๊ฒ
|
| 51 |
+
DECAY_TYPE=sqrt # cosine | linear | sqrt
|
| 52 |
+
DECAY_ETA_MIN=1e-8 # decay ๋์ฐฉ LR
|
| 53 |
+
|
| 54 |
+
# DECAY_EPOCHS(E) = ceil(max(DECAY_RATIO*E, MIN_DECAY_EPOCHS)) (stage1 branch ๊ณต์๊ณผ ๋์ผ)
|
| 55 |
+
decay_len () {
|
| 56 |
+
awk -v e="$1" -v r="${DECAY_RATIO}" -v mn="${MIN_DECAY_EPOCHS}" \
|
| 57 |
+
'BEGIN{ d=r*e; if(d<mn) d=mn; c=int(d); if(c < d-1e-9) c++; print c }'
|
| 58 |
+
}
|
| 59 |
+
|
| 60 |
+
# stage1 branch ์ฒดํฌํฌ์ธํธ๋ฅผ epoch(=ํ์ตํ epoch ์, 1-index) ์ผ๋ก๋ถํฐ ์ฐพ๋๋ค
|
| 61 |
+
resolve_s1_ckpt () {
|
| 62 |
+
local ckpt_dir="$1"; local epoch="$2"
|
| 63 |
+
local c="${ckpt_dir}/interval_epoch_$(printf '%03d' "${epoch}").ckpt"
|
| 64 |
+
if [ -f "${c}" ]; then echo "${c}"; return 0; fi
|
| 65 |
+
{
|
| 66 |
+
echo "ERROR: stage1 branch epoch '${epoch}' ์ฒดํฌํฌ์ธํธ๋ฅผ ${ckpt_dir} ์์ ๋ชป ์ฐพ์."
|
| 67 |
+
echo " (DECAY_RATIO/MIN_DECAY_EPOCHS ๊ฐ run_stage1_sweep.sh ์ ๊ฐ์์ง, EPOCHS ๊ฐ SAVE_EVERY ๋ฐฐ์์ธ์ง ํ์ธ)"
|
| 68 |
+
echo "์ฌ์ฉ ๊ฐ๋ฅํ branch ์ฒดํฌํฌ์ธํธ:"
|
| 69 |
+
ls -1 "${ckpt_dir}"/interval_epoch_*.ckpt 2>/dev/null || echo " (์์ - stage1 ์ ๋จผ์ ๋๋ ธ๋์ง ํ์ธ)"
|
| 70 |
+
} >&2
|
| 71 |
+
return 1
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
for setting in "${SETTINGS[@]}"; do
|
| 75 |
+
IFS="-" read -r h d nh <<< "${setting}"
|
| 76 |
+
RUN_ID="h${h}_d${d}_n${nh}"
|
| 77 |
+
S1_NAME="pretrain_one_step_${RUN_ID}"
|
| 78 |
+
S1_CKPT_DIR="${S1_RESULTS_ROOT}/${RUN_ID}/${S1_NAME}/checkpoints"
|
| 79 |
+
|
| 80 |
+
# ์ํคํ
์ฒ๋ stage1 ์ฒดํฌํฌ์ธํธ์ ๋ฐ๋์ ๋์ผํด์ผ ํ๋ฏ๋ก ๋ชจ๋ ํธ์ถ์ ๋์ผํ๊ฒ ์ ๋ฌ
|
| 81 |
+
ARCH_ARGS=(
|
| 82 |
+
--model.net.init_args.hidden_size "${h}"
|
| 83 |
+
--model.net.init_args.depth "${d}"
|
| 84 |
+
--model.net.init_args.num_heads "${nh}"
|
| 85 |
+
--model.net.patch_size "${PATCH_SIZE}"
|
| 86 |
+
)
|
| 87 |
+
|
| 88 |
+
for EP in "${EPOCHS[@]}"; do
|
| 89 |
+
# ์ด budget E ์์ ๋น์จ decay ๋ฅผ carve-out: stable ์ (E - DECAY_EPOCHS) ์์ branch.
|
| 90 |
+
DECAY_EPOCHS="$(decay_len "${EP}")"
|
| 91 |
+
BRANCH_EP=$((EP - DECAY_EPOCHS))
|
| 92 |
+
if [ "${BRANCH_EP}" -le 0 ]; then
|
| 93 |
+
echo "SKIP: EP=${EP} <= DECAY_EPOCHS=${DECAY_EPOCHS} ๋ผ branch ์ง์ (${BRANCH_EP})์ด ์ ํจํ์ง ์์." >&2
|
| 94 |
+
continue
|
| 95 |
+
fi
|
| 96 |
+
|
| 97 |
+
TAG="${RUN_ID}_ep${BRANCH_EP}_d${DECAY_EPOCHS}" # ๋ผ๋ฒจ: stable branch epoch + decay ๊ธธ์ด
|
| 98 |
+
echo "############################################################"
|
| 99 |
+
echo "# ${TAG} : decay only"
|
| 100 |
+
echo "# ๋ชฉํ ์ด budget=${EP}ep = stable@${BRANCH_EP}ep + decay ${DECAY_EPOCHS}ep"
|
| 101 |
+
echo "# decay: ${DECAY_TYPE}, lr ${DECAY_LR} -> ${DECAY_ETA_MIN}"
|
| 102 |
+
echo "############################################################"
|
| 103 |
+
|
| 104 |
+
S1_CKPT="$(resolve_s1_ckpt "${S1_CKPT_DIR}" "${BRANCH_EP}")" || exit 1
|
| 105 |
+
echo " [ckpt] stage1 branch @ ${BRANCH_EP}ep : ${S1_CKPT}"
|
| 106 |
+
|
| 107 |
+
##########################################################
|
| 108 |
+
# DECAY (annealing) : stage1 ckpt -> lr decay -> eta_min
|
| 109 |
+
##########################################################
|
| 110 |
+
DECAY_NAME="decay_${TAG}"
|
| 111 |
+
DECAY_ROOT="${DECAY_RESULTS_ROOT}/${DECAY_NAME}"
|
| 112 |
+
echo " --- DECAY (${DECAY_EPOCHS} ep, ${DECAY_TYPE}, lr ${DECAY_LR} -> ${DECAY_ETA_MIN}) ---"
|
| 113 |
+
${CMD} \
|
| 114 |
+
--config "${CFG_DECAY}" \
|
| 115 |
+
--trainer.max_epochs "${DECAY_EPOCHS}" \
|
| 116 |
+
--trainer.default_root_dir "${DECAY_ROOT}" \
|
| 117 |
+
--trainer.logger.init_args.name "${DECAY_NAME}" \
|
| 118 |
+
--model.max_epochs "${DECAY_EPOCHS}" \
|
| 119 |
+
--model.lr "${DECAY_LR}" \
|
| 120 |
+
--model.eta_min "${DECAY_ETA_MIN}" \
|
| 121 |
+
--model.decay_type "${DECAY_TYPE}" \
|
| 122 |
+
--model.pretrained_path "${S1_CKPT}" \
|
| 123 |
+
"${ARCH_ARGS[@]}" \
|
| 124 |
+
--data.root_dir "${DATA_ROOT}" \
|
| 125 |
+
--data.steps 1 \
|
| 126 |
+
--data.batch_size "${BATCH_SIZE}"
|
| 127 |
+
DECAY_CKPT="${DECAY_ROOT}/${DECAY_NAME}/checkpoints/last.ckpt"
|
| 128 |
+
echo " [done] ${TAG}: decayed ckpt -> ${DECAY_CKPT}"
|
| 129 |
+
done
|
| 130 |
+
done
|
| 131 |
+
|
| 132 |
+
echo "ALL DECAY-ONLY RUNS DONE"
|