@@ -769,9 +769,10 @@ def load_sub_model(
769769 and isinstance (quantization_config , PipelineQuantizationConfig )
770770 and issubclass (class_obj , torch .nn .Module )
771771 ):
772- exclude_modules = quantization_config .exclude_modules or []
773- if name not in exclude_modules :
774- model_quant_config = _resolve_quant_config (quantization_config , is_diffusers = is_diffusers_model )
772+ model_quant_config = quantization_config ._resolve_quant_config (
773+ is_diffusers = is_diffusers_model , module_name = name
774+ )
775+ if model_quant_config is not None :
775776 loading_kwargs ["quantization_config" ] = model_quant_config
776777
777778 # check if the module is in a subdirectory
@@ -1085,20 +1086,33 @@ def _maybe_raise_error_for_incorrect_transformers(config_dict):
10851086 raise ValueError ("Please upgrade your `transformers` installation to the latest version to use DDUF." )
10861087
10871088
1088- def _resolve_quant_config (quant_config , is_diffusers = True ):
1089+ def _resolve_quant_config (quant_config , is_diffusers = True , module_name = None ):
10891090 if is_diffusers :
10901091 from ..quantizers .auto import AUTO_QUANTIZATION_CONFIG_MAPPING
10911092 else :
10921093 from transformers .quantizers .auto import AUTO_QUANTIZATION_CONFIG_MAPPING
10931094
1094- quant_backend = quant_config .quant_backend
1095- if quant_backend not in AUTO_QUANTIZATION_CONFIG_MAPPING :
1096- raise ValueError (
1097- f"Provided { quant_backend = } was not found in the support quantizers. Available ones are: { AUTO_QUANTIZATION_CONFIG_MAPPING .keys ()} ."
1098- )
1099-
1100- quant_config_cls = AUTO_QUANTIZATION_CONFIG_MAPPING [quant_backend ]
1095+ # Granular case.
1096+ if getattr (quant_config , "is_granular" , False ):
1097+ config = quant_config .mapping .get (module_name )
1098+ quant_backend = config .get ("quant_backend" )
1099+ if quant_backend not in AUTO_QUANTIZATION_CONFIG_MAPPING :
1100+ raise ValueError (
1101+ f"Module '{ module_name } ': Provided quant_backend={ quant_backend } was not found. "
1102+ f"Available ones are: { list (AUTO_QUANTIZATION_CONFIG_MAPPING .keys ())} ."
1103+ )
1104+ quant_config_cls = AUTO_QUANTIZATION_CONFIG_MAPPING [quant_backend ]
1105+ quant_kwargs = config .get ("quant_kwargs" )
11011106
1102- quant_kwargs = quant_config .quant_kwargs
1103- quant_config = quant_config_cls (** quant_kwargs )
1104- return quant_config
1107+ return quant_config_cls (** quant_kwargs )
1108+ else :
1109+ # Global config case.
1110+ quant_backend = quant_config .quant_backend
1111+ if quant_backend not in AUTO_QUANTIZATION_CONFIG_MAPPING :
1112+ raise ValueError (
1113+ f"Provided quant_backend={ quant_backend } was not found. "
1114+ f"Available ones are: { list (AUTO_QUANTIZATION_CONFIG_MAPPING .keys ())} ."
1115+ )
1116+ quant_config_cls = AUTO_QUANTIZATION_CONFIG_MAPPING [quant_backend ]
1117+ quant_kwargs = quant_config .quant_kwargs
1118+ return quant_config_cls (** quant_kwargs )
0 commit comments