From 0717b0576a2242d7b30c116728fa7e0522fb0ba5 Mon Sep 17 00:00:00 2001 From: Ella Charlaix Date: Fri, 12 Sep 2025 14:53:21 +0200 Subject: [PATCH 1/6] add deepseek v3 transformers integration --- optimum/exporters/openvino/model_configs.py | 21 +++++++++++---------- tests/openvino/test_decoder.py | 16 ++-------------- tests/openvino/utils_tests.py | 2 +- 3 files changed, 14 insertions(+), 25 deletions(-) diff --git a/optimum/exporters/openvino/model_configs.py b/optimum/exporters/openvino/model_configs.py index 9c1684db81..c4b6be931c 100644 --- a/optimum/exporters/openvino/model_configs.py +++ b/optimum/exporters/openvino/model_configs.py @@ -3873,9 +3873,6 @@ class M2M100OpenVINOConfig(BartOpenVINOConfig): pass -@register_in_tasks_manager( - "deepseek_v3", *["text-generation", "text-generation-with-past"], library_name="transformers" -) @register_in_tasks_manager( "deepseek_v2", *["text-generation", "text-generation-with-past"], library_name="transformers" ) @@ -3887,6 +3884,16 @@ def patch_model_for_export( return DeepseekPatcher(self, model, model_kwargs=model_kwargs) +@register_in_tasks_manager( + "deepseek_v3", *["text-generation", "text-generation-with-past"], library_name="transformers" +) +class DeepseekVOpenVINOConfig(LlamaOpenVINOConfig): + MIN_TRANSFORMERS_VERSION = "4.51.0" + DUMMY_INPUT_GENERATOR_CLASSES = (DummyTextInputGenerator, OVMiniCPM3DummyPastKeyValuesGenerator) + DUMMY_PKV_GENERATOR_CLASS = OVMiniCPM3DummyPastKeyValuesGenerator + + + @register_in_tasks_manager("got_ocr2", *["image-to-text", "image-text-to-text"], library_name="transformers") class GotOCR2OpenVINOConfig(BaseVLMOpenVINOConfig): MIN_TRANSFORMERS_VERSION = "4.49.0" @@ -4526,14 +4533,8 @@ def generate_dummy_inputs(self, framework: str = "pt", **kwargs): @register_in_tasks_manager("ernie4_5", *["text-generation", "text-generation-with-past"], library_name="transformers") -class ErnieOpenVINOConfig(TextDecoderWithPositionIdsOnnxConfig): +class ErnieOpenVINOConfig(LlamaOpenVINOConfig): MIN_TRANSFORMERS_VERSION = "4.54.0" - DUMMY_INPUT_GENERATOR_CLASSES = (DummyTextInputGenerator, GemmaDummyPastKeyValuesGenerator) DUMMY_PKV_GENERATOR_CLASS = GemmaDummyPastKeyValuesGenerator NORMALIZED_CONFIG_CLASS = NormalizedTextConfig - - def patch_model_for_export( - self, model: Union["PreTrainedModel", "TFPreTrainedModel"], model_kwargs: Optional[Dict[str, Any]] = None - ) -> "ModelPatcher": - return OVDecoderModelPatcher(self, model, model_kwargs=model_kwargs) diff --git a/tests/openvino/test_decoder.py b/tests/openvino/test_decoder.py index 247ce8d491..2782a57066 100644 --- a/tests/openvino/test_decoder.py +++ b/tests/openvino/test_decoder.py @@ -103,9 +103,6 @@ class OVModelForCausalLMIntegrationTest(unittest.TestCase): if is_transformers_version(">=", "4.46.0"): SUPPORTED_ARCHITECTURES += ("glm", "mistral-nemo", "minicpm3", "phi3-moe") - # openvino 2025.0 required for disabling check_trace - if is_openvino_version(">=", "2025.0"): - SUPPORTED_ARCHITECTURES += ("deepseek",) # gptq and awq install disabled for windows test environment if platform.system() != "Windows": @@ -128,7 +125,7 @@ class OVModelForCausalLMIntegrationTest(unittest.TestCase): SUPPORTED_ARCHITECTURES += ("arcee",) if is_transformers_version(">=", "4.54.0"): - SUPPORTED_ARCHITECTURES += ("ernie4_5",) + SUPPORTED_ARCHITECTURES += ("deepseek_v3", "ernie4_5") GENERATION_LENGTH = 100 REMOTE_CODE_MODELS = ( @@ -150,7 +147,6 @@ class OVModelForCausalLMIntegrationTest(unittest.TestCase): "exaone", "decilm", "minicpm3", - "deepseek", ) EXPECTED_NUM_SDPA = { @@ -164,6 +160,7 @@ class OVModelForCausalLMIntegrationTest(unittest.TestCase): "chatglm": 2, "codegen": 5, "codegen2": 2, + "deepseek_v3": 2, "gpt2": 5, "gptj": 5, "gpt_neo": 4, @@ -208,7 +205,6 @@ class OVModelForCausalLMIntegrationTest(unittest.TestCase): "mistral-nemo": 8, "minicpm3": 6, "phi3-moe": 2, - "deepseek": 2, "opt_gptq": 12, "mixtral_awq": 2, "gemma3_text": 2, @@ -325,10 +321,6 @@ def test_compare_to_transformers(self, model_arch): ov_outputs = ov_model.generate(**tokens, generation_config=gen_config) - # TODO: add back once https://huggingface.co/katuni4ka/tiny-random-minicpm3/discussions/1 merged (for all models) as current mdoeling incompatible with transformers >= v4.49 - if model_arch in {"deepseek"} and is_transformers_version(">=", "4.49"): - self.skipTest("Incompatible modeling code") - additional_inputs = {} # gemma2 does not support dynamic cache, it is unfair to compare dynamic cache result vs hybrid cache, # align cache representation in torch model @@ -536,10 +528,6 @@ def test_beam_search(self, model_arch): if model_arch in ["qwen", "chatglm", "chatglm4"]: return - # TODO: add back once https://huggingface.co/katuni4ka/tiny-random-minicpm3/discussions/1 merged (for all models) as current mdoeling incompatible with transformers >= v4.49 - if model_arch in {"deepseek"} and is_transformers_version(">=", "4.49"): - self.skipTest("Incompatible modeling code") - tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=model_arch in self.REMOTE_CODE_MODELS) if model_arch == "persimmon": tokenizer.pad_token_id = tokenizer.bos_token_id diff --git a/tests/openvino/utils_tests.py b/tests/openvino/utils_tests.py index 8d8ba3e098..d545dcf440 100644 --- a/tests/openvino/utils_tests.py +++ b/tests/openvino/utils_tests.py @@ -56,7 +56,7 @@ "deberta": "hf-internal-testing/tiny-random-deberta", "deberta-v2": "hf-internal-testing/tiny-random-DebertaV2Model", "decilm": "katuni4ka/tiny-random-decilm", - "deepseek": "katuni4ka/tiny-random-deepseek-v3", + "deepseek_v3": "hf-internal-testing/tiny-random-DeepseekV3ForCausalLM", "deit": "hf-internal-testing/tiny-random-DeiTModel", "convnext": "hf-internal-testing/tiny-random-convnext", "convnextv2": "hf-internal-testing/tiny-random-ConvNextV2Model", From cce99e34dc6290ca2095b989b0deb7cbf121091e Mon Sep 17 00:00:00 2001 From: Ella Charlaix Date: Fri, 12 Sep 2025 15:19:10 +0200 Subject: [PATCH 2/6] style --- optimum/exporters/openvino/model_configs.py | 1 - 1 file changed, 1 deletion(-) diff --git a/optimum/exporters/openvino/model_configs.py b/optimum/exporters/openvino/model_configs.py index c4b6be931c..45786d1e9d 100644 --- a/optimum/exporters/openvino/model_configs.py +++ b/optimum/exporters/openvino/model_configs.py @@ -3893,7 +3893,6 @@ class DeepseekVOpenVINOConfig(LlamaOpenVINOConfig): DUMMY_PKV_GENERATOR_CLASS = OVMiniCPM3DummyPastKeyValuesGenerator - @register_in_tasks_manager("got_ocr2", *["image-to-text", "image-text-to-text"], library_name="transformers") class GotOCR2OpenVINOConfig(BaseVLMOpenVINOConfig): MIN_TRANSFORMERS_VERSION = "4.49.0" From d2542842562ec85a90a10b37bcf44c116e3d8a03 Mon Sep 17 00:00:00 2001 From: Ella Charlaix Date: Fri, 19 Sep 2025 14:49:53 +0200 Subject: [PATCH 3/6] modify tests min transformers version --- tests/openvino/test_decoder.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/openvino/test_decoder.py b/tests/openvino/test_decoder.py index b16ea83aba..b5aa17169b 100644 --- a/tests/openvino/test_decoder.py +++ b/tests/openvino/test_decoder.py @@ -115,7 +115,7 @@ class OVModelForCausalLMIntegrationTest(unittest.TestCase): SUPPORTED_ARCHITECTURES += ("gemma3_text",) if is_transformers_version(">=", "4.51.0"): - SUPPORTED_ARCHITECTURES += ("qwen3", "qwen3_moe") + SUPPORTED_ARCHITECTURES += ("qwen3", "qwen3_moe", "deepseek_v3") if is_transformers_version(">=", "4.51.3"): SUPPORTED_ARCHITECTURES += ("glm4",) @@ -124,7 +124,7 @@ class OVModelForCausalLMIntegrationTest(unittest.TestCase): SUPPORTED_ARCHITECTURES += ("arcee",) if is_transformers_version(">=", "4.54.0"): - SUPPORTED_ARCHITECTURES += ("deepseek_v3", "ernie4_5") + SUPPORTED_ARCHITECTURES += ("ernie4_5",) # remote code models differs after transformers v4.54 SUPPORTED_ARCHITECTURES = set(SUPPORTED_ARCHITECTURES) - {"minicpm", "minicpm3", "arctic", "deepseek"} From f9595048f83851b73db73dfb4c89903c07d9ea18 Mon Sep 17 00:00:00 2001 From: Ella Charlaix Date: Mon, 22 Sep 2025 09:57:18 +0200 Subject: [PATCH 4/6] add tiny model --- tests/openvino/utils_tests.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/openvino/utils_tests.py b/tests/openvino/utils_tests.py index 25734370b5..ffb081c922 100644 --- a/tests/openvino/utils_tests.py +++ b/tests/openvino/utils_tests.py @@ -66,6 +66,7 @@ "donut-swin": "hf-internal-testing/tiny-random-DonutSwinModel", "detr": "hf-internal-testing/tiny-random-DetrModel", "electra": "hf-internal-testing/tiny-random-electra", + "ernie4_5": "optimum-internal-testing/tiny-random-Ernie4_5ForCausalLM", "esm": "hf-internal-testing/tiny-random-EsmModel", "exaone": "katuni4ka/tiny-random-exaone", "gemma": "fxmarty/tiny-random-GemmaForCausalLM", From 856128bb7d96f61bcebedce8788a220e4011d163 Mon Sep 17 00:00:00 2001 From: Ella Charlaix Date: Mon, 22 Sep 2025 10:15:14 +0200 Subject: [PATCH 5/6] add test sdpa --- tests/openvino/test_decoder.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/openvino/test_decoder.py b/tests/openvino/test_decoder.py index b5aa17169b..9864d258c3 100644 --- a/tests/openvino/test_decoder.py +++ b/tests/openvino/test_decoder.py @@ -162,6 +162,7 @@ class OVModelForCausalLMIntegrationTest(unittest.TestCase): "codegen": 5, "codegen2": 2, "deepseek_v3": 2, + "ernie4_5": 4, "gpt2": 5, "gptj": 5, "gpt_neo": 4, From 4bf1788abcb63b0f6c4c7dca1083f4540c9d988a Mon Sep 17 00:00:00 2001 From: Ella Charlaix Date: Mon, 27 Oct 2025 16:50:51 +0100 Subject: [PATCH 6/6] was removed by accident --- tests/openvino/utils_tests.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/openvino/utils_tests.py b/tests/openvino/utils_tests.py index 7af75d19fc..64acd41f78 100644 --- a/tests/openvino/utils_tests.py +++ b/tests/openvino/utils_tests.py @@ -25,6 +25,10 @@ from optimum.intel.utils.import_utils import is_nncf_version, is_openvino_version, is_transformers_version +SEED = 42 + +F32_CONFIG = {"INFERENCE_PRECISION_HINT": "f32"} + TENSOR_ALIAS_TO_TYPE = {"pt": torch.Tensor, "np": np.ndarray} OPENVINO_DEVICE = os.getenv("OPENVINO_TEST_DEVICE", "CPU")