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 diff --git a/backends/openvino/preprocess.py b/backends/openvino/preprocess.py index c343f44a8b5..72c781c0fb3 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,13 @@ def preprocess( Returns: PreprocessResult: The result of preprocessing, including the compiled model bytes. """ + # Apply RemoveCloneOpsTransform to eliminate unnecessary clone operations + transformed_ep = RemoveCloneOpsTransform()(edge_program.graph_module) + + # Update the edge_program with the transformed graph + if transformed_ep and transformed_ep.graph_module: + edge_program._graph_module = transformed_ep.graph_module + input_names = edge_program.graph_signature.user_inputs args = [] for node in edge_program.graph.nodes: