aboutsummaryrefslogtreecommitdiff
path: root/src/mlia/cli
diff options
context:
space:
mode:
Diffstat (limited to 'src/mlia/cli')
-rw-r--r--src/mlia/cli/commands.py4
-rw-r--r--src/mlia/cli/helpers.py17
-rw-r--r--src/mlia/cli/main.py20
-rw-r--r--src/mlia/cli/options.py13
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."""