Skip to content
Merged
Changes from all commits
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
60 changes: 28 additions & 32 deletions backends/test/suite/flows/arm.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,70 +3,66 @@
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.

# Create flows for Arm Backends used to test operator and model suits

from executorch.backends.arm.quantizer import (
get_symmetric_quantization_config,
TOSAQuantizer,
)
from executorch.backends.arm.common.arm_compile_spec import ArmCompileSpec
from executorch.backends.arm.quantizer import get_symmetric_quantization_config
from executorch.backends.arm.test import common
from executorch.backends.arm.test.tester.arm_tester import ArmTester
from executorch.backends.arm.tosa.compile_spec import TosaCompileSpec
from executorch.backends.arm.util._factory import create_quantizer
from executorch.backends.test.suite.flow import TestFlow
from executorch.backends.xnnpack.test.tester.tester import Quantize


def _create_tosa_flow(
def _create_arm_flow(
name,
compile_spec,
quantize: bool = False,
compile_spec: ArmCompileSpec,
symmetric_io_quantization: bool = False,
per_channel_quantization: bool = True,
) -> TestFlow:

def _create_arm_tester(*args, **kwargs) -> ArmTester:
kwargs["compile_spec"] = compile_spec
return ArmTester(*args, **kwargs)

support_serialize = not isinstance(compile_spec, TosaCompileSpec)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should be able to run on tosa reference model, no?

Copy link
Collaborator Author

@zingo zingo Oct 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We do not have a "runner" for it. We only have a special testflow.
Enabling serilize right now causes more fails. Need to investigate more so I left it as a future exercise

quantize = compile_spec.tosa_spec.support_integer()

return ArmTester(
*args,
**kwargs,
)
if quantize is True:

# Create and configure quantizer to use in the flow
def create_quantize_stage() -> Quantize:
quantizer = TOSAQuantizer(compile_spec)
quantization_config = get_symmetric_quantization_config(
is_per_channel=per_channel_quantization
)
if symmetric_io_quantization:
quantizer.set_io(quantization_config)
return Quantize(quantizer, quantization_config)
def create_quantize_stage() -> Quantize:
quantizer = create_quantizer(compile_spec)
quantization_config = get_symmetric_quantization_config(
is_per_channel=per_channel_quantization
)
if symmetric_io_quantization:
quantizer.set_io(quantization_config)
return Quantize(quantizer, quantization_config)

return TestFlow(
name,
backend="arm",
tester_factory=_create_arm_tester,
supports_serialize=False,
supports_serialize=support_serialize,
quantize=quantize,
quantize_stage_factory=create_quantize_stage if quantize else None,
quantize_stage_factory=(create_quantize_stage if quantize is True else False),
)


ARM_TOSA_FP_FLOW = _create_tosa_flow(
"arm_tosa_fp", common.get_tosa_compile_spec(tosa_spec="TOSA-1.0+FP")
ARM_TOSA_FP_FLOW = _create_arm_flow(
"arm_tosa_fp",
common.get_tosa_compile_spec(tosa_spec="TOSA-1.0+FP"),
)
ARM_TOSA_INT_FLOW = _create_tosa_flow(
ARM_TOSA_INT_FLOW = _create_arm_flow(
"arm_tosa_int",
common.get_tosa_compile_spec(tosa_spec="TOSA-1.0+INT"),
quantize=True,
)

ARM_ETHOS_U55_FLOW = _create_tosa_flow(
ARM_ETHOS_U55_FLOW = _create_arm_flow(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When running the model won't this flow run into long runtime issues?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

runs kind of OK on my laptop, modeltest took about 30-40min I think. Lets see :)

"arm_ethos_u55",
common.get_u55_compile_spec(),
quantize=True,
)

ARM_ETHOS_U85_FLOW = _create_tosa_flow(
ARM_ETHOS_U85_FLOW = _create_arm_flow(
"arm_ethos_u85",
common.get_u85_compile_spec(),
quantize=True,
)
Loading