Hello,
I am trying to use Nsight Compute to profile a multi-node NCCL/PyTorch distributed application.
Single-node multi-process profiling works correctly, but multi-node profiling hangs during TCP communicator initialization.
Environment:
-
Nsight Compute: 2026.1.1.0
-
CUDA driver: 13.0
-
NCCL: 2.20.5
-
OpenMPI
The following command works correctly WITHOUT communicator options:
timeout 30s mpirun --tag-output -np 2 \
-H 192.168.35.170,192.168.205.180 \
-x PATH -x LD_LIBRARY_PATH \
-x MASTER_ADDR=192.168.35.170 \
-x MASTER_PORT=12355 \
-x NCCL_DEBUG=INFO \
bash -lc '
export RANK=$OMPI_COMM_WORLD_RANK
export WORLD_SIZE=$OMPI_COMM_WORLD_SIZE
export LOCAL_RANK=$OMPI_COMM_WORLD_LOCAL_RANK
./run_ncu.sh \
-f -o report_rank%q{OMPI_COMM_WORLD_RANK} \
python3 ddp_ncu_test.py
'
NCCL initializes correctly across nodes and NET/Socket communication works normally.
However, when I enable:
--communicator tcp
--communicator-tcp-hostname=192.168.35.170
--communicator-tcp-num-peers=2
--lockstep-kernel-launch
the application hangs during communicator initialization:
==PROF== Waiting for TCP clients to attach on 192.168.35.170:49217
==PROF== Waiting for TCP clients to attach on 192.168.205.180:49217
and no further progress occurs.
The command is:
timeout 30s mpirun --tag-output -np 2 \
-H 192.168.35.170,192.168.205.180 \
-x PATH -x LD_LIBRARY_PATH \
-x MASTER_ADDR=192.168.35.170 \
-x MASTER_PORT=12355 \
-x NCCL_DEBUG=INFO \
bash -lc '
export RANK=$OMPI_COMM_WORLD_RANK
export WORLD_SIZE=$OMPI_COMM_WORLD_SIZE
export LOCAL_RANK=$OMPI_COMM_WORLD_LOCAL_RANK
./run_ncu.sh \
--communicator tcp \
--communicator-tcp-hostname=192.168.35.170 \
--communicator-tcp-num-peers=2 \
--lockstep-kernel-launch \
-f -o report_rank%q{OMPI_COMM_WORLD_RANK} \
python3 ddp_ncu_test.py
'
Important observations:
-
Single-node multi-process profiling works correctly with communicator enabled.
-
Multi-node NCCL communication works correctly without communicator enabled.
-
TCP connectivity between nodes is verified.
-
Using hostname instead of IP does not help:
–communicator-tcp-hostname=powerleader -
Removing --communicator-tcp-port and using dynamic ports does not help either.
-
strace analysis shows:
-
all peers call bind()/listen()/accept()
-
but no peer ever calls connect()
-
“Initialized Communicator” never appears
-
Example strace behavior:
bind(8<TCP:[...]>, {AF_INET ...})
listen(8<TCP:[0.0.0.0:49217]>, 128)
accept(...) = -1 EAGAIN
epoll_wait(...)
but no:
connect(...)
Questions:
-
Does Nsight Compute communicator internally require hostname reverse resolution between nodes?
-
Does communicator automatically select network interfaces internally?
-
Is there any way to specify communicator bind interface/IP address?
-
Is multi-node communicator expected to work with MPI + NCCL + lockstep kernel launch?
-
Why do all peers appear to enter listen mode without any TCP connect() occurring?
Any guidance would be greatly appreciated.
Thank you.