From 5d88fa31b8f7fa207b22ea14d80d49760f64f146 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5ns=20Nilsson?= Date: Thu, 25 Sep 2025 16:21:57 +0200 Subject: [PATCH] Arm backend: Fix Arm tester issue for inplace ops Deep-copying the input avoids it getting mutated by the first reference run. Change-Id: Ie0309528e9b795f6e628eb01531b14339fb66f81 --- backends/arm/test/ops/test_silu.py | 5 ----- backends/arm/test/tester/arm_tester.py | 10 +++++++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/backends/arm/test/ops/test_silu.py b/backends/arm/test/ops/test_silu.py index e451c22adbb..edc7d769be1 100644 --- a/backends/arm/test/ops/test_silu.py +++ b/backends/arm/test/ops/test_silu.py @@ -8,7 +8,6 @@ from typing import Optional, Tuple -import pytest import torch from executorch.backends.arm.test import common from executorch.backends.arm.test.tester.test_pipeline import ( @@ -117,7 +116,6 @@ def test_silu_u85_INT_inplace(test_data: input_t): @common.parametrize("test_data", Silu.test_data) @common.SkipIfNoModelConverter -@pytest.mark.xfail(reason="MLETORCH-1387: Output differs") def test_silu_vgf_FP(test_data: input_t): silu_data = (test_data(), False) pipeline = VgfPipeline[input_t]( @@ -128,7 +126,6 @@ def test_silu_vgf_FP(test_data: input_t): @common.parametrize("test_data", Silu.test_data) @common.SkipIfNoModelConverter -@pytest.mark.xfail(reason="MLETORCH-1387: Output differs") def test_silu_vgf_FP_inplace(test_data: input_t): silu_data = (test_data(), True) pipeline = VgfPipeline[input_t]( @@ -139,7 +136,6 @@ def test_silu_vgf_FP_inplace(test_data: input_t): @common.parametrize("test_data", Silu.test_data) @common.SkipIfNoModelConverter -@pytest.mark.xfail(reason="MLETORCH-1387: Output differs") def test_silu_vgf_INT(test_data: input_t): silu_data = (test_data(), False) pipeline = VgfPipeline[input_t]( @@ -153,7 +149,6 @@ def test_silu_vgf_INT(test_data: input_t): @common.parametrize("test_data", Silu.test_data) @common.SkipIfNoModelConverter -@pytest.mark.xfail(reason="MLETORCH-1387: Output differs") def test_silu_vgf_INT_inplace(test_data: input_t): silu_data = (test_data(), True) pipeline = VgfPipeline[input_t]( diff --git a/backends/arm/test/tester/arm_tester.py b/backends/arm/test/tester/arm_tester.py index 8bf72827549..42ca6b57d38 100644 --- a/backends/arm/test/tester/arm_tester.py +++ b/backends/arm/test/tester/arm_tester.py @@ -463,6 +463,10 @@ def run_method_and_compare_outputs( for run_iteration in range(num_runs): reference_input = inputs if inputs else next(self.generate_random_inputs()) + # Avoid issues with inplace operators + test_input = copy.deepcopy(reference_input) + original_input = copy.deepcopy(reference_input) + input_shapes = [ generated_input.shape if hasattr(generated_input, "shape") else (1,) for generated_input in reference_input @@ -477,16 +481,16 @@ def run_method_and_compare_outputs( # Run exported module directly test_outputs, _ = pytree.tree_flatten( self._calculate_reference_output( - exported_program.module(), reference_input + exported_program.module(), test_input ) ) else: # Run lowered model with target test_outputs, _ = pytree.tree_flatten( - test_stage.run_artifact(reference_input) + test_stage.run_artifact(test_input) ) - logger.info(f"\n Input: {reference_input}") + logger.info(f"\n Input: {original_input}") logger.info(f"\n Ref output: {reference_outputs}") logger.info(f"\nTest output: {test_outputs}")