taejoon89 commited on
Commit
5fe2fc4
ยท
verified ยท
1 Parent(s): 1ca3ad9

Upload folder using huggingface_hub

Browse files
Files changed (4) hide show
  1. README.md +2 -0
  2. scripts/autoresume.sh +11 -10
  3. scripts/launch.sh +19 -15
  4. scripts/watch_eval.sh +5 -5
README.md CHANGED
@@ -95,6 +95,8 @@ global representation.
95
  export PYTHONPATH="$PWD/OpenPath"
96
  CFG=OpenPath/dinov2/configs/train/openpath_vitg14.yaml
97
  # edit CFG: train.sample_list_path (corpus glob), gram.ckpt (anchor checkpoint), MODEL.WEIGHTS (DINOv2 warm-start)
 
 
98
  bash scripts/launch.sh openpathrun "$CFG" <output_dir> <log_dir>
99
  # optionally run scripts/autoresume.sh (background) and scripts/watch_eval.sh (online HEST)
100
  ```
 
95
  export PYTHONPATH="$PWD/OpenPath"
96
  CFG=OpenPath/dinov2/configs/train/openpath_vitg14.yaml
97
  # edit CFG: train.sample_list_path (corpus glob), gram.ckpt (anchor checkpoint), MODEL.WEIGHTS (DINOv2 warm-start)
98
+ # set your cluster (see scripts/launch.sh header): MASTER_NODE, WORKER_NODES, MASTER_ADDR, NCCL_IB_HCA, *_SOCKET_IFNAME
99
+ export MASTER_NODE=node1 WORKER_NODES="node2 node3 node4 node5" MASTER_ADDR=<master-ib-ip>
100
  bash scripts/launch.sh openpathrun "$CFG" <output_dir> <log_dir>
101
  # optionally run scripts/autoresume.sh (background) and scripts/watch_eval.sh (online HEST)
102
  ```
scripts/autoresume.sh CHANGED
@@ -3,38 +3,39 @@
3
  # - ์™„์ฃผ(training_345000) ๊ฐ์ง€ โ†’ exit 0
4
  # - NaN ๊ฐ์ง€ โ†’ exit 2 (์žฌ๊ฐœ ์•ˆ ํ•จ)
5
  # - ํฌ๋ž˜์‹œ(์ „๋ฉธ, ์™„์ฃผ/NaN ์•„๋‹˜) โ†’ ์ „๋…ธ๋“œ shm์ •๋ฆฌ ํ›„ launch.sh๋กœ resume(๊ฐ™์€ OUT=๋งˆ์ง€๋ง‰ ์ฒดํฌํฌ์ธํŠธ), ์ตœ๋Œ€ MAXํšŒ
6
- # โ˜… host=TJ-2(alive/NaN ์ฒดํฌ๋„ TJ-2). TJ-1์€ ํ•™์Šต ์ œ์™ธ๋ผ ๋Œ€์ƒ ์•„๋‹˜.
7
  set -u
8
- P=/NHNHOME/WORKSPACE/0526040027_A/OpenPath
 
 
9
  CFG=$P/OpenPath/dinov2/configs/train/openpath_vitg14.yaml
10
  OUT=$P/data/runs/openpath_run
11
  LOG=$P/data/runs/logs/openpath_run
12
  DONE=$OUT/eval/training_345000/teacher_checkpoint.pth
13
- TJLOG=$LOG/TJ-2.log
14
- NODES="TJ-2 TJ-3 TJ-4 TJ-5 TJ-6"
15
  MAX=40
16
  retry=0
17
 
18
  alive_count() {
19
- timeout 12 ssh -o BatchMode=yes -o ConnectTimeout=8 TJ-2 "ps -eo args 2>/dev/null | grep '[t]rain.py' | wc -l" 2>/dev/null || echo 1
20
  }
21
 
22
- echo "[autoresume-run] watching $OUT (host TJ-2, max $MAX auto-resumes)"
23
  while true; do
24
  [ -f "$DONE" ] && { echo "DONE: ์™„์ฃผ (training_345000)"; exit 0; }
25
- if grep -qiE "NaN detected" "$TJLOG" 2>/dev/null; then echo "NAN: NaN ๊ฐ์ง€ โ€” ์ž๋™์žฌ๊ฐœ ์ค‘๋‹จ"; exit 2; fi
26
 
27
  a=$(alive_count)
28
  if [ "${a:-1}" = "0" ]; then
29
  sleep 60
30
  a2=$(alive_count)
31
  if [ "${a2:-1}" = "0" ] && [ ! -f "$DONE" ]; then
32
- grep -qiE "NaN detected" "$TJLOG" 2>/dev/null && { echo "NAN"; exit 2; }
33
  retry=$((retry+1))
34
  if [ "$retry" -gt "$MAX" ]; then echo "GIVEUP: ์ž๋™์žฌ๊ฐœ $MAXํšŒ ์ดˆ๊ณผ โ€” ์ˆ˜๋™ ๊ฐœ์ž…"; exit 3; fi
35
- lastit=$(grep -E "helpers.py:110] Training" "$TJLOG" 2>/dev/null | tail -1 | grep -oE "\[ *[0-9]+/" | head -1)
36
  echo "[autoresume-run] CRASH detected at $lastit โ€” auto-resume #$retry/$MAX"
37
- for n in $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
38
  sleep 30
39
  bash "$P/scripts/launch.sh" "openpathrunr${retry}" "$CFG" "$OUT" "$LOG" >/dev/null 2>&1
40
  echo "[autoresume-run] relaunched (rdzv openpathrunr${retry}) โ€” resume from last checkpoint"
 
3
  # - ์™„์ฃผ(training_345000) ๊ฐ์ง€ โ†’ exit 0
4
  # - NaN ๊ฐ์ง€ โ†’ exit 2 (์žฌ๊ฐœ ์•ˆ ํ•จ)
5
  # - ํฌ๋ž˜์‹œ(์ „๋ฉธ, ์™„์ฃผ/NaN ์•„๋‹˜) โ†’ ์ „๋…ธ๋“œ shm์ •๋ฆฌ ํ›„ launch.sh๋กœ resume(๊ฐ™์€ OUT=๋งˆ์ง€๋ง‰ ์ฒดํฌํฌ์ธํŠธ), ์ตœ๋Œ€ MAXํšŒ
6
+ # โ˜… ์ธํ”„๋ผ๋Š” env๋กœ ์„ค์ •: MASTER_NODE(alive/NaN ์ฒดํฌ ๋Œ€์ƒ = launch.sh์˜ host), TRAIN_NODES(์ •๋ฆฌ ๋Œ€์ƒ ์ „ ๋…ธ๋“œ).
7
  set -u
8
+ P="${OPENPATH_ROOT:-$(cd "$(dirname "$0")/.." && pwd)}"
9
+ MASTER_NODE="${MASTER_NODE:-node1}" # launch.sh์˜ host ๋…ธ๋“œ
10
+ TRAIN_NODES="${TRAIN_NODES:-node1 node2 node3 node4 node5}"
11
  CFG=$P/OpenPath/dinov2/configs/train/openpath_vitg14.yaml
12
  OUT=$P/data/runs/openpath_run
13
  LOG=$P/data/runs/logs/openpath_run
14
  DONE=$OUT/eval/training_345000/teacher_checkpoint.pth
15
+ HOSTLOG=$LOG/${MASTER_NODE}.log
 
16
  MAX=40
17
  retry=0
18
 
19
  alive_count() {
20
+ 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
21
  }
22
 
23
+ echo "[autoresume-run] watching $OUT (host $MASTER_NODE, max $MAX auto-resumes)"
24
  while true; do
25
  [ -f "$DONE" ] && { echo "DONE: ์™„์ฃผ (training_345000)"; exit 0; }
26
+ if grep -qiE "NaN detected" "$HOSTLOG" 2>/dev/null; then echo "NAN: NaN ๊ฐ์ง€ โ€” ์ž๋™์žฌ๊ฐœ ์ค‘๋‹จ"; exit 2; fi
27
 
28
  a=$(alive_count)
29
  if [ "${a:-1}" = "0" ]; then
30
  sleep 60
31
  a2=$(alive_count)
32
  if [ "${a2:-1}" = "0" ] && [ ! -f "$DONE" ]; then
33
+ grep -qiE "NaN detected" "$HOSTLOG" 2>/dev/null && { echo "NAN"; exit 2; }
34
  retry=$((retry+1))
35
  if [ "$retry" -gt "$MAX" ]; then echo "GIVEUP: ์ž๋™์žฌ๊ฐœ $MAXํšŒ ์ดˆ๊ณผ โ€” ์ˆ˜๋™ ๊ฐœ์ž…"; exit 3; fi
36
+ lastit=$(grep -E "helpers.py:110] Training" "$HOSTLOG" 2>/dev/null | tail -1 | grep -oE "\[ *[0-9]+/" | head -1)
37
  echo "[autoresume-run] CRASH detected at $lastit โ€” auto-resume #$retry/$MAX"
38
+ 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
39
  sleep 30
40
  bash "$P/scripts/launch.sh" "openpathrunr${retry}" "$CFG" "$OUT" "$LOG" >/dev/null 2>&1
41
  echo "[autoresume-run] relaunched (rdzv openpathrunr${retry}) โ€” resume from last checkpoint"
scripts/launch.sh CHANGED
@@ -1,38 +1,42 @@
1
  #!/usr/bin/env bash
2
- # run ํ•™์Šต ๋Ÿฐ์ฒ˜: TJ-2~6(5๋…ธ๋“œร—8=40 GPU) FSDP. host=TJ-2, ์›Œ์ปค=TJ-3~6. โ˜…TJ-1์€ ํ•™์Šต ์ œ์™ธ(eval watcher ์ „์šฉ).
3
- # TJ-1(์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ)์—์„œ ์‹คํ–‰ โ€” ๋กœ์ปฌ ํ•™์Šต ํ”„๋กœ์„ธ์Šค ์—†์Œ. host๋„ ์›๊ฒฉ(ssh TJ-2)์ด๋ผ ์ž๊ธฐ์ฐธ์กฐ ํ•จ์ • ์—†์Œ.
 
 
4
  # ์‚ฌ์šฉ: scripts/launch.sh <rdzv_id> <config_abspath> <outdir> <logdir> [extra train.py args...]
5
  set -u
6
- R=/NHNHOME/WORKSPACE/0526040027_A/OpenPath
7
  RDZV="$1"; CFG="$2"; OUTDIR="$3"; LOGDIR="$4"; shift 4
8
  EXTRA="$*"
9
- HOST="TJ-2"
10
- EP="10.34.15.21:29500" # TJ-2 IB IP (rendezvous rank0)
11
- WORKERS="TJ-3 TJ-4 TJ-5 TJ-6"
 
12
  PYC="\$HOME/.cache/op_pyc_$RDZV" # ๋…ธ๋“œ-๋กœ์ปฌ. ์›๊ฒฉ ์…ธ์—์„œ ํ™•์žฅ๋˜๋„๋ก escape
13
- ENV="WANDB_MODE=disabled NCCL_DEBUG=WARN NCCL_IB_HCA=mlx5_1,mlx5_2,mlx5_4,mlx5_9 \
14
- NCCL_SOCKET_IFNAME=bond0 GLOO_SOCKET_IFNAME=bond0 \
 
15
  NCCL_IB_TIMEOUT=22 NCCL_IB_RETRY_CNT=13 NCCL_IB_QPS_PER_CONNECTION=4 \
16
  PYTHONDONTWRITEBYTECODE=1 PYTHONPYCACHEPREFIX=$PYC PYTHONPATH=$R/OpenPath"
17
- TR="venv/bin/torchrun --nnodes=5 --nproc-per-node=8 --rdzv-backend=c10d \
18
  --rdzv-endpoint=$EP --rdzv-id=$RDZV \
19
  OpenPath/dinov2/train/train.py --config-file $CFG --output-dir $OUTDIR $EXTRA"
20
 
21
  mkdir -p "$LOGDIR" "$OUTDIR"
22
 
23
- # 1) host(TJ-2) ์›๊ฒฉ ๊ธฐ๋™ โ€” โ˜…ssh๋ฅผ &๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ(์•ˆ ๊ทธ๋Ÿฌ๋ฉด ์›๊ฒฉ setsid์˜ ์ƒ์† fd๋ฅผ ๋ฌผ๊ณ  ssh๊ฐ€ ๋ฐ˜ํ™˜ ์•ˆ ํ•จ=๋Ÿฐ์ฒ˜ ํ–‰)
24
- echo "launching host on $HOST ..."
25
  ssh -n -o BatchMode=yes "$HOST" "mkdir -p $PYC; cd $R && setsid env $ENV $TR > $LOGDIR/${HOST}.log 2>&1 < /dev/null & echo ${HOST}-host-fired" &
26
 
27
  # 2) host torchrun๊ฐ€ store ๋ฐ”์ธ๋”ฉํ•  ์‹œ๊ฐ„(๊ณ ์ • ๋Œ€๊ธฐ). c10d๋Š” ์›Œ์ปค๊ฐ€ ์žฌ์‹œ๋„๋กœ ๋ถ™์œผ๋ฏ€๋กœ ssํด๋ง ๋ถˆํ•„์š”.
28
- echo "waiting 30s for host store bind on $EP ..."
29
  sleep 30
30
- echo "firing 4 workers"
31
 
32
- # 3) ์›Œ์ปค(TJ-3~6) ๋ณ‘๋ ฌ ๊ธฐ๋™
33
  for n in $WORKERS; do
34
  ssh -n -o BatchMode=yes "$n" "mkdir -p $PYC; cd $R && setsid env $ENV $TR > $LOGDIR/${n}.log 2>&1 < /dev/null & echo ${n}-fired" &
35
  done
36
  # โ˜… wait ๋Œ€์‹  ๊ณ ์ • sleep โ€” bg ssh๊ฐ€ ์›๊ฒฉ setsid์˜ fd๋ฅผ ๋ฌผ์–ด ๋ฐ˜ํ™˜ ์•ˆ ํ•  ์ˆ˜ ์žˆ์–ด wait๋Š” ์˜์›ํžˆ ๋ฉˆ์ถค(autoresume blocking ํ˜ธ์ถœ๋„ ๋ง‰ํž˜).
37
  sleep 20
38
- echo "ALL launched: host $HOST + workers $WORKERS | rdzv=$RDZV | logs=$LOGDIR | out=$OUTDIR"
 
1
  #!/usr/bin/env bash
2
+ # Multi-node training launcher (FSDP). Master + workers, 8 GPU/node.
3
+ # Configure your cluster via env: MASTER_NODE (host), WORKER_NODES, MASTER_ADDR (host IB/high-speed IP),
4
+ # and the NCCL_* / IFNAME settings below (cluster-specific โ€” adjust to your fabric).
5
+ # Run from an orchestrator node; the master is launched remotely over ssh (no local training process).
6
  # ์‚ฌ์šฉ: scripts/launch.sh <rdzv_id> <config_abspath> <outdir> <logdir> [extra train.py args...]
7
  set -u
8
+ R="${OPENPATH_ROOT:-$(cd "$(dirname "$0")/.." && pwd)}"
9
  RDZV="$1"; CFG="$2"; OUTDIR="$3"; LOGDIR="$4"; shift 4
10
  EXTRA="$*"
11
+ HOST="${MASTER_NODE:-node1}" # master node hostname
12
+ EP="${MASTER_ADDR:-10.0.0.1}:29500" # master node IB/high-speed IP (rendezvous rank0)
13
+ WORKERS="${WORKER_NODES:-node2 node3 node4 node5}"
14
+ NNODES=$(( 1 + $(echo "$WORKERS" | wc -w) )) # host + workers
15
  PYC="\$HOME/.cache/op_pyc_$RDZV" # ๋…ธ๋“œ-๋กœ์ปฌ. ์›๊ฒฉ ์…ธ์—์„œ ํ™•์žฅ๋˜๋„๋ก escape
16
+ # โ˜… NCCL/๋„คํŠธ์›Œํฌ๋Š” ํด๋Ÿฌ์Šคํ„ฐ ํŠน์ • โ€” ์ž์‹ ์˜ IB HCA/์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ต์ฒด:
17
+ ENV="WANDB_MODE=disabled NCCL_DEBUG=WARN NCCL_IB_HCA=${NCCL_IB_HCA:-mlx5_0} \
18
+ NCCL_SOCKET_IFNAME=${NCCL_SOCKET_IFNAME:-eth0} GLOO_SOCKET_IFNAME=${GLOO_SOCKET_IFNAME:-eth0} \
19
  NCCL_IB_TIMEOUT=22 NCCL_IB_RETRY_CNT=13 NCCL_IB_QPS_PER_CONNECTION=4 \
20
  PYTHONDONTWRITEBYTECODE=1 PYTHONPYCACHEPREFIX=$PYC PYTHONPATH=$R/OpenPath"
21
+ TR="venv/bin/torchrun --nnodes=$NNODES --nproc-per-node=8 --rdzv-backend=c10d \
22
  --rdzv-endpoint=$EP --rdzv-id=$RDZV \
23
  OpenPath/dinov2/train/train.py --config-file $CFG --output-dir $OUTDIR $EXTRA"
24
 
25
  mkdir -p "$LOGDIR" "$OUTDIR"
26
 
27
+ # 1) launch master remotely โ€” โ˜…ssh๋ฅผ &๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ(์•ˆ ๊ทธ๋Ÿฌ๋ฉด ์›๊ฒฉ setsid์˜ ์ƒ์† fd๋ฅผ ๋ฌผ๊ณ  ssh๊ฐ€ ๋ฐ˜ํ™˜ ์•ˆ ํ•จ=๋Ÿฐ์ฒ˜ ํ–‰)
28
+ echo "launching master on $HOST ..."
29
  ssh -n -o BatchMode=yes "$HOST" "mkdir -p $PYC; cd $R && setsid env $ENV $TR > $LOGDIR/${HOST}.log 2>&1 < /dev/null & echo ${HOST}-host-fired" &
30
 
31
  # 2) host torchrun๊ฐ€ store ๋ฐ”์ธ๋”ฉํ•  ์‹œ๊ฐ„(๊ณ ์ • ๋Œ€๊ธฐ). c10d๋Š” ์›Œ์ปค๊ฐ€ ์žฌ์‹œ๋„๋กœ ๋ถ™์œผ๋ฏ€๋กœ ssํด๋ง ๋ถˆํ•„์š”.
32
+ echo "waiting 30s for master store bind on $EP ..."
33
  sleep 30
34
+ echo "firing workers"
35
 
36
+ # 3) launch workers in parallel
37
  for n in $WORKERS; do
38
  ssh -n -o BatchMode=yes "$n" "mkdir -p $PYC; cd $R && setsid env $ENV $TR > $LOGDIR/${n}.log 2>&1 < /dev/null & echo ${n}-fired" &
39
  done
40
  # โ˜… wait ๋Œ€์‹  ๊ณ ์ • sleep โ€” bg ssh๊ฐ€ ์›๊ฒฉ setsid์˜ fd๋ฅผ ๋ฌผ์–ด ๋ฐ˜ํ™˜ ์•ˆ ํ•  ์ˆ˜ ์žˆ์–ด wait๋Š” ์˜์›ํžˆ ๋ฉˆ์ถค(autoresume blocking ํ˜ธ์ถœ๋„ ๋ง‰ํž˜).
41
  sleep 20
42
+ echo "ALL launched: master $HOST + workers $WORKERS | rdzv=$RDZV | logs=$LOGDIR | out=$OUTDIR"
scripts/watch_eval.sh CHANGED
@@ -1,9 +1,9 @@
1
  #!/usr/bin/env bash
2
- # TJ-1 ์‹ค์‹œ๊ฐ„ HEST eval watcher. run ํ•™์Šต์ด ๋ฑ‰๋Š” teacher_checkpoint๋ฅผ ๊ฐ์ง€โ†’probeโ†’๊ณก์„  append.
3
- # TJ-1 ๋กœ์ปฌ ์‹คํ–‰(venv_hestยทGPU ๋กœ์ปฌ). 1๊ฐœ์”ฉ ์ˆœ์ฐจ(๋™์‹œ HDF5 ๋ฒ„๊ทธ ํšŒํ”ผ, ~60min<์ฒดํฌํฌ์ธํŠธ๊ฐ„๊ฒฉ ~84min๋ผ ํŽ˜์ด์Šค ์œ ์ง€).
4
  # per-exp embed ๋ถ„๋ฆฌ(/dev/shm/hest_emb_<N>), pkill ๋ฏธํฌํ•จ(self-kill ํšŒํ”ผ).
5
  set -u
6
- R=/NHNHOME/WORKSPACE/0526040027_A/OpenPath
7
  OUTDIR=$R/data/runs/openpath_run
8
  EVALDIR=$OUTDIR/eval
9
  RESDIR=$R/data/runs/hest_3way
@@ -12,12 +12,12 @@ BENCH=/dev/shm/hest_bench
12
  GPU=0
13
  mkdir -p "$RESDIR"
14
 
15
- # hest_bench๋ฅผ TJ-1 /dev/shm์— ํ™•๋ณด(์—†์œผ๋ฉด Lustre์„œ ๋ณต์‚ฌ, 40G)
16
  if [ ! -d "$BENCH" ] || [ "$(ls "$BENCH" 2>/dev/null | wc -l)" -lt 5 ]; then
17
  echo "[watch] copying hest_bench -> $BENCH (40G, ์ˆ˜๋ถ„) ..."
18
  rm -rf "$BENCH"; cp -r "$R/data/eva/hest_bench" "$BENCH"
19
  fi
20
- echo "[watch] START โ€” watching $EVALDIR (TJ-1 GPU$GPU, 1-at-a-time) | curve=$CURVE"
21
 
22
  cd "$R"
23
  while true; do
 
1
  #!/usr/bin/env bash
2
+ # HEST eval watcher (run on a node with a local GPU). ํ•™์Šต์ด ๋ฑ‰๋Š” teacher_checkpoint๋ฅผ ๊ฐ์ง€โ†’probeโ†’๊ณก์„  append.
3
+ # ๋กœ์ปฌ ์‹คํ–‰(venv_hestยทGPU ๋กœ์ปฌ). 1๊ฐœ์”ฉ ์ˆœ์ฐจ(๋™์‹œ HDF5 ๋ฒ„๊ทธ ํšŒํ”ผ, ~60min<์ฒดํฌํฌ์ธํŠธ๊ฐ„๊ฒฉ ~84min๋ผ ํŽ˜์ด์Šค ์œ ์ง€).
4
  # per-exp embed ๋ถ„๋ฆฌ(/dev/shm/hest_emb_<N>), pkill ๋ฏธํฌํ•จ(self-kill ํšŒํ”ผ).
5
  set -u
6
+ R="${OPENPATH_ROOT:-$(cd "$(dirname "$0")/.." && pwd)}"
7
  OUTDIR=$R/data/runs/openpath_run
8
  EVALDIR=$OUTDIR/eval
9
  RESDIR=$R/data/runs/hest_3way
 
12
  GPU=0
13
  mkdir -p "$RESDIR"
14
 
15
+ # hest_bench๋ฅผ ๋กœ์ปฌ /dev/shm์— ํ™•๋ณด(์—†์œผ๋ฉด Lustre์„œ ๋ณต์‚ฌ, 40G)
16
  if [ ! -d "$BENCH" ] || [ "$(ls "$BENCH" 2>/dev/null | wc -l)" -lt 5 ]; then
17
  echo "[watch] copying hest_bench -> $BENCH (40G, ์ˆ˜๋ถ„) ..."
18
  rm -rf "$BENCH"; cp -r "$R/data/eva/hest_bench" "$BENCH"
19
  fi
20
+ echo "[watch] START โ€” watching $EVALDIR (GPU$GPU, 1-at-a-time) | curve=$CURVE"
21
 
22
  cd "$R"
23
  while true; do