Skip to content

Commit eacf098

Browse files
authored
import OVQuantizer only if it is required in VLM (#1048)
* import OVQuantizer only if it is required in VLM * do not use TaskManager for getting task constant * avoid import onnx in modeling_base and stateful * reduce onnx dependency
1 parent 958eb6e commit eacf098

File tree

6 files changed

+24
-20
lines changed

6 files changed

+24
-20
lines changed

optimum/exporters/openvino/__main__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
from optimum.exporters import TasksManager
3030
from optimum.exporters.onnx.base import OnnxConfig
3131
from optimum.exporters.onnx.constants import SDPA_ARCHS_ONNX_EXPORT_NOT_SUPPORTED
32-
from optimum.exporters.openvino.convert import export_from_model
3332
from optimum.intel.utils.import_utils import (
3433
is_nncf_available,
3534
is_openvino_tokenizers_available,
@@ -185,6 +184,7 @@ def main_export(
185184
>>> main_export("gpt2", output="gpt2_ov/")
186185
```
187186
"""
187+
from optimum.exporters.openvino.convert import export_from_model
188188

189189
if use_auth_token is not None:
190190
warnings.warn(

optimum/exporters/openvino/convert.py

+14-10
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,13 @@
2020
from pathlib import Path
2121
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Tuple, Union
2222

23-
import onnx
2423
from transformers.generation import GenerationMixin
2524
from transformers.utils import is_tf_available, is_torch_available
2625

2726
from openvino.runtime import Model, save_model
2827
from openvino.runtime.exceptions import OVTypeError
2928
from openvino.tools.ovc import convert_model
3029
from optimum.exporters import TasksManager
31-
from optimum.exporters.onnx.base import OnnxConfig
32-
from optimum.exporters.onnx.convert import check_dummy_inputs_are_allowed
33-
from optimum.exporters.onnx.convert import export_pytorch as export_pytorch_to_onnx
34-
from optimum.exporters.onnx.convert import export_tensorflow as export_tensorflow_onnx
3530
from optimum.exporters.utils import (
3631
_get_submodels_and_export_configs as _default_get_submodels_and_export_configs,
3732
)
@@ -89,6 +84,7 @@
8984

9085

9186
if TYPE_CHECKING:
87+
from optimum.exporters.onnx.base import OnnxConfig
9288
from optimum.intel.openvino.configuration import OVConfig
9389

9490

@@ -115,7 +111,7 @@ def _save_model(
115111
path: str,
116112
ov_config: Optional["OVConfig"] = None,
117113
library_name: Optional[str] = None,
118-
config: OnnxConfig = None,
114+
config: "OnnxConfig" = None,
119115
):
120116
compress_to_fp16 = ov_config is not None and ov_config.dtype == "fp16"
121117
model = _add_version_info_to_model(model, library_name)
@@ -129,7 +125,7 @@ def _save_model(
129125

130126
def export(
131127
model: Union["PreTrainedModel", "TFPreTrainedModel", "ModelMixin", "DiffusionPipeline"],
132-
config: OnnxConfig,
128+
config: "OnnxConfig",
133129
output: Path,
134130
opset: Optional[int] = None,
135131
device: str = "cpu",
@@ -212,7 +208,7 @@ def export(
212208

213209
def export_tensorflow(
214210
model: Union["PreTrainedModel", "ModelMixin"],
215-
config: OnnxConfig,
211+
config: "OnnxConfig",
216212
opset: int,
217213
output: Path,
218214
ov_config: Optional["OVConfig"] = None,
@@ -232,6 +228,8 @@ def export_tensorflow(
232228
output_names: list of output names from ONNX configuration
233229
bool: True if the model was exported successfully.
234230
"""
231+
from optimum.exporters.onnx.convert import export_tensorflow as export_tensorflow_onnx
232+
235233
onnx_path = Path(output).with_suffix(".onnx")
236234
input_names, output_names = export_tensorflow_onnx(model, config, opset, onnx_path)
237235
ov_model = convert_model(str(onnx_path))
@@ -252,7 +250,7 @@ def export_tensorflow(
252250

253251
def export_pytorch_via_onnx(
254252
model: Union["PreTrainedModel", "ModelMixin"],
255-
config: OnnxConfig,
253+
config: "OnnxConfig",
256254
opset: int,
257255
output: Path,
258256
device: str = "cpu",
@@ -289,6 +287,8 @@ def export_pytorch_via_onnx(
289287
"""
290288
import torch
291289

290+
from optimum.exporters.onnx.convert import export_pytorch as export_pytorch_to_onnx
291+
292292
output = Path(output)
293293
orig_torch_onnx_export = torch.onnx.export
294294
torch.onnx.export = functools.partial(orig_torch_onnx_export, do_constant_folding=False)
@@ -317,7 +317,7 @@ def export_pytorch_via_onnx(
317317

318318
def export_pytorch(
319319
model: Union["PreTrainedModel", "ModelMixin"],
320-
config: OnnxConfig,
320+
config: "OnnxConfig",
321321
opset: int,
322322
output: Path,
323323
device: str = "cpu",
@@ -359,6 +359,8 @@ def export_pytorch(
359359
import torch
360360
from torch.utils._pytree import tree_map
361361

362+
from optimum.exporters.onnx.convert import check_dummy_inputs_are_allowed
363+
362364
logger.info(f"Using framework PyTorch: {torch.__version__}")
363365
output = Path(output)
364366

@@ -878,6 +880,8 @@ def _add_version_info_to_model(model: Model, library_name: Optional[str] = None)
878880
model.set_rt_info(_nncf_version, ["optimum", "nncf_version"])
879881
input_model = rt_info["conversion_parameters"].get("input_model", None)
880882
if input_model is not None and "onnx" in input_model.value:
883+
import onnx
884+
881885
model.set_rt_info(onnx.__version__, ["optimum", "onnx_version"])
882886

883887
except Exception:

optimum/exporters/openvino/stateful.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
import openvino as ov
2222
from openvino.runtime import opset13
23-
from optimum.exporters import TasksManager
2423
from optimum.intel.utils.import_utils import _openvino_version, is_openvino_version, is_transformers_version
2524

2625
from .utils import MULTI_MODAL_TEXT_GENERATION_MODELS
@@ -192,6 +191,8 @@ def ensure_stateful_is_available(warn=True):
192191

193192

194193
def ensure_export_task_support_stateful(task: str):
194+
from optimum.exporters import TasksManager
195+
195196
task = TasksManager.map_from_synonym(task)
196197
return task in ["text-generation-with-past"]
197198

optimum/intel/openvino/modeling.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@
5050
XVectorOutput,
5151
)
5252

53-
from optimum.exporters import TasksManager
54-
5553
from ..utils.import_utils import is_timm_available, is_timm_version
5654
from .modeling_base import OVBaseModel
5755
from .utils import _is_timm_ov_dir
@@ -695,7 +693,7 @@ class OVModelForCTC(OVModel):
695693
"""
696694

697695
auto_model_class = AutoModelForCTC
698-
export_feature = TasksManager.infer_task_from_model(auto_model_class)
696+
export_feature = "automatic-speech-recognition"
699697

700698
@add_start_docstrings_to_model_forward(
701699
AUDIO_INPUTS_DOCSTRING.format("batch_size, sequence_length")
@@ -775,7 +773,7 @@ class OVModelForAudioXVector(OVModel):
775773
"""
776774

777775
auto_model_class = AutoModelForAudioXVector
778-
export_feature = TasksManager.infer_task_from_model(auto_model_class)
776+
export_feature = "audio-xvector"
779777

780778
@add_start_docstrings_to_model_forward(
781779
AUDIO_INPUTS_DOCSTRING.format("batch_size, sequence_length")
@@ -851,7 +849,7 @@ class OVModelForAudioFrameClassification(OVModel):
851849
"""
852850

853851
auto_model_class = AutoModelForAudioFrameClassification
854-
export_feature = TasksManager.infer_task_from_model(auto_model_class)
852+
export_feature = "audio-frame-classification"
855853

856854
@add_start_docstrings_to_model_forward(
857855
AUDIO_INPUTS_DOCSTRING.format("batch_size, sequence_length")

optimum/intel/openvino/modeling_base.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
from transformers.generation import GenerationMixin
3131
from transformers.utils import is_offline_mode
3232

33-
from optimum.exporters.onnx import OnnxConfig
33+
from optimum.exporters.base import ExportConfig
3434
from optimum.modeling_base import FROM_PRETRAINED_START_DOCSTRING, OptimizedModel
3535

3636
from ...exporters.openvino import export, main_export
@@ -623,7 +623,7 @@ def _to_load(
623623
cls,
624624
model,
625625
config: PretrainedConfig,
626-
onnx_config: OnnxConfig,
626+
onnx_config: ExportConfig,
627627
token: Optional[Union[bool, str]] = None,
628628
revision: Optional[str] = None,
629629
force_download: bool = False,

optimum/intel/openvino/modeling_visual_language.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
from ...exporters.openvino import main_export
2727
from ...exporters.openvino.stateful import ensure_stateful_is_available, model_has_input_output_name
2828
from ...exporters.openvino.utils import save_config
29-
from .. import OVQuantizer
3029
from .configuration import OVConfig, OVWeightQuantizationConfig
3130
from .modeling_base import OVBaseModel, OVModelPart
3231
from .modeling_decoder import CausalLMOutputWithPast, OVModelForCausalLM
@@ -549,6 +548,8 @@ def _from_pretrained(
549548
)
550549

551550
if to_quantize:
551+
from optimum.intel.openvino.quantization import OVQuantizer
552+
552553
quantization_config_copy = copy.deepcopy(quantization_config)
553554
quantization_config_copy.tokenizer = quantization_config.tokenizer or model_id
554555
potential_processor_id = config.mm_vision_tower if isinstance(model, _OVNanoLlavaForCausalLM) else model_id

0 commit comments

Comments
 (0)