[Bugfix] Restore is_sym guard for zp in GPTQ/CT MoE to fix symmetric quant regression (#45656)
Signed-off-by: yuwenzho <yuwen.zhou@intel.com>
Yuwen Zhou committed
Jun 19, 2026 at 00:20 UTC
058cc0a8b6e33523b1ed75db933726959df43791
2 files changed
+10
-4
vllm/model_executor/layers/quantization/auto_gptq.py
+8
-2
@@ -25,6 +25,7 @@ from vllm.model_executor.layers.fused_moe import (
25
UnquantizedFusedMoEMethod,
26
)
27
from vllm.model_executor.layers.fused_moe.oracle.int_wna16 import (
28
+ WNA16MoEBackend,
29
convert_to_wna16_moe_kernel_format,
30
make_wna16_moe_kernel,
31
select_wna16_moe_backend,
@@ -753,13 +754,18 @@ class AutoGPTQMoEMethod(FusedMoEMethodBase):
754
gptq_marlin_moe_quant_config,
755
)
756
757
+ # CPU fused_experts_cpu requires zero points even for symmetric quant
758
+ use_zp = (
759
+ not self.quant_config.is_sym
760
+ or self.wna16_moe_backend == WNA16MoEBackend.CPU
761
+ )
762
return gptq_marlin_moe_quant_config(
763
w1_scale=layer.w13_scales,
764
w2_scale=layer.w2_scales,
765
weight_bits=self.quant_config.weight_bits,
766
group_size=self.quant_config.group_size,
761
- w1_zp=getattr(layer, "w13_qzeros", None),
762
- w2_zp=getattr(layer, "w2_qzeros", None),
767
+ w1_zp=getattr(layer, "w13_qzeros", None) if use_zp else None,
768
+ w2_zp=getattr(layer, "w2_qzeros", None) if use_zp else None,
769
w1_bias=getattr(layer, "w13_bias", None),
770
w2_bias=getattr(layer, "w2_bias", None),
771
)
vllm/model_executor/layers/quantization/compressed_tensors/compressed_tensors_moe/compressed_tensors_moe_wna16_marlin.py
+2
-2
@@ -415,9 +415,9 @@ class CompressedTensorsWNA16MarlinMoEMethod(CompressedTensorsMoEMethod):
415
replace_parameter(layer, "w13_weight_scale", w13_scales)
416
replace_parameter(layer, "w2_weight_scale", w2_scales)
417
418
- if w13_qzeros is not None:
418
+ # CPU fused_experts_cpu requires zero points even for symmetric quant
419
+ if not self.symmetric or self.wna16_backend == WNA16MoEBackend.CPU:
420
replace_parameter(layer, "w13_weight_zero_point", w13_qzeros)
420
- if w2_qzeros is not None:
421
replace_parameter(layer, "w2_weight_zero_point", w2_qzeros)
422
423
# Marlin-specific parameters (not needed for Flashinfer)