Skip to content

Commit 563a5d2

Browse files
Arm backend: Remove CheckNeedsDecomposition (#14512)
Remove redundant check as this can be covered by TOSAProIntSupportList. Signed-off-by: Oscar Andersson <[email protected]>
1 parent 8c434dd commit 563a5d2

File tree

2 files changed

+3
-74
lines changed

2 files changed

+3
-74
lines changed

backends/arm/operator_support/tosa_profile_supported_op_lists.py

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919

2020
# INT profile: ops supported via native TOSA ops, decompositions/transformations, precompute, TableOps, etc.
21+
# Note that ops supported via pre-quantization decompositions are not included here.
2122
TOSA_PRO_INT_SupportList: Final[Set] = {
2223
exir_ops.edge.aten.abs.default,
2324
exir_ops.edge.aten.add.Tensor,
@@ -46,8 +47,6 @@
4647
exir_ops.edge.aten.hardsigmoid.default,
4748
exir_ops.edge.aten.hardtanh.default,
4849
exir_ops.edge.aten.hardswish.default,
49-
exir_ops.edge.aten.div.Tensor,
50-
exir_ops.edge.aten.div.Tensor_mode,
5150
exir_ops.edge.aten.eq.Tensor,
5251
exir_ops.edge.aten.eq.Scalar,
5352
exir_ops.edge.aten.erf.default,
@@ -68,16 +67,7 @@
6867
exir_ops.edge.aten.lt.Tensor,
6968
exir_ops.edge.aten.lt.Scalar,
7069
exir_ops.edge.aten.mul.Tensor,
71-
exir_ops.edge.aten.ne.Tensor,
72-
exir_ops.edge.aten.ne.Scalar,
7370
exir_ops.edge.aten.neg.default,
74-
exir_ops.edge.aten.add.Scalar,
75-
exir_ops.edge.aten.sub.Scalar,
76-
exir_ops.edge.aten.mul.Scalar,
77-
exir_ops.edge.aten.div.Scalar,
78-
exir_ops.edge.aten._native_batch_norm_legit_no_training.default,
79-
exir_ops.edge.aten.native_layer_norm.default,
80-
exir_ops.edge.aten.native_group_norm.default,
8171
exir_ops.edge.aten.sigmoid.default,
8272
exir_ops.edge.aten.mean.dim,
8373
exir_ops.edge.aten.mm.default,
@@ -86,19 +76,12 @@
8676
exir_ops.edge.aten.repeat.default,
8777
exir_ops.edge.aten.reciprocal.default,
8878
exir_ops.edge.aten.relu.default,
89-
exir_ops.edge.aten.leaky_relu.default,
90-
exir_ops.edge.aten.sqrt.default,
9179
exir_ops.edge.aten.rsqrt.default,
92-
exir_ops.edge.aten.round.default,
93-
exir_ops.edge.aten._softmax.default,
9480
exir_ops.edge.aten.select_copy.int,
95-
exir_ops.edge.aten._log_softmax.default,
9681
exir_ops.edge.aten.sub.Tensor,
9782
exir_ops.edge.aten.tanh.default,
9883
exir_ops.edge.aten.upsample_bilinear2d.vec,
9984
exir_ops.edge.aten.upsample_nearest2d.vec,
100-
exir_ops.edge.aten.var.correction,
101-
exir_ops.edge.aten.var.dim,
10285
exir_ops.edge.aten.view_copy.default,
10386
exir_ops.edge.aten.unsqueeze_copy.default,
10487
exir_ops.edge.aten.squeeze_copy.dims,
@@ -127,12 +110,9 @@
127110
exir_ops.edge.aten.sign.default,
128111
exir_ops.edge.aten.asin.default,
129112
exir_ops.edge.aten.atanh.default,
130-
exir_ops.edge.aten.addmm.default,
131113
exir_ops.edge.aten.masked_fill.Scalar,
132114
exir_ops.edge.aten.asinh.default,
133115
exir_ops.edge.aten.cosh.default,
134-
exir_ops.edge.aten.glu.default,
135-
exir_ops.edge.aten.logit.default,
136116
exir_ops.edge.aten.acos.default,
137117
exir_ops.edge.aten.elu.default,
138118
exir_ops.edge.aten.bitwise_not.default,

backends/arm/operator_support/tosa_supported_operators.py

Lines changed: 2 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,6 @@ def tosa_support_factory(
135135
]
136136

137137
if not tosa_spec.support_float():
138-
negative_checks.append(NeedsDecompositionCheck(reporter))
139138
negative_checks.append(CheckProperQuantization(reporter))
140139
if tosa_spec.is_U55_subset:
141140
negative_checks.append(EthosU55NotSupported(reporter))
@@ -156,7 +155,8 @@ def tosa_support_factory(
156155
class TOSAProINTSupportList(OperatorSupportBase):
157156
"""
158157
TOSA_PRO_INT_SupportList:
159-
Ops supported in INT profile via native TOSA ops, decomposition/transformation, pre-compute, or TableOps
158+
Ops supported in INT profile via native TOSA ops, decomposition/transformation, pre-compute, or TableOps.
159+
Note that ops supported via pre-quantization decompositions are not included here.
160160
"""
161161

162162
def is_node_supported(
@@ -179,57 +179,6 @@ def is_node_supported(
179179
return node.op == "call_function" and node.target in TOSA_PRO_FP_SupportList
180180

181181

182-
class NeedsDecompositionCheck(OperatorSupportBase):
183-
"""
184-
Targeted operators need to be decomposed prior to quantization in order to get a pair of q-dq-nodes surrounding
185-
the operator, and to get optimal quantization parameters for each operator. This check will reject operators
186-
that need to be decomposed.
187-
"""
188-
189-
def __init__(self, reporter: WhyNoPartitionReporter):
190-
self.reporter = reporter
191-
192-
def is_node_supported(
193-
self, submodules: typing.Mapping[str, torch.nn.Module], node: fx.Node
194-
) -> bool:
195-
196-
if node.op != "call_function":
197-
return True
198-
199-
needs_decomp_dict = {
200-
exir_ops.edge.aten.div.Tensor: None,
201-
exir_ops.edge.aten._native_batch_norm_legit_no_training.default: "BatchNorm2D with track_running_stats==True not immediately following a convolution is not supported for quantized TOSA backends.",
202-
exir_ops.edge.aten.native_layer_norm.default: None,
203-
exir_ops.edge.aten.native_group_norm.default: None,
204-
exir_ops.edge.aten._softmax.default: None,
205-
exir_ops.edge.aten._log_softmax.default: None,
206-
exir_ops.edge.aten.var.correction: None,
207-
exir_ops.edge.aten.var.dim: None,
208-
exir_ops.edge.aten.add.Scalar: None,
209-
exir_ops.edge.aten.sqrt.default: None,
210-
exir_ops.edge.aten.sub.Scalar: None,
211-
exir_ops.edge.aten.mul.Scalar: None,
212-
exir_ops.edge.aten.ne.Tensor: None,
213-
exir_ops.edge.aten.ne.Scalar: None,
214-
exir_ops.edge.aten.div.Scalar: None,
215-
exir_ops.edge.aten.leaky_relu.default: None,
216-
exir_ops.edge.aten.round.default: None,
217-
exir_ops.edge.aten.addmm.default: None,
218-
exir_ops.edge.aten.glu.default: None,
219-
exir_ops.edge.aten.logit.default: None,
220-
}
221-
222-
if node.target in needs_decomp_dict:
223-
reject_message = needs_decomp_dict[node.target]
224-
if reject_message is None:
225-
reject_message = "Op needs to be decomposed into other ops before quantization to get quantized properly."
226-
227-
self.reporter.report_reject(node, reject_message)
228-
return False
229-
else:
230-
return True
231-
232-
233182
class CheckProperQuantization(OperatorSupportBase):
234183
"""
235184
For targeted nodes, check that it has been quantized as expected. In most cases this means that a pair of quantize

0 commit comments

Comments
 (0)