[BugFix] Reject invalid data-parallel RPC ports (#51469)
Signed-off-by: aoshen02 <aoshen@inferact.ai> Co-authored-by: OpenAI Codex <codex@openai.com>
aoshen02 committed
Aug 8, 2026 at 12:23 UTC
22a175921c4718f195d1eaddf5a26c9aaa07a326
4 files changed
+24
-8
tests/test_config.py
+15
@@ -380,6 +380,21 @@ def test_async_scheduling_with_pipeline_parallelism_is_allowed():
380
assert cfg.scheduler_config.async_scheduling is True
381
382
383
+def test_data_parallel_rpc_port_has_fixed_default():
384
+ assert ParallelConfig().data_parallel_rpc_port == 29550
385
+
386
+
387
+@pytest.mark.parametrize("port", [1, 29550, 65535])
388
+def test_data_parallel_rpc_port_accepts_valid_ports(port: int):
389
+ assert ParallelConfig(data_parallel_rpc_port=port).data_parallel_rpc_port == port
390
+
391
+
392
+@pytest.mark.parametrize("port", [-1, 0, 65536])
393
+def test_data_parallel_rpc_port_rejects_invalid_ports(port: int):
394
+ with pytest.raises(ValidationError):
395
+ ParallelConfig(data_parallel_rpc_port=port)
396
+
397
+
398
def test_reconfigure_for_independent_dp_rank_on_multinode_dense_model():
399
parallel_config = ParallelConfig(
400
tensor_parallel_size=8,
vllm/config/parallel.py
+2
-2
@@ -140,8 +140,8 @@ class ParallelConfig:
140
"""Local rank of the data parallel group, set only in SPMD mode."""
141
data_parallel_master_ip: str = "127.0.0.1"
142
"""IP of the data parallel master."""
143
- data_parallel_rpc_port: int = 29550
144
- """Port for data parallel messaging."""
143
+ data_parallel_rpc_port: int = Field(default=29550, ge=1, le=65535)
144
+ """Fixed port for data parallel messaging, shared by all nodes."""
145
data_parallel_master_port: int = 29500
146
"""Port of the data parallel master."""
147
data_parallel_backend: DataParallelBackend = "mp"
vllm/engine/arg_utils.py
+2
-1
@@ -1100,7 +1100,8 @@ class EngineArgs:
1100
"--data-parallel-rpc-port",
1101
"-dpp",
1102
type=int,
1103
- help="Port for data parallel RPC communication.",
1103
+ help="Fixed port for data parallel RPC communication. All nodes "
1104
+ "must use the same port.",
1105
)
1106
parallel_group.add_argument(
1107
"--data-parallel-backend",
vllm/v1/engine/utils.py
+5
-5
@@ -1165,11 +1165,11 @@ def launch_core_engines(
1165
if parallel_config.enable_elastic_ep:
1166
handshake_local_only = False
1167
1168
- # Preserve "port=0 means auto-pick" for the handshake address, which
1169
- # is consumed by engines spawned in this process and so cannot defer
1170
- # port resolution to bind time.
1171
- rpc_port = parallel_config.data_parallel_rpc_port or get_open_port()
1172
- handshake_address = get_engine_client_zmq_addr(handshake_local_only, host, rpc_port)
1168
+ handshake_address = get_engine_client_zmq_addr(
1169
+ handshake_local_only,
1170
+ host,
1171
+ parallel_config.data_parallel_rpc_port,
1172
+ )
1173
1174
if local_engines_only and dp_rank > 0:
1175
assert not handshake_local_only