51
51
ONNX_WEIGHTS_NAME ,
52
52
OV_XML_FILE_NAME ,
53
53
)
54
+ from .calibration_dataset_builder import OVCalibrationDatasetBuilder
54
55
from .configuration import (
55
56
OVConfig ,
56
57
OVMixedQuantizationConfig ,
57
58
OVQuantizationConfig ,
58
59
OVQuantizationMethod ,
59
60
OVWeightQuantizationConfig ,
60
61
)
61
- from .dataset_builder import OVCalibrationDatasetBuilder
62
62
63
63
64
64
if is_datasets_available ():
65
65
from datasets import Dataset
66
66
67
- if is_diffusers_available ():
68
- from optimum .intel .openvino .modeling_diffusion import OVDiffusionPipeline
69
-
70
67
register_module (ignored_algorithms = [])(Conv1D )
71
68
72
69
core = Core ()
@@ -177,6 +174,9 @@ def quantize(
177
174
"quantization. Will rely on `calibration_dataset`."
178
175
)
179
176
177
+ if is_diffusers_available ():
178
+ from optimum .intel .openvino .modeling_diffusion import OVDiffusionPipeline
179
+
180
180
if calibration_dataset is not None and isinstance (calibration_dataset , nncf .Dataset ):
181
181
# TODO: add a warning that calibration dataset should be a dictionary in this case
182
182
calibration_dataset = {"model" : calibration_dataset }
@@ -192,6 +192,14 @@ def quantize(
192
192
# TODO: analyze this execution path
193
193
calibration_dataset = calibration_dataset .select_columns (["caption" ])
194
194
195
+ if (
196
+ isinstance (self .model , OVDiffusionPipeline )
197
+ and isinstance (calibration_dataset , list )
198
+ and all (isinstance (it , str ) for it in calibration_dataset )
199
+ ):
200
+ # TODO: deprecate this way of providing calibration dataset
201
+ data_collator = data_collator or (lambda x : x )
202
+
195
203
calibration_dataset = self .dataset_builder .build_from_dataset (
196
204
quantization_config , calibration_dataset , batch_size , data_collator , remove_unused_columns
197
205
)
@@ -233,6 +241,9 @@ def _quantize_ovbasemodel(
233
241
from optimum .intel .openvino .modeling_seq2seq import _OVModelForWhisper
234
242
from optimum .intel .openvino .modeling_visual_language import OVModelForVisualCausalLM
235
243
244
+ if is_diffusers_available ():
245
+ from optimum .intel .openvino .modeling_diffusion import OVDiffusionPipeline
246
+
236
247
quantization_config = ov_config .quantization_config
237
248
if calibration_datasets is None and quantization_config .dataset is not None :
238
249
calibration_datasets = self .dataset_builder .build_from_quantization_config (quantization_config )
@@ -290,7 +301,7 @@ def _quantize_ovbasemodel(
290
301
raise ValueError ("Calibration datasets for Diffusion models should contain only one value." )
291
302
# Apply hybrid quantization to diffusion model
292
303
diffusion_model_name , calibration_dataset = next (iter (calibration_datasets .items ()))
293
- diffusion_model = getattr (self .model , diffusion_model_name )
304
+ diffusion_model = getattr (self .model , diffusion_model_name ). model
294
305
getattr (self .model , diffusion_model_name ).model = _hybrid_quantization (
295
306
diffusion_model , quantization_config , calibration_dataset , ** kwargs
296
307
)
@@ -476,7 +487,7 @@ def _set_task(self):
476
487
def get_calibration_dataset (
477
488
self ,
478
489
dataset_name : str ,
479
- num_samples : int = 100 ,
490
+ num_samples : Optional [ int ] = None ,
480
491
dataset_config_name : Optional [str ] = None ,
481
492
dataset_split : str = "train" ,
482
493
preprocess_function : Optional [Callable ] = None ,
@@ -492,7 +503,7 @@ def get_calibration_dataset(
492
503
dataset_name (`str`):
493
504
The dataset repository name on the Hugging Face Hub or path to a local directory containing data files
494
505
in generic formats and optionally a dataset script, if it requires some code to read the data files.
495
- num_samples (`int`, defaults to 100 ):
506
+ num_samples (`int`, *optional* ):
496
507
The maximum number of samples composing the calibration dataset.
497
508
dataset_config_name (`str`, *optional*):
498
509
The name of the dataset configuration.
@@ -518,6 +529,7 @@ def get_calibration_dataset(
518
529
519
530
return self .dataset_builder .load_dataset (
520
531
dataset_name ,
532
+ num_samples ,
521
533
dataset_config_name ,
522
534
dataset_split ,
523
535
preprocess_function ,
@@ -531,11 +543,7 @@ def get_calibration_dataset(
531
543
def _quantize_whisper_model (
532
544
model , quantization_config : OVQuantizationConfig , calibration_dataset : Dict [str , nncf .Dataset ], ** kwargs
533
545
):
534
- for submodel_name in ["encoder_model" , "decoder_model" , "decoder_with_past_model" ]:
535
- submodel = getattr (model , submodel_name , None )
536
- if submodel_name == "decoder_with_past_model" and submodel is None :
537
- continue
538
-
546
+ for submodel_name , submodel in model .ov_submodels .items ():
539
547
config = quantization_config .clone ()
540
548
# quantization_config.num_samples of audio samples result in more actual model inputs
541
549
config .num_samples = calibration_dataset [submodel_name ].get_length ()
0 commit comments