Skip to content

Commit 66e8e6a

Browse files
committed
Merge branch 'main' into ea/deepseek
2 parents dca2992 + 4e005c0 commit 66e8e6a

File tree

9 files changed

+66
-17
lines changed

9 files changed

+66
-17
lines changed

.github/workflows/test_openvino_slow.yml

+5-4
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ jobs:
2626
matrix:
2727
os: ["ubuntu-22.04", "windows-2019"]
2828
transformers-version: ["4.36.0", "latest"]
29+
include:
30+
- transformers-version: "4.40.0"
31+
os: "ubuntu-22.04"
32+
- transformers-version: "4.45.0"
33+
os: "ubuntu-22.04"
2934

3035
runs-on: ${{ matrix.os }}
3136

@@ -65,10 +70,6 @@ jobs:
6570
run: |
6671
pip install .[nncf]
6772
68-
- if: ${{ matrix.transformers-version != 'latest' }}
69-
name: Downgrade Transformers and Accelerate
70-
run: pip install transformers==${{ matrix.transformers-version }} accelerate==0.*
71-
7273
- name: Test with Pytest (slow)
7374
run: |
7475
pytest tests/openvino -m "run_slow" --durations=0

docs/source/openvino/models.mdx

+1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ Here is the list of the supported architectures :
7575
- Llava
7676
- Llava-Next
7777
- M2-M100
78+
- MAIRA-2
7879
- MBart
7980
- MPNet
8081
- MPT

optimum/exporters/openvino/model_configs.py

+9
Original file line numberDiff line numberDiff line change
@@ -1489,6 +1489,7 @@ def __init__(
14891489
float_dtype: str = "fp32",
14901490
behavior: LlavaConfigBehavior = LlavaConfigBehavior.VISION_EMBEDDINGS,
14911491
preprocessors: Optional[List[Any]] = None,
1492+
**kwargs,
14921493
):
14931494
super().__init__(
14941495
config=config,
@@ -1585,6 +1586,14 @@ class LlavaNextOpenVINOConfig(LlavaOpenVINOConfig):
15851586
MIN_TRANSFORMERS_VERSION = version.parse("4.40.0")
15861587

15871588

1589+
@register_in_tasks_manager(
1590+
"maira2", *["image-text-to-text", "text-generation", "text-generation-with-past"], library_name="transformers"
1591+
)
1592+
class MairaOpenVINOConfig(LlavaOpenVINOConfig):
1593+
MIN_TRANSFORMERS_VERSION = version.parse("4.46.0")
1594+
SUPPORTS_PAST = True
1595+
1596+
15881597
class InternVLChatConfigBehavior(str, enum.Enum):
15891598
LANGUAGE = "language"
15901599
VISION_EMBEDDINGS = "vision_embeddings"

optimum/exporters/openvino/utils.py

+1
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ def get_submodels(model):
223223
"llava-next",
224224
"llava-qwen2",
225225
"internvl-chat",
226+
"maira2",
226227
"minicpmv",
227228
"phi3-v",
228229
"qwen2-vl",

optimum/intel/openvino/modeling_diffusion.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -294,8 +294,12 @@ def _save_pretrained(self, save_directory: Union[str, Path]):
294294
dst_path = save_path / OV_XML_FILE_NAME
295295
dst_path.parent.mkdir(parents=True, exist_ok=True)
296296
openvino.save_model(model.model, dst_path, compress_to_fp16=False)
297-
model_dir = model.config.get("_name_or_path", None) or model.model_save_dir
298-
config_path = Path(model_dir) / CONFIG_NAME
297+
model_dir = (
298+
self.model_save_dir
299+
if not isinstance(self.model_save_dir, TemporaryDirectory)
300+
else self.model_save_dir.name
301+
)
302+
config_path = Path(model_dir) / save_path.name / CONFIG_NAME
299303
if config_path.is_file():
300304
config_save_path = save_path / CONFIG_NAME
301305
shutil.copyfile(config_path, config_save_path)

optimum/intel/openvino/modeling_visual_language.py

+22
Original file line numberDiff line numberDiff line change
@@ -2331,11 +2331,33 @@ def preprocess_inputs(
23312331
return inputs
23322332

23332333

2334+
class _OVMaira2ForCausalLM(_OVLlavaForCausalLM):
2335+
@staticmethod
2336+
def preprocess_inputs(
2337+
text: str,
2338+
image: Optional["Image"] = None,
2339+
processor: Optional[AutoImageProcessor] = None,
2340+
tokenizer: Optional[PreTrainedTokenizer] = None,
2341+
config: Optional[PretrainedConfig] = None,
2342+
):
2343+
if processor is None:
2344+
raise ValueError("processor is required")
2345+
if image is None:
2346+
return processor(text=text, return_tensors="pt")
2347+
processed_inputs = processor.format_and_preprocess_phrase_grounding_input(
2348+
frontal_image=image,
2349+
phrase=text,
2350+
return_tensors="pt",
2351+
)
2352+
return processed_inputs
2353+
2354+
23342355
MODEL_TYPE_TO_CLS_MAPPING = {
23352356
"llava": _OVLlavaForCausalLM,
23362357
"llava_next": _OVLlavaNextForCausalLM,
23372358
"minicpmv": _OVMiniCPMVForCausalLM,
23382359
"llava-qwen2": _OVNanoLlavaForCausalLM,
2360+
"maira2": _OVMaira2ForCausalLM,
23392361
"phi3_v": _OVPhi3VisionForCausalLM,
23402362
"internvl_chat": _OVInternVLForCausalLM,
23412363
"qwen2_vl": _OVQwen2VLForCausalLM,

tests/openvino/test_diffusion.py

+7
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,13 @@ def test_load_and_save_pipeline_with_safety_checker(self):
359359
self.assertTrue(model_lib in ["diffusers", "transformers"])
360360
self.assertFalse(model_class.startswith("OV"))
361361
loaded_pipeline = self.OVMODEL_CLASS.from_pretrained(tmpdirname)
362+
for component in ["text_encoder", "unet", "vae_encoder", "vae_decoder"]:
363+
config = getattr(getattr(ov_pipeline, component), "config", None)
364+
if config is not None:
365+
loaded_config = getattr(getattr(loaded_pipeline, component), "config")
366+
self.assertDictEqual(
367+
config, loaded_config, f"Expected config:\n{config}\nLoaded config:|n{loaded_config}"
368+
)
362369
self.assertTrue(loaded_pipeline.safety_checker is not None)
363370
self.assertIsInstance(loaded_pipeline.safety_checker, StableDiffusionSafetyChecker)
364371
del loaded_pipeline

tests/openvino/test_modeling.py

+14-11
Original file line numberDiff line numberDiff line change
@@ -980,24 +980,27 @@ class OVModelForCausalLMIntegrationTest(unittest.TestCase):
980980
if is_transformers_version(">=", "4.40.0"):
981981
SUPPORTED_ARCHITECTURES += (
982982
"gemma",
983-
"gemma2",
984983
"olmo",
985984
"stablelm",
986985
"starcoder2",
987986
"dbrx",
988-
"phi3",
989987
"cohere",
990988
"qwen2",
991989
"qwen2-moe",
992990
"arctic",
993-
"exaone",
994-
"mistral-nemo",
995-
"minicpm3",
996-
"glm",
997-
"granite",
998-
"granite-moe",
999991
)
1000992

993+
if is_transformers_version(">=", "4.41.0"):
994+
SUPPORTED_ARCHITECTURES += ("phi3",)
995+
996+
if is_transformers_version(">=", "4.43.0"):
997+
SUPPORTED_ARCHITECTURES += ("gemma2", "exaone")
998+
999+
if is_transformers_version(">=", "4.44.0"):
1000+
SUPPORTED_ARCHITECTURES += ("granite", "granite-moe")
1001+
1002+
if is_transformers_version(">=", "4.46.0"):
1003+
SUPPORTED_ARCHITECTURES += ("glm", "mistral-nemo", "minicpm3")
10011004
# openvino 2025.0 required for disabling check_trace
10021005
if is_openvino_version(">=", "2025.0"):
10031006
SUPPORTED_ARCHITECTURES += ("deepseek",)
@@ -2115,9 +2118,9 @@ class OVModelForVisualCausalLMIntegrationTest(unittest.TestCase):
21152118
if is_transformers_version(">=", "4.40.0"):
21162119
SUPPORTED_ARCHITECTURES += ["llava_next", "nanollava"]
21172120
if is_transformers_version(">=", "4.45.0"):
2118-
SUPPORTED_ARCHITECTURES += ["minicpmv", "internvl2", "phi3_v", "qwen2_vl"]
2121+
SUPPORTED_ARCHITECTURES += ["minicpmv", "internvl2", "phi3_v", "qwen2_vl", "maira2"]
21192122
TASK = "image-text-to-text"
2120-
REMOTE_CODE_MODELS = ["internvl2", "minicpmv", "nanollava", "phi3_v"]
2123+
REMOTE_CODE_MODELS = ["internvl2", "minicpmv", "nanollava", "phi3_v", "maira2"]
21212124

21222125
IMAGE = Image.open(
21232126
requests.get(
@@ -2197,7 +2200,7 @@ def test_compare_to_transformers(self, model_arch):
21972200
with torch.no_grad():
21982201
transformers_outputs = transformers_model(**transformers_inputs)
21992202
self.assertTrue(
2200-
torch.allclose(ov_outputs.logits, transformers_outputs.logits, atol=1e-4),
2203+
torch.allclose(ov_outputs.logits, transformers_outputs.logits, atol=4e-3),
22012204
f"Max abs diff {(torch.abs(ov_outputs.logits - transformers_outputs.logits).max())}",
22022205
)
22032206

tests/openvino/utils_tests.py

+1
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@
9292
"opt": "hf-internal-testing/tiny-random-OPTModel",
9393
"opt125m": "facebook/opt-125m",
9494
"opt_gptq": "ybelkada/opt-125m-gptq-4bit",
95+
"maira2": "katuni4ka/tiny-random-maira2",
9596
"marian": "sshleifer/tiny-marian-en-de",
9697
"mbart": "hf-internal-testing/tiny-random-mbart",
9798
"minicpm": "katuni4ka/tiny-random-minicpm",

0 commit comments

Comments
 (0)