From 72331f5d0feaea93cef7517fda0eba7942ac6dd2 Mon Sep 17 00:00:00 2001 From: suryasidd Date: Wed, 17 Sep 2025 13:16:49 -0700 Subject: [PATCH 1/5] Added Remove clone ops transformation to OpenVINO backend --- backends/openvino/preprocess.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/backends/openvino/preprocess.py b/backends/openvino/preprocess.py index c343f44a8b5..66d5ec97b0a 100644 --- a/backends/openvino/preprocess.py +++ b/backends/openvino/preprocess.py @@ -8,6 +8,7 @@ from typing import final, List +from executorch.backends.transforms.remove_clone_ops import RemoveCloneOpsTransform from executorch.exir.backend.backend_details import ( BackendDetails, ExportedProgram, @@ -36,6 +37,14 @@ def preprocess( Returns: PreprocessResult: The result of preprocessing, including the compiled model bytes. """ + # Apply RemoveCloneOpsTransform to eliminate unnecessary clone operations + remove_clone_transform = RemoveCloneOpsTransform() + transformed_result = remove_clone_transform(edge_program.graph_module) + + # Update the edge_program with the transformed graph + if transformed_result.graph_module is not None: + edge_program._graph_module = transformed_result.graph_module + input_names = edge_program.graph_signature.user_inputs args = [] for node in edge_program.graph.nodes: @@ -47,7 +56,9 @@ def preprocess( compile_options[spec.key] = spec.value.decode() compiled = openvino_compile( - edge_program.module(), *args, options=compile_options + edge_program.module(), + *args, + options=compile_options ) model_bytes = compiled.export_model() From 8016165619eee3777e2ef437e4b83de84b3582b6 Mon Sep 17 00:00:00 2001 From: suryasidd Date: Wed, 17 Sep 2025 13:28:50 -0700 Subject: [PATCH 2/5] Fixed variable names --- backends/openvino/preprocess.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/backends/openvino/preprocess.py b/backends/openvino/preprocess.py index 66d5ec97b0a..7fc9d61d68e 100644 --- a/backends/openvino/preprocess.py +++ b/backends/openvino/preprocess.py @@ -38,12 +38,11 @@ def preprocess( PreprocessResult: The result of preprocessing, including the compiled model bytes. """ # Apply RemoveCloneOpsTransform to eliminate unnecessary clone operations - remove_clone_transform = RemoveCloneOpsTransform() - transformed_result = remove_clone_transform(edge_program.graph_module) + transformed_ep = RemoveCloneOpsTransform()(edge_program.graph_module) # Update the edge_program with the transformed graph - if transformed_result.graph_module is not None: - edge_program._graph_module = transformed_result.graph_module + if transformed_ep.graph_module is not None: + edge_program._graph_module = transformed_ep.graph_module input_names = edge_program.graph_signature.user_inputs args = [] From f0d9fc72f504cb7e80ee34c02bca2e62977a1c9e Mon Sep 17 00:00:00 2001 From: Cavus Mustafa Date: Wed, 17 Sep 2025 15:30:48 -0700 Subject: [PATCH 3/5] Added extended support list for openvino backend --- backends/openvino/partitioner.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/backends/openvino/partitioner.py b/backends/openvino/partitioner.py index 20841d6730b..00107959412 100644 --- a/backends/openvino/partitioner.py +++ b/backends/openvino/partitioner.py @@ -34,6 +34,9 @@ def __init__(self): class OpenvinoOperatorsSupport(OperatorSupportBase): + extended_support_dict = { + "torch.ops.dim_order_ops._clone_dim_order.default": None, + } def __init__( self, @@ -77,7 +80,9 @@ def is_node_supported(self, _, node: torch.fx.Node) -> bool: if node.name in self._enabled_ops_by_name: return True - supported_ops = OperatorSupport(options)._support_dict + supported_ops = ( + OperatorSupport(options)._support_dict | self.extended_support_dict + ) if op_type == "getitem": return True From 9b41c28be3e266c10808ae07cc1cf1ff84112280 Mon Sep 17 00:00:00 2001 From: Cavus Mustafa Date: Wed, 17 Sep 2025 15:31:06 -0700 Subject: [PATCH 4/5] formating fix --- backends/openvino/preprocess.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/backends/openvino/preprocess.py b/backends/openvino/preprocess.py index 7fc9d61d68e..3ba693973e0 100644 --- a/backends/openvino/preprocess.py +++ b/backends/openvino/preprocess.py @@ -55,9 +55,7 @@ def preprocess( compile_options[spec.key] = spec.value.decode() compiled = openvino_compile( - edge_program.module(), - *args, - options=compile_options + edge_program.module(), *args, options=compile_options ) model_bytes = compiled.export_model() From e7517263cdae812bf96941c6ececd73790f1c69a Mon Sep 17 00:00:00 2001 From: Cavus Mustafa Date: Wed, 17 Sep 2025 16:09:00 -0700 Subject: [PATCH 5/5] formatting fix --- backends/openvino/preprocess.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backends/openvino/preprocess.py b/backends/openvino/preprocess.py index 3ba693973e0..72c781c0fb3 100644 --- a/backends/openvino/preprocess.py +++ b/backends/openvino/preprocess.py @@ -41,7 +41,7 @@ def preprocess( transformed_ep = RemoveCloneOpsTransform()(edge_program.graph_module) # Update the edge_program with the transformed graph - if transformed_ep.graph_module is not None: + if transformed_ep and transformed_ep.graph_module: edge_program._graph_module = transformed_ep.graph_module input_names = edge_program.graph_signature.user_inputs