Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 17 additions & 8 deletions olive/passes/openvino/optimum_intel.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,20 @@
_TEMP_DIR_LOCK = Lock()


def _is_gptoss_quantization_config(quantization_config: Any) -> bool:
"""Return whether the config is Optimum Intel's GPT-OSS-specific quantization config.

The private class was added after older supported optimum-intel releases. Treat it as
optional so those releases can continue using the normal quantization path.
"""
try:
from optimum.intel.openvino.configuration import _GPTOSSQuantizationConfig
except ImportError:
return False

return isinstance(quantization_config, _GPTOSSQuantizationConfig)


@contextmanager
def _use_output_tempdir(output_model_path: str):
with _TEMP_DIR_LOCK:
Expand Down Expand Up @@ -372,11 +386,7 @@ def _run_for_config(
) -> Union[OpenVINOModelHandler, CompositeModelHandler]:
try:
from optimum.exporters.openvino import main_export as export_optimum_intel
from optimum.intel.openvino.configuration import (
OVConfig,
_GPTOSSQuantizationConfig,
get_default_quantization_config,
)
from optimum.intel.openvino.configuration import OVConfig, get_default_quantization_config
from optimum.intel.utils.import_utils import is_nncf_available
except ImportError as e:
raise ImportError("Please install Intel® optimum[openvino] to use OpenVINO Optimum Conversion") from e
Expand Down Expand Up @@ -497,8 +507,7 @@ def _run_for_config(
else:
if config.ov_quant_config.get("quantization_statistics_path", None) is not None:
logger.warning(
"quantization_statistics_path is only applicable for weight-only"
" quantization. It will be ignored."
"quantization_statistics_path is only applicable for weight-only quantization. It will be ignored."
)
quant_config = prep_q_config(config.ov_quant_config)

Expand All @@ -509,7 +518,7 @@ def _run_for_config(
# quantization config
quant_config = ov_config.quantization_config if ov_config else None

apply_main_quantize = quant_config and not isinstance(quant_config, _GPTOSSQuantizationConfig)
apply_main_quantize = quant_config and not _is_gptoss_quantization_config(quant_config)

try:
extra_args["ov_config"] = ov_config
Expand Down
22 changes: 21 additions & 1 deletion test/passes/openvino/test_openvino_optimum_conversion.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,32 @@
import pytest

from olive.passes.olive_pass import create_pass_from_dict
from olive.passes.openvino.optimum_intel import OpenVINOOptimumConversion
from olive.passes.openvino.optimum_intel import OpenVINOOptimumConversion, _is_gptoss_quantization_config
from test.utils import get_hf_model, package_version_at_least

pytestmark = pytest.mark.openvino


def test_gptoss_quantization_config_is_optional(monkeypatch):
import optimum.intel.openvino.configuration as configuration

monkeypatch.delattr(configuration, "_GPTOSSQuantizationConfig", raising=False)

assert not _is_gptoss_quantization_config(object())


def test_gptoss_quantization_config_is_detected_when_available(monkeypatch):
import optimum.intel.openvino.configuration as configuration

class FakeGPTOSSQuantizationConfig:
pass

monkeypatch.setattr(configuration, "_GPTOSSQuantizationConfig", FakeGPTOSSQuantizationConfig, raising=False)

assert _is_gptoss_quantization_config(FakeGPTOSSQuantizationConfig())
assert not _is_gptoss_quantization_config(object())


@pytest.mark.skipif(
not package_version_at_least("optimum", "2.1.0"),
reason="Requires optimum >= 2.1.0",
Expand Down