From baaf4de286762c1955c874f78cd802d4703a8ba5 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Thu, 22 Jun 2023 14:35:21 +0100 Subject: Re-factoring of rewrite management & added metrics - List available rewrites - Refactor/rename 'Rewrite' class to 'RewritingOptimizer' - Introduce a registry for rewrite functions - Refactor 'Rewriter' to use the registry to look up rewrite functions - Remove mentions of hardcoded "fully_connected" from CLI help and error messages, using the registry instead - Add unit tests - Enable rewrites for all targets: Extract optimization (including rewrite specific code) from the Ethos-U-specific data collector into OptimizingDataCollector. This is reused in other targets' collectors, such as TOSA and Cortex-A. - Add more logging for rewrite - add display of MAE and NRMSE values for the trained result - add total model MAE and NRMSE metric Resolves: MLIA-891, MLIA-899, MLIA-906 Change-Id: Ie798749e1ed60cab14fdb6d9c2271c833960e93f Signed-off-by: Benjamin Klimczak --- src/mlia/target/ethos_u/advisor.py | 41 ++++++-------------------------------- 1 file changed, 6 insertions(+), 35 deletions(-) (limited to 'src/mlia/target/ethos_u/advisor.py') diff --git a/src/mlia/target/ethos_u/advisor.py b/src/mlia/target/ethos_u/advisor.py index 321734c..9f5b3a6 100644 --- a/src/mlia/target/ethos_u/advisor.py +++ b/src/mlia/target/ethos_u/advisor.py @@ -17,6 +17,8 @@ from mlia.core.data_analysis import DataAnalyzer from mlia.core.data_collection import DataCollector from mlia.core.events import Event from mlia.nn.tensorflow.utils import is_tflite_model +from mlia.target.common.optimization import add_common_optimization_params +from mlia.target.common.optimization import OptimizingDataCollector from mlia.target.ethos_u.advice_generation import EthosUAdviceProducer from mlia.target.ethos_u.advice_generation import EthosUStaticAdviceProducer from mlia.target.ethos_u.config import EthosUConfiguration @@ -65,9 +67,7 @@ class EthosUInferenceAdvisor(DefaultInferenceAdvisor): ) collectors.append( - EthosUOptimizationPerformance( - model, target_config, optimization_settings, backends - ) + EthosUOptimizationPerformance(model, target_config, backends) ) if context.category_enabled(AdviceCategory.PERFORMANCE): collectors.append(EthosUPerformance(model, target_config, backends)) @@ -76,9 +76,7 @@ class EthosUInferenceAdvisor(DefaultInferenceAdvisor): if context.category_enabled(AdviceCategory.OPTIMIZATION): optimization_settings = self._get_optimization_settings(context) collectors.append( - EthosUOptimizationPerformance( - model, target_config, optimization_settings, backends - ) + EthosUOptimizationPerformance(model, target_config, backends) ) elif context.category_enabled(AdviceCategory.PERFORMANCE): collectors.append(EthosUPerformance(model, target_config, backends)) @@ -115,7 +113,7 @@ class EthosUInferenceAdvisor(DefaultInferenceAdvisor): def _get_optimization_settings(self, context: Context) -> list[list[dict]]: """Get optimization settings.""" return self.get_parameter( # type: ignore - EthosUOptimizationPerformance.name(), + OptimizingDataCollector.name(), "optimizations", expected_type=list, expected=False, @@ -151,20 +149,6 @@ def configure_and_get_ethosu_advisor( return EthosUInferenceAdvisor() -_DEFAULT_OPTIMIZATION_TARGETS = [ - { - "optimization_type": "pruning", - "optimization_target": 0.5, - "layers_to_optimize": None, - }, - { - "optimization_type": "clustering", - "optimization_target": 32, - "layers_to_optimize": None, - }, -] - - def _get_config_parameters( model: str | Path, target_profile: str | Path, @@ -186,19 +170,6 @@ def _get_config_parameters( advisor_parameters["ethos_u_inference_advisor"]["backends"] = backends - optimization_targets = extra_args.get("optimization_targets") - if not optimization_targets: - optimization_targets = _DEFAULT_OPTIMIZATION_TARGETS - - if not is_list_of(optimization_targets, dict): - raise ValueError("Optimization targets value has wrong format.") - - advisor_parameters.update( - { - "ethos_u_model_optimizations": { - "optimizations": [optimization_targets], - }, - } - ) + add_common_optimization_params(advisor_parameters, extra_args) return advisor_parameters -- cgit v1.2.1