Skip to content

Commit 72abf1c

Browse files
cccclaifacebook-github-bot
authored andcommitted
hg mv backend example to a different place (#328)
Summary: Pull Request resolved: #328 Address comment: https://www.internalfb.com/diff/D49120351?dst_version_fbid=1006668850652842&transaction_fbid=839368227645650 Reviewed By: mergennachin Differential Revision: D49243300 fbshipit-source-id: 924f9b679c6fb5705c646f4300357a765a0628b9
1 parent 270c80d commit 72abf1c

24 files changed

+91
-48
lines changed

examples/README.md

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@ It also includes a list of modules, from a simple `Add` to a full model like `Mo
77
## Directory structure
88
```bash
99
examples
10-
|── backend # Contains examples for exporting delegate models and running them using custom executor runners
11-
├── custom_ops # Contains examples to register custom operators into PyTorch as well as register its kernels into Executorch runtime
12-
├── executor_runner # This is an example C++ wrapper around the ET runtime
13-
├── export # Python helper scripts to illustrate export workflow
14-
├── ios_demo_apps # Contains iOS demo apps
15-
├── models # Contains a set of simple to PyTorch models
16-
├── quantization # Contains examples of quantization workflow
17-
└── README.md # This file
10+
|── backend # Contains examples for exporting delegate models and running them using custom executor runners
11+
├── custom_ops # Contains examples to register custom operators into PyTorch as well as register its kernels into Executorch runtime
12+
├── example_quantizer_and_delegate # Contains examples to to fully lowered a MobileNetV2 model to the example backend with an example quantizer
13+
├── executor_runner # This is an example C++ wrapper around the ET runtime
14+
├── export # Python helper scripts to illustrate export workflow
15+
├── ios_demo_apps # Contains iOS demo apps
16+
├── models # Contains a set of simple to PyTorch models
17+
├── quantization # Contains examples of quantization workflow
18+
└── README.md # This file
1819
```
1920

2021
## Using the examples

backends/example/TARGETS renamed to examples/example_quantizer_and_delegate/TARGETS

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ python_library(
88
],
99
deps = [
1010
"//caffe2:torch",
11-
"//executorch/backends/example/example_operators:example_operators_lib",
11+
"//executorch/examples/example_quantizer_and_delegate/example_operators:example_operators_lib",
1212
],
1313
)
1414

@@ -18,7 +18,7 @@ python_library(
1818
"example_backend.py",
1919
],
2020
deps = [
21-
"//executorch/backends/example/example_backend_delegate_passes:lib",
21+
"//executorch/examples/example_quantizer_and_delegate/example_backend_delegate_passes:lib",
2222
"//executorch/exir/backend:backend_details",
2323
"//executorch/exir/backend:compile_spec_schema",
2424
],
@@ -32,7 +32,7 @@ python_library(
3232
deps = [
3333
":example_backend",
3434
"//caffe2:torch",
35-
"//executorch/backends/example/example_operators:example_operators_lib",
35+
"//executorch/examples/example_quantizer_and_delegate/example_operators:example_operators_lib",
3636
"//executorch/exir:graph_module",
3737
"//executorch/exir/backend:partitioner",
3838
"//executorch/exir/backend/canonical_partitioners:canonical_partitioner_lib",

backends/example/example_backend.py renamed to examples/example_quantizer_and_delegate/example_backend.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
import copy
88
from typing import final, List
99

10-
from executorch.backends.example.example_backend_delegate_passes.merge_to_dim_pass import (
10+
from executorch.examples.example_quantizer_and_delegate.example_backend_delegate_passes.merge_to_dim_pass import (
1111
MergeToDimPass,
1212
)
13-
from executorch.backends.example.example_backend_delegate_passes.permute_memory_formats_pass import (
13+
from executorch.examples.example_quantizer_and_delegate.example_backend_delegate_passes.permute_memory_formats_pass import (
1414
PermuteMemoryFormatsPass,
1515
)
1616

backends/example/example_backend_delegate_passes/TARGETS renamed to examples/example_quantizer_and_delegate/example_backend_delegate_passes/TARGETS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ python_library(
88
],
99
deps = [
1010
"//caffe2:torch",
11-
"//executorch/backends/example/example_operators:example_operators_lib",
11+
"//executorch/examples/example_quantizer_and_delegate/example_operators:example_operators_lib",
1212
"//executorch/exir:dim_order_utils",
1313
"//executorch/exir:pass_base",
1414
"//executorch/exir/dialects:lib",

backends/example/example_backend_delegate_passes/permute_memory_formats_pass.py renamed to examples/example_quantizer_and_delegate/example_backend_delegate_passes/permute_memory_formats_pass.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
from itertools import chain
88

99
import torch
10-
from executorch.backends.example.example_operators.ops import module_to_annotator
10+
from executorch.examples.example_quantizer_and_delegate.example_operators.ops import (
11+
module_to_annotator,
12+
)
1113
from executorch.exir.dialects._ops import ops as exir_ops
1214
from executorch.exir.dim_order_utils import get_dim_order
1315
from executorch.exir.pass_base import ExportPass, PassResult

backends/example/example_operators/adaptive_avg_pool2d.py renamed to examples/example_quantizer_and_delegate/example_operators/adaptive_avg_pool2d.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
from dataclasses import dataclass
88

99
import torch
10-
from executorch.backends.example.example_operators.op_base import OpBase
11-
from executorch.backends.example.example_operators.utils import (
10+
from executorch.examples.example_quantizer_and_delegate.example_operators.op_base import (
11+
OpBase,
12+
)
13+
from executorch.examples.example_quantizer_and_delegate.example_operators.utils import (
1214
_annotate_nodes,
1315
_nodes_are_annotated,
1416
)

backends/example/example_operators/add.py renamed to examples/example_quantizer_and_delegate/example_operators/add.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
from dataclasses import dataclass
88

99
import torch
10-
from executorch.backends.example.example_operators.op_base import OpBase
11-
from executorch.backends.example.example_operators.utils import (
10+
from executorch.examples.example_quantizer_and_delegate.example_operators.op_base import (
11+
OpBase,
12+
)
13+
from executorch.examples.example_quantizer_and_delegate.example_operators.utils import (
1214
_annotate_nodes,
1315
_nodes_are_annotated,
1416
)

backends/example/example_operators/conv2d.py renamed to examples/example_quantizer_and_delegate/example_operators/conv2d.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
from dataclasses import dataclass
88

99
import torch
10-
from executorch.backends.example.example_operators.op_base import OpBase
11-
from executorch.backends.example.example_operators.utils import (
10+
from executorch.examples.example_quantizer_and_delegate.example_operators.op_base import (
11+
OpBase,
12+
)
13+
from executorch.examples.example_quantizer_and_delegate.example_operators.utils import (
1214
_annotate_nodes,
1315
_nodes_are_annotated,
1416
)

backends/example/example_operators/conv_relu.py renamed to examples/example_quantizer_and_delegate/example_operators/conv_relu.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
from dataclasses import dataclass
88

99
import torch
10-
from executorch.backends.example.example_operators.op_base import OpBase
11-
from executorch.backends.example.example_operators.utils import (
10+
from executorch.examples.example_quantizer_and_delegate.example_operators.op_base import (
11+
OpBase,
12+
)
13+
from executorch.examples.example_quantizer_and_delegate.example_operators.utils import (
1214
_annotate_nodes,
1315
_nodes_are_annotated,
1416
)

backends/example/example_operators/dropout.py renamed to examples/example_quantizer_and_delegate/example_operators/dropout.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
from dataclasses import dataclass
88

99
import torch
10-
from executorch.backends.example.example_operators.op_base import OpBase
11-
from executorch.backends.example.example_operators.utils import (
10+
from executorch.examples.example_quantizer_and_delegate.example_operators.op_base import (
11+
OpBase,
12+
)
13+
from executorch.examples.example_quantizer_and_delegate.example_operators.utils import (
1214
_annotate_nodes,
1315
_nodes_are_annotated,
1416
)

backends/example/example_operators/flatten.py renamed to examples/example_quantizer_and_delegate/example_operators/flatten.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
from dataclasses import dataclass
88

99
import torch
10-
from executorch.backends.example.example_operators.op_base import OpBase
11-
from executorch.backends.example.example_operators.utils import (
10+
from executorch.examples.example_quantizer_and_delegate.example_operators.op_base import (
11+
OpBase,
12+
)
13+
from executorch.examples.example_quantizer_and_delegate.example_operators.utils import (
1214
_annotate_nodes,
1315
_nodes_are_annotated,
1416
)

backends/example/example_operators/linear.py renamed to examples/example_quantizer_and_delegate/example_operators/linear.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
from dataclasses import dataclass
88

99
import torch
10-
from executorch.backends.example.example_operators.op_base import OpBase
11-
from executorch.backends.example.example_operators.utils import (
10+
from executorch.examples.example_quantizer_and_delegate.example_operators.op_base import (
11+
OpBase,
12+
)
13+
from executorch.examples.example_quantizer_and_delegate.example_operators.utils import (
1214
_annotate_nodes,
1315
_nodes_are_annotated,
1416
)

backends/example/example_operators/ops.py renamed to examples/example_quantizer_and_delegate/example_operators/ops.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,28 @@
66

77
from collections import OrderedDict
88

9-
from executorch.backends.example.example_operators.adaptive_avg_pool2d import (
9+
from executorch.examples.example_quantizer_and_delegate.example_operators.adaptive_avg_pool2d import (
1010
AdaptiveAvgPool2dNode,
1111
)
1212

13-
from executorch.backends.example.example_operators.add import AddNode
14-
from executorch.backends.example.example_operators.conv2d import Conv2DNode
15-
from executorch.backends.example.example_operators.conv_relu import ConvReluNode
16-
from executorch.backends.example.example_operators.dropout import DropOutNode
17-
from executorch.backends.example.example_operators.flatten import FlattenNode
18-
from executorch.backends.example.example_operators.linear import LinearNode
13+
from executorch.examples.example_quantizer_and_delegate.example_operators.add import (
14+
AddNode,
15+
)
16+
from executorch.examples.example_quantizer_and_delegate.example_operators.conv2d import (
17+
Conv2DNode,
18+
)
19+
from executorch.examples.example_quantizer_and_delegate.example_operators.conv_relu import (
20+
ConvReluNode,
21+
)
22+
from executorch.examples.example_quantizer_and_delegate.example_operators.dropout import (
23+
DropOutNode,
24+
)
25+
from executorch.examples.example_quantizer_and_delegate.example_operators.flatten import (
26+
FlattenNode,
27+
)
28+
from executorch.examples.example_quantizer_and_delegate.example_operators.linear import (
29+
LinearNode,
30+
)
1931

2032
# The ordering of this is important as the quantizer will try to match the patterns in this order.
2133
# That's why we want to match the fused patterns first and then the non-fused ones.

backends/example/example_partitioner.py renamed to examples/example_quantizer_and_delegate/example_partitioner.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,20 @@
77
from typing import Dict, final
88

99
import torch
10-
from executorch.backends.example.example_backend import TosaBackend
11-
from executorch.backends.example.example_operators.ops import module_to_annotator
10+
from executorch.examples.example_quantizer_and_delegate.example_backend import (
11+
TosaBackend,
12+
)
13+
from executorch.examples.example_quantizer_and_delegate.example_operators.ops import (
14+
module_to_annotator,
15+
)
1216
from executorch.exir.backend.canonical_partitioners.pattern_op_partitioner import (
1317
generate_partitions_from_list_of_nodes,
1418
)
15-
from executorch.exir.backend.partitioner import DelegationSpec, Partitioner
19+
from executorch.exir.backend.partitioner import (
20+
DelegationSpec,
21+
Partitioner,
22+
PartitionResult,
23+
)
1624
from executorch.exir.dialects._ops import ops as exir_ops
1725
from executorch.exir.graph_module import get_control_flow_submodules
1826
from torch.ao.quantization.pt2e.graph_utils import find_sequential_partitions
@@ -28,7 +36,6 @@ class ExamplePartitioner(Partitioner):
2836
def __init__(self) -> None:
2937
self.patterns = module_to_annotator.keys()
3038
self.delegation_spec = DelegationSpec(TosaBackend.__name__, [])
31-
self.partition_tags: Dict[str, DelegationSpec] = {}
3239

3340
class DequantQuantOperatorSupport(OperatorSupportBase):
3441
def is_node_supported(self, _submodules, node: torch.fx.Node) -> bool:
@@ -39,9 +46,8 @@ def is_node_supported(self, _submodules, node: torch.fx.Node) -> bool:
3946

4047
self.dequant_quant_support = DequantQuantOperatorSupport()
4148

42-
def partition(
43-
self, edge_graph_module: torch.fx.GraphModule
44-
) -> torch.fx.GraphModule:
49+
def partition(self, edge_graph_module: torch.fx.GraphModule) -> PartitionResult:
50+
partition_tags: Dict[str, DelegationSpec] = {}
4551
partition_nodes = []
4652
for pattern in self.patterns:
4753
fused_partitions = find_sequential_partitions(
@@ -68,9 +74,11 @@ def partition(
6874
and arg_node.op == "get_attr"
6975
):
7076
arg_node.meta["delegation_tag"] = delegation_tag
71-
self.partition_tags[delegation_tag] = self.delegation_spec
77+
partition_tags[delegation_tag] = self.delegation_spec
7278

7379
for _, submodule, _ in get_control_flow_submodules(edge_graph_module):
7480
self.partition(submodule)
7581

76-
return edge_graph_module
82+
return PartitionResult(
83+
tagged_graph=edge_graph_module, partition_tags=partition_tags
84+
)

backends/example/example_quantizer.py renamed to examples/example_quantizer_and_delegate/example_quantizer.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
from typing import List
99

1010
import torch
11-
from executorch.backends.example.example_operators.ops import module_to_annotator
11+
from executorch.examples.example_quantizer_and_delegate.example_operators.ops import (
12+
module_to_annotator,
13+
)
1214
from torch import fx
1315
from torch.ao.quantization.observer import HistogramObserver, MinMaxObserver
1416
from torch.ao.quantization.pt2e.graph_utils import find_sequential_partitions

backends/example/test_example_delegate.py renamed to examples/example_quantizer_and_delegate/test_example_delegate.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,12 @@
1010
import torch
1111
import torch._export as export
1212
from executorch import exir
13-
from executorch.backends.example.example_partitioner import ExamplePartitioner
14-
from executorch.backends.example.example_quantizer import ExampleQuantizer
13+
from executorch.examples.example_quantizer_and_delegate.example_partitioner import (
14+
ExamplePartitioner,
15+
)
16+
from executorch.examples.example_quantizer_and_delegate.example_quantizer import (
17+
ExampleQuantizer,
18+
)
1519
from executorch.exir.backend.backend_api import to_backend
1620

1721
from executorch.exir.backend.canonical_partitioners.duplicate_dequant_node_pass import (

0 commit comments

Comments
 (0)