From 8d00200d5aa2011bc91ccc688ee93caf5b6980f6 Mon Sep 17 00:00:00 2001 From: Benjamin Klimczak Date: Wed, 5 Apr 2023 17:06:56 +0100 Subject: MLIA-825 Make backend installation more generic Use the backend registry to manage installation routines for different backends as well. This makes the process more generic and allows us to move towards plug & play for backends (i.e. there should be no code changes needed in the general MLIA code to add/support new backends). Change-Id: Ib7c772ec52b2f4d857c2c9871e44dfff97e9d970 --- src/mlia/backend/armnn_tflite_delegate/__init__.py | 1 + src/mlia/backend/config.py | 5 ++++- src/mlia/backend/corstone/__init__.py | 11 +++++++++-- src/mlia/backend/manager.py | 8 +++----- src/mlia/backend/tosa_checker/__init__.py | 2 ++ src/mlia/backend/vela/__init__.py | 1 + tests/test_backend_config.py | 5 ++++- tests/test_target_config.py | 1 + 8 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/mlia/backend/armnn_tflite_delegate/__init__.py b/src/mlia/backend/armnn_tflite_delegate/__init__.py index 66e5a2a..c190088 100644 --- a/src/mlia/backend/armnn_tflite_delegate/__init__.py +++ b/src/mlia/backend/armnn_tflite_delegate/__init__.py @@ -15,6 +15,7 @@ registry.register( supported_advice=[AdviceCategory.COMPATIBILITY], supported_systems=None, backend_type=BackendType.BUILTIN, + installation=None, ), pretty_name=cast(str, ARMNN_TFLITE_DELEGATE["backend"]), ) diff --git a/src/mlia/backend/config.py b/src/mlia/backend/config.py index 8d14b28..2e34ffb 100644 --- a/src/mlia/backend/config.py +++ b/src/mlia/backend/config.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright 2022, Arm Limited and/or its affiliates. +# SPDX-FileCopyrightText: Copyright 2022-2023, Arm Limited and/or its affiliates. # SPDX-License-Identifier: Apache-2.0 """Backend config module.""" from __future__ import annotations @@ -8,6 +8,7 @@ from enum import auto from enum import Enum from typing import cast +from mlia.backend.install import Installation from mlia.core.common import AdviceCategory @@ -59,11 +60,13 @@ class BackendConfiguration: supported_advice: list[AdviceCategory], supported_systems: list[System] | None, backend_type: BackendType, + installation: Installation | None, ) -> None: """Set up basic information about the backend.""" self.supported_advice = supported_advice self.supported_systems = supported_systems self.type = backend_type + self.installation = installation def __str__(self) -> str: """List supported advice.""" diff --git a/src/mlia/backend/corstone/__init__.py b/src/mlia/backend/corstone/__init__.py index 5aa688b..7575ceb 100644 --- a/src/mlia/backend/corstone/__init__.py +++ b/src/mlia/backend/corstone/__init__.py @@ -4,19 +4,26 @@ from mlia.backend.config import BackendConfiguration from mlia.backend.config import BackendType from mlia.backend.config import System +from mlia.backend.corstone.install import get_corstone_300_installation +from mlia.backend.corstone.install import get_corstone_310_installation from mlia.backend.registry import registry from mlia.core.common import AdviceCategory # List of mutually exclusive Corstone backends ordered by priority -CORSTONE_PRIORITY = ("Corstone-310", "Corstone-300") +CORSTONE_PRIORITY = { + "Corstone-310": get_corstone_310_installation(), + "Corstone-300": get_corstone_300_installation(), +} -for corstone_name in CORSTONE_PRIORITY: + +for corstone_name, installation in CORSTONE_PRIORITY.items(): registry.register( corstone_name.lower(), BackendConfiguration( supported_advice=[AdviceCategory.PERFORMANCE, AdviceCategory.OPTIMIZATION], supported_systems=[System.LINUX_AMD64], backend_type=BackendType.CUSTOM, + installation=installation, ), pretty_name=corstone_name, ) diff --git a/src/mlia/backend/manager.py b/src/mlia/backend/manager.py index d953b2d..5a60f95 100644 --- a/src/mlia/backend/manager.py +++ b/src/mlia/backend/manager.py @@ -10,13 +10,11 @@ from pathlib import Path from typing import Callable from mlia.backend.config import BackendType -from mlia.backend.corstone.install import get_corstone_installations from mlia.backend.install import DownloadAndInstall from mlia.backend.install import Installation from mlia.backend.install import InstallationType from mlia.backend.install import InstallFromPath from mlia.backend.registry import registry as backend_registry -from mlia.backend.tosa_checker.install import get_tosa_backend_installation from mlia.core.errors import ConfigurationError from mlia.core.errors import InternalError from mlia.utils.misc import yes @@ -277,9 +275,9 @@ class DefaultInstallationManager(InstallationManager, InstallationFiltersMixin): def get_installation_manager(noninteractive: bool = False) -> InstallationManager: """Return installation manager.""" - backends = get_corstone_installations() - backends.append(get_tosa_backend_installation()) - + backends = [ + cfg.installation for cfg in backend_registry.items.values() if cfg.installation + ] return DefaultInstallationManager(backends, noninteractive=noninteractive) diff --git a/src/mlia/backend/tosa_checker/__init__.py b/src/mlia/backend/tosa_checker/__init__.py index d2364cb..08e44d4 100644 --- a/src/mlia/backend/tosa_checker/__init__.py +++ b/src/mlia/backend/tosa_checker/__init__.py @@ -5,6 +5,7 @@ from mlia.backend.config import BackendConfiguration from mlia.backend.config import BackendType from mlia.backend.config import System from mlia.backend.registry import registry +from mlia.backend.tosa_checker.install import get_tosa_backend_installation from mlia.core.common import AdviceCategory registry.register( @@ -13,6 +14,7 @@ registry.register( supported_advice=[AdviceCategory.COMPATIBILITY], supported_systems=[System.LINUX_AMD64], backend_type=BackendType.WHEEL, + installation=get_tosa_backend_installation(), ), pretty_name="TOSA Checker", ) diff --git a/src/mlia/backend/vela/__init__.py b/src/mlia/backend/vela/__init__.py index 7325630..b0788b0 100644 --- a/src/mlia/backend/vela/__init__.py +++ b/src/mlia/backend/vela/__init__.py @@ -22,6 +22,7 @@ registry.register( System.WINDOWS_AARCH64, ], backend_type=BackendType.BUILTIN, + installation=None, ), pretty_name="Vela", ) diff --git a/tests/test_backend_config.py b/tests/test_backend_config.py index 700534f..bdea03e 100644 --- a/tests/test_backend_config.py +++ b/tests/test_backend_config.py @@ -20,7 +20,10 @@ def test_system() -> None: def test_backend_config() -> None: """Test the class 'BackendConfiguration'.""" cfg = BackendConfiguration( - [AdviceCategory.COMPATIBILITY], [System.CURRENT], BackendType.CUSTOM + [AdviceCategory.COMPATIBILITY], + [System.CURRENT], + BackendType.CUSTOM, + None, ) assert cfg.supported_advice == [AdviceCategory.COMPATIBILITY] assert cfg.supported_systems == [System.CURRENT] diff --git a/tests/test_target_config.py b/tests/test_target_config.py index 368d394..8055af0 100644 --- a/tests/test_target_config.py +++ b/tests/test_target_config.py @@ -112,6 +112,7 @@ def test_target_info( [AdviceCategory.COMPATIBILITY], [System.CURRENT], BackendType.BUILTIN, + None, ), ) monkeypatch.setattr("mlia.target.config.backend_registry", backend_registry) -- cgit v1.2.1