From 9271fc4575ef77db2bc65e6002a6f5f2607a1841 Mon Sep 17 00:00:00 2001 From: foraxe <1055696449@qq.com> Date: Sun, 26 Apr 2026 11:10:01 +0800 Subject: [PATCH 1/2] Avoid DSv4 compressed mixed multi-prefill crash --- python/sglang/srt/managers/scheduler.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/python/sglang/srt/managers/scheduler.py b/python/sglang/srt/managers/scheduler.py index 7fb06598feb4..ddc9a622f1fc 100644 --- a/python/sglang/srt/managers/scheduler.py +++ b/python/sglang/srt/managers/scheduler.py @@ -33,7 +33,7 @@ from torch.cuda import StreamContext as CudaStreamContext from torch.distributed import barrier -from sglang.srt.configs.model_config import ModelConfig +from sglang.srt.configs.model_config import ModelConfig, is_deepseek_compressed from sglang.srt.constrained.grammar_manager import GrammarManager from sglang.srt.disaggregation.decode import ( DecodePreallocQueue, @@ -329,6 +329,7 @@ def __init__( # Init model configs self.init_model_config() + self._dsv4_compressed_prefill_guard_warned = False # Init metrics stats self.init_metrics(tp_rank, pp_rank, dp_rank) @@ -1950,6 +1951,24 @@ def get_num_allocatable_reqs(self, running_bs): res = min(res, self.req_to_token_pool.available_size()) return res + def _get_effective_prefill_max_requests(self, running_bs: int) -> Optional[int]: + prefill_max_requests = self.server_args.prefill_max_requests + if ( + running_bs > 0 + and is_deepseek_compressed(self.model_config.hf_config) + and self.server_args.get_attention_backends() == ("compressed", "compressed") + and (prefill_max_requests is None or prefill_max_requests > 1) + ): + if not self._dsv4_compressed_prefill_guard_warned: + logger.warning( + "DSv4 compressed prefill guard active: running_bs=%s, " + "effective_prefill_max_requests=1", + running_bs, + ) + self._dsv4_compressed_prefill_guard_warned = True + return 1 + return prefill_max_requests + def get_new_batch_prefill(self) -> Optional[ScheduleBatch]: prefill_delayer_single_pass = None if self.prefill_delayer: @@ -2019,6 +2038,8 @@ def _get_new_batch_prefill_raw( if dynamic_size is not None: chunked_prefill_size = dynamic_size + prefill_max_requests = self._get_effective_prefill_max_requests(running_bs) + # Prefill policy adder = PrefillAdder( self.page_size, @@ -2030,7 +2051,7 @@ def _get_new_batch_prefill_raw( chunked_prefill_size, running_bs if self.is_mixed_chunk else 0, self.priority_scheduling_preemption_threshold, - prefill_max_requests=self.server_args.prefill_max_requests, + prefill_max_requests=prefill_max_requests, prefill_delayer_single_pass=prefill_delayer_single_pass, dllm_config=self.dllm_config, ) From 27467df7f0892e45da6be8ae7129e470440b40dc Mon Sep 17 00:00:00 2001 From: foraxe <1055696449@qq.com> Date: Sun, 26 Apr 2026 11:21:29 +0800 Subject: [PATCH 2/2] Cache DSv4 compressed prefill guard predicate --- python/sglang/srt/managers/scheduler.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/python/sglang/srt/managers/scheduler.py b/python/sglang/srt/managers/scheduler.py index ddc9a622f1fc..a942ce0ba577 100644 --- a/python/sglang/srt/managers/scheduler.py +++ b/python/sglang/srt/managers/scheduler.py @@ -330,6 +330,10 @@ def __init__( # Init model configs self.init_model_config() self._dsv4_compressed_prefill_guard_warned = False + self._is_dsv4_compressed_with_compressed_backend = ( + is_deepseek_compressed(self.model_config.hf_config) + and self.server_args.get_attention_backends() == ("compressed", "compressed") + ) # Init metrics stats self.init_metrics(tp_rank, pp_rank, dp_rank) @@ -1955,8 +1959,7 @@ def _get_effective_prefill_max_requests(self, running_bs: int) -> Optional[int]: prefill_max_requests = self.server_args.prefill_max_requests if ( running_bs > 0 - and is_deepseek_compressed(self.model_config.hf_config) - and self.server_args.get_attention_backends() == ("compressed", "compressed") + and self._is_dsv4_compressed_with_compressed_backend and (prefill_max_requests is None or prefill_max_requests > 1) ): if not self._dsv4_compressed_prefill_guard_warned: