From 27668f6837c4f0a7197d13baff7bffc11f652fba Mon Sep 17 00:00:00 2001 From: Raul Farkas Date: Fri, 4 Nov 2022 16:12:52 +0000 Subject: MLIA-688 Fix --supported-ops-report flag * Add `api.generate_supported_operators_report` that calls a report generator based on given target profile. * Update `--supported-ops-report` cli flag help section and README.md info by specifying that it is currently only supported for Ethos-U. * Add tests for `generate_supported_operators_report` method. * Add stub methods `report` for Cortex-A and Tosa operators.py module that throw a "Not supported" exception. Change-Id: Iaf373fe48299d807e48fd6a0e6c029ce32203f4f --- src/mlia/api.py | 18 +++++++++++++++++- src/mlia/cli/commands.py | 4 ++-- src/mlia/cli/options.py | 3 ++- src/mlia/devices/cortexa/operators.py | 8 ++++++++ src/mlia/devices/ethosu/operators.py | 2 +- src/mlia/devices/tosa/operators.py | 8 ++++++++ 6 files changed, 38 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/mlia/api.py b/src/mlia/api.py index fc61af0..6af7db2 100644 --- a/src/mlia/api.py +++ b/src/mlia/api.py @@ -13,11 +13,13 @@ from mlia.core.common import AdviceCategory from mlia.core.context import ExecutionContext from mlia.core.typing import PathOrFileLike from mlia.devices.cortexa.advisor import configure_and_get_cortexa_advisor +from mlia.devices.cortexa.operators import report as cortex_a_report from mlia.devices.ethosu.advisor import configure_and_get_ethosu_advisor +from mlia.devices.ethosu.operators import report as ethos_u_report from mlia.devices.tosa.advisor import configure_and_get_tosa_advisor +from mlia.devices.tosa.operators import report as tosa_report from mlia.utils.filesystem import get_target - logger = logging.getLogger(__name__) @@ -121,3 +123,17 @@ def get_advisor( output, **extra_args, ) + + +def generate_supported_operators_report(target_profile: str) -> None: + """Generate a supported operators report based on given target profile.""" + generators_map = { + "ethos-u55": ethos_u_report, + "ethos-u65": ethos_u_report, + "cortex-a": cortex_a_report, + "tosa": tosa_report, + } + + target = get_target(target_profile) + + generators_map[target]() diff --git a/src/mlia/cli/commands.py b/src/mlia/cli/commands.py index e044e1a..72ae4bb 100644 --- a/src/mlia/cli/commands.py +++ b/src/mlia/cli/commands.py @@ -23,11 +23,11 @@ from pathlib import Path from typing import cast from mlia.api import ExecutionContext +from mlia.api import generate_supported_operators_report from mlia.api import get_advice from mlia.api import PathOrFileLike from mlia.cli.config import get_installation_manager from mlia.cli.options import parse_optimization_parameters -from mlia.devices.ethosu.operators import generate_supported_operators_report from mlia.utils.console import create_section_header from mlia.utils.types import only_one_selected @@ -129,7 +129,7 @@ def operators( "model.tflite") """ if supported_ops_report: - generate_supported_operators_report() + generate_supported_operators_report(target_profile) logger.info("Report saved into SUPPORTED_OPS.md") return diff --git a/src/mlia/cli/options.py b/src/mlia/cli/options.py index e5e85f0..b28fa8f 100644 --- a/src/mlia/cli/options.py +++ b/src/mlia/cli/options.py @@ -124,7 +124,8 @@ def add_custom_supported_operators_options(parser: argparse.ArgumentParser) -> N default=False, help=( "Generate the SUPPORTED_OPS.md file in the " - "current working directory and exit" + "current working directory and exit " + "(Ethos-U target profiles only)" ), ) diff --git a/src/mlia/devices/cortexa/operators.py b/src/mlia/devices/cortexa/operators.py index 8fd2571..d46b107 100644 --- a/src/mlia/devices/cortexa/operators.py +++ b/src/mlia/devices/cortexa/operators.py @@ -29,3 +29,11 @@ def get_cortex_a_compatibility_info( ) -> CortexACompatibilityInfo | None: """Return list of model's operators.""" return None + + +def report() -> None: + """Generate supported operators report.""" + raise Exception( + "Generating a supported operators report is not " + "currently supported with Cortex-A target profile." + ) diff --git a/src/mlia/devices/ethosu/operators.py b/src/mlia/devices/ethosu/operators.py index ff0d99f..1a4ce8d 100644 --- a/src/mlia/devices/ethosu/operators.py +++ b/src/mlia/devices/ethosu/operators.py @@ -9,6 +9,6 @@ from mlia.tools import vela_wrapper logger = logging.getLogger(__name__) -def generate_supported_operators_report() -> None: +def report() -> None: """Generate supported operators report.""" vela_wrapper.generate_supported_operators_report() diff --git a/src/mlia/devices/tosa/operators.py b/src/mlia/devices/tosa/operators.py index 6cfb87f..03f6fb8 100644 --- a/src/mlia/devices/tosa/operators.py +++ b/src/mlia/devices/tosa/operators.py @@ -68,3 +68,11 @@ def get_tosa_checker(tflite_model_path: PathOrFileLike) -> TOSAChecker | None: checker = tc.TOSAChecker(str(tflite_model_path)) return cast(TOSAChecker, checker) + + +def report() -> None: + """Generate supported operators report.""" + raise Exception( + "Generating a supported operators report is not " + "currently supported with TOSA target profile." + ) -- cgit v1.2.1