[Bugfix] Fix Sender Address Propagation (#8599)
Signed-off-by: Alex Brooks <albrooks@redhat.com>
This commit is contained in:
1 parent
744c202d86
commit
8484d85d1f
3 files changed
+31
-6
No files matched your search
@@ -16,6 +16,7 @@ from types import SimpleNamespace
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import torch
|
import torch
|
||||||
|
from vllm import SamplingParams
|
||||||
|
|
||||||
import vllm_omni.core.sched.omni_scheduling_coordinator as coord_mod
|
import vllm_omni.core.sched.omni_scheduling_coordinator as coord_mod
|
||||||
from vllm_omni.core.sched.omni_scheduling_coordinator import (
|
from vllm_omni.core.sched.omni_scheduling_coordinator import (
|
||||||
@@ -23,6 +24,9 @@ from vllm_omni.core.sched.omni_scheduling_coordinator import (
|
|||||||
uses_native_mrv2_data_plane,
|
uses_native_mrv2_data_plane,
|
||||||
)
|
)
|
||||||
from vllm_omni.core.sched.output import OmniChunkRecvHandle
|
from vllm_omni.core.sched.output import OmniChunkRecvHandle
|
||||||
|
from vllm_omni.distributed.omni_connectors.transfer_adapter.chunk_transfer_adapter import _LoadEntry
|
||||||
|
from vllm_omni.engine.orchestrator import build_engine_core_request_from_tokens
|
||||||
|
from vllm_omni.request import OmniRequest
|
||||||
|
|
||||||
pytestmark = [pytest.mark.core_model, pytest.mark.cpu]
|
pytestmark = [pytest.mark.core_model, pytest.mark.cpu]
|
||||||
|
|
||||||
@@ -440,3 +444,20 @@ class TestTimeoutDetection(unittest.TestCase):
|
|||||||
self.assertNotIn("r1", coord.requests_with_ready_chunks)
|
self.assertNotIn("r1", coord.requests_with_ready_chunks)
|
||||||
self.assertEqual([r.request_id for r in coord._waiting_for_chunk_running], ["r2"])
|
self.assertEqual([r.request_id for r in coord._waiting_for_chunk_running], ["r2"])
|
||||||
self.assertEqual([h.request_id for h in coord.pending_chunk_registrations], ["r2"])
|
self.assertEqual([h.request_id for h in coord.pending_chunk_registrations], ["r2"])
|
||||||
|
|
||||||
|
|
||||||
|
def test_sender_address_on_the_engine_request_reaches_both_receive_paths():
|
||||||
|
"""Ensure the sender address the orchestrator puts on an engine request reaches the receivers."""
|
||||||
|
sender = {"host": "10.0.0.2", "zmq_port": 50071}
|
||||||
|
engine_request = build_engine_core_request_from_tokens(
|
||||||
|
"req-1", {"prompt_token_ids": [0]}, SamplingParams(max_tokens=1)
|
||||||
|
)
|
||||||
|
engine_request.payload_sender_info = sender
|
||||||
|
request = OmniRequest.from_engine_core_request(engine_request, block_hasher=None)
|
||||||
|
# Build the coordinator and process the request with sender info
|
||||||
|
coordinator = OmniSchedulingCoordinator(stage_id=1)
|
||||||
|
coordinator.process_pending_full_payload_inputs(MockQueue([request]), stage_recv_req_ids=set())
|
||||||
|
|
||||||
|
# Ensure that the payload send info is accessible on both pending input registrations and a wrapped load entry
|
||||||
|
assert [handle.payload_sender_info for handle in coordinator.pending_input_registrations] == [sender]
|
||||||
|
assert _LoadEntry(request).source_metadata == {"source_host": "10.0.0.2", "source_port": 50071}
|
||||||
@@ -183,8 +183,8 @@ class OmniSchedulingCoordinator:
|
|||||||
self.pending_input_registrations.append(
|
self.pending_input_registrations.append(
|
||||||
OmniChunkRecvHandle(
|
OmniChunkRecvHandle(
|
||||||
request_id=request.request_id,
|
request_id=request.request_id,
|
||||||
external_req_id=getattr(request, "external_req_id", None),
|
external_req_id=request.external_req_id,
|
||||||
payload_sender_info=getattr(request, "payload_sender_info", None),
|
payload_sender_info=request.payload_sender_info,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
elif request.status == RequestStatus.WAITING_FOR_INPUT:
|
elif request.status == RequestStatus.WAITING_FOR_INPUT:
|
||||||
@@ -197,8 +197,8 @@ class OmniSchedulingCoordinator:
|
|||||||
self.pending_input_registrations.append(
|
self.pending_input_registrations.append(
|
||||||
OmniChunkRecvHandle(
|
OmniChunkRecvHandle(
|
||||||
request_id=request.request_id,
|
request_id=request.request_id,
|
||||||
external_req_id=getattr(request, "external_req_id", None),
|
external_req_id=request.external_req_id,
|
||||||
payload_sender_info=getattr(request, "payload_sender_info", None),
|
payload_sender_info=request.payload_sender_info,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
if to_remove:
|
if to_remove:
|
||||||
@@ -456,7 +456,7 @@ class OmniSchedulingCoordinator:
|
|||||||
self.pending_chunk_registrations.append(
|
self.pending_chunk_registrations.append(
|
||||||
OmniChunkRecvHandle(
|
OmniChunkRecvHandle(
|
||||||
request_id=request.request_id,
|
request_id=request.request_id,
|
||||||
external_req_id=getattr(request, "external_req_id", None),
|
external_req_id=request.external_req_id,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
request.status = RequestStatus.WAITING_FOR_CHUNK
|
request.status = RequestStatus.WAITING_FOR_CHUNK
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, Any
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import torch
|
import torch
|
||||||
@@ -39,6 +39,7 @@ class OmniRequest(Request):
|
|||||||
external_req_id: str | None = None,
|
external_req_id: str | None = None,
|
||||||
additional_information: AdditionalInformationPayload | None = None,
|
additional_information: AdditionalInformationPayload | None = None,
|
||||||
model_intermediate_buffer: dict | None = None,
|
model_intermediate_buffer: dict | None = None,
|
||||||
|
payload_sender_info: dict[str, Any] | None = None,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
):
|
):
|
||||||
if prompt_embeds is not None:
|
if prompt_embeds is not None:
|
||||||
@@ -58,6 +59,8 @@ class OmniRequest(Request):
|
|||||||
self.additional_information: AdditionalInformationPayload | None = additional_information
|
self.additional_information: AdditionalInformationPayload | None = additional_information
|
||||||
# Runner-owned runtime payload.
|
# Runner-owned runtime payload.
|
||||||
self.model_intermediate_buffer: dict | None = model_intermediate_buffer
|
self.model_intermediate_buffer: dict | None = model_intermediate_buffer
|
||||||
|
# Sender's connector address for this request's stage payload.
|
||||||
|
self.payload_sender_info: dict[str, Any] | None = payload_sender_info
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _maybe_decode_prompt_embeds(
|
def _maybe_decode_prompt_embeds(
|
||||||
@@ -105,6 +108,7 @@ class OmniRequest(Request):
|
|||||||
block_hasher=block_hasher,
|
block_hasher=block_hasher,
|
||||||
additional_information=request.additional_information,
|
additional_information=request.additional_information,
|
||||||
model_intermediate_buffer=getattr(request, "model_intermediate_buffer", None),
|
model_intermediate_buffer=getattr(request, "model_intermediate_buffer", None),
|
||||||
|
payload_sender_info=request.payload_sender_info,
|
||||||
resumable=request.resumable,
|
resumable=request.resumable,
|
||||||
session_id=request.session_id,
|
session_id=request.session_id,
|
||||||
kv_hints=request.kv_hints,
|
kv_hints=request.kv_hints,
|
||||||
|
|||||||
Reference in new issue
Block a user