Skip to content

Commit e4921eb

Browse files
Implement dataset preparation from list of strings
1 parent 0c577d1 commit e4921eb

File tree

3 files changed

+25
-7
lines changed

3 files changed

+25
-7
lines changed

optimum/intel/openvino/configuration.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -221,11 +221,11 @@ class OVWeightQuantizationConfig(OVQuantizationConfigBase):
221221
- A path to a *directory* containing vocabulary files required by the tokenizer, for instance saved
222222
using the [`~PreTrainedTokenizer.save_pretrained`] method, e.g., `./my_model_directory/`.
223223
dataset (`str or List[str]`, *optional*):
224-
The dataset used for data-aware compression or quantization with NNCF. You can provide your own dataset
225-
in a list of strings or just use the one from the list ['wikitext2','c4','c4-new'] for language models
226-
or ['conceptual_captions','laion/220k-GPT4Vision-captions-from-LIVIS','laion/filtered-wit'] for diffusion models.
227-
Alternatively, you can provide data objects via `calibration_dataset` argument
228-
of `OVQuantizer.quantize()` method.
224+
The dataset used for data-aware compression with NNCF. For language models you can provide your own dataset
225+
in a list of strings or just use the one from the list ['wikitext2','c4','c4-new']. For diffusion models it
226+
must be one of ['conceptual_captions', 'laion/220k-GPT4Vision-captions-from-LIVIS', 'laion/filtered-wit'].
227+
Alternatively, you can provide data objects via `calibration_dataset` argument of `OVQuantizer.quantize()`
228+
method.
229229
ratio (`float`, defaults to 1.0):
230230
The ratio between baseline and backup precisions (e.g. 0.9 means 90% of layers quantized to INT4_ASYM
231231
and the rest to INT8_ASYM).

optimum/intel/openvino/quantization.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ def _quantize_ovbasemodel(
351351
"quantization. Will rely on `calibration_dataset`."
352352
)
353353

354-
if calibration_dataset is None and isinstance(quantization_config.dataset, str):
354+
if calibration_dataset is None and quantization_config.dataset is not None:
355355
from optimum.intel import OVModelForCausalLM
356356

357357
if isinstance(self.model, OVModelForCausalLM):
@@ -676,7 +676,12 @@ def _prepare_builtin_dataset(self, quantization_config: OVWeightQuantizationConf
676676
quantization_config.tokenizer, trust_remote_code=quantization_config.trust_remote_code
677677
)
678678
nsamples = quantization_config.num_samples if quantization_config.num_samples else 128
679-
calibration_dataset = get_dataset(quantization_config.dataset, tokenizer, seqlen=32, nsamples=nsamples)
679+
if isinstance(quantization_config.dataset, str):
680+
calibration_dataset = get_dataset(quantization_config.dataset, tokenizer, seqlen=32, nsamples=nsamples)
681+
else:
682+
calibration_dataset = [
683+
tokenizer(text, return_tensors="pt") for text in quantization_config.dataset[:nsamples]
684+
]
680685
calibration_dataset = prepare_dataset(calibration_dataset)
681686
calibration_dataset = nncf.Dataset(calibration_dataset, lambda x: self.model.prepare_inputs(**x))
682687

tests/openvino/test_quantization.py

+13
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,19 @@ class OVWeightCompressionTest(unittest.TestCase):
223223
),
224224
14,
225225
),
226+
(
227+
OVModelForCausalLM,
228+
"opt",
229+
dict(
230+
bits=4,
231+
sym=True,
232+
group_size=-1,
233+
ratio=0.8,
234+
sensitivity_metric="mean_activation_magnitude",
235+
dataset=["one two, " * i for i in range(130)],
236+
),
237+
14,
238+
),
226239
(
227240
OVModelForCausalLM,
228241
"llama_awq",

0 commit comments

Comments
 (0)