Skip to content

Commit a0c6cbe

Browse files
committed
Update on "[ExecuTorch][to_backend] Enable passing Delegation Spec to to_backend"
Support Entire Graph Delegation Flow through EdgeProgramManager's to_backend. ### Motivation A current usecase for backend lowering is through the `to_backend(backend_id, exported_program, compile_spec)` API which lowers the entire exported program to the specified backend_id. However, lowering via the EdgeProgramManager only allows for partitioner based lowering. the EdgeProgramManager is the main component which enables support for multiple methods, as a result backends which leverage the old `to_backend(backend_id, ...)` api can not export executorch models with multiple methods. ### Design We override EdgeProgramManager to also allow Partitioner to be replaceable by DelegationSpec. DelegationSpec is essentially a wrapper around the backend_id and the compile_spec, so any where a partitioenr is specified to lower a graph, the delegation spec can also be used to do entier graph lowering. ### Intended Flow ``` del_spec = DelegationSpec("BackendWithCompilerDemo", [CompileSpec(...)]) encode_graph = torch.export.export(Encoder(), sample_inputs) decode_graph = torch.export.export(Decoder(), sample_inputs) edge_manager = to_edge({ "encode": encode_graph, "decode": decode_graph, }) lowered_edge_manager = edge_manager.to_backend(del_spec) # or if you want to specify which methods to lower to with del_spec lowered_edge_manager= edge_manager.to_backend({ "encode": del_spec, }) ``` Differential Revision: [D69086565](https://our.internmc.facebook.com/intern/diff/D69086565/) cc cccclai [ghstack-poisoned]
2 parents 197b1c3 + 35a1cd6 commit a0c6cbe

File tree

3 files changed

+3
-6
lines changed

3 files changed

+3
-6
lines changed

exir/backend/test/test_backends.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
import torch
1313
from executorch.exir import to_edge
1414
from executorch.exir.backend.backend_api import LoweredBackendModule, to_backend
15-
from executorch.exir.backend.canonical_partitioners.all_node_partitioner import
16-
(
15+
from executorch.exir.backend.canonical_partitioners.all_node_partitioner import (
1716
AllNodePartitioner,
1817
)
1918
from executorch.exir.backend.compile_spec_schema import CompileSpec

exir/backend/test/test_backends_lifted.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@
1111
import torch
1212
from executorch.exir import to_edge
1313
from executorch.exir.backend.backend_api import LoweredBackendModule, to_backend
14-
from executorch.exir.backend.canonical_partitioners.all_node_partitioner import
15-
(
14+
from executorch.exir.backend.canonical_partitioners.all_node_partitioner import (
1615
AllNodePartitioner,
1716
)
1817
from executorch.exir.backend.compile_spec_schema import CompileSpec

exir/backend/test/test_compatibility.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010
from executorch.exir import to_edge
1111
from executorch.exir._serialize import _serialize_pte_binary
1212
from executorch.exir.backend.backend_api import to_backend
13-
from executorch.exir.backend.canonical_partitioners.all_node_partitioner import
14-
(
13+
from executorch.exir.backend.canonical_partitioners.all_node_partitioner import (
1514
AllNodePartitioner,
1615
)
1716
from executorch.exir.backend.compile_spec_schema import CompileSpec

0 commit comments

Comments
 (0)