From 89c46b648d82b670cc7286a25fa64d2d92770418 Mon Sep 17 00:00:00 2001 From: Yih-Dar <2521628+ydshieh@users.noreply.github.com> Date: Thu, 12 Jun 2025 12:47:15 +0200 Subject: [PATCH] Skip some export tests on torch 2.7 (#38677) * skip * fix * better check * Update import_utils.py --------- Co-authored-by: ydshieh Co-authored-by: Cyril Vallez --- src/transformers/utils/import_utils.py | 7 +++++++ .../models/depth_anything/test_modeling_depth_anything.py | 7 ++++++- tests/models/dpt/test_modeling_dpt_auto_backbone.py | 2 ++ .../test_modeling_prompt_depth_anything.py | 6 +++++- tests/models/upernet/test_modeling_upernet.py | 2 ++ tests/models/vitmatte/test_modeling_vitmatte.py | 2 ++ tests/models/vitpose/test_modeling_vitpose.py | 2 ++ tests/models/zoedepth/test_modeling_zoedepth.py | 4 +++- tests/test_modeling_common.py | 5 +---- 9 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/transformers/utils/import_utils.py b/src/transformers/utils/import_utils.py index 5e024e5857..a9c14bd5bb 100644 --- a/src/transformers/utils/import_utils.py +++ b/src/transformers/utils/import_utils.py @@ -393,6 +393,13 @@ def get_torch_version(): return _torch_version +def get_torch_major_and_minor_version() -> str: + if _torch_version == "N/A": + return "N/A" + parsed_version = version.parse(_torch_version) + return str(parsed_version.major) + "." + str(parsed_version.minor) + + def is_torch_sdpa_available(): if not is_torch_available(): return False diff --git a/tests/models/depth_anything/test_modeling_depth_anything.py b/tests/models/depth_anything/test_modeling_depth_anything.py index bf9bc907dc..93a24c6728 100644 --- a/tests/models/depth_anything/test_modeling_depth_anything.py +++ b/tests/models/depth_anything/test_modeling_depth_anything.py @@ -19,6 +19,7 @@ from transformers import DepthAnythingConfig, Dinov2Config from transformers.file_utils import is_torch_available, is_vision_available from transformers.pytorch_utils import is_torch_greater_or_equal_than_2_4 from transformers.testing_utils import require_torch, require_vision, slow, torch_device +from transformers.utils.import_utils import get_torch_major_and_minor_version from ...test_configuration_common import ConfigTester from ...test_modeling_common import ModelTesterMixin, floats_tensor, ids_tensor @@ -146,6 +147,7 @@ class DepthAnythingModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.Tes test_resize_embeddings = False test_head_masking = False test_torch_exportable = True + test_torch_exportable_strictly = not get_torch_major_and_minor_version() == "2.7" def setUp(self): self.model_tester = DepthAnythingModelTester(self) @@ -285,8 +287,11 @@ class DepthAnythingModelIntegrationTest(unittest.TestCase): torch.testing.assert_close(predicted_depth[0, :3, :3], expected_slice, rtol=1e-4, atol=1e-4) def test_export(self): - for strict in [True, False]: + for strict in [False, True]: with self.subTest(strict=strict): + if strict and get_torch_major_and_minor_version() == "2.7": + self.skipTest(reason="`strict=True` is currently failing with torch 2.7.") + if not is_torch_greater_or_equal_than_2_4: self.skipTest(reason="This test requires torch >= 2.4 to run.") model = ( diff --git a/tests/models/dpt/test_modeling_dpt_auto_backbone.py b/tests/models/dpt/test_modeling_dpt_auto_backbone.py index 91863cc46e..5ef6c11c37 100644 --- a/tests/models/dpt/test_modeling_dpt_auto_backbone.py +++ b/tests/models/dpt/test_modeling_dpt_auto_backbone.py @@ -18,6 +18,7 @@ import unittest from transformers import Dinov2Config, DPTConfig from transformers.file_utils import is_torch_available, is_vision_available from transformers.testing_utils import require_torch, require_vision, slow, torch_device +from transformers.utils.import_utils import get_torch_major_and_minor_version from ...test_configuration_common import ConfigTester from ...test_modeling_common import ModelTesterMixin, _config_zero_init, floats_tensor, ids_tensor @@ -140,6 +141,7 @@ class DPTModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase): test_resize_embeddings = False test_head_masking = False test_torch_exportable = True + test_torch_exportable_strictly = not get_torch_major_and_minor_version() == "2.7" def setUp(self): self.model_tester = DPTModelTester(self) diff --git a/tests/models/prompt_depth_anything/test_modeling_prompt_depth_anything.py b/tests/models/prompt_depth_anything/test_modeling_prompt_depth_anything.py index 23e5e9f8f3..697557b6ac 100644 --- a/tests/models/prompt_depth_anything/test_modeling_prompt_depth_anything.py +++ b/tests/models/prompt_depth_anything/test_modeling_prompt_depth_anything.py @@ -21,6 +21,7 @@ from transformers import Dinov2Config, PromptDepthAnythingConfig from transformers.file_utils import is_torch_available, is_vision_available from transformers.pytorch_utils import is_torch_greater_or_equal_than_2_4 from transformers.testing_utils import require_torch, require_vision, slow, torch_device +from transformers.utils.import_utils import get_torch_major_and_minor_version from ...test_configuration_common import ConfigTester from ...test_modeling_common import ModelTesterMixin, floats_tensor, ids_tensor @@ -284,7 +285,10 @@ class PromptDepthAnythingModelIntegrationTest(unittest.TestCase): self.assertTrue(torch.allclose(predicted_depth[0, :3, :3], expected_slice, atol=1e-3)) def test_export(self): - for strict in [True, False]: + for strict in [False, True]: + if strict and get_torch_major_and_minor_version() == "2.7": + self.skipTest(reason="`strict=True` is currently failing with torch 2.7.") + with self.subTest(strict=strict): if not is_torch_greater_or_equal_than_2_4: self.skipTest(reason="This test requires torch >= 2.4 to run.") diff --git a/tests/models/upernet/test_modeling_upernet.py b/tests/models/upernet/test_modeling_upernet.py index 861608553a..fc62b32325 100644 --- a/tests/models/upernet/test_modeling_upernet.py +++ b/tests/models/upernet/test_modeling_upernet.py @@ -27,6 +27,7 @@ from transformers.testing_utils import ( torch_device, ) from transformers.utils import is_torch_available, is_vision_available +from transformers.utils.import_utils import get_torch_major_and_minor_version from ...test_configuration_common import ConfigTester from ...test_modeling_common import ModelTesterMixin, _config_zero_init, floats_tensor, ids_tensor @@ -157,6 +158,7 @@ class UperNetModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase) test_torchscript = False has_attentions = False test_torch_exportable = True + test_torch_exportable_strictly = not get_torch_major_and_minor_version() == "2.7" def setUp(self): self.model_tester = UperNetModelTester(self) diff --git a/tests/models/vitmatte/test_modeling_vitmatte.py b/tests/models/vitmatte/test_modeling_vitmatte.py index 3a94d8c8e1..3e6ef0bb48 100644 --- a/tests/models/vitmatte/test_modeling_vitmatte.py +++ b/tests/models/vitmatte/test_modeling_vitmatte.py @@ -25,6 +25,7 @@ from transformers.testing_utils import ( torch_device, ) from transformers.utils import is_torch_available, is_vision_available +from transformers.utils.import_utils import get_torch_major_and_minor_version from ...test_configuration_common import ConfigTester from ...test_modeling_common import ModelTesterMixin, floats_tensor @@ -143,6 +144,7 @@ class VitMatteModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase test_resize_embeddings = False test_head_masking = False test_torch_exportable = True + test_torch_exportable_strictly = not get_torch_major_and_minor_version() == "2.7" def setUp(self): self.model_tester = VitMatteModelTester(self) diff --git a/tests/models/vitpose/test_modeling_vitpose.py b/tests/models/vitpose/test_modeling_vitpose.py index 8f6716f60c..6f4ac62132 100644 --- a/tests/models/vitpose/test_modeling_vitpose.py +++ b/tests/models/vitpose/test_modeling_vitpose.py @@ -21,6 +21,7 @@ import requests from transformers import VitPoseBackboneConfig, VitPoseConfig from transformers.testing_utils import require_torch, require_vision, slow, torch_device from transformers.utils import cached_property, is_torch_available, is_vision_available +from transformers.utils.import_utils import get_torch_major_and_minor_version from ...test_configuration_common import ConfigTester from ...test_modeling_common import ModelTesterMixin, floats_tensor, ids_tensor @@ -154,6 +155,7 @@ class VitPoseModelTest(ModelTesterMixin, unittest.TestCase): test_resize_embeddings = False test_head_masking = False test_torch_exportable = True + test_torch_exportable_strictly = not get_torch_major_and_minor_version() == "2.7" def setUp(self): self.model_tester = VitPoseModelTester(self) diff --git a/tests/models/zoedepth/test_modeling_zoedepth.py b/tests/models/zoedepth/test_modeling_zoedepth.py index 4fd271c697..7a19bc7b5b 100644 --- a/tests/models/zoedepth/test_modeling_zoedepth.py +++ b/tests/models/zoedepth/test_modeling_zoedepth.py @@ -20,6 +20,7 @@ import numpy as np from transformers import Dinov2Config, ZoeDepthConfig from transformers.file_utils import is_torch_available, is_vision_available from transformers.testing_utils import require_torch, require_vision, slow, torch_device +from transformers.utils.import_utils import get_torch_major_and_minor_version from ...test_configuration_common import ConfigTester from ...test_modeling_common import ModelTesterMixin, floats_tensor, ids_tensor @@ -146,7 +147,8 @@ class ZoeDepthModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase test_pruning = False test_resize_embeddings = False test_head_masking = False - test_torch_exportable = True + # `strict=True/False` are both failing with torch 2.7, see #38677 + test_torch_exportable = not get_torch_major_and_minor_version() == "2.7" def setUp(self): self.model_tester = ZoeDepthModelTester(self) diff --git a/tests/test_modeling_common.py b/tests/test_modeling_common.py index f185c30dae..6ebf91d3f5 100755 --- a/tests/test_modeling_common.py +++ b/tests/test_modeling_common.py @@ -4569,10 +4569,7 @@ class ModelTesterMixin: # Export model exported_model = torch.export.export( - model, - args=(), - kwargs=inputs_dict, - strict=True, + model, args=(), kwargs=inputs_dict, strict=getattr(self, "test_torch_exportable_strictly", True) ) # Run exported model and eager model