From 2e1b9e254734171e9d29767aca4168ef7c77a3c2 Mon Sep 17 00:00:00 2001 From: doujiang24 Date: Wed, 4 Mar 2026 03:55:15 +0800 Subject: [PATCH] Fix routed_dp_rank boundary validation (#19762) Signed-off-by: doujiang24 Co-authored-by: hnyls2002 Co-authored-by: Liangsheng Yin --- python/sglang/srt/entrypoints/engine.py | 16 +++++++++------- python/sglang/srt/managers/tokenizer_manager.py | 11 +++++++++++ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/python/sglang/srt/entrypoints/engine.py b/python/sglang/srt/entrypoints/engine.py index 066fc3e08..8bf1ab524 100644 --- a/python/sglang/srt/entrypoints/engine.py +++ b/python/sglang/srt/entrypoints/engine.py @@ -219,14 +219,16 @@ class Engine(EngineBase): if routed_dp_rank is None: routed_dp_rank = data_parallel_rank - if self.server_args.enable_dp_attention: - if routed_dp_rank is None: - logger.debug("routed_dp_rank not provided, using default dispatch") - elif routed_dp_rank < 0: - raise ValueError("routed_dp_rank must be non-negative") - elif routed_dp_rank >= self.server_args.dp_size: + if routed_dp_rank is not None: + dp_size = self.server_args.dp_size + if dp_size <= 1 and routed_dp_rank == 0: + logger.warning( + f"routed_dp_rank={routed_dp_rank} is ignored because dp_size={dp_size}" + ) + return None + if routed_dp_rank < 0 or routed_dp_rank >= dp_size: raise ValueError( - f"routed_dp_rank must be less than dp_size: {self.server_args.dp_size}" + f"routed_dp_rank={routed_dp_rank} out of range [0, {dp_size})" ) logger.debug(f"routed_dp_rank: {routed_dp_rank}") diff --git a/python/sglang/srt/managers/tokenizer_manager.py b/python/sglang/srt/managers/tokenizer_manager.py index afca49f6f..bf9badbae 100644 --- a/python/sglang/srt/managers/tokenizer_manager.py +++ b/python/sglang/srt/managers/tokenizer_manager.py @@ -484,6 +484,17 @@ class TokenizerManager(TokenizerCommunicatorMixin, TokenizerManagerMultiItemMixi obj.normalize_batch_and_arguments() self._validate_rid(obj) + if isinstance(obj, GenerateReqInput) and obj.routed_dp_rank is not None: + dp_size = self.server_args.dp_size + if dp_size <= 1 and obj.routed_dp_rank == 0: + logger.warning( + f"routed_dp_rank={obj.routed_dp_rank} is ignored because dp_size={dp_size}" + ) + elif obj.routed_dp_rank < 0 or obj.routed_dp_rank >= dp_size: + raise ValueError( + f"routed_dp_rank={obj.routed_dp_rank} out of range [0, {dp_size})" + ) + self._req_stats_init(obj, request) if self.server_args.language_only: self._handle_epd_disaggregation_encode_request(obj)