@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / ab79863e6c
Fork 0

A high-throughput and memory-efficient inference and serving engine for LLMs

Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git

Synced Nov 5, 13:30 UTC

Remove MQ multi-node tests (#38934)

Signed-off-by: Jeffrey Wang <jeffreywang@anyscale.com>

Jeffrey Wang committed Apr 3, 2026 at 13:00 UTC ab79863e6c4f4df652328af6901be2ee208dacec
2 files changed -133
.buildkite/test_areas/distributed.yaml
-14
@@ -224,20 +224,6 @@ steps:
224 commands:
225 - ./.buildkite/scripts/run-multi-node-test.sh /vllm-workspace/tests 2 2 $IMAGE_TAG "VLLM_TEST_SAME_HOST=0 torchrun --nnodes 2 --nproc-per-node=2 --rdzv_backend=c10d --rdzv_endpoint=192.168.10.10 distributed/test_same_node.py | grep 'Same node test passed' && NUM_NODES=2 torchrun --nnodes 2 --nproc-per-node=2 --rdzv_backend=c10d --rdzv_endpoint=192.168.10.10 distributed/test_node_count.py | grep 'Node count test passed' && python3 ../examples/offline_inference/data_parallel.py -dp=2 -tp=1 --dp-num-nodes=2 --dp-node-rank=0 --dp-master-addr=192.168.10.10 --dp-master-port=12345 --enforce-eager --trust-remote-code && VLLM_MULTI_NODE=1 pytest -v -s distributed/test_multi_node_assignment.py && VLLM_MULTI_NODE=1 pytest -v -s distributed/test_pipeline_parallel.py" "VLLM_TEST_SAME_HOST=0 torchrun --nnodes 2 --nproc-per-node=2 --rdzv_backend=c10d --rdzv_endpoint=192.168.10.10 distributed/test_same_node.py | grep 'Same node test passed' && NUM_NODES=2 torchrun --nnodes 2 --nproc-per-node=2 --rdzv_backend=c10d --rdzv_endpoint=192.168.10.10 distributed/test_node_count.py | grep 'Node count test passed' && python3 ../examples/offline_inference/data_parallel.py -dp=2 -tp=1 --dp-num-nodes=2 --dp-node-rank=1 --dp-master-addr=192.168.10.10 --dp-master-port=12345 --enforce-eager --trust-remote-code"
226
227 -- label: MessageQueue TCP Multi-Node (2 GPUs)
228 - timeout_in_minutes: 10
229 - working_dir: "/vllm-workspace/tests"
230 - num_devices: 1
231 - num_nodes: 2
232 - no_plugin: true
233 - optional: true
234 - source_file_dependencies:
235 - - vllm/distributed/device_communicators/shm_broadcast.py
236 - - vllm/distributed/parallel_state.py
237 - - tests/distributed/test_mq_tcp_multinode.py
238 - commands:
239 - - ./.buildkite/scripts/run-multi-node-test.sh /vllm-workspace/tests 2 1 $IMAGE_TAG "torchrun --nnodes 2 --nproc-per-node=1 --rdzv_backend=c10d --rdzv_endpoint=192.168.10.10 distributed/test_mq_tcp_multinode.py" "torchrun --nnodes 2 --nproc-per-node=1 --rdzv_backend=c10d --rdzv_endpoint=192.168.10.10 distributed/test_mq_tcp_multinode.py"
240 -
227 - label: Distributed NixlConnector PD accuracy (4 GPUs)
228 timeout_in_minutes: 30
229 working_dir: "/vllm-workspace/tests"
tests/distributed/test_mq_tcp_multinode.py deleted
-119
@@ -1,119 +0,0 @@
1 -# SPDX-License-Identifier: Apache-2.0
2 -# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3 -"""
4 -Multi-node integration test for MessageQueue TCP fallback.
5 -
6 -Verifies that when writer and readers span separate nodes (Docker containers
7 -with isolated /dev/shm), `create_from_process_group` correctly detects
8 -cross-node ranks via `in_the_same_node_as()` and falls back to ZMQ TCP
9 -transport — and that data actually arrives.
10 -"""
11 -
12 -import numpy as np
13 -import torch.distributed as dist
14 -
15 -from vllm.distributed.device_communicators.shm_broadcast import MessageQueue
16 -from vllm.distributed.parallel_state import in_the_same_node_as
17 -
18 -
19 -def main():
20 - dist.init_process_group(backend="gloo")
21 -
22 - rank = dist.get_rank()
23 - world_size = dist.get_world_size()
24 - assert world_size >= 2, (
25 - f"Need at least 2 ranks across nodes, got world_size={world_size}"
26 - )
27 -
28 - # Verify that in_the_same_node_as detects cross-node correctly
29 - status = in_the_same_node_as(dist.group.WORLD, source_rank=0)
30 - local_count = sum(status)
31 - print(
32 - f"[Rank {rank}] in_the_same_node_as(source=0): {status} "
33 - f"(local={local_count}/{world_size})"
34 - )
35 - # With 2 Docker containers (1 proc each), rank 0 and rank 1
36 - # should be on different nodes.
37 - assert local_count < world_size, (
38 - f"Expected cross-node ranks but all {world_size} ranks appear local."
39 - )
40 -
41 - # Create MessageQueue
42 - writer_rank = 0
43 - mq = MessageQueue.create_from_process_group(
44 - dist.group.WORLD,
45 - max_chunk_bytes=1024 * 1024, # 1 MiB
46 - max_chunks=10,
47 - writer_rank=writer_rank,
48 - )
49 -
50 - # Verify the transport path selection
51 - if rank == writer_rank:
52 - print(
53 - f"[Rank {rank}] Writer: n_local_reader={mq.n_local_reader}, "
54 - f"n_remote_reader={mq.n_remote_reader}"
55 - )
56 - assert mq.n_remote_reader > 0, (
57 - "Writer should have at least 1 remote (TCP) reader in a multi-node setup."
58 - )
59 - else:
60 - if status[rank]:
61 - assert mq._is_local_reader, (
62 - f"Rank {rank} is on the same node as writer but is not a local reader."
63 - )
64 - print(f"[Rank {rank}] Reader: local (shared memory)")
65 - else:
66 - assert mq._is_remote_reader, (
67 - f"Rank {rank} is on a different node but is not a remote (TCP) reader."
68 - )
69 - print(f"[Rank {rank}] Reader: remote (TCP)")
70 -
71 - # Test data transfer: simple objects
72 - dist.barrier()
73 - if rank == writer_rank:
74 - mq.enqueue("hello_from_node0")
75 - else:
76 - msg = mq.dequeue(timeout=10)
77 - assert msg == "hello_from_node0"
78 - dist.barrier()
79 - print(f"[Rank {rank}] Simple object test passed")
80 -
81 - # Test data transfer: numpy arrays
82 - np.random.seed(42)
83 - arrays = [
84 - np.random.randint(0, 100, size=np.random.randint(100, 5000)) for _ in range(100)
85 - ]
86 -
87 - dist.barrier()
88 - if rank == writer_rank:
89 - for arr in arrays:
90 - mq.enqueue(arr)
91 - else:
92 - for i, expected in enumerate(arrays):
93 - received = mq.dequeue(timeout=10)
94 - assert np.array_equal(expected, received), (
95 - f"Array mismatch at index {i}: "
96 - f"expected shape {expected.shape}, got shape {received.shape}"
97 - )
98 - dist.barrier()
99 - print(f"[Rank {rank}] Numpy array test passed")
100 -
101 - # Test data transfer: large payload (> max_chunk_bytes)
102 - dist.barrier()
103 - big_array = np.zeros(200_000, dtype=np.int64) # ~1.6 MiB > 1 MiB chunk
104 - if rank == writer_rank:
105 - mq.enqueue(big_array)
106 - else:
107 - received = mq.dequeue(timeout=10)
108 - assert np.array_equal(big_array, received)
109 - dist.barrier()
110 - print(f"[Rank {rank}] Large payload test passed")
111 -
112 - # Done -- cleanup
113 - dist.barrier()
114 - print(f"[Rank {rank}] All MessageQueue TCP multi-node tests passed!")
115 - dist.destroy_process_group()
116 -
117 -
118 -if __name__ == "__main__":
119 - main()