60 lines
1.8 KiB
Bash
60 lines
1.8 KiB
Bash
#!/usr/bin/env bash
|
|
set -ex
|
|
|
|
# 현재 실행 시작 시 타임스탬프 저장
|
|
START_TIME=$(date +%s)
|
|
|
|
# ----- RDMA/IB 강제 -----
|
|
export NCCL_DEBUG=INFO
|
|
export NCCL_DEBUG_SUBSYS=INIT,NET,IB
|
|
#export NCCL_NET=IB
|
|
#export NCCL_IB_DISABLE=0
|
|
export NCCL_SOCKET_IFNAME="net"
|
|
#export NCCL_IB_HCA="=mlx5_6,mlx5_7,mlx5_8,mlx5_9,mlx5_0"
|
|
export NCCL_IB_HCA="=error"
|
|
#export NCCL_IB_HCA="mlx5_0,mlx5_1,mlx5_2,mlx5_8,mlx5_9,mlx5_5,mlx5_6,mlx5_7"
|
|
#export NCCL_NET_GDR_LEVEL=2
|
|
# (RoCE 환경에 따라 필요 시) export NCCL_IB_GID_INDEX=3
|
|
|
|
# 프로세스별 로그 파일 경로 (노드/프로세스마다 별도 파일)
|
|
export NCCL_DEBUG_FILE="/tmp/nccl-%h-%p.log"
|
|
#export CUDA_VISIBLE_DEVICES="1,2,3,4,5,6,7"
|
|
|
|
# ----- 학습 실행 (각 파드가 1개 프로세스씩 구동) -----
|
|
#echo "[RUN] RANK=$RANK on $(hostname)"
|
|
torchrun \
|
|
--nnodes=2 \
|
|
--nproc_per_node=8 \
|
|
--rdzv_backend=c10d \
|
|
--node_rank=0 \
|
|
--rdzv_endpoint=nccl-0.nccl:23456 \
|
|
/workspace/train_nccl.py 2>&1 | tee /tmp/nccl-aggregate.log
|
|
|
|
# ----- RDMA 사용 여부 집계 -----
|
|
|
|
# 새로 생성된 로그 목록 가져오기: START_TIME 이후 생성된 파일만
|
|
#new_logs=$(find /tmp -name "nccl-nccl-*.log" -type f -newermt "@${START_TIME}")
|
|
#
|
|
#total=0; ok=0
|
|
#for f in $new_logs; do
|
|
# [[ -f "$f" ]] || continue
|
|
# total=$((total+1))
|
|
# if rdma_line=$(grep -E "Channel .*GDRDMA" "$f"); then
|
|
# echo "[OK] RDMA: $rdma_line"
|
|
# ok=$((ok+1))
|
|
# fi
|
|
#done
|
|
#echo "[RDMA-CHECK] used IB on $ok / $total local ranks (processes) in $(hostname)"
|
|
#
|
|
## 모든 랭크가 IB를 썼는지(파드 단위) 판단: 로컬 프로세스 수와 비교
|
|
#if [[ "$ok" -eq 8 ]]; then
|
|
# echo "[RDMA-CHECK] ✅ RDMA path OK for all local GPUs"
|
|
# exit 0
|
|
#else
|
|
# echo "[RDMA-CHECK] ❌ RDMA path NOT used by all local GPUs"
|
|
# echo "---- NCCL NET/IB related lines ----"
|
|
# grep -h "NET/" /tmp/nccl-*.log || true
|
|
# exit 1
|
|
#fi
|
|
|