Skip to content

Commit 72b0630

Browse files
authored
Remove accelerate and onnxruntime from required dependencies (#590)
* Remove accelerate dependency * Add accelerate to import backend mapping * Add eval method to OVModels * add onnxruntime install for OV test * fix test expected int8
1 parent be6666b commit 72b0630

12 files changed

+96
-60
lines changed

.github/workflows/test_openvino.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
python -m pip install --upgrade pip
3333
# install PyTorch CPU version to avoid installing CUDA packages on GitHub runner without GPU
3434
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
35-
pip install .[openvino,openvino-tokenizers,nncf,tests,diffusers]
35+
pip install .[openvino,openvino-tokenizers,tests,diffusers] onnxruntime
3636
- name: Test with Pytest
3737
run: |
3838
pytest tests/openvino/ --ignore test_modeling_basic

optimum/intel/__init__.py

+25-12
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from transformers.utils import OptionalDependencyNotAvailable, _LazyModule
1919

2020
from .utils import (
21+
is_accelerate_available,
2122
is_diffusers_available,
2223
is_ipex_available,
2324
is_neural_compressor_available,
@@ -29,6 +30,7 @@
2930

3031
_import_structure = {
3132
"openvino": [],
33+
"utils.dummy_openvino_and_nncf_objects": [],
3234
}
3335

3436
try:
@@ -57,13 +59,19 @@
5759
if not (is_openvino_available() and is_nncf_available()):
5860
raise OptionalDependencyNotAvailable()
5961
except OptionalDependencyNotAvailable:
60-
_import_structure["utils.dummy_openvino_and_nncf_objects"] = [
61-
"OVQuantizer",
62-
"OVTrainer",
63-
"OVTrainingArguments",
64-
]
62+
_import_structure["utils.dummy_openvino_and_nncf_objects"].extend(["OVQuantizer", "OVTrainingArguments"])
63+
else:
64+
_import_structure["openvino"].extend(["OVQuantizer", "OVTrainingArguments"])
65+
66+
67+
try:
68+
if not (is_openvino_available() and is_nncf_available() and is_accelerate_available()):
69+
raise OptionalDependencyNotAvailable()
70+
except OptionalDependencyNotAvailable:
71+
_import_structure["utils.dummy_openvino_and_nncf_objects"].extend(["OVTrainer"])
6572
else:
66-
_import_structure["openvino"].extend(["OVQuantizer", "OVTrainer", "OVTrainingArguments"])
73+
_import_structure["openvino"].extend(["OVTrainer"])
74+
6775

6876
try:
6977
if not (is_openvino_available() and is_diffusers_available()):
@@ -145,6 +153,7 @@
145153
"INCSeq2SeqTrainer",
146154
"INCTrainer",
147155
]
156+
148157
try:
149158
if not (is_neural_compressor_available() and is_diffusers_available()):
150159
raise OptionalDependencyNotAvailable()
@@ -177,13 +186,17 @@
177186
if not (is_openvino_available() and is_nncf_available()):
178187
raise OptionalDependencyNotAvailable()
179188
except OptionalDependencyNotAvailable:
180-
from .utils.dummy_openvino_and_nncf_objects import (
181-
OVQuantizer,
182-
OVTrainer,
183-
OVTrainingArguments,
184-
)
189+
from .utils.dummy_openvino_and_nncf_objects import OVQuantizer, OVTrainingArguments
190+
else:
191+
from .openvino import OVQuantizer, OVTrainingArguments
192+
193+
try:
194+
if not (is_openvino_available() and is_nncf_available() and is_accelerate_available()):
195+
raise OptionalDependencyNotAvailable()
196+
except OptionalDependencyNotAvailable:
197+
from .utils.dummy_openvino_and_nncf_objects import OVTrainer
185198
else:
186-
from .openvino import OVQuantizer, OVTrainer, OVTrainingArguments
199+
from .openvino import OVTrainer
187200

188201
try:
189202
if not (is_openvino_available() and is_diffusers_available()):

optimum/intel/openvino/__init__.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
import logging
1616

17-
from ..utils.import_utils import is_diffusers_available, is_nncf_available
17+
from ..utils.import_utils import is_accelerate_available, is_diffusers_available, is_nncf_available
1818
from .utils import (
1919
OV_DECODER_NAME,
2020
OV_DECODER_WITH_PAST_NAME,
@@ -37,9 +37,11 @@
3737
patch_torch_operators()
3838

3939
from .quantization import OVQuantizer
40-
from .trainer import OVTrainer
4140
from .training_args import OVTrainingArguments
4241

42+
if is_accelerate_available():
43+
from .trainer import OVTrainer
44+
4345

4446
from .configuration import OVConfig, OVWeightQuantizationConfig
4547
from .modeling import (

optimum/intel/openvino/quantization.py

+10-4
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import logging
1818
import os
1919
from pathlib import Path
20-
from typing import TYPE_CHECKING, Any, Callable, Dict, Optional, Tuple, Union
20+
from typing import Any, Callable, Dict, Optional, Tuple, Union
2121

2222
import nncf
2323
import openvino
@@ -56,8 +56,7 @@
5656

5757

5858
if is_datasets_available():
59-
if TYPE_CHECKING:
60-
from datasets import Dataset
59+
from datasets import Dataset
6160

6261
register_module(ignored_algorithms=[])(Conv1D)
6362

@@ -147,6 +146,7 @@ def __init__(self, model: transformers.PreTrainedModel, task: Optional[str] = No
147146
)
148147
self.task = task or feature
149148
self.seed = seed
149+
# TODO : deprecate input_names
150150
self.input_names = None
151151
signature = inspect.signature(self.model.forward)
152152
self._signature_columns = list(signature.parameters.keys())
@@ -526,9 +526,15 @@ def _get_calibration_dataloader(
526526
data_collator: Optional[DataCollator] = None,
527527
) -> OVDataLoader:
528528
data_collator = data_collator if data_collator is not None else default_data_collator
529+
530+
if not is_datasets_available() or not isinstance(calibration_dataset, Dataset):
531+
logger.warning(
532+
"`remove_unused_columns` set to `False` as calibration_dataset is not an instance of `datasets.Dataset`"
533+
)
534+
remove_unused_columns = False
535+
529536
if remove_unused_columns:
530537
calibration_dataset = self._remove_unused_columns(calibration_dataset)
531-
self.input_names = calibration_dataset.column_names
532538
generator = torch.Generator()
533539
generator.manual_seed(self.seed)
534540
sampler = RandomSampler(calibration_dataset, generator=generator)

optimum/intel/utils/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
_neural_compressor_version,
1717
_torch_version,
1818
compare_versions,
19+
is_accelerate_available,
1920
is_diffusers_available,
2021
is_ipex_available,
2122
is_neural_compressor_available,

optimum/intel/utils/dummy_openvino_and_nncf_objects.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,14 @@ def from_pretrained(cls, *args, **kwargs):
2727

2828

2929
class OVTrainer(metaclass=DummyObject):
30-
_backends = ["openvino", "nncf"]
30+
_backends = ["openvino", "nncf", "accelerate"]
3131

3232
def __init__(self, *args, **kwargs):
33-
requires_backends(self, ["openvino", "nncf"])
33+
requires_backends(self, ["openvino", "nncf", "accelerate"])
3434

3535
@classmethod
3636
def from_pretrained(cls, *args, **kwargs):
37-
requires_backends(cls, ["openvino", "nncf"])
37+
requires_backends(cls, ["openvino", "nncf", "accelerate"])
3838

3939

4040
class OVQuantizer(metaclass=DummyObject):

optimum/intel/utils/import_utils.py

+20
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,16 @@
156156
_datasets_available = False
157157

158158

159+
_accelerate_available = importlib.util.find_spec("accelerate") is not None
160+
_accelerate_version = "N/A"
161+
162+
if _accelerate_available:
163+
try:
164+
_accelerate_version = importlib_metadata.version("accelerate")
165+
except importlib_metadata.PackageNotFoundError:
166+
_accelerate_available = False
167+
168+
159169
def is_transformers_available():
160170
return _transformers_available
161171

@@ -196,6 +206,10 @@ def is_datasets_available():
196206
return _datasets_available
197207

198208

209+
def is_accelerate_available():
210+
return _accelerate_available
211+
212+
199213
# This function was copied from: https://github.com/huggingface/accelerate/blob/874c4967d94badd24f893064cc3bef45f57cadf7/src/accelerate/utils/versions.py#L319
200214
def compare_versions(library_or_version: Union[str, Version], operation: str, requirement_version: str):
201215
"""
@@ -317,13 +331,19 @@ def is_timm_version(operation: str, version: str):
317331
`pip install datasets`. Please note that you may need to restart your runtime after installation.
318332
"""
319333

334+
ACCELERATE_IMPORT_ERROR = """
335+
{0} requires the accelerate library but it was not found in your environment. You can install it with pip:
336+
`pip install accelerate`. Please note that you may need to restart your runtime after installation.
337+
"""
338+
320339
BACKENDS_MAPPING = OrderedDict(
321340
[
322341
("diffusers", (is_diffusers_available, DIFFUSERS_IMPORT_ERROR)),
323342
("ipex", (is_ipex_available, IPEX_IMPORT_ERROR)),
324343
("nncf", (is_nncf_available, NNCF_IMPORT_ERROR)),
325344
("openvino", (is_openvino_available, OPENVINO_IMPORT_ERROR)),
326345
("neural_compressor", (is_neural_compressor_available, NEURAL_COMPRESSOR_IMPORT_ERROR)),
346+
("accelerate", (is_accelerate_available, ACCELERATE_IMPORT_ERROR)),
327347
]
328348
)
329349

setup.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@
1818
"datasets>=1.4.0",
1919
"sentencepiece",
2020
"scipy",
21-
"accelerate", # transformers 4.29 require accelerate for PyTorch
21+
"onnx",
2222
]
2323

2424
TESTS_REQUIRE = [
25+
"accelerate",
2526
"pytest",
2627
"parameterized",
2728
"Pillow",
@@ -39,11 +40,11 @@
3940
QUALITY_REQUIRE = ["black~=23.1", "ruff>=0.0.241"]
4041

4142
EXTRAS_REQUIRE = {
42-
"neural-compressor": ["neural-compressor>=2.2.0", "onnx", "onnxruntime<1.15.0"],
43-
"openvino": ["openvino>=2023.3", "onnx", "onnxruntime", "nncf>=2.8.1"],
43+
"neural-compressor": ["neural-compressor>=2.2.0", "onnxruntime<1.15.0", "accelerate"],
44+
"openvino": ["openvino>=2023.3", "nncf>=2.8.1"],
4445
"openvino-tokenizers": ["openvino-tokenizers[transformers]"],
4546
"nncf": ["nncf>=2.8.1"],
46-
"ipex": ["intel-extension-for-pytorch", "onnx"],
47+
"ipex": ["intel-extension-for-pytorch"],
4748
"diffusers": ["diffusers"],
4849
"quality": QUALITY_REQUIRE,
4950
"tests": TESTS_REQUIRE,

tests/openvino/test_quantization.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -154,24 +154,24 @@ class OVWeightCompressionTest(unittest.TestCase):
154154
# TODO : add models
155155
SUPPORTED_ARCHITECTURES_WITH_EXPECTED_8BIT_COMPRESSED_MATMULS = (
156156
(OVModelForSequenceClassification, "hf-internal-testing/tiny-random-bert", 70, 70),
157-
(OVModelForCausalLM, "hf-internal-testing/tiny-random-gpt2", 44, 46),
157+
(OVModelForCausalLM, "hf-internal-testing/tiny-random-gpt2", 44, 44),
158158
)
159159

160-
SUPPORTED_ARCHITECTURES_WITH_EXPECTED_4BIT_COMPRESSED_MATMULS = ((OVModelForCausalLM, "opt125m", 64, 365),)
161-
SUPPORTED_ARCHITECTURES_WITH_EXPECTED_4BIT_AUTOCOMPRESSED_MATMULS = ((OVModelForCausalLM, "opt125m", 0, 388),)
160+
SUPPORTED_ARCHITECTURES_WITH_EXPECTED_4BIT_COMPRESSED_MATMULS = ((OVModelForCausalLM, "opt125m", 62, 365),)
161+
SUPPORTED_ARCHITECTURES_WITH_EXPECTED_4BIT_AUTOCOMPRESSED_MATMULS = ((OVModelForCausalLM, "opt125m", 0, 385),)
162162
SUPPORTED_ARCHITECTURES_WITH_EXPECTED_4BIT_AUTO_COMPRESSED_MATMULS = (
163-
(OVModelForCausalLM, "hf-internal-testing/tiny-random-OPTForCausalLM", 16, 136),
163+
(OVModelForCausalLM, "hf-internal-testing/tiny-random-OPTForCausalLM", 14, 136),
164164
)
165165
SUPPORTED_ARCHITECTURES_STATEFUL_WITH_EXPECTED_8BIT_COMPRESSED_MATMULS = (
166-
(OVModelForCausalLM, "hf-internal-testing/tiny-random-gpt2", 44, 46),
166+
(OVModelForCausalLM, "hf-internal-testing/tiny-random-gpt2", 44, 44),
167167
)
168168

169169
LOAD_IN_4_BITS_SCOPE = (
170170
(
171171
OVModelForCausalLM,
172172
"hf-internal-testing/tiny-random-gpt2",
173173
dict(bits=4, sym=False, group_size=-1, ratio=0.8),
174-
16,
174+
14,
175175
),
176176
(
177177
OVModelForCausalLM,
@@ -182,13 +182,13 @@ class OVWeightCompressionTest(unittest.TestCase):
182182
group_size=32,
183183
ignored_scope={"names": ["__module.model.transformer.h.2.mlp.c_fc/aten::addmm/MatMul"]},
184184
),
185-
6,
185+
4,
186186
),
187187
(
188188
OVModelForCausalLM,
189189
"hf-internal-testing/tiny-random-gpt2",
190190
dict(bits=4, sym=False, group_size=-1, ratio=0.8, all_layers=True),
191-
22,
191+
18,
192192
),
193193
(
194194
OVModelForCausalLM,
@@ -201,7 +201,7 @@ class OVWeightCompressionTest(unittest.TestCase):
201201
sensitivity_metric="mean_activation_magnitude",
202202
dataset="ptb",
203203
),
204-
16,
204+
14,
205205
),
206206
(
207207
OVModelForCausalLM,
@@ -215,7 +215,7 @@ class OVWeightCompressionTest(unittest.TestCase):
215215
dataset="ptb",
216216
awq=True,
217217
),
218-
16,
218+
14,
219219
),
220220
)
221221

0 commit comments

Comments
 (0)