Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion backends/arm/quantizer/arm_quantizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,6 @@ class ArmQuantizer(Quantizer):
"sub",
"mul",
"mm",
"cat",
"one_to_one",
"generic",
"sum",
Expand Down
12 changes: 0 additions & 12 deletions backends/arm/quantizer/arm_quantizer_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,21 +144,9 @@ def is_share_obs_or_fq_op(op: Callable) -> bool:
torch.ops.aten.mean.dim,
torch.ops.aten.permute.default,
torch.ops.aten.permute_copy.default,
torch.ops.aten.squeeze.dim,
torch.ops.aten.squeeze.dims,
torch.ops.aten.squeeze.default,
torch.ops.aten.squeeze_copy.dim,
torch.ops.aten.unsqueeze.default,
torch.ops.aten.unsqueeze_copy.default,
# TODO: remove?
torch.ops.aten.adaptive_avg_pool2d.default,
torch.ops.aten.avg_pool2d.default,
torch.ops.aten.view_copy.default,
torch.ops.aten.view.default,
torch.ops.aten.full.default,
torch.ops.aten.slice.Tensor,
torch.ops.aten.split.Tensor,
torch.ops.aten.split_with_sizes.default,
torch.ops.aten.flatten.using_ints,
torch.ops.aten.dropout.default,
operator.getitem,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ def decorator(annotator: AnnotatorType):
from . import ( # noqa
adaptive_ang_pool2d_annotator,
add_annotator,
cat_annotator,
conv_annotator,
generic_annotator,
linear_annotator,
Expand Down
68 changes: 0 additions & 68 deletions backends/arm/quantizer/quantization_annotation/cat_annotator.py

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
# LICENSE file in the root directory of this source tree.

# pyre-unsafe

from typing import Callable, List, Optional
from typing import Callable, cast, List, Optional

import torch
import torch.fx
Expand All @@ -24,6 +23,9 @@
# DATA LAYOUT OPS
torch.ops.aten.squeeze.default,
torch.ops.aten.squeeze_copy.default,
torch.ops.aten.squeeze_copy.dim,
torch.ops.aten.squeeze.dim,
torch.ops.aten.squeeze.dims,
torch.ops.aten.unsqueeze.default,
torch.ops.aten.unsqueeze_copy.default,
torch.ops.aten.reshape.default,
Expand All @@ -33,17 +35,19 @@
# torch.ops.aten.view_as_complex_copy.default,
# torch.ops.aten.view_as_real.default,
# torch.ops.aten.view_as_real_copy.default,
torch.ops.aten.view.default,
torch.ops.aten.view_copy.default,
torch.ops.aten.slice.Tensor,
torch.ops.aten.slice_copy.Tensor,
# 'concat' should be handled separately as it has a sequence of inputs and
# makes the implementation unnecessary complicated.
# torch.ops.aten.concat.default,
torch.ops.aten.split.Tensor,
torch.ops.aten.split_with_sizes.default,
torch.ops.aten.transpose.Dimname,
torch.ops.aten.transpose.int,
torch.ops.aten.transpose_copy.int,
torch.ops.aten.tile.default,
torch.ops.aten.flip.default,
torch.ops.aten.cat.default,
torch.ops.aten.stack.default,
]


Expand All @@ -64,15 +68,31 @@ def _annotate_generic(
if arm_quantizer_utils.is_annotated(node):
continue

input_node = node.args[0]
input_acts = cast(list[torch.fx.Node], node.args[0])

# Check to see if there are multiple inputs.
# this allows for stack/cat ops to be annotated
# in a similar way.
has_multi_inputs = isinstance(input_acts, list)

input_act0 = input_acts[0] if has_multi_inputs else input_acts

# Using a non-shared quantization spec here as a SharedQuantizationSpec
# can lead to a recursion.
_annotate_input_qspec_map(
node, input_node, quantization_config.get_input_act_qspec()
node, input_act0, quantization_config.get_input_act_qspec()
)
_annotate_output_qspec(node, SharedQuantizationSpec((input_node, node)))
shared_with_input0_qspec = SharedQuantizationSpec((input_act0, node))

if has_multi_inputs:
# For the rest of the inputs, share qspec with first.
for input_act in input_acts[1:]:
if input_act is not input_act0:
node.meta["quantization_annotation"].input_qspec_map[
input_act
] = shared_with_input0_qspec

_annotate_output_qspec(node, shared_with_input0_qspec)
arm_quantizer_utils.mark_nodes_as_annotated([node])
annotated_partitions.append([node])

Expand Down
12 changes: 3 additions & 9 deletions backends/arm/test/ops/test_slice.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,9 @@
from typing import Tuple

import torch
from executorch.backends.arm.quantizer.arm_quantizer import (
ArmQuantizer,
get_symmetric_quantization_config,
)

from executorch.backends.arm.test import common
from executorch.backends.arm.test.tester.arm_tester import ArmTester
from executorch.backends.xnnpack.test.tester.tester import Quantize
from executorch.exir.backend.compile_spec_schema import CompileSpec
from parameterized import parameterized

Expand Down Expand Up @@ -59,7 +55,6 @@ def _test_slice_tosa_BI_pipeline(
self, module: torch.nn.Module, test_data: Tuple[torch.Tensor], permute: bool
):

quantizer = ArmQuantizer().set_io(get_symmetric_quantization_config())
(
ArmTester(
module,
Expand All @@ -68,7 +63,7 @@ def _test_slice_tosa_BI_pipeline(
permute_memory_to_nhwc=permute
),
)
.quantize(Quantize(quantizer, get_symmetric_quantization_config()))
.quantize()
.export()
.check(["torch.ops.aten.slice.Tensor"])
.to_edge()
Expand All @@ -84,14 +79,13 @@ def _test_slice_ethos_BI_pipeline(
module: torch.nn.Module,
test_data: Tuple[torch.Tensor],
):
quantizer = ArmQuantizer().set_io(get_symmetric_quantization_config())
(
ArmTester(
module,
example_inputs=test_data,
compile_spec=common.get_u55_compile_spec(),
)
.quantize(Quantize(quantizer, get_symmetric_quantization_config()))
.quantize()
.export()
.check(["torch.ops.aten.slice.Tensor"])
.to_edge()
Expand Down
12 changes: 3 additions & 9 deletions backends/arm/test/ops/test_split.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,9 @@
import unittest

import torch
from executorch.backends.arm.quantizer.arm_quantizer import (
ArmQuantizer,
get_symmetric_quantization_config,
)

from executorch.backends.arm.test import common
from executorch.backends.arm.test.tester.arm_tester import ArmTester
from executorch.backends.xnnpack.test.tester.tester import Quantize
from executorch.exir.backend.compile_spec_schema import CompileSpec
from parameterized import parameterized

Expand Down Expand Up @@ -79,14 +75,13 @@ def _test_split_tosa_BI_pipeline(
self, module: torch.nn.Module, test_data: test_data_t
):

quantizer = ArmQuantizer().set_io(get_symmetric_quantization_config())
(
ArmTester(
module,
example_inputs=test_data,
compile_spec=common.get_tosa_compile_spec(),
)
.quantize(Quantize(quantizer, get_symmetric_quantization_config()))
.quantize()
.export()
.to_edge()
.partition()
Expand All @@ -98,14 +93,13 @@ def _test_split_tosa_BI_pipeline(
def _test_split_ethosu_BI_pipeline(
self, compile_spec: CompileSpec, module: torch.nn.Module, test_data: test_data_t
):
quantizer = ArmQuantizer().set_io(get_symmetric_quantization_config())
(
ArmTester(
module,
example_inputs=test_data,
compile_spec=compile_spec,
)
.quantize(Quantize(quantizer, get_symmetric_quantization_config()))
.quantize()
.export()
.check(["torch.ops.aten.split.Tensor"])
.to_edge()
Expand Down
11 changes: 2 additions & 9 deletions backends/arm/test/ops/test_squeeze.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,9 @@

import torch

from executorch.backends.arm.quantizer.arm_quantizer import (
ArmQuantizer,
get_symmetric_quantization_config,
)
from executorch.backends.arm.test import common
from executorch.backends.arm.test.tester.arm_tester import ArmTester

from executorch.backends.xnnpack.test.tester.tester import Quantize
from executorch.exir.backend.compile_spec_schema import CompileSpec
from parameterized import parameterized

Expand Down Expand Up @@ -83,14 +78,13 @@ def _test_squeeze_tosa_BI_pipeline(
test_data: Tuple[torch.Tensor, Optional[tuple[int]]],
export_target: str,
):
quantizer = ArmQuantizer().set_io(get_symmetric_quantization_config())
(
ArmTester(
module,
example_inputs=test_data,
compile_spec=common.get_tosa_compile_spec(),
)
.quantize(Quantize(quantizer, get_symmetric_quantization_config()))
.quantize()
.export()
.check_count({export_target: 1})
.to_edge()
Expand All @@ -107,10 +101,9 @@ def _test_squeeze_ethosu_BI_pipeline(
test_data: Tuple[torch.Tensor, Optional[tuple[int]]],
export_target: str,
):
quantizer = ArmQuantizer().set_io(get_symmetric_quantization_config())
(
ArmTester(module, example_inputs=test_data, compile_spec=compile_spec)
.quantize(Quantize(quantizer, get_symmetric_quantization_config()))
.quantize()
.export()
.check_count({export_target: 1})
.to_edge()
Expand Down
11 changes: 2 additions & 9 deletions backends/arm/test/ops/test_unsqueeze.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,9 @@

import torch

from executorch.backends.arm.quantizer.arm_quantizer import (
ArmQuantizer,
get_symmetric_quantization_config,
)
from executorch.backends.arm.test import common
from executorch.backends.arm.test.tester.arm_tester import ArmTester

from executorch.backends.xnnpack.test.tester.tester import Quantize
from executorch.exir.backend.compile_spec_schema import CompileSpec
from parameterized import parameterized

Expand Down Expand Up @@ -54,14 +49,13 @@ def _test_unsqueeze_tosa_MI_pipeline(
def _test_unsqueeze_tosa_BI_pipeline(
self, module: torch.nn.Module, test_data: Tuple[torch.Tensor, int]
):
quantizer = ArmQuantizer().set_io(get_symmetric_quantization_config())
(
ArmTester(
module,
example_inputs=test_data,
compile_spec=common.get_tosa_compile_spec(),
)
.quantize(Quantize(quantizer, get_symmetric_quantization_config()))
.quantize()
.export()
.check_count({"torch.ops.aten.unsqueeze.default": 1})
.to_edge()
Expand All @@ -77,14 +71,13 @@ def _test_unsqueeze_ethosu_BI_pipeline(
module: torch.nn.Module,
test_data: Tuple[torch.Tensor, int],
):
quantizer = ArmQuantizer().set_io(get_symmetric_quantization_config())
(
ArmTester(
module,
example_inputs=test_data,
compile_spec=compile_spec,
)
.quantize(Quantize(quantizer, get_symmetric_quantization_config()))
.quantize()
.export()
.check_count({"torch.ops.aten.unsqueeze.default": 1})
.to_edge()
Expand Down
Loading
Loading