File size: 2,628 Bytes
4f91c02 5fe2fc4 4f91c02 5fe2fc4 4f91c02 5fe2fc4 4f91c02 5fe2fc4 4f91c02 62a0e4e 5fe2fc4 4f91c02 62a0e4e 4f91c02 5fe2fc4 4f91c02 5fe2fc4 4f91c02 5fe2fc4 4f91c02 5fe2fc4 4f91c02 5fe2fc4 | 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 | #!/usr/bin/env bash
# Multi-node training launcher (FSDP). Master + workers, 8 GPU/node.
# Configure your cluster via env: MASTER_NODE (host), WORKER_NODES, MASTER_ADDR (host IB/high-speed IP),
# and the NCCL_* / IFNAME settings below (cluster-specific โ adjust to your fabric).
# Run from an orchestrator node; the master is launched remotely over ssh (no local training process).
# ์ฌ์ฉ: scripts/launch.sh <rdzv_id> <config_abspath> <outdir> <logdir> [extra train.py args...]
set -u
R="${OPENPATH_ROOT:-$(cd "$(dirname "$0")/.." && pwd)}"
RDZV="$1"; CFG="$2"; OUTDIR="$3"; LOGDIR="$4"; shift 4
EXTRA="$*"
HOST="${MASTER_NODE:-node1}" # master node hostname
EP="${MASTER_ADDR:-10.0.0.1}:29500" # master node IB/high-speed IP (rendezvous rank0)
WORKERS="${WORKER_NODES:-node2 node3 node4 node5}"
NNODES=$(( 1 + $(echo "$WORKERS" | wc -w) )) # host + workers
PYC="\$HOME/.cache/op_pyc_$RDZV" # ๋
ธ๋-๋ก์ปฌ. ์๊ฒฉ ์
ธ์์ ํ์ฅ๋๋๋ก escape
# โ
NCCL/๋คํธ์ํฌ๋ ํด๋ฌ์คํฐ ํน์ โ ์์ ์ IB HCA/์ธํฐํ์ด์ค๋ก ๊ต์ฒด:
ENV="WANDB_MODE=disabled NCCL_DEBUG=WARN NCCL_IB_HCA=${NCCL_IB_HCA:-mlx5_0} \
NCCL_SOCKET_IFNAME=${NCCL_SOCKET_IFNAME:-eth0} GLOO_SOCKET_IFNAME=${GLOO_SOCKET_IFNAME:-eth0} \
NCCL_IB_TIMEOUT=22 NCCL_IB_RETRY_CNT=13 NCCL_IB_QPS_PER_CONNECTION=4 \
PYTHONDONTWRITEBYTECODE=1 PYTHONPYCACHEPREFIX=$PYC PYTHONPATH=$R/OpenPath"
TR="venv/bin/torchrun --nnodes=$NNODES --nproc-per-node=8 --rdzv-backend=c10d \
--rdzv-endpoint=$EP --rdzv-id=$RDZV \
OpenPath/dinov2/train/train.py --config-file $CFG --output-dir $OUTDIR $EXTRA"
mkdir -p "$LOGDIR" "$OUTDIR"
# 1) launch master remotely โ โ
ssh๋ฅผ &๋ก ๋ฐฑ๊ทธ๋ผ์ด๋(์ ๊ทธ๋ฌ๋ฉด ์๊ฒฉ setsid์ ์์ fd๋ฅผ ๋ฌผ๊ณ ssh๊ฐ ๋ฐํ ์ ํจ=๋ฐ์ฒ ํ)
echo "launching master on $HOST ..."
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" &
# 2) host torchrun๊ฐ store ๋ฐ์ธ๋ฉํ ์๊ฐ(๊ณ ์ ๋๊ธฐ). c10d๋ ์์ปค๊ฐ ์ฌ์๋๋ก ๋ถ์ผ๋ฏ๋ก ssํด๋ง ๋ถํ์.
echo "waiting 30s for master store bind on $EP ..."
sleep 30
echo "firing workers"
# 3) launch workers in parallel
for n in $WORKERS; do
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" &
done
# โ
wait ๋์ ๊ณ ์ sleep โ bg ssh๊ฐ ์๊ฒฉ setsid์ fd๋ฅผ ๋ฌผ์ด ๋ฐํ ์ ํ ์ ์์ด wait๋ ์์ํ ๋ฉ์ถค(autoresume blocking ํธ์ถ๋ ๋งํ).
sleep 20
echo "ALL launched: master $HOST + workers $WORKERS | rdzv=$RDZV | logs=$LOGDIR | out=$OUTDIR"
|