From fffdfb6fcbf473a2a93bebf1f5c3e1c1aa2b9f02 Mon Sep 17 00:00:00 2001 From: Kurkur <102506892+litmei@users.noreply.github.com> Date: Fri, 29 May 2026 09:11:36 +0800 Subject: [PATCH] [Fix][NPU] Preserve existing packed_modules_mapping when merging model-level fused module mappings (#25755) --- python/sglang/srt/layers/quantization/base_config.py | 3 +++ python/sglang/srt/layers/quantization/modelslim/modelslim.py | 3 +++ python/sglang/srt/models/deepseek_v2.py | 4 ++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/python/sglang/srt/layers/quantization/base_config.py b/python/sglang/srt/layers/quantization/base_config.py index 232568db7..cf276bc9f 100644 --- a/python/sglang/srt/layers/quantization/base_config.py +++ b/python/sglang/srt/layers/quantization/base_config.py @@ -131,6 +131,9 @@ class QuantizationConfig(ABC): # mapping is updated by models as they initialize self.packed_modules_mapping: Dict[str, List[str]] = dict() + def update_packed_modules_mapping(self, mapping: Dict[str, List[str]]) -> None: + self.packed_modules_mapping = mapping + @abstractmethod def get_name(self) -> str: """Name of the quantization method.""" diff --git a/python/sglang/srt/layers/quantization/modelslim/modelslim.py b/python/sglang/srt/layers/quantization/modelslim/modelslim.py index 3d0c9079a..50f2647e6 100644 --- a/python/sglang/srt/layers/quantization/modelslim/modelslim.py +++ b/python/sglang/srt/layers/quantization/modelslim/modelslim.py @@ -108,6 +108,9 @@ class ModelSlimConfig(QuantizationConfig): [npu_wrapper_rmsnorm_forward], ) + def update_packed_modules_mapping(self, mapping: Dict[str, List[str]]) -> None: + self.packed_modules_mapping.update(mapping) + def get_linear_method(self) -> ModelSlimLinearMethod: return ModelSlimLinearMethod(self) diff --git a/python/sglang/srt/models/deepseek_v2.py b/python/sglang/srt/models/deepseek_v2.py index 564f38d6f..c7d4e999d 100644 --- a/python/sglang/srt/models/deepseek_v2.py +++ b/python/sglang/srt/models/deepseek_v2.py @@ -2462,8 +2462,8 @@ class DeepseekV2ForCausalLM(nn.Module, DeepseekV2WeightLoaderMixin): # Quant configs like Quark may rely on the model to provide fused-module # mappings so exclusion checks can unfuse derived names back to the # checkpoint's source layer names. - if quant_config is not None and hasattr(quant_config, "packed_modules_mapping"): - quant_config.packed_modules_mapping = self.packed_modules_mapping + if quant_config is not None: + quant_config.update_packed_modules_mapping(self.packed_modules_mapping) self.pp_group = get_pp_group() self.config = config