diff options
Diffstat (limited to 'src/mlia/cli')
-rw-r--r-- | src/mlia/cli/commands.py | 4 | ||||
-rw-r--r-- | src/mlia/cli/helpers.py | 17 | ||||
-rw-r--r-- | src/mlia/cli/main.py | 20 | ||||
-rw-r--r-- | src/mlia/cli/options.py | 13 |
4 files changed, 39 insertions, 15 deletions
diff --git a/src/mlia/cli/commands.py b/src/mlia/cli/commands.py index 7af41d9..fcba302 100644 --- a/src/mlia/cli/commands.py +++ b/src/mlia/cli/commands.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright 2022-2023, Arm Limited and/or its affiliates. +# SPDX-FileCopyrightText: Copyright 2022-2024, Arm Limited and/or its affiliates. # SPDX-License-Identifier: Apache-2.0 """CLI commands module. @@ -104,6 +104,7 @@ def optimize( # pylint: disable=too-many-locals,too-many-arguments clustering: bool, pruning_target: float | None, clustering_target: int | None, + optimization_profile: str | None = None, rewrite: bool | None = None, rewrite_target: str | None = None, rewrite_start: str | None = None, @@ -166,6 +167,7 @@ def optimize( # pylint: disable=too-many-locals,too-many-arguments model, {"optimization"}, optimization_targets=opt_params, + optimization_profile=optimization_profile, context=ctx, backends=validated_backend, ) diff --git a/src/mlia/cli/helpers.py b/src/mlia/cli/helpers.py index 824db1b..7b38577 100644 --- a/src/mlia/cli/helpers.py +++ b/src/mlia/cli/helpers.py @@ -1,8 +1,9 @@ -# SPDX-FileCopyrightText: Copyright 2022-2023, Arm Limited and/or its affiliates. +# SPDX-FileCopyrightText: Copyright 2022-2024, Arm Limited and/or its affiliates. # SPDX-License-Identifier: Apache-2.0 """Module for various helpers.""" from __future__ import annotations +import importlib from pathlib import Path from shutil import copy from typing import Any @@ -12,8 +13,6 @@ from mlia.cli.options import get_target_profile_opts from mlia.core.helpers import ActionResolver from mlia.nn.select import OptimizationSettings from mlia.nn.tensorflow.utils import is_keras_model -from mlia.target.config import get_builtin_profile_path -from mlia.target.config import is_builtin_profile from mlia.utils.types import is_list_of @@ -120,12 +119,16 @@ class CLIActionResolver(ActionResolver): def copy_profile_file_to_output_dir( - target_profile: str | Path, output_dir: str | Path + target_profile: str | Path, output_dir: str | Path, profile_to_copy: str ) -> bool: """Copy the target profile file to the output directory.""" + get_func_name = "get_builtin_" + profile_to_copy + "_path" + get_func = getattr(importlib.import_module("mlia.target.config"), get_func_name) + is_func_name = "is_builtin_" + profile_to_copy + is_func = getattr(importlib.import_module("mlia.target.config"), is_func_name) profile_file_path = ( - get_builtin_profile_path(cast(str, target_profile)) - if is_builtin_profile(target_profile) + get_func(cast(str, target_profile)) + if is_func(target_profile) else Path(target_profile) ) output_file_path = f"{output_dir}/{profile_file_path.stem}.toml" @@ -133,4 +136,4 @@ def copy_profile_file_to_output_dir( copy(profile_file_path, output_file_path) return True except OSError as err: - raise RuntimeError("Failed to copy profile file:", err.strerror) from err + raise RuntimeError(f"Failed to copy {profile_to_copy} file: {err}") from err diff --git a/src/mlia/cli/main.py b/src/mlia/cli/main.py index 9e1b7cd..32d46a6 100644 --- a/src/mlia/cli/main.py +++ b/src/mlia/cli/main.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright 2022-2023, Arm Limited and/or its affiliates. +# SPDX-FileCopyrightText: Copyright 2022-2024, Arm Limited and/or its affiliates. # SPDX-License-Identifier: Apache-2.0 """CLI main entry point.""" from __future__ import annotations @@ -203,11 +203,17 @@ def run_command(args: argparse.Namespace) -> int: try: logger.info("ML Inference Advisor %s", __version__) - if copy_profile_file(ctx, func_args): + if copy_profile_file(ctx, func_args, "target_profile"): logger.info( "\nThe target profile (.toml) is copied to the output directory: %s", ctx.output_dir, ) + if copy_profile_file(ctx, func_args, "optimization_profile"): + logger.info( + "\nThe optimization profile (.toml) is copied to " + "the output directory: %s", + ctx.output_dir, + ) args.func(**func_args) return 0 except KeyboardInterrupt: @@ -278,11 +284,13 @@ def init_and_run(commands: list[CommandInfo], argv: list[str] | None = None) -> return run_command(args) -def copy_profile_file(ctx: ExecutionContext, func_args: dict) -> bool: - """If present, copy the target profile file to the output directory.""" - if func_args.get("target_profile"): +def copy_profile_file( + ctx: ExecutionContext, func_args: dict, profile_to_copy: str +) -> bool: + """If present, copy the selected profile file to the output directory.""" + if func_args.get(profile_to_copy): return copy_profile_file_to_output_dir( - func_args["target_profile"], ctx.output_dir + func_args[profile_to_copy], ctx.output_dir, profile_to_copy ) return False diff --git a/src/mlia/cli/options.py b/src/mlia/cli/options.py index 57f54dd..1c55fed 100644 --- a/src/mlia/cli/options.py +++ b/src/mlia/cli/options.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright 2022-2023, Arm Limited and/or its affiliates. +# SPDX-FileCopyrightText: Copyright 2022-2024, Arm Limited and/or its affiliates. # SPDX-License-Identifier: Apache-2.0 """Module for the CLI options.""" from __future__ import annotations @@ -15,6 +15,7 @@ from mlia.core.common import AdviceCategory from mlia.core.errors import ConfigurationError from mlia.core.typing import OutputFormat from mlia.nn.rewrite.core.rewrite import RewritingOptimizer +from mlia.target.registry import builtin_optimization_names from mlia.target.registry import builtin_profile_names from mlia.target.registry import registry as target_registry @@ -130,6 +131,16 @@ def add_multi_optimization_options(parser: argparse.ArgumentParser) -> None: help="Ending node in the graph of the subgraph to be rewritten.", ) + optimization_profiles = builtin_optimization_names() + multi_optimization_group.add_argument( + "-o", + "--optimization-profile", + required=False, + default="optimization", + help="Built-in optimization profile or path to the custom profile. " + f"Built-in optimization profiles are {', '.join(optimization_profiles)}. ", + ) + def add_model_options(parser: argparse.ArgumentParser) -> None: """Add model specific options.""" |