-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun.sh
More file actions
166 lines (151 loc) · 5.56 KB
/
Copy pathrun.sh
File metadata and controls
166 lines (151 loc) · 5.56 KB
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#!/usr/bin/env bash
# Start one benchmark process per node.
#
# Usage:
# On node0: bash run.sh rank0
# On node1: bash run.sh rank1
#
# Edit defaults here first.
# To run the GDR benchmark:
# BENCH_BIN=gdr_bench bash run.sh rank0
# BENCH_BIN=gdr_bench bash run.sh rank1
# To run the CUDA memcpy + NCCL send concurrent bandwidth benchmark:
# BENCH_BIN=cuda_nccl_bench bash run.sh rank0
# BENCH_BIN=cuda_nccl_bench bash run.sh rank1
# To run the NCCL issue-latency/bandwidth sweep:
# BENCH_BIN=nccl_latency_bench bash run.sh rank0
# BENCH_BIN=nccl_latency_bench bash run.sh rank1
DEFAULT_NODE0=
DEFAULT_NODE1=
DEFAULT_BENCH_BIN=cuda_bench
DEFAULT_NCCL_IB_HCA=mlx5_0
DEFAULT_BENCH_GPU_ID=0
DEFAULT_BENCH_BUF_KB=4
DEFAULT_BENCH_P2P_BUF_KB=4
DEFAULT_BENCH_CUDA_ITERS=100
DEFAULT_BENCH_CUDA_WARMUP=10
DEFAULT_BENCH_GDR_ITERS=100
DEFAULT_BENCH_GDR_WARMUP=10
DEFAULT_BENCH_NCCL_ITERS=100
DEFAULT_BENCH_NCCL_WARMUP=10
DEFAULT_BENCH_MASTER_PORT=29500
DEFAULT_NCCL_IB_GID_INDEX=3
DEFAULT_NCCL_DEBUG=WARN
DEFAULT_NCCL_DEBUG_SUBSYS=INIT,NET
DEFAULT_NCCL_NET_GDR_LEVEL=SYS
DEFAULT_BENCH_GDR_USE_ODP=0
set -euo pipefail
ROLE=${1:-}
if [[ -z "$ROLE" ]]; then
echo "Usage: bash run.sh rank0 | rank1"
exit 1
fi
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BUILD_DIR="${SCRIPT_DIR}/build"
BENCH_BIN=${BENCH_BIN:-$DEFAULT_BENCH_BIN}
case "$BENCH_BIN" in
cuda_bench|cuda_nccl_bench|gdr_bench|nccl_latency_bench)
;;
*)
echo "ERROR: BENCH_BIN must be cuda_bench, cuda_nccl_bench, gdr_bench, or nccl_latency_bench."
exit 1
;;
esac
BINARY="${BUILD_DIR}/${BENCH_BIN}"
NODE0=${NODE0:-$DEFAULT_NODE0}
NODE1=${NODE1:-$DEFAULT_NODE1}
export NCCL_IB_HCA=${NCCL_IB_HCA:-$DEFAULT_NCCL_IB_HCA}
export BENCH_GPU_ID=${BENCH_GPU_ID:-$DEFAULT_BENCH_GPU_ID}
if [[ -n "${BENCH_BUF_KB:-}" ]]; then
export BENCH_BUF_KB
elif [[ -n "${BENCH_BUF_GB:-}" ]]; then
export BENCH_BUF_GB
else
export BENCH_BUF_KB=$DEFAULT_BENCH_BUF_KB
fi
if [[ -n "${BENCH_P2P_BUF_KB:-}" ]]; then
export BENCH_P2P_BUF_KB
elif [[ -n "${BENCH_AG_BUF_KB:-}" ]]; then
export BENCH_P2P_BUF_KB=$BENCH_AG_BUF_KB
elif [[ -n "${BENCH_RS_BUF_KB:-}" ]]; then
export BENCH_P2P_BUF_KB=$BENCH_RS_BUF_KB
elif [[ -n "${BENCH_P2P_BUF_GB:-}" || -n "${BENCH_AG_BUF_GB:-}" || -n "${BENCH_RS_BUF_GB:-}" ]]; then
export BENCH_P2P_BUF_GB=${BENCH_P2P_BUF_GB:-${BENCH_AG_BUF_GB:-${BENCH_RS_BUF_GB:-}}}
else
export BENCH_P2P_BUF_KB=$DEFAULT_BENCH_P2P_BUF_KB
fi
export BENCH_CUDA_ITERS=${BENCH_CUDA_ITERS:-${BENCH_GDR_ITERS:-$DEFAULT_BENCH_CUDA_ITERS}}
export BENCH_CUDA_WARMUP=${BENCH_CUDA_WARMUP:-${BENCH_GDR_WARMUP:-$DEFAULT_BENCH_CUDA_WARMUP}}
export BENCH_GDR_ITERS=${BENCH_GDR_ITERS:-$DEFAULT_BENCH_GDR_ITERS}
export BENCH_GDR_WARMUP=${BENCH_GDR_WARMUP:-$DEFAULT_BENCH_GDR_WARMUP}
export BENCH_NCCL_ITERS=${BENCH_NCCL_ITERS:-$DEFAULT_BENCH_NCCL_ITERS}
export BENCH_NCCL_WARMUP=${BENCH_NCCL_WARMUP:-$DEFAULT_BENCH_NCCL_WARMUP}
export BENCH_ITERS=${BENCH_ITERS:-$BENCH_NCCL_ITERS}
export BENCH_WARMUP=${BENCH_WARMUP:-$BENCH_NCCL_WARMUP}
export BENCH_WORLD_SIZE=2
export BENCH_MASTER_ADDR=${BENCH_MASTER_ADDR:-$NODE0}
export BENCH_MASTER_PORT=${BENCH_MASTER_PORT:-$DEFAULT_BENCH_MASTER_PORT}
DEFAULT_GDR_NIC_FROM_HCA=${NCCL_IB_HCA%%,*}
DEFAULT_GDR_NIC_FROM_HCA=${DEFAULT_GDR_NIC_FROM_HCA%%:*}
export BENCH_GDR_NIC=${BENCH_GDR_NIC:-$DEFAULT_GDR_NIC_FROM_HCA}
export BENCH_GDR_USE_ODP=${BENCH_GDR_USE_ODP:-$DEFAULT_BENCH_GDR_USE_ODP}
# Force NCCL to use RDMA/IB only.
export NCCL_NET=IB
export NCCL_IB_DISABLE=0
export NCCL_NET_GDR_LEVEL=${NCCL_NET_GDR_LEVEL:-$DEFAULT_NCCL_NET_GDR_LEVEL}
export NCCL_P2P_DISABLE=0
export NCCL_IB_GID_INDEX=${NCCL_IB_GID_INDEX:-$DEFAULT_NCCL_IB_GID_INDEX}
export NCCL_DEBUG=${NCCL_DEBUG:-$DEFAULT_NCCL_DEBUG}
export NCCL_DEBUG_SUBSYS=${NCCL_DEBUG_SUBSYS:-$DEFAULT_NCCL_DEBUG_SUBSYS}
case "$ROLE" in
rank0|0)
export BENCH_RANK=0
LOCAL_NODE_IP=$NODE0
;;
rank1|1)
export BENCH_RANK=1
LOCAL_NODE_IP=$NODE1
;;
*)
echo "Usage: bash run.sh rank0 | rank1"
exit 1
;;
esac
if [[ ! -x "$BINARY" ]]; then
echo "[run.sh] ${BENCH_BIN} not found. Building first..."
make -C "$SCRIPT_DIR" "$BENCH_BIN"
fi
if [[ -z "$NODE0" || -z "$NODE1" ]]; then
echo "ERROR: NODE0/NODE1 is empty. Set defaults at the top of run.sh."
exit 1
fi
if ! ibv_devinfo -d "${NCCL_IB_HCA%%:*}" &>/dev/null; then
echo "ERROR: HCA '${NCCL_IB_HCA%%:*}' not found on this node."
echo " Run ibv_devinfo | grep hca_id to list available devices."
exit 1
fi
if [[ "$BENCH_BIN" == "gdr_bench" ]] && ! ibv_devinfo -d "${BENCH_GDR_NIC}" &>/dev/null; then
echo "ERROR: GDR NIC '${BENCH_GDR_NIC}' not found on this node."
echo " Set BENCH_GDR_NIC explicitly or check ibv_devinfo output."
exit 1
fi
echo "========================================================"
echo " Role : ${ROLE}"
echo " Binary : ${BENCH_BIN}"
echo " Local IP : ${LOCAL_NODE_IP}"
echo " Master : ${BENCH_MASTER_ADDR}:${BENCH_MASTER_PORT}"
echo " Transport : NCCL NET=IB (RDMA only)"
echo " HCA : ${NCCL_IB_HCA}"
if [[ "$BENCH_BIN" == "gdr_bench" ]]; then
echo " GDR NIC : ${BENCH_GDR_NIC}"
echo " GDR ODP : ${BENCH_GDR_USE_ODP}"
fi
if [[ "$BENCH_BIN" == "cuda_bench" || "$BENCH_BIN" == "cuda_nccl_bench" ]]; then
echo " CUDA iters: ${BENCH_CUDA_ITERS} (warmup=${BENCH_CUDA_WARMUP})"
fi
echo " NCCL iters: ${BENCH_NCCL_ITERS} (warmup=${BENCH_NCCL_WARMUP})"
echo " GID index : ${NCCL_IB_GID_INDEX:-auto}"
echo " GPU : device ${BENCH_GPU_ID}"
echo "========================================================"
echo ""
exec "$BINARY"