Skip to content

Commit 85d4c18

Browse files
authored
[UIL] Add Unified IR support (#539)
1 parent 3a24d03 commit 85d4c18

39 files changed

Lines changed: 6651 additions & 957 deletions

.github/configs/cuda.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ unit_test_suites:
2222
- adaptor
2323
- core
2424
- device_api
25+
- device_api_unified_ir
2526
- p2p
2627
- rma
2728
- runner

.github/scripts/ci/run_unit_test.sh

Lines changed: 83 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ build_project() {
5656

5757
build_suite() {
5858
local suite_dir="$PROJECT_ROOT/test/unittest/$SUITE"
59+
if [[ "$SUITE" == device_api_unified_ir ]]; then
60+
suite_dir="$PROJECT_ROOT/test/unittest/device_api"
61+
fi
5962
local -a args=("${FLAGCX_CI_TEST_MAKE_ARGS[@]}")
6063

6164
if declare -F flagcx_ci_build_suite_override >/dev/null; then
@@ -109,6 +112,82 @@ run_device_api() {
109112
build/bin/test_device_ir_inter "${flags[@]}"
110113
}
111114

115+
run_device_api_unified_ir() {
116+
local suite_dir="$PROJECT_ROOT/test/unittest/device_api"
117+
local -a common_env=(
118+
-x FLAGCX_USE_HETERO_COMM=1
119+
-x FLAGCX_VMM_ENABLE=0
120+
-x FLAGCX_IB_GID_INDEX=3
121+
-x NCCL_DEBUG=INFO
122+
-x NCCL_DEBUG_SUBSYS=INIT
123+
-x NCCL_NVLS_ENABLE=0
124+
-x NCCL_IB_GID_INDEX=3
125+
-x LD_LIBRARY_PATH
126+
)
127+
local -a intra_env=(
128+
"${common_env[@]}"
129+
-x FLAGCX_DEBUG=TRACE
130+
-x FLAGCX_DEBUG_SUBSYS=ALL
131+
)
132+
local -a inter_env=(
133+
"${common_env[@]}"
134+
-x FLAGCX_DEBUG=INFO
135+
-x FLAGCX_DEBUG_SUBSYS=PROXY
136+
)
137+
local -a intra_fallback_env=(
138+
"${intra_env[@]}"
139+
-x FLAGCX_DEVICE_ONE_SIDED_FORCE_NET=1
140+
)
141+
local -a inter_fallback_env=(
142+
"${inter_env[@]}"
143+
-x FLAGCX_DEVICE_ONE_SIDED_FORCE_NET=1
144+
)
145+
local -a intra_flags=(-b 1K -e 16M -f 2 -R 1)
146+
local -a inter_flags=(-b 1K -e 16M -f 2 -R 1)
147+
# Two sizes cover both initial and reused signal/shadow/counter state while
148+
# keeping the forced-fallback regression reasonably small.
149+
local -a fallback_flags=(-b 1K -e 2K -f 2 -R 1)
150+
151+
declare -p FLAGCX_CI_NODE1_MPI_ARGS >/dev/null 2>&1 || {
152+
echo "The platform set_env script must define FLAGCX_CI_NODE1_MPI_ARGS" >&2
153+
exit 1
154+
}
155+
declare -p FLAGCX_CI_NODE2_MPI_ARGS >/dev/null 2>&1 || {
156+
echo "The platform set_env script must define FLAGCX_CI_NODE2_MPI_ARGS" >&2
157+
exit 1
158+
}
159+
: "${FLAGCX_CI_INTRA_NP:?The platform set_env script must define FLAGCX_CI_INTRA_NP}"
160+
: "${FLAGCX_CI_NODE_NP:?The platform set_env script must define FLAGCX_CI_NODE_NP}"
161+
162+
cd "$suite_dir"
163+
164+
# Keep P2P enabled so the intra test covers signal/counter buffers and their
165+
# shadows. The INTER team below crosses the two logical nodes through NET.
166+
mpirun -np "$FLAGCX_CI_INTRA_NP" --allow-run-as-root "${intra_env[@]}" \
167+
build/bin/test_device_ir_unified_intra "${intra_flags[@]}"
168+
169+
mpirun --allow-run-as-root \
170+
-np "$FLAGCX_CI_NODE_NP" "${inter_env[@]}" "${FLAGCX_CI_NODE1_MPI_ARGS[@]}" \
171+
build/bin/test_device_ir_unified_inter "${inter_flags[@]}" \
172+
: -np "$FLAGCX_CI_NODE_NP" "${inter_env[@]}" "${FLAGCX_CI_NODE2_MPI_ARGS[@]}" \
173+
build/bin/test_device_ir_unified_inter "${inter_flags[@]}"
174+
175+
# Fault injection: disable only one-sided data/signal IPC. Barriers retain
176+
# their IPC transport so these runs specifically validate IPC-to-Net
177+
# fallback for S18-S25.
178+
mpirun -np "$FLAGCX_CI_INTRA_NP" --allow-run-as-root \
179+
"${intra_fallback_env[@]}" \
180+
build/bin/test_device_ir_unified_intra "${fallback_flags[@]}"
181+
182+
mpirun --allow-run-as-root \
183+
-np "$FLAGCX_CI_NODE_NP" "${inter_fallback_env[@]}" \
184+
"${FLAGCX_CI_NODE1_MPI_ARGS[@]}" \
185+
build/bin/test_device_ir_unified_inter "${fallback_flags[@]}" \
186+
: -np "$FLAGCX_CI_NODE_NP" "${inter_fallback_env[@]}" \
187+
"${FLAGCX_CI_NODE2_MPI_ARGS[@]}" \
188+
build/bin/test_device_ir_unified_inter "${fallback_flags[@]}"
189+
}
190+
112191
run_suite() {
113192
local suite_dir="$PROJECT_ROOT/test/unittest/$SUITE"
114193
local -a args=("${FLAGCX_CI_TEST_MAKE_ARGS[@]}")
@@ -155,6 +234,9 @@ run_suite() {
155234
device_api)
156235
run_device_api
157236
;;
237+
device_api_unified_ir)
238+
run_device_api_unified_ir
239+
;;
158240
*)
159241
echo "Unsupported unit test suite: $SUITE" >&2
160242
exit 2
@@ -163,7 +245,7 @@ run_suite() {
163245
}
164246

165247
case "$SUITE" in
166-
device_api|symmem)
248+
device_api|device_api_unified_ir|symmem)
167249
;;
168250
adaptor|core|p2p|rma|runner|service)
169251
build_googletest

.github/scripts/set_env/cuda.sh

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,16 @@ export NP=8
3131
FLAGCX_CI_NODE1_MPI_ARGS=(
3232
-x CUDA_VISIBLE_DEVICES=0,1,2,3
3333
-x FLAGCX_HOSTID=node0
34+
-x NCCL_HOSTID=node0
3435
-x FLAGCX_IB_HCA=mlx5_0,mlx5_1,mlx5_2,mlx5_3
36+
-x NCCL_IB_HCA=mlx5_0,mlx5_1,mlx5_2,mlx5_3
3537
)
3638
FLAGCX_CI_NODE2_MPI_ARGS=(
3739
-x CUDA_VISIBLE_DEVICES=4,5,6,7
3840
-x FLAGCX_HOSTID=node1
41+
-x NCCL_HOSTID=node1
3942
-x FLAGCX_IB_HCA=mlx5_4,mlx5_5,mlx5_6,mlx5_7
43+
-x NCCL_IB_HCA=mlx5_4,mlx5_5,mlx5_6,mlx5_7
4044
)
4145

4246
flagcx_ci_configure_suite() {
@@ -45,7 +49,7 @@ flagcx_ci_configure_suite() {
4549
runner)
4650
FLAGCX_CI_PROJECT_MAKE_ARGS+=(COMPILE_KERNEL=1)
4751
;;
48-
device_api)
52+
device_api|device_api_unified_ir)
4953
FLAGCX_CI_PROJECT_MAKE_ARGS+=(COMPILE_KERNEL=1 FORCE_DEFAULT_PATH=1)
5054
FLAGCX_CI_TEST_MAKE_ARGS+=(FORCE_DEFAULT_PATH=1)
5155
;;

.github/workflows/unit_tests_common.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ on:
3939
jobs:
4040
unit_test:
4141
name: ${{ inputs.display_name }} / ${{ matrix.suite }}
42+
timeout-minutes: 120
4243
strategy:
4344
fail-fast: false
4445
matrix:

0 commit comments

Comments
 (0)