File size: 2,396 Bytes
4f91c02 b9bd634 4f91c02 5fe2fc4 4f91c02 5fe2fc4 62a0e4e b9bd634 4f91c02 5fe2fc4 4f91c02 5fe2fc4 4f91c02 5fe2fc4 4f91c02 b9bd634 5fe2fc4 4f91c02 5fe2fc4 4f91c02 b9bd634 5fe2fc4 4f91c02 5fe2fc4 4f91c02 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #!/usr/bin/env bash
# OpenPath ํ์ต ํฌ๋์ ๋ด์ฑ ์๋ ์ฌ๊ฐ waiter. ์ค์ผ์คํธ๋ ์ดํฐ ๋
ธ๋์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ.
# - ์์ฃผ(training_345000) ๊ฐ์ง โ exit 0
# - NaN ๊ฐ์ง โ exit 2 (์ฌ๊ฐ ์ ํจ)
# - ํฌ๋์(์ ๋ฉธ, ์์ฃผ/NaN ์๋) โ ์ ๋
ธ๋ shm์ ๋ฆฌ ํ launch.sh๋ก resume(๊ฐ์ OUT=๋ง์ง๋ง ์ฒดํฌํฌ์ธํธ), ์ต๋ MAXํ
# โ
์ธํ๋ผ๋ env๋ก ์ค์ : MASTER_NODE(alive/NaN ์ฒดํฌ ๋์ = launch.sh์ host), TRAIN_NODES(์ ๋ฆฌ ๋์ ์ ๋
ธ๋).
set -u
P="${OPENPATH_ROOT:-$(cd "$(dirname "$0")/.." && pwd)}"
MASTER_NODE="${MASTER_NODE:-node1}" # launch.sh์ host ๋
ธ๋
TRAIN_NODES="${TRAIN_NODES:-node1 node2 node3 node4 node5}"
CFG=$P/OpenPath/dinov2/configs/train/openpath_vitg14.yaml
OUT=$P/data/runs/openpath_run
LOG=$P/data/runs/logs/openpath_run
DONE=$OUT/eval/training_345000/teacher_checkpoint.pth
HOSTLOG=$LOG/${MASTER_NODE}.log
MAX=40
retry=0
alive_count() {
timeout 12 ssh -o BatchMode=yes -o ConnectTimeout=8 "$MASTER_NODE" "ps -eo args 2>/dev/null | grep '[t]rain.py' | wc -l" 2>/dev/null || echo 1
}
echo "[autoresume-run] watching $OUT (host $MASTER_NODE, max $MAX auto-resumes)"
while true; do
[ -f "$DONE" ] && { echo "DONE: ์์ฃผ (training_345000)"; exit 0; }
if grep -qiE "NaN detected" "$HOSTLOG" 2>/dev/null; then echo "NAN: NaN ๊ฐ์ง โ ์๋์ฌ๊ฐ ์ค๋จ"; exit 2; fi
a=$(alive_count)
if [ "${a:-1}" = "0" ]; then
sleep 60
a2=$(alive_count)
if [ "${a2:-1}" = "0" ] && [ ! -f "$DONE" ]; then
grep -qiE "NaN detected" "$HOSTLOG" 2>/dev/null && { echo "NAN"; exit 2; }
retry=$((retry+1))
if [ "$retry" -gt "$MAX" ]; then echo "GIVEUP: ์๋์ฌ๊ฐ $MAXํ ์ด๊ณผ โ ์๋ ๊ฐ์
"; exit 3; fi
lastit=$(grep -E "helpers.py:110] Training" "$HOSTLOG" 2>/dev/null | tail -1 | grep -oE "\[ *[0-9]+/" | head -1)
echo "[autoresume-run] CRASH detected at $lastit โ auto-resume #$retry/$MAX"
for n in $TRAIN_NODES; do timeout 10 ssh -o BatchMode=yes "$n" "pkill -9 -f 'dinov2/train/train.py' 2>/dev/null; pkill -9 -f torchrun 2>/dev/null; rm -f /dev/shm/nccl* 2>/dev/null" 2>/dev/null; done
sleep 30
bash "$P/scripts/launch.sh" "openpathrunr${retry}" "$CFG" "$OUT" "$LOG" >/dev/null 2>&1
echo "[autoresume-run] relaunched (rdzv openpathrunr${retry}) โ resume from last checkpoint"
sleep 180
fi
fi
sleep 240
done
|