From 1b2f942af7c36777064fb9297459e2c003899f4d Mon Sep 17 00:00:00 2001 From: Yih-Dar <2521628+ydshieh@users.noreply.github.com> Date: Thu, 9 Jan 2025 14:00:08 +0100 Subject: [PATCH] Fix flaky `test_batching_equivalence` (#35564) * yes! * oh no!!! * oh no!!! * style * oh no!!! * oh no!!! * oh no!!! * oh no!!! --------- Co-authored-by: ydshieh --- src/transformers/testing_utils.py | 35 ++++++++++++++++--- tests/models/upernet/test_modeling_upernet.py | 1 - tests/test_modeling_common.py | 4 +++ 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/transformers/testing_utils.py b/src/transformers/testing_utils.py index 6890a53688..7876b22a2b 100644 --- a/src/transformers/testing_utils.py +++ b/src/transformers/testing_utils.py @@ -1409,17 +1409,42 @@ def assert_screenout(out, what): def set_model_tester_for_less_flaky_test(test_case): - if hasattr(test_case.model_tester, "num_hidden_layers"): - test_case.model_tester.num_hidden_layers = 1 + target_num_hidden_layers = 1 + # TODO (if possible): Avoid exceptional cases + exceptional_classes = [ + "ZambaModelTester", + "RwkvModelTester", + "AriaVisionText2TextModelTester", + "GPTNeoModelTester", + "DPTModelTester", + ] + if test_case.model_tester.__class__.__name__ in exceptional_classes: + target_num_hidden_layers = None + if hasattr(test_case.model_tester, "out_features") or hasattr(test_case.model_tester, "out_indices"): + target_num_hidden_layers = None + + if hasattr(test_case.model_tester, "num_hidden_layers") and target_num_hidden_layers is not None: + test_case.model_tester.num_hidden_layers = target_num_hidden_layers if ( hasattr(test_case.model_tester, "vision_config") and "num_hidden_layers" in test_case.model_tester.vision_config + and target_num_hidden_layers is not None ): test_case.model_tester.vision_config = copy.deepcopy(test_case.model_tester.vision_config) - test_case.model_tester.vision_config["num_hidden_layers"] = 1 - if hasattr(test_case.model_tester, "text_config") and "num_hidden_layers" in test_case.model_tester.text_config: + test_case.model_tester.vision_config["num_hidden_layers"] = target_num_hidden_layers + if ( + hasattr(test_case.model_tester, "text_config") + and "num_hidden_layers" in test_case.model_tester.text_config + and target_num_hidden_layers is not None + ): test_case.model_tester.text_config = copy.deepcopy(test_case.model_tester.text_config) - test_case.model_tester.text_config["num_hidden_layers"] = 1 + test_case.model_tester.text_config["num_hidden_layers"] = target_num_hidden_layers + + # A few model class specific handling + + # For Albert + if hasattr(test_case.model_tester, "num_hidden_groups"): + test_case.model_tester.num_hidden_groups = test_case.model_tester.num_hidden_layers def set_config_for_less_flaky_test(config): diff --git a/tests/models/upernet/test_modeling_upernet.py b/tests/models/upernet/test_modeling_upernet.py index 464061915e..43146a4779 100644 --- a/tests/models/upernet/test_modeling_upernet.py +++ b/tests/models/upernet/test_modeling_upernet.py @@ -82,7 +82,6 @@ class UperNetModelTester: self.out_features = out_features self.num_labels = num_labels self.scope = scope - self.num_hidden_layers = num_stages def prepare_config_and_inputs(self): pixel_values = floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]) diff --git a/tests/test_modeling_common.py b/tests/test_modeling_common.py index 9bf3514730..1fe8f043dc 100755 --- a/tests/test_modeling_common.py +++ b/tests/test_modeling_common.py @@ -816,7 +816,10 @@ class ModelTesterMixin: ), ) + set_model_tester_for_less_flaky_test(self) + config, batched_input = self.model_tester.prepare_config_and_inputs_for_common() + set_config_for_less_flaky_test(config) equivalence = get_tensor_equivalence_function(batched_input) for model_class in self.all_model_classes: @@ -827,6 +830,7 @@ class ModelTesterMixin: config, batched_input = self.model_tester.prepare_config_and_inputs_for_model_class(model_class) batched_input_prepared = self._prepare_for_class(batched_input, model_class) model = model_class(config).to(torch_device).eval() + set_model_for_less_flaky_test(model) batch_size = self.model_tester.batch_size single_row_input = {}