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