A high-throughput and memory-efficient inference and serving engine for LLMs
[KVConnector][MoRIIO] Allow overriding the advertised host IP (#45488)
Signed-off-by: Kourosh Hakhamaneshi <kourosh@anyscale.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
kourosh hakhamaneshi committed
Jun 16, 2026 at 10:18 UTC
188c68798e26c89f4cdb30eaa79dfb96bf8b11f1
3 files changed
+30
-4
tests/v1/kv_connector/unit/test_moriio_connector.py
+12
@@ -23,6 +23,7 @@ from vllm.distributed.kv_transfer.kv_connector.v1.moriio.moriio_common import (
23
MoRIIOAgentMetadata,
24
MoRIIOConnectorMetadata,
25
MoRIIOConstants,
26
+ resolve_host_ip,
27
zmq_ctx,
28
)
29
from vllm.distributed.kv_transfer.kv_connector.v1.moriio.moriio_connector import (
@@ -568,3 +569,14 @@ def test_moriio_handshake_returns_metadata(mock_parallel_groups):
569
assert isinstance(metadata, MoRIIOAgentMetadata), (
570
"Decoded metadata is not MoRIIOAgentMetadata"
571
)
572
+
573
+
574
+def test_resolve_host_ip_prefers_extra_config():
575
+ """An explicit ``host_ip`` in kv_connector_extra_config overrides get_ip()
576
+ (so an external router can advertise a routable/internal address); an
577
+ absent or empty value falls back to get_ip()."""
578
+ assert resolve_host_ip({"host_ip": "10.0.0.7"}) == "10.0.0.7"
579
+
580
+ fallback = get_ip()
581
+ assert resolve_host_ip({}) == fallback
582
+ assert resolve_host_ip({"host_ip": ""}) == fallback
vllm/distributed/kv_transfer/kv_connector/v1/moriio/moriio_common.py
+13
-1
@@ -177,6 +177,18 @@ def get_port_offset(dp_rank: int, tp_rank: int, tp_size: int = 1) -> int:
177
return (dp_rank) * tp_size + tp_rank
178
179
180
+def resolve_host_ip(extra_config: dict) -> str:
181
+ """The IP this MoRIIO process advertises for KV transfer.
182
+
183
+ Honors an explicit ``host_ip`` in ``kv_connector_extra_config`` before
184
+ falling back to ``get_ip()``. An external router/orchestrator can set it to
185
+ the node's routable address; this is required under frameworks (e.g. Ray)
186
+ where ``get_ip()`` resolves to an unroutable public IP and ``VLLM_HOST_IP``
187
+ cannot be propagated to the worker processes that bind the transfer engine.
188
+ """
189
+ return extra_config.get("host_ip") or get_ip()
190
+
191
+
192
_DEPRECATED_ENV_VARS: dict[str, str] = {
193
"VLLM_MORIIO_CONNECTOR_READ_MODE": "read_mode",
194
"VLLM_MORIIO_QP_PER_TRANSFER": "qp_per_transfer",
@@ -276,7 +288,7 @@ class MoRIIOConfig:
288
)
289
290
return cls(
279
- local_ip=get_ip(),
291
+ local_ip=resolve_host_ip(extra_config),
292
local_kv_port=get_open_port(),
293
proxy_ip=extra_config["proxy_ip"],
294
local_ping_port=get_open_port(),
vllm/distributed/kv_transfer/kv_connector/v1/moriio/moriio_connector.py
+5
-3
@@ -39,6 +39,7 @@ from vllm.distributed.kv_transfer.kv_connector.v1.moriio.moriio_common import (
39
get_port_offset,
40
get_role,
41
parse_moriio_zmq_address,
42
+ resolve_host_ip,
43
set_role,
44
zmq_ctx,
45
)
@@ -54,7 +55,6 @@ from vllm.distributed.parallel_state import (
55
from vllm.forward_context import ForwardContext
56
from vllm.logger import init_logger
57
from vllm.utils.network_utils import (
57
- get_ip,
58
make_zmq_path,
59
make_zmq_socket,
60
)
@@ -105,7 +105,7 @@ class MoRIIOConnector(KVConnectorBase_V1):
105
self._set_port_defaults(vllm_config)
106
107
self.engine_id = (
108
- str(get_ip())
108
+ str(resolve_host_ip(self.kv_transfer_config.kv_connector_extra_config))
109
+ ":"
110
+ str(self.kv_transfer_config.kv_connector_extra_config["handshake_port"])
111
)
@@ -256,7 +256,9 @@ class MoRIIOConnectorScheduler:
256
self.block_size = vllm_config.cache_config.block_size
257
self.engine_id: EngineId = engine_id
258
self.mode = get_moriio_mode(self.kv_transfer_config)
259
- self.host_ip = get_ip()
259
+ self.host_ip = resolve_host_ip(
260
+ self.kv_transfer_config.kv_connector_extra_config
261
+ )
262
self.handshake_port = self.kv_transfer_config.kv_connector_extra_config[
263
"handshake_port"
264
]