@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / 67fc16cd8c
Fork 0

A high-throughput and memory-efficient inference and serving engine for LLMs

Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git

Synced Nov 12, 13:30 UTC

[Bugfix] If chunked_prefill is disabled, end the scheduling early. (#28911)

Signed-off-by: wang.yuqi <yuqi.wang@daocloud.io>

wang.yuqi committed Nov 25, 2025 at 16:06 UTC 67fc16cd8cf778a30ad0f7619fe77bd85f1d1633
3 files changed +33 -4
tests/v1/core/test_scheduler.py
+28
@@ -641,6 +641,34 @@ def test_schedule_concurrent_batches(
641 scheduler.update_from_output(scheduler_output1, model_runner_output)
642
643
644 +@pytest.mark.parametrize("enable_chunked_prefill", [True, False])
645 +def test_schedule_order(enable_chunked_prefill: bool):
646 + scheduler = create_scheduler(
647 + max_num_batched_tokens=1024,
648 + max_num_seqs=3,
649 + enable_chunked_prefill=enable_chunked_prefill,
650 + )
651 +
652 + # long requests
653 + requests = create_requests(num_requests=2, num_tokens=800)
654 + # short requests
655 + requests += create_requests(num_requests=2, num_tokens=10)
656 +
657 + for request in requests:
658 + scheduler.add_request(request)
659 +
660 + scheduler_output1 = scheduler.schedule()
661 +
662 + if enable_chunked_prefill:
663 + # When enable chunked prefill, long requests will be chunked.
664 + assert len(scheduler_output1.scheduled_new_reqs) == 2
665 + else:
666 + # When disable chunked prefill, should not skip the long requests,
667 + # and scheduling subsequent short requests in advance,
668 + # even though there is still token budgets remaining.
669 + assert len(scheduler_output1.scheduled_new_reqs) == 1
670 +
671 +
672 def test_preempt_during_execution():
673 # NOTE(woosuk): The actual number of available blocks is 10 instead of 11
674 # because block 0 is reserved as the null block.
tests/v1/core/utils.py
+2 -1
@@ -42,6 +42,7 @@ def create_scheduler(
42 model: str = "facebook/opt-125m",
43 max_num_seqs: int = 16,
44 max_num_batched_tokens: int = 8192,
45 + enable_chunked_prefill: bool = True,
46 enable_prefix_caching: bool = False,
47 long_prefill_token_threshold: int = 0,
48 disable_chunked_mm_input: bool = False,
@@ -76,7 +77,7 @@ def create_scheduler(
77 max_model_len=max_model_len,
78 long_prefill_token_threshold=long_prefill_token_threshold,
79 disable_chunked_mm_input=disable_chunked_mm_input,
79 - enable_chunked_prefill=True,
80 + enable_chunked_prefill=enable_chunked_prefill,
81 async_scheduling=async_scheduling,
82 )
83 model_config = ModelConfig(
vllm/v1/core/sched/scheduler.py
+3 -3
@@ -508,9 +508,9 @@ class Scheduler(SchedulerInterface):
508 not self.scheduler_config.enable_chunked_prefill
509 and num_new_tokens > token_budget
510 ):
511 - self.waiting.pop_request()
512 - skipped_waiting_requests.prepend_request(request)
513 - continue
511 + # If chunked_prefill is disabled,
512 + # we can stop the scheduling here.
513 + break
514
515 num_new_tokens = min(num_new_tokens, token_budget)
516 assert num_new_tokens > 0