Upload folder using huggingface_hub
Browse files- README.md +2 -0
- scripts/autoresume.sh +11 -10
- scripts/launch.sh +19 -15
- 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 |
-
# โ
|
| 7 |
set -u
|
| 8 |
-
P=/
|
|
|
|
|
|
|
| 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 |
-
|
| 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
|
| 20 |
}
|
| 21 |
|
| 22 |
-
echo "[autoresume-run] watching $OUT (host
|
| 23 |
while true; do
|
| 24 |
[ -f "$DONE" ] && { echo "DONE: ์์ฃผ (training_345000)"; exit 0; }
|
| 25 |
-
if grep -qiE "NaN detected" "$
|
| 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" "$
|
| 33 |
retry=$((retry+1))
|
| 34 |
if [ "$retry" -gt "$MAX" ]; then echo "GIVEUP: ์๋์ฌ๊ฐ $MAXํ ์ด๊ณผ โ ์๋ ๊ฐ์
"; exit 3; fi
|
| 35 |
-
lastit=$(grep -E "helpers.py:110] Training" "$
|
| 36 |
echo "[autoresume-run] CRASH detected at $lastit โ auto-resume #$retry/$MAX"
|
| 37 |
-
for n in $
|
| 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 |
-
#
|
| 3 |
-
#
|
|
|
|
|
|
|
| 4 |
# ์ฌ์ฉ: scripts/launch.sh <rdzv_id> <config_abspath> <outdir> <logdir> [extra train.py args...]
|
| 5 |
set -u
|
| 6 |
-
R=/
|
| 7 |
RDZV="$1"; CFG="$2"; OUTDIR="$3"; LOGDIR="$4"; shift 4
|
| 8 |
EXTRA="$*"
|
| 9 |
-
HOST="
|
| 10 |
-
EP="10.
|
| 11 |
-
WORKERS="
|
|
|
|
| 12 |
PYC="\$HOME/.cache/op_pyc_$RDZV" # ๋
ธ๋-๋ก์ปฌ. ์๊ฒฉ ์
ธ์์ ํ์ฅ๋๋๋ก escape
|
| 13 |
-
|
| 14 |
-
|
|
|
|
| 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=
|
| 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)
|
| 24 |
-
echo "launching
|
| 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
|
| 29 |
sleep 30
|
| 30 |
-
echo "firing
|
| 31 |
|
| 32 |
-
# 3)
|
| 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:
|
|
|
|
| 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 |
-
#
|
| 3 |
-
#
|
| 4 |
# per-exp embed ๋ถ๋ฆฌ(/dev/shm/hest_emb_<N>), pkill ๋ฏธํฌํจ(self-kill ํํผ).
|
| 5 |
set -u
|
| 6 |
-
R=/
|
| 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๋ฅผ
|
| 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 (
|
| 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
|