Skip to content

Commit 59f63a5

Browse files
authoredNov 3, 2023
Fix transformers v4.35.0 compatibility (#471)
* fix trainer * fix * format * fix version
1 parent ae36dda commit 59f63a5

File tree

7 files changed

+508
-218
lines changed

7 files changed

+508
-218
lines changed
 

‎.github/workflows/test_inc.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ jobs:
3030
- name: Install dependencies
3131
run: |
3232
python -m pip install --upgrade pip
33-
pip install .[neural-compressor,ipex,diffusers,tests]
33+
pip install .[neural-compressor,diffusers,tests]
34+
pip install intel-extension-for-pytorch
3435
- name: Test with Pytest
3536
run: |
3637
pytest tests/neural_compressor/

‎optimum/intel/neural_compressor/quantization.py

+58-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import copy
1616
import inspect
1717
import logging
18+
import warnings
1819
from enum import Enum
1920
from itertools import chain
2021
from pathlib import Path
@@ -30,16 +31,25 @@
3031
from neural_compressor.quantization import fit
3132
from torch.utils.data import DataLoader, RandomSampler
3233
from transformers import (
34+
AutoModelForCausalLM,
35+
AutoModelForMaskedLM,
36+
AutoModelForMultipleChoice,
37+
AutoModelForQuestionAnswering,
38+
AutoModelForSeq2SeqLM,
39+
AutoModelForSequenceClassification,
40+
AutoModelForTokenClassification,
41+
AutoModelForVision2Seq,
3342
DataCollator,
3443
PretrainedConfig,
3544
PreTrainedModel,
45+
XLNetLMHeadModel,
3646
default_data_collator,
3747
)
3848

3949
from optimum.exporters import TasksManager
4050
from optimum.exporters.onnx import OnnxConfig
4151
from optimum.onnxruntime import ORTModel
42-
from optimum.onnxruntime.modeling_decoder import ORTModelDecoder
52+
from optimum.onnxruntime.modeling_decoder import ORTModelForCausalLM
4353
from optimum.onnxruntime.modeling_seq2seq import ORTModelForConditionalGeneration
4454
from optimum.onnxruntime.utils import ONNX_DECODER_NAME
4555
from optimum.quantization_base import OptimumQuantizer
@@ -256,7 +266,7 @@ def quantize(
256266
if isinstance(self._original_model, ORTModelForConditionalGeneration):
257267
raise RuntimeError("ORTModelForConditionalGeneration not supported for quantization")
258268

259-
if isinstance(self._original_model, ORTModelDecoder):
269+
if isinstance(self._original_model, ORTModelForCausalLM):
260270
model_or_path = self._original_model.onnx_paths
261271
if len(model_or_path) > 1:
262272
raise RuntimeError(
@@ -528,3 +538,49 @@ def _apply_quantization_from_config(q_config: Dict, model: torch.nn.Module) -> t
528538
q_model = convert(q_model, mapping=q_mapping, inplace=True)
529539

530540
return q_model
541+
542+
543+
class IncQuantizedModel(INCModel):
544+
@classmethod
545+
def from_pretrained(cls, *args, **kwargs):
546+
warnings.warn(
547+
f"The class `{cls.__name__}` has been depreciated and will be removed in optimum-intel v1.12, please use "
548+
f"`{cls.__name__.replace('IncQuantized', 'INC')}` instead."
549+
)
550+
return super().from_pretrained(*args, **kwargs)
551+
552+
553+
class IncQuantizedModelForQuestionAnswering(IncQuantizedModel):
554+
auto_model_class = AutoModelForQuestionAnswering
555+
556+
557+
class IncQuantizedModelForSequenceClassification(IncQuantizedModel):
558+
auto_model_class = AutoModelForSequenceClassification
559+
560+
561+
class IncQuantizedModelForTokenClassification(IncQuantizedModel):
562+
auto_model_class = AutoModelForTokenClassification
563+
564+
565+
class IncQuantizedModelForMultipleChoice(IncQuantizedModel):
566+
auto_model_class = AutoModelForMultipleChoice
567+
568+
569+
class IncQuantizedModelForSeq2SeqLM(IncQuantizedModel):
570+
auto_model_class = AutoModelForSeq2SeqLM
571+
572+
573+
class IncQuantizedModelForCausalLM(IncQuantizedModel):
574+
auto_model_class = AutoModelForCausalLM
575+
576+
577+
class IncQuantizedModelForMaskedLM(IncQuantizedModel):
578+
auto_model_class = AutoModelForMaskedLM
579+
580+
581+
class IncQuantizedModelForXLNetLM(IncQuantizedModel):
582+
auto_model_class = XLNetLMHeadModel
583+
584+
585+
class IncQuantizedModelForVision2Seq(IncQuantizedModel):
586+
auto_model_class = AutoModelForVision2Seq

‎optimum/intel/neural_compressor/trainer.py

+214-107
Large diffs are not rendered by default.

‎optimum/intel/openvino/trainer.py

+227-105
Large diffs are not rendered by default.

‎setup.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
INSTALL_REQUIRE = [
1515
"optimum>=1.13.0",
16-
"transformers>=4.20.0",
16+
"transformers",
1717
"datasets>=1.4.0",
1818
"sentencepiece",
1919
"scipy",
@@ -41,8 +41,9 @@
4141
"neural-compressor>=2.2.0",
4242
"onnx",
4343
"onnxruntime<1.15.0",
44+
"transformers>=4.33.0",
4445
],
45-
"openvino": ["openvino>=2023.1.0", "onnx", "onnxruntime"],
46+
"openvino": ["openvino>=2023.1.0", "onnx", "onnxruntime", "transformers>=4.33.0"],
4647
"nncf": ["nncf>=2.6.0"],
4748
"ipex": ["transformers<4.32.0", "intel-extension-for-pytorch", "onnx"],
4849
"diffusers": ["diffusers"],

‎tests/neural_compressor/test_modeling.py

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import unittest
2020

2121
import torch
22+
from packaging.version import Version, parse
2223
from parameterized import parameterized
2324
from transformers import AutoTokenizer, pipeline, set_seed
2425

@@ -39,6 +40,7 @@
3940
INCTrainer,
4041
)
4142
from optimum.intel.neural_compressor.utils import _HEAD_TO_AUTOMODELS, WEIGHTS_NAME
43+
from optimum.version import __version__ as _optimum_version
4244

4345

4446
os.environ["CUDA_VISIBLE_DEVICES"] = ""
@@ -133,6 +135,7 @@ def test_pipeline(self, model_id, task):
133135

134136
pipe(*inputs)
135137

138+
@unittest.skipIf(parse(_optimum_version) < Version("1.14.0"), "not supported, needs optimum>=v1.14.0")
136139
def test_compare_with_and_without_past_key_values(self):
137140
model_id = "echarlaix/tiny-random-gpt2-torchscript"
138141
tokenizer = AutoTokenizer.from_pretrained(model_id)

‎tests/neural_compressor/test_onnx.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def test_static_quantization(self, task, model_name, expected_quantized_matmuls)
5454
tokenizer.pad_token = tokenizer.eos_token
5555
quantizer = INCQuantizer.from_pretrained(model, task=task)
5656
calibration_dataset = _generate_dataset(quantizer, tokenizer, num_samples=num_samples)
57-
save_onnx_model = True
57+
save_onnx_model = False
5858
op_type_dict = (
5959
{"Embedding": {"weight": {"dtype": ["fp32"]}, "activation": {"dtype": ["fp32"]}}}
6060
if save_onnx_model

0 commit comments

Comments
 (0)
Please sign in to comment.