[Feat] Add prefetch for Mooncake cross-stage paged KV transfer in HunyuanImage3 (#7637)

Signed-off-by: Acerak01-fy <wfy2003324@163.com>
This commit is contained in:
Wang fuyin authored and GitHub committed 2026-09-22 02:21:42 -07:00
1 parent f7e28348ad
commit 9ebef4b1d3
11 files changed
+909 -23

No files matched your search

+21 -1
View File
@@ -256,9 +256,23 @@ class DiffusionSchedulerOutput:
kv_prefetch_job: KVPrefetchJob | None = None
kv_connector_metadata: KVConnectorMetadata | None = None
kv_transfer_request_ids: set[str] = field(default_factory=set)
# None preserves the synchronous path; an empty set means submit/poll
# without waiting. Transfer IDs above are submitted only once.
kv_required_request_ids: set[str] | None = None
kv_poll_only: bool = False
# Keep background transfers out of the current request's Mooncake batch.
kv_prefetch_connector_metadata: KVConnectorMetadata | None = None
kv_prefetch_request_ids: set[str] = field(default_factory=set)
# Connector lifecycle uses per-sequence IDs, not public request IDs.
kv_finished_request_ids: set[str] = field(default_factory=set)
@property
def has_sync_kv_loads(self) -> bool:
# vLLM defers async submission until post_forward. The synchronous
# receive loop must start its loads in pre_forward before polling.
required = self.kv_required_request_ids
return bool(self.kv_transfer_request_ids if required is None else required)
@cached_property
def scheduled_request_ids(self) -> list[str]:
"""
@@ -275,4 +289,10 @@ class DiffusionSchedulerOutput:
@property
def is_empty(self) -> bool:
return self.num_scheduled_reqs == 0 and self.kv_connector_metadata is None
return (
self.num_scheduled_reqs == 0
and self.kv_connector_metadata is None
and self.kv_prefetch_connector_metadata is None
and not self.kv_required_request_ids
and not self.kv_poll_only
)