Skip to content

Commit bbd23a6

Browse files
Arm backend: Add VGF unit tests to operators (Part 3) (#13154)
- Included aten.scalar_tensor to aten.zeros - Ops or test files not completed: test_scalars.py: skipped sigmoid_16bit: skipped sigmoid_32bit: skipped upsample_nearest2d: dynamic shapes tests skipped Signed-off-by: Yufeng Shi <[email protected]>
1 parent f071ea5 commit bbd23a6

27 files changed

+1183
-5
lines changed

backends/arm/scripts/parse_test_names.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
"bitwise_right_shift.Tensor",
1919
"bitwise_left_shift.Tensor",
2020
"native_group_norm.default",
21+
"silu.default",
22+
"sdpa.default",
2123
"unbind.int",
2224
"unflatten.int",
2325
"_native_batch_norm_legit_no_training.default",

backends/arm/test/ops/test_scalar_tensor.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
EthosU85PipelineINT,
1212
TosaPipelineFP,
1313
TosaPipelineINT,
14+
VgfPipeline,
1415
)
1516

1617
float_test_data_suite = {
@@ -99,3 +100,30 @@ def test_scalar_tensor_u85_INT(test_data):
99100
ScalarTensor.aten_op,
100101
run_on_fvp=True,
101102
).run()
103+
104+
105+
@common.parametrize("test_data", float_test_data_suite)
106+
@common.SkipIfNoModelConverter
107+
def test_scalar_tensor_vgf_FP(test_data):
108+
scalar, dtype, data = test_data()
109+
pipeline = VgfPipeline(
110+
ScalarTensor(scalar, dtype),
111+
tuple(data),
112+
ScalarTensor.aten_op,
113+
tosa_version="TOSA-1.0+FP",
114+
)
115+
pipeline.run()
116+
117+
118+
@common.parametrize("test_data", int_test_data_suite)
119+
@common.SkipIfNoModelConverter
120+
def test_scalar_tensor_vgf_INT(test_data):
121+
scalar, dtype, data = test_data()
122+
pipeline = VgfPipeline(
123+
ScalarTensor(scalar, dtype),
124+
tuple(data),
125+
ScalarTensor.aten_op,
126+
tosa_version="TOSA-1.0+INT",
127+
)
128+
pipeline.pop_stage("check.quant_nodes")
129+
pipeline.run()

backends/arm/test/ops/test_sdpa.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@
88

99
import torch
1010

11+
from executorch.backends.arm.test import common
1112
from executorch.backends.arm.test.tester.test_pipeline import (
1213
TosaPipelineFP,
1314
TosaPipelineINT,
15+
VgfPipeline,
1416
)
1517

1618

@@ -27,14 +29,14 @@ def forward(self, query, key, value):
2729
input_t = Tuple[torch.Tensor, torch.Tensor, torch.Tensor]
2830

2931

30-
def test_sdpa_FP():
32+
def test_sdpa_tosa_FP():
3133
test_input = tuple(torch.randn(1, 3, 197, 64) for x in range(3))
3234
pipeline = TosaPipelineFP[input_t](SDPA(), test_input, [], [])
3335
pipeline.pop_stage("check_count.exir")
3436
pipeline.run()
3537

3638

37-
def test_sdpa_INT():
39+
def test_sdpa_tosa_INT():
3840
test_input = tuple(torch.randn(1, 3, 197, 64) for x in range(3))
3941
pipeline = TosaPipelineINT[input_t](SDPA(), test_input, [], [])
4042
pipeline.pop_stage("check.quant_nodes")
@@ -43,3 +45,25 @@ def test_sdpa_INT():
4345
"run_method_and_compare_outputs"
4446
) # TODO: reference is not quantized
4547
pipeline.run()
48+
49+
50+
@common.SkipIfNoModelConverter
51+
def test_sdpa_vgf_FP():
52+
test_input = tuple(torch.randn(1, 3, 197, 64) for _ in range(3))
53+
pipeline = VgfPipeline[input_t](
54+
SDPA(), test_input, [], [], tosa_version="TOSA-1.0+FP"
55+
)
56+
pipeline.run()
57+
58+
59+
@common.SkipIfNoModelConverter
60+
def test_sdpa_vgf_INT():
61+
test_input = tuple(torch.randn(1, 3, 197, 64) for _ in range(3))
62+
pipeline = VgfPipeline[input_t](
63+
SDPA(),
64+
test_input,
65+
[],
66+
[],
67+
tosa_version="TOSA-1.0+INT",
68+
)
69+
pipeline.run()

backends/arm/test/ops/test_select.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
OpNotSupportedPipeline,
1717
TosaPipelineFP,
1818
TosaPipelineINT,
19+
VgfPipeline,
1920
)
2021

2122
input_t1 = Tuple[torch.Tensor, int, int]
@@ -173,3 +174,47 @@ def test_select_int_u85_INT(test_data: Tuple):
173174
use_to_edge_transform_and_lower=True,
174175
)
175176
pipeline.run()
177+
178+
179+
@common.parametrize("test_data", test_data_suite)
180+
@common.SkipIfNoModelConverter
181+
def test_select_int_vgf_FP_copy(test_data: Tuple):
182+
pipeline = VgfPipeline[input_t1](
183+
SelectCopy(), test_data(), aten_op_copy, [], tosa_version="TOSA-1.0+FP"
184+
)
185+
pipeline.run()
186+
187+
188+
@common.parametrize("test_data", test_data_suite)
189+
@common.SkipIfNoModelConverter
190+
def test_select_int_vgf_FP(test_data: Tuple):
191+
pipeline = VgfPipeline[input_t1](
192+
SelectInt(), test_data(), aten_op_int, [], tosa_version="TOSA-1.0+FP"
193+
)
194+
pipeline.run()
195+
196+
197+
@common.parametrize("test_data", test_data_suite)
198+
@common.SkipIfNoModelConverter
199+
def test_select_int_vgf_INT_copy(test_data: Tuple):
200+
pipeline = VgfPipeline[input_t1](
201+
SelectCopy(),
202+
test_data(),
203+
aten_op_copy,
204+
[],
205+
tosa_version="TOSA-1.0+INT",
206+
)
207+
pipeline.run()
208+
209+
210+
@common.parametrize("test_data", test_data_suite)
211+
@common.SkipIfNoModelConverter
212+
def test_select_int_vgf_INT(test_data: Tuple):
213+
pipeline = VgfPipeline[input_t1](
214+
SelectInt(),
215+
test_data(),
216+
aten_op_int,
217+
[],
218+
tosa_version="TOSA-1.0+INT",
219+
)
220+
pipeline.run()

backends/arm/test/ops/test_sigmoid.py

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
EthosU85PipelineINT,
1616
TosaPipelineFP,
1717
TosaPipelineINT,
18+
VgfPipeline,
1819
)
1920

2021
aten_op = "torch.ops.aten.sigmoid.default" # Used for checking that we do not have softmax in the graph after decompose
@@ -154,3 +155,101 @@ def test_sigmoid_u85_INT(test_data: Tuple):
154155
run_on_fvp=False,
155156
)
156157
pipeline.run()
158+
159+
160+
@common.parametrize("test_data", test_data_suite)
161+
@common.SkipIfNoModelConverter
162+
def test_sigmoid_vgf_FP(test_data: Tuple):
163+
pipeline = VgfPipeline[input_t1](
164+
Sigmoid(),
165+
(test_data(),),
166+
aten_op,
167+
exir_op,
168+
tosa_version="TOSA-1.0+FP",
169+
)
170+
pipeline.run()
171+
172+
173+
@common.parametrize("test_data", test_data_suite)
174+
@common.SkipIfNoModelConverter
175+
def test_sigmoid_vgf_INT(test_data: Tuple):
176+
pipeline = VgfPipeline[input_t1](
177+
Sigmoid(),
178+
(test_data(),),
179+
aten_op,
180+
exir_op,
181+
tosa_version="TOSA-1.0+INT",
182+
)
183+
pipeline.run()
184+
185+
186+
@common.SkipIfNoModelConverter
187+
def test_sigmoid_vgf_FP_add():
188+
pipeline = VgfPipeline[input_t1](
189+
AddSigmoid(),
190+
(test_data_suite["zeros"](),),
191+
aten_op,
192+
exir_op,
193+
tosa_version="TOSA-1.0+FP",
194+
)
195+
pipeline.run()
196+
197+
198+
@common.SkipIfNoModelConverter
199+
def test_sigmoid_vgf_INT_add():
200+
pipeline = VgfPipeline[input_t1](
201+
AddSigmoid(),
202+
(test_data_suite["ramp"](),),
203+
aten_op,
204+
exir_op,
205+
tosa_version="TOSA-1.0+INT",
206+
)
207+
pipeline.run()
208+
209+
210+
@common.SkipIfNoModelConverter
211+
def test_sigmoid_vgf_FP_add_2():
212+
pipeline = VgfPipeline[input_t1](
213+
SigmoidAdd(),
214+
(test_data_suite["zeros"](),),
215+
aten_op,
216+
exir_op,
217+
tosa_version="TOSA-1.0+FP",
218+
)
219+
pipeline.run()
220+
221+
222+
@common.SkipIfNoModelConverter
223+
def test_sigmoid_vgf_INT_add_2():
224+
pipeline = VgfPipeline[input_t1](
225+
SigmoidAdd(),
226+
(test_data_suite["zeros"](),),
227+
aten_op,
228+
exir_op,
229+
tosa_version="TOSA-1.0+INT",
230+
)
231+
pipeline.run()
232+
233+
234+
@common.SkipIfNoModelConverter
235+
def test_sigmoid_vgf_FP_add_3():
236+
pipeline = VgfPipeline[input_t1](
237+
SigmoidAddSigmoid(),
238+
(test_data_suite["randn_neg"](), test_data_suite["randn_pos"]()),
239+
aten_op,
240+
exir_op,
241+
tosa_version="TOSA-1.0+FP",
242+
)
243+
pipeline.run()
244+
245+
246+
@common.SkipIfNoModelConverter
247+
def test_sigmoid_vgf_INT_add_3():
248+
pipeline = VgfPipeline[input_t1](
249+
SigmoidAddSigmoid(),
250+
(test_data_suite["randn_neg"](), test_data_suite["randn_pos"]()),
251+
aten_op,
252+
exir_op,
253+
tosa_version="TOSA-1.0+INT",
254+
)
255+
pipeline.run()

backends/arm/test/ops/test_sign.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
EthosU85PipelineINT,
1414
TosaPipelineFP,
1515
TosaPipelineINT,
16+
VgfPipeline,
1617
)
1718

1819
aten_op = "torch.ops.aten.sign.default"
@@ -84,3 +85,29 @@ def test_sign_u85_INT(test_data: Tuple):
8485
exir_ops=exir_op,
8586
)
8687
pipeline.run()
88+
89+
90+
@common.parametrize("test_data", test_data_suite)
91+
@common.SkipIfNoModelConverter
92+
def test_sign_vgf_FP(test_data: Tuple):
93+
pipeline = VgfPipeline[input_t1](
94+
Sign(),
95+
(test_data,),
96+
aten_op=aten_op,
97+
exir_op=exir_op,
98+
tosa_version="TOSA-1.0+FP",
99+
)
100+
pipeline.run()
101+
102+
103+
@common.parametrize("test_data", test_data_suite)
104+
@common.SkipIfNoModelConverter
105+
def test_sign_vgf_INT(test_data: Tuple):
106+
pipeline = VgfPipeline[input_t1](
107+
Sign(),
108+
(test_data,),
109+
aten_op=[],
110+
exir_op=exir_op,
111+
tosa_version="TOSA-1.0+INT",
112+
)
113+
pipeline.run()

backends/arm/test/ops/test_silu.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
EthosU85PipelineINT,
1616
TosaPipelineFP,
1717
TosaPipelineINT,
18+
VgfPipeline,
1819
)
1920

2021

@@ -111,3 +112,49 @@ def test_silu_u85_INT_inplace(test_data: input_t):
111112
Silu(), silu_data, Silu.aten_op_INT, run_on_fvp=True
112113
)
113114
pipeline.run()
115+
116+
117+
@common.parametrize("test_data", Silu.test_data)
118+
@common.SkipIfNoModelConverter
119+
def test_silu_vgf_FP(test_data: input_t):
120+
silu_data = (test_data(), False)
121+
pipeline = VgfPipeline[input_t](
122+
Silu(), silu_data, Silu.aten_op_FP, tosa_version="TOSA-1.0+FP"
123+
)
124+
pipeline.run()
125+
126+
127+
@common.parametrize("test_data", Silu.test_data)
128+
@common.SkipIfNoModelConverter
129+
def test_silu_vgf_FP_inplace(test_data: input_t):
130+
silu_data = (test_data(), True)
131+
pipeline = VgfPipeline[input_t](
132+
Silu(), silu_data, Silu.aten_op_inplace_FP, tosa_version="TOSA-1.0+FP"
133+
)
134+
pipeline.run()
135+
136+
137+
@common.parametrize("test_data", Silu.test_data)
138+
@common.SkipIfNoModelConverter
139+
def test_silu_vgf_INT(test_data: input_t):
140+
silu_data = (test_data(), False)
141+
pipeline = VgfPipeline[input_t](
142+
Silu(),
143+
silu_data,
144+
Silu.aten_op_INT,
145+
tosa_version="TOSA-1.0+INT",
146+
)
147+
pipeline.run()
148+
149+
150+
@common.parametrize("test_data", Silu.test_data)
151+
@common.SkipIfNoModelConverter
152+
def test_silu_vgf_INT_inplace(test_data: input_t):
153+
silu_data = (test_data(), True)
154+
pipeline = VgfPipeline[input_t](
155+
Silu(),
156+
silu_data,
157+
Silu.aten_op_INT,
158+
tosa_version="TOSA-1.0+INT",
159+
)
160+
pipeline.run()

0 commit comments

Comments
 (0)