KyleBae1017 commited on
Commit
d1a6f35
ยท
verified ยท
1 Parent(s): 179feb1

Add run_decay_only.sh (decay-only from pretrain branch ckpts)

Browse files
Files changed (1) hide show
  1. 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"