Skip to content

Commit 3ed03f8

Browse files
Make tests alive
1 parent a77da49 commit 3ed03f8

10 files changed

+139
-107
lines changed

optimum/exporters/openvino/__main__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ class StoreAttr(object):
501501
"Quantization of the weights requires nncf, please install it with `pip install nncf`"
502502
)
503503

504-
from optimum.intel.openvino.quantization.ov_quantizer import _weight_only_quantization
504+
from optimum.intel.openvino.quantization.quantizer import _weight_only_quantization
505505

506506
_weight_only_quantization(submodel, quantization_config)
507507
compressed_submodel_path = submodel_path.parent / f"{submodel_path.stem}_compressed.xml"

optimum/intel/openvino/modeling_base.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ def fix_op_names_duplicates(model: openvino.runtime.Model):
259259
"Quantization of the weights to int8 requires nncf, please install it with `pip install nncf`"
260260
)
261261

262-
from optimum.intel.openvino.quantization.ov_quantizer import _weight_only_quantization
262+
from optimum.intel.openvino.quantization.quantizer import _weight_only_quantization
263263

264264
if not isinstance(quantization_config, (dict, OVWeightQuantizationConfig)):
265265
raise TypeError(

optimum/intel/openvino/modeling_decoder.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -891,7 +891,7 @@ def _from_pretrained(
891891
"quantization is not supported with `compile_only` mode, please intialize model without this option"
892892
)
893893

894-
from optimum.intel.openvino.quantization.ov_quantizer import OVQuantizer
894+
from optimum.intel.openvino.quantization.quantizer import OVQuantizer
895895

896896
default_config = _check_default_4bit_configs(config.name_or_path)
897897

optimum/intel/openvino/modeling_visual_language.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,7 @@ def _from_pretrained(
561561
)
562562

563563
if to_quantize:
564-
from optimum.intel.openvino.quantization.ov_quantizer import OVQuantizer
564+
from optimum.intel.openvino.quantization.quantizer import OVQuantizer
565565

566566
quantization_config_copy = copy.deepcopy(quantization_config)
567567
quantization_config_copy.tokenizer = quantization_config.tokenizer or model_id

optimum/intel/openvino/quantization/__init__.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
OVMixedQuantizationConfig,
2020
OVQuantizationConfig,
2121
OVQuantizationConfigBase,
22+
OVQuantizationMethod,
2223
OVWeightQuantizationConfig,
2324
)
24-
from .ov_quantizer import OVQuantizer
25+
from .quantizer import OVQuantizer

optimum/intel/openvino/quantization/dataset_builder.py optimum/intel/openvino/quantization/calibration_dataset_builder.py

+97-79
Large diffs are not rendered by default.

optimum/intel/openvino/quantization/configuration.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@
2525

2626
from optimum.configuration_utils import BaseConfig
2727

28-
from ..utils.import_utils import is_nncf_available
29-
from .utils import (
28+
from ...utils.import_utils import is_nncf_available
29+
from ..utils import (
3030
LANGUAGE_DATASETS,
31-
PREDEFINED_SD_DATASETS,
31+
PREDEFINED_DIFFUSION_DATASETS,
3232
PREDEFINED_SPEECH_TO_TEXT_DATASETS,
3333
PREDEFINED_VISUAL_LM_DATASETS,
3434
)
@@ -514,7 +514,7 @@ def post_init(self):
514514
)
515515
if self.dataset is not None and isinstance(self.dataset, str):
516516
visual_lm_datasets = list(PREDEFINED_VISUAL_LM_DATASETS.keys())
517-
stable_diffusion_datasets = list(PREDEFINED_SD_DATASETS.keys())
517+
stable_diffusion_datasets = list(PREDEFINED_DIFFUSION_DATASETS.keys())
518518
if self.dataset not in LANGUAGE_DATASETS + visual_lm_datasets + stable_diffusion_datasets:
519519
raise ValueError(
520520
f"""You have entered a string value for dataset. You can only choose between
@@ -523,7 +523,7 @@ def post_init(self):
523523
)
524524

525525
if self.dataset is not None and not (
526-
self.quant_method == OVQuantizationMethod.AWQ
526+
self.quant_method in [OVQuantizationMethod.AWQ, OVQuantizationMethod.HYBRID]
527527
or self.scale_estimation
528528
or self.gptq
529529
or self.lora_correction

optimum/intel/openvino/quantization/ov_quantizer.py optimum/intel/openvino/quantization/quantizer.py

+20-12
Original file line numberDiff line numberDiff line change
@@ -51,22 +51,19 @@
5151
ONNX_WEIGHTS_NAME,
5252
OV_XML_FILE_NAME,
5353
)
54+
from .calibration_dataset_builder import OVCalibrationDatasetBuilder
5455
from .configuration import (
5556
OVConfig,
5657
OVMixedQuantizationConfig,
5758
OVQuantizationConfig,
5859
OVQuantizationMethod,
5960
OVWeightQuantizationConfig,
6061
)
61-
from .dataset_builder import OVCalibrationDatasetBuilder
6262

6363

6464
if is_datasets_available():
6565
from datasets import Dataset
6666

67-
if is_diffusers_available():
68-
from optimum.intel.openvino.modeling_diffusion import OVDiffusionPipeline
69-
7067
register_module(ignored_algorithms=[])(Conv1D)
7168

7269
core = Core()
@@ -177,6 +174,9 @@ def quantize(
177174
"quantization. Will rely on `calibration_dataset`."
178175
)
179176

177+
if is_diffusers_available():
178+
from optimum.intel.openvino.modeling_diffusion import OVDiffusionPipeline
179+
180180
if calibration_dataset is not None and isinstance(calibration_dataset, nncf.Dataset):
181181
# TODO: add a warning that calibration dataset should be a dictionary in this case
182182
calibration_dataset = {"model": calibration_dataset}
@@ -192,6 +192,14 @@ def quantize(
192192
# TODO: analyze this execution path
193193
calibration_dataset = calibration_dataset.select_columns(["caption"])
194194

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+
195203
calibration_dataset = self.dataset_builder.build_from_dataset(
196204
quantization_config, calibration_dataset, batch_size, data_collator, remove_unused_columns
197205
)
@@ -233,6 +241,9 @@ def _quantize_ovbasemodel(
233241
from optimum.intel.openvino.modeling_seq2seq import _OVModelForWhisper
234242
from optimum.intel.openvino.modeling_visual_language import OVModelForVisualCausalLM
235243

244+
if is_diffusers_available():
245+
from optimum.intel.openvino.modeling_diffusion import OVDiffusionPipeline
246+
236247
quantization_config = ov_config.quantization_config
237248
if calibration_datasets is None and quantization_config.dataset is not None:
238249
calibration_datasets = self.dataset_builder.build_from_quantization_config(quantization_config)
@@ -290,7 +301,7 @@ def _quantize_ovbasemodel(
290301
raise ValueError("Calibration datasets for Diffusion models should contain only one value.")
291302
# Apply hybrid quantization to diffusion model
292303
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
294305
getattr(self.model, diffusion_model_name).model = _hybrid_quantization(
295306
diffusion_model, quantization_config, calibration_dataset, **kwargs
296307
)
@@ -476,7 +487,7 @@ def _set_task(self):
476487
def get_calibration_dataset(
477488
self,
478489
dataset_name: str,
479-
num_samples: int = 100,
490+
num_samples: Optional[int] = None,
480491
dataset_config_name: Optional[str] = None,
481492
dataset_split: str = "train",
482493
preprocess_function: Optional[Callable] = None,
@@ -492,7 +503,7 @@ def get_calibration_dataset(
492503
dataset_name (`str`):
493504
The dataset repository name on the Hugging Face Hub or path to a local directory containing data files
494505
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*):
496507
The maximum number of samples composing the calibration dataset.
497508
dataset_config_name (`str`, *optional*):
498509
The name of the dataset configuration.
@@ -518,6 +529,7 @@ def get_calibration_dataset(
518529

519530
return self.dataset_builder.load_dataset(
520531
dataset_name,
532+
num_samples,
521533
dataset_config_name,
522534
dataset_split,
523535
preprocess_function,
@@ -531,11 +543,7 @@ def get_calibration_dataset(
531543
def _quantize_whisper_model(
532544
model, quantization_config: OVQuantizationConfig, calibration_dataset: Dict[str, nncf.Dataset], **kwargs
533545
):
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():
539547
config = quantization_config.clone()
540548
# quantization_config.num_samples of audio samples result in more actual model inputs
541549
config.num_samples = calibration_dataset[submodel_name].get_length()

optimum/intel/openvino/utils.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -141,13 +141,13 @@
141141
LANGUAGE_DATASETS = ["wikitext2", "c4", "c4-new", "auto"]
142142

143143
PREDEFINED_DIFFUSION_DATASETS = {
144-
"conceptual_captions": {"split": "train", "inputs": {"prompt": "caption"}, "streaming": True},
144+
"conceptual_captions": {"split": "train", "prompt_column_name": "caption", "streaming": True},
145145
"laion/220k-GPT4Vision-captions-from-LIVIS": {
146146
"split": "train",
147-
"inputs": {"prompt": "caption"},
147+
"prompt_column_name": "caption",
148148
"streaming": True,
149149
},
150-
"laion/filtered-wit": {"split": "train", "inputs": {"prompt": "caption"}, "streaming": True},
150+
"laion/filtered-wit": {"split": "train", "prompt_column_name": "caption", "streaming": True},
151151
}
152152

153153
PREDEFINED_VISUAL_LM_DATASETS = {
@@ -163,7 +163,6 @@
163163
"id": "openslr/librispeech_asr",
164164
"name": "clean",
165165
"split": "validation",
166-
"inputs": {"audio": ("audio", "array"), "sampling_rate": ("audio", "sampling_rate")},
167166
"streaming": True,
168167
}
169168
}

tests/openvino/test_quantization.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878
from optimum.intel.openvino.utils import TemporaryDirectory
7979
from copy import deepcopy
8080

81-
from optimum.intel.openvino.quantization.ov_quantizer import InferRequestWrapper
81+
from optimum.intel.openvino.quantization.calibration_dataset_builder import InferRequestWrapper
8282
from optimum.intel.utils.import_utils import is_openvino_version, is_transformers_version
8383
from utils_tests import (
8484
MODEL_NAMES,
@@ -1398,6 +1398,8 @@ def test_config_init_kwargs(
13981398
]
13991399
)
14001400
def test_quantization_kwargs_override(self, mock_method_name, quantization_function, dataset_key, config_type):
1401+
from optimum.intel.openvino.quantization.quantizer import _weight_only_quantization, _full_quantization
1402+
14011403
with unittest.mock.patch(mock_method_name) as mock_method:
14021404
mock_model = unittest.mock.Mock([])
14031405
mock_model.get_rt_info = unittest.mock.Mock(return_value={})
@@ -1407,7 +1409,11 @@ def test_quantization_kwargs_override(self, mock_method_name, quantization_funct
14071409

14081410
additional_kwargs = {"param2": "new_value2", "param3": "value3"}
14091411

1410-
quantization_function = globals()[quantization_function]
1412+
quantization_function = (
1413+
_weight_only_quantization
1414+
if quantization_function == "_weight_only_quantization"
1415+
else _full_quantization
1416+
)
14111417
quantization_function(mock_model, mock_quantization_config, None, **additional_kwargs)
14121418

14131419
expected_kwargs = {"param1": "value1", "param2": "new_value2", "param3": "value3", dataset_key: None}

0 commit comments

Comments
 (0)