[Feature] Transfer AR-to-diffusion payloads over NIXL (#6264)

Signed-off-by: yuanwu <yuan.wu@intel.com>
Co-authored-by: Hongsheng Liu <liuhongsheng4@huawei.com>
This commit is contained in:
Yuan WuandHongsheng Liu authored and GitHub committed 2026-09-23 18:26:53 +08:00
1 parent 8953d082c0
commit cb5f508212
60 files changed
+4397 -641

No files matched your search

@@ -66,6 +66,7 @@ from vllm_omni.diffusion.sched.interface import (
)
from vllm_omni.diffusion.worker.input_batch import InputBatch, scatter_latents
from vllm_omni.diffusion.worker.request_batch import DiffusionRequestBatch
from vllm_omni.diffusion.worker.stage_payload import DiffusionStagePayloadMixin
from vllm_omni.diffusion.worker.utils import (
BatchRunnerOutput,
RunnerOutput,
@@ -78,7 +79,6 @@ from vllm_omni.diffusion.worker.utils import (
from vllm_omni.distributed.omni_connectors.kv_transfer_manager import OmniKVTransferManager
from vllm_omni.inputs.data import OmniDiffusionSamplingParams
from vllm_omni.platforms import current_omni_platform
from vllm_omni.worker.omni_connector_model_runner_mixin import OmniConnectorModelRunnerMixin
if TYPE_CHECKING:
from vllm_omni.inputs.data import OmniInteractionPrompt
@@ -148,7 +148,7 @@ def _normalize_pipeline_outputs(
return outputs
class DiffusionModelRunner(OmniConnectorModelRunnerMixin):
class DiffusionModelRunner(DiffusionStagePayloadMixin):
"""
Model runner that handles model loading and execution for diffusion models.
@@ -194,11 +194,11 @@ class DiffusionModelRunner(OmniConnectorModelRunnerMixin):
self.state_cache: dict[str, StepRequestState] = {}
# Initialize KV cache manager for connector management.
payload_transfer_manager = OmniKVTransferManager.from_od_config(od_config)
self.kv_transfer_manager = (
OmniKVTransferManager.from_od_config(od_config)
if getattr(od_config, "kv_transfer_config", None) is None
else None
payload_transfer_manager if getattr(od_config, "kv_transfer_config", None) is None else None
)
self.init_omni_connectors(od_config, payload_transfer_manager, synchronous=True)
self._kv_connector = None
from vllm_omni.diffusion.diffusion_kv.kv_connector import KVReceiveProgress, native_prefetch_enabled
@@ -629,6 +629,10 @@ class DiffusionModelRunner(OmniConnectorModelRunnerMixin):
kv_prefetch_job: KVPrefetchJob | None = None,
use_prefetch: bool = False,
) -> None:
# Fetch upstream conditioning before anything else: the pipeline reads
# it out of the prompt during the forward below.
self._maybe_recv_stage_payload(req)
if self.kv_transfer_manager is None:
self._initialize_generator(req.sampling_params)
return
@@ -843,6 +847,8 @@ class DiffusionModelRunner(OmniConnectorModelRunnerMixin):
):
cache_summary(self.pipeline, details=True)
self._maybe_send_stage_payload(reqs, outputs)
return self._runner_output_from_outputs(reqs, outputs)
def _attach_stepwise_metadata(
@@ -1039,12 +1045,14 @@ class DiffusionModelRunner(OmniConnectorModelRunnerMixin):
new_request_ids.append(request_id)
if request_id in self.state_cache:
raise ValueError(f"Received duplicate new-request payload for cached request {request_id}.")
self._maybe_recv_stage_payload(sched_new_req.req)
new_state = StepRequestState(
request_id=request_id,
sampling=copy.deepcopy(sched_new_req.req.sampling_params),
prompt=sched_new_req.req.prompt,
kv_sender_info=sched_new_req.req.kv_sender_info,
prepared_layout=getattr(sched_new_req.req, "prepared_layout", None),
external_req_id=getattr(sched_new_req.req, "external_req_id", None),
)
if sched_new_req.diffusion_kv_metadata is not None:
new_state.extra["kv_computed_tokens"] = tuple(
@@ -1387,6 +1395,8 @@ class DiffusionModelRunner(OmniConnectorModelRunnerMixin):
if self.od_config.streaming_output
else req.denoise_completed
)
if finished and result is not None:
self._maybe_send_stage_payload([req], [result])
runner_output_list.append(
RunnerOutput(
request_id=req.request_id,