aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Klimczak <benjamin.klimczak@arm.com>2023-04-05 17:06:56 +0100
committerBenjamin Klimczak <benjamin.klimczak@arm.com>2023-04-11 13:27:31 +0100
commit8d00200d5aa2011bc91ccc688ee93caf5b6980f6 (patch)
treecfd80a2cc6d6772888c8aabf93d53329e0f92b01
parentc7c894ee0721b1076fcea25506d7b84772cc5704 (diff)
downloadmlia-8d00200d5aa2011bc91ccc688ee93caf5b6980f6.tar.gz
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
-rw-r--r--src/mlia/backend/armnn_tflite_delegate/__init__.py1
-rw-r--r--src/mlia/backend/config.py5
-rw-r--r--src/mlia/backend/corstone/__init__.py11
-rw-r--r--src/mlia/backend/manager.py8
-rw-r--r--src/mlia/backend/tosa_checker/__init__.py2
-rw-r--r--src/mlia/backend/vela/__init__.py1
-rw-r--r--tests/test_backend_config.py5
-rw-r--r--tests/test_target_config.py1
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)