From 8c010622a003e7bd23e67b03c7841950e79264b8 Mon Sep 17 00:00:00 2001 From: ZX-ModelCloud Date: Sat, 11 Oct 2025 19:29:27 +0800 Subject: [PATCH 1/2] Fix submodule_finalize() missing parameter Signed-off-by: ZX-ModelCloud --- gptqmodel/looper/dequantize_processor.py | 3 ++- gptqmodel/looper/native_processor.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/gptqmodel/looper/dequantize_processor.py b/gptqmodel/looper/dequantize_processor.py index b6951cbdd..96d3cc1cf 100644 --- a/gptqmodel/looper/dequantize_processor.py +++ b/gptqmodel/looper/dequantize_processor.py @@ -9,6 +9,7 @@ from ..looper.loop_processor import LoopProcessor from ..looper.named_module import NamedModule +from ..models import BaseQModel from ..nn_modules.qlinear.torch import TorchQuantLinear from ..utils.logger import setup_logger @@ -47,7 +48,7 @@ def process(self, module: NamedModule): "wq": wq, }) - def submodule_finalize(self, module: NamedModule): + def submodule_finalize(self, module: NamedModule, model: BaseQModel, **kwargs): module.state.pop("w", None) # no need for these weights now module.state.pop("wq", None) # no need for these weights now diff --git a/gptqmodel/looper/native_processor.py b/gptqmodel/looper/native_processor.py index 0c8de5bb0..01142929b 100644 --- a/gptqmodel/looper/native_processor.py +++ b/gptqmodel/looper/native_processor.py @@ -83,7 +83,7 @@ def tmp(module, inp: Tuple[torch.Tensor, ...], out: torch.Tensor): def process(self, module: NamedModule): module.state[NATIVE_INPUTS_STATE_KEY] = self.native_inp_caches.pop(module.name) - def submodule_finalize(self, module: NamedModule): + def submodule_finalize(self, module: NamedModule, model: BaseQModel, **kwargs): module.state.pop(NATIVE_INPUTS_STATE_KEY, None) def finalize(self, model: BaseQModel, **kwargs): From 25527ba22cdefe04a4662272676745988e5eb342 Mon Sep 17 00:00:00 2001 From: ZX-ModelCloud Date: Sat, 11 Oct 2025 19:30:17 +0800 Subject: [PATCH 2/2] Fix args clone with gptq_v2 Signed-off-by: ZX-ModelCloud --- gptqmodel/models/base.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gptqmodel/models/base.py b/gptqmodel/models/base.py index bc88cdfd9..e9d70bd70 100644 --- a/gptqmodel/models/base.py +++ b/gptqmodel/models/base.py @@ -922,7 +922,13 @@ def quantize( if self.quantize_config.v2 is True: from ..looper.native_processor import NativeProcessor - args_clone = copy.deepcopy(args) + + # During the deepcopy process, self.prepare_dataset will be deeply copied along with self. However, + # self has a threading.RLock() , which is not serializable. + args_to_copy = {k: v for k, v in args.items() if k != "prepare_dataset_func"} + args_clone = copy.deepcopy(args_to_copy) + args_clone["prepare_dataset_func"] = args["prepare_dataset_func"] + args_clone.pop("calculate_w_wq_diff", None) quantize_processor.insert(0, NativeProcessor(**args_clone))