Compare commits

...
2 Commits
Author SHA1 Message Date
Chaunceyandkhluu 3d1c21a6fc [P/D][Bugfix] Fix PD async KV load lookahead handling for MTP spec decode (#46694)
Signed-off-by: chaunceyjiang <chaunceyjiang@gmail.com>
Co-authored-by: Nick Hill <nickhill123@gmail.com>
(cherry picked from commit ae6170f874)
2026-07-09 03:24:39 -07:00
liuzhenweiandkhluu e89b9c26d9 [XPU] Fix Event init failure w/ blocking (#47868)
Signed-off-by: zhenwei-intel <zhenwei.liu@intel.com>
(cherry picked from commit bdaf27519f)
2026-07-09 03:24:39 -07:00
3 changed files with 39 additions and 8 deletions
+24
View File
@@ -8,10 +8,14 @@ from typing import Literal, overload
from vllm.distributed.kv_events import BlockStored, KVCacheEvent
from vllm.logger import init_logger
from vllm.utils.math_utils import cdiv
from vllm.v1.core.kv_cache_coordinator import get_kv_cache_coordinator
from vllm.v1.core.kv_cache_metrics import KVCacheMetricsCollector
from vllm.v1.core.kv_cache_utils import KVCacheBlock
from vllm.v1.kv_cache_interface import (
AttentionSpec,
CrossAttentionSpec,
EncoderOnlyAttentionSpec,
KVCacheConfig,
get_kv_cache_spec_kind,
get_kv_cache_spec_sliding_window,
@@ -593,6 +597,26 @@ class KVCacheManager:
"""Get the block ids of a request."""
return self.get_blocks(request_id).get_block_ids()
def get_block_ids_for_computed_tokens(
self,
request_id: str,
num_computed_tokens: int,
) -> tuple[list[int], ...]:
"""Get block ids covering the request's computed tokens."""
block_ids = self.get_block_ids(request_id)
clipped_block_ids: list[list[int]] = []
for group, ids in zip(self.kv_cache_config.kv_cache_groups, block_ids):
spec = group.kv_cache_spec
if not isinstance(spec, AttentionSpec) or isinstance(
spec, (CrossAttentionSpec, EncoderOnlyAttentionSpec)
):
clipped_block_ids.append(ids)
continue
num_valid_blocks = cdiv(num_computed_tokens, spec.block_size)
clipped_block_ids.append(ids[:num_valid_blocks])
return tuple(clipped_block_ids)
def cache_blocks(self, request: Request, num_computed_tokens: int) -> None:
"""Cache the blocks for the request, if enabled.
+8 -7
View File
@@ -872,12 +872,10 @@ class Scheduler(SchedulerInterface):
if num_new_tokens == 0:
break
# Handles an edge case when P/D Disaggregation
# is used with Spec Decoding where an
# extra block gets allocated which
# creates a mismatch between the number
# of local and remote blocks.
limit_lookahead_tokens = load_kv_async and self.use_eagle
# During async KV load, no forward pass is run yet.
# Allocate speculative lookahead slots later to avoid
# mismatching local and remote block counts.
limit_lookahead_tokens = load_kv_async and self.num_lookahead_tokens > 0
effective_lookahead_tokens = (
0 if limit_lookahead_tokens else self.num_lookahead_tokens
)
@@ -2371,7 +2369,10 @@ class Scheduler(SchedulerInterface):
num_prompt_tokens=request.num_prompt_tokens,
)
block_ids = self.kv_cache_manager.get_block_ids(request.request_id)
block_ids = self.kv_cache_manager.get_block_ids_for_computed_tokens(
request_id=request.request_id,
num_computed_tokens=request.num_computed_tokens,
)
if not isinstance(self.connector, SupportsHMA):
# NOTE(Kuntai): We should deprecate this code path after we enforce
+7 -1
View File
@@ -49,7 +49,13 @@ def _torch_cuda_wrapper():
torch.cuda.current_stream = partial(torch.xpu.current_stream)
torch.cuda.stream = partial(torch.xpu.stream)
torch.cuda.set_stream = partial(torch.xpu.set_stream)
torch.cuda.Event = partial(torch.xpu.Event)
# torch.xpu.Event does not accept the ``blocking`` kwarg that
# torch.cuda.Event supports, so drop it here.
def _xpu_event(*args, blocking=None, **kwargs):
return torch.xpu.Event(*args, **kwargs)
torch.cuda.Event = _xpu_event
if supports_xpu_graph():
torch.cuda.graph = partial(torch.xpu.graph)
torch.cuda.CUDAGraph = torch.xpu.XPUGraph