Age | Commit message (Collapse) | Author |
|
Resolves: MLIA-1055, MLIA-1056, MLIA-1057
Signed-off-by: Nathan Bailey <nathan.bailey@arm.com>
Change-Id: Id573cec94e4a69117051dcd5175f383c0955d890
|
|
If a file has the right extension, MLIA previously tried
to load files with invalid content, resulting in confusing
errors. This patch adds better reporting for that scenario
Resolves: MLIA-1051
Signed-off-by: Annie Tallund <annie.tallund@arm.com>
Change-Id: I3f1fd578906a73a58367428f78409866f5da7836
|
|
TFLiteConverter was producing log messages in the output that was not
possible to capture and redirect to logging.
The solution/workaround is to run it as a subprocess.
This change required some refactoring around existing invocations of
the converter.
Change-Id: I394bd0d49d36e6686cfcb9d658e4aad05326cb87
Signed-off-by: Gergely Nagy <gergely.nagy@arm.com>
|
|
- https://github.com/box/flaky
- Is set to re-run tests marked with @flaky
- Provides a report on failures
- Add flaky guard to tests/test_nn_tensorflow_optimizations_clustering.py
Signed-off-by: Annie Tallund <annie.tallund@arm.com>
Change-Id: I6795fd8bb2c38be6513f3689c3eeb805e7976add
|
|
Add a check to see if the default backends are installed when no backend
is provided via CLI.
Change-Id: I27dd9f35cfeec187f44cba06915d1be5a3a052b5
Signed-off-by: Benjamin Klimczak <benjamin.klimczak@arm.com>
|
|
Signed-off-by: Gergely Nagy <gergely.nagy@arm.com>
Change-Id: I6c8b0b74d6d35261eb0ff1a37b9577f9033be8f9
|
|
Rename 'TestTrainingParameters' to 'MockTrainingParameters' to avoid a
PytestCollectionWarning during test parsing
Change-Id: I26b52d46aa71bcc6748e38e92331be21a667e8c9
Signed-off-by: Benjamin Klimczak <benjamin.klimczak@arm.com>
|
|
If the input model for rewriting is quantized:
- Record de-quantized TFRecords
- enable writing de-quantized calibration data for the training
- re-generate augmented training data, if needed
- Use quantization-aware training (QAT) to train the replacement models
- Check if replacement model is quantized:
If source model is quantized, we make sure rewrite's output model
is quantized too. Right now, only int8 is supported so raising
an error if any other datatype is present in the output.
Resolves: MLIA-907, MLIA-908, MLIA-927
Signed-off-by: Benjamin Klimczak <benjamin.klimczak@arm.com>
Change-Id: Icb4070a9e6f1fdb5ce36120d73823986e89ac955
|
|
- 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 <benjamin.klimczak@arm.com>
|
|
- Fix input shape of rewrite replacement:
During and after training of the replacement model for a rewrite the
Keras model is converted and saved in TensorFlow Lite format. If the
input shape does not match the teacher model exactly, e.g. if the
batch size is undefined, the TFLiteConverter adds extra operators
during conversion.
- Fix rewritten model output
- Save the model output with the rewritten operator in the output dir
- Log MAE and NRMSE of the rewrite
- Remove 'verbose' flag from rewrite module and rely on the logging
mechanism to control verbose output.
- Re-factor utility classes for rewrites
- Merge the two TFLiteModel classes
- Move functionality to load/save TensorFlow Lite flatbuffers to
nn/tensorflow/tflite_graph
- Fix issue with unknown shape in datasets
After upgrading to TensorFlow 2.12 the unknown shape of the
TFRecordDataset is causing problems when training the replacement models
for rewrites. By explicitly setting the right shape of the tensors we
can work around the issue.
- Adapt default parameters for rewrites. The training steps especially
had to be increased significantly to be effective.
Resolves: MLIA-895, MLIA-907, MLIA-946, MLIA-979
Signed-off-by: Benjamin Klimczak <benjamin.klimczak@arm.com>
Change-Id: I887ad165aed0f2c6e5a0041f64cec5e6c5ab5c5c
|
|
* Define replacement function fully_connected layer
* Define RewriteConfiguration and Rewriter to integrate
rewrite module into mlia optimize command
* Fix a bug in the ethos_u/data_collection.py file
* Fix a bug in join.py
* Remove diff_stats and use diff instead, added related
changes around this to ensure e2e tests passing
* Add unit tests for all changes
* Fix bug in diff_stats function
* The bug was caused by a dividing by numpy array
of all zeros. The previous way of handling it
did not consider the all zeros case but only
dealt with partially zeros
* unit tests added.
* Fix the bug in rewrite/core/graph_edit/join.py
* Remove the possibility of passing None to append_relabel
function because it is immutable
* The bug happened when empty dictionary was passed in the
append_relabel function and the function overwrites the
reference of operator_map which caused the dictionary
was not updated after the function call
Resolves: MLIA-749, MLIA-864, MLIA-866
Change-Id: I1ab426996232f182345e6e98033d5dcb32aea08c
Signed-off-by: Benjamin Klimczak <benjamin.klimczak@arm.com>
|
|
- Fix imports
- Update variable names
- Refactor helper functions
- Add licence headers
- Add docstrings
- Use f-strings rather than % notation
- Create type annotations in rewrite module
- Migrate from tqdm to rich progress bar
- Use logging module in rewrite module: All print statements are
replaced with logging module
Resolves: MLIA-831, MLIA-842, MLIA-844, MLIA-846
Signed-off-by: Benjamin Klimczak <benjamin.klimczak@arm.com>
Change-Id: Idee37538d72b9f01128a894281a8d10155f7c17c
|
|
Note: The unit tests mostly call the main functions from the respective
modules only.
Change-Id: Ib2ce5c53d0c3eb222b8b8be42fba33ac8e007574
Signed-off-by: Benjamin Klimczak <benjamin.klimczak@arm.com>
|
|
* Add flags for rewrite (--rewrite, --rewrite-start,
--rewrite-end, --rewrite-target)
* Refactor CLI interfaces to accept tflite models with optimize for
rewrite, keras models with optimize for clustering and pruning
* Refactor and move common.py and select.py out of the folder
nn/tensorflow/optimizations
* Add file nn/rewrite/core/rewrite.py as placeholder
* Update/add unit tests
* Refactor OptimizeModel in ethos_u/data_collection.py
for accepting tflite model case
* Extend the logic so that if "--rewrite" is specified, we don't add
pruning to also accept TFLite models.
* Update README.md
Resolves: MLIA-750, MLIA-854, MLIA-865
Signed-off-by: Benjamin Klimczak <benjamin.klimczak@arm.com>
Change-Id: I67d85f71fa253d2bad4efe304ad8225970b9622c
|
|
- Add a PruningPolicy to skip layers that are not
supported by the Keras pruning API
- Make dataset generation more generic to support
use-cases beyond classification
Signed-off-by: Annie Tallund <annie.tallund@arm.com>
Change-Id: I198dae2b53860f449f2fdbc71575babceed1ffcf
|
|
- Update version dependencies in the tox.ini
- Fix linter issues
Change-Id: I04c3a841ee2646a865dab037701d66c28792f2a4
Signed-off-by: Benjamin Klimczak <benjamin.klimczak@arm.com>
|
|
Update the compatibility information of the backend for ArmNN TensorFlow
Lite Delegate (classic) to version 23.05.
Change-Id: I84693842d1a883f7083a6faf7d5ddcd5ecc34e5d
Signed-off-by: Benjamin Klimczak <benjamin.klimczak@arm.com>
|
|
- Removed TOSA Checker dependency from setup.cfg
- Installation process calls directly the installation of TOSA Checker
instead of the extra dependency
Change-Id: I21e309b9316671959483bd2ef1ecaf644936a4cb
|
|
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
|
|
- JSON output now reports tosa_checker as attribute name, which
accurately represents its value as the version of TOSA Checker
Change-Id: I8ac5032fea5dae65382db76091d295595a644816
|
|
- Unify the TensorFlow Lite compatibility check across Cortex-A, TOSA
and Ethos-U targets
- Display tables/messages with parsed information
- Do not display raw TensorFlow Lite errors, and return with exit code 0
Change-Id: I9333fdb6cbe592f1ed7395d392412168492a1479
|
|
- Use directory mlia-output as output directory for MLIA
- If parameter --output-dir provided then place directory
mlia-output under specified path or otherwise create it
in the current working directory
Change-Id: I298088c4aa8dbe9f35dee69ecb9ff6e9ea3cac0a
|
|
Change-Id: I68fb8c4e51046e9fc2d91ad8338718ba545209cd
|
|
- If no output directory provided then create one
in the current working directory
- Update documentation and tests
Change-Id: Id1f2acef14e1bd2edffbfa6139a961a5c5018211
|
|
- Add operator compatibility data for Cortex-A via for ArmNN TensorFlow
Lite delegate 22.11
- Extend the Cortex-A target profile to include the version of the ArmNN
TensorFlow Lite delegate to be used.
- Some re-factoring work to support multiple versions and the new target
profile parameter.
Change-Id: Iae91bb0757ea3909be975af68b34d0ca2be47c43
|
|
- define Metadata base class with dictionary data and abstract method
- mlia, tosa, model and metadatadisplay classes are all inherited from base class
- update unit tests
- update function report_metadata into more generalized format
Change-Id: Id49e15283eebdca705045eda81db637d82f85453
|
|
- Provide "pretty names" to print information for targets and backends.
- Use 'target_config' instead of 'target' if a target profile is
used.
- Fix minor issue in output regarding the output directory.
Change-Id: Ib38231f30b4d609a0d1e8f9c52b2fb547c69cb6a
|
|
Term 'device' can be ambiguous and is replaced with 'target'.
Change-Id: I5e5108d033a13b98e4c2997713e1c32bce63ae62
|
|
- Use the target/backend registries to avoid hard-coded names.
- Cache target profiles to avoid re-loading them
Change-Id: I474b7c9ef23894e1d8a3ea06d13a37652054c62e
|
|
Save the target profile file in the output directory.
Change-Id: I886e52cb922c5425e749b154bd67a5d294ce0201
|
|
- Remove old backend configuration code
- Install backends into directory ~/.mlia
- Rename targets/backends in registry to make it consistent
across codebase.
Change-Id: I9c8b012fe863280f1c692940c0dcad3ef638aaae
|
|
- Rely on target and backend registry for support information
- Make above information less Ethos(TM)-U specific
Change-Id: I8dbfb84401016412a3d719a84eb592f21d79c46b
|
|
New class 'TargetProfile' is used to load and verify target profiles.
Change-Id: I76373a923e2e5f55c4e95860635afe9fc5627a5d
|
|
- Start using TOML format for target profile
- Add support for loading custom target profile files
Change-Id: I6be019d4341e93115440ccdbdb6dafdc1c85b966
|
|
- The help text of MLIA now shows a table of supported targets, backends
and advice.
- The table is only shown with the help message and not when MLIA is
run normally.
Change-Id: I3234ce91e943de4b08b9471bd95a474df34755f7
|
|
- Add CLI parameter --output-dir
- Rename ExecutionContext property working_dir into output_dir
- Remove logic for default command as it is no longer needed
Change-Id: I6387f6b688520ba1fc69a80167587297353620f6
|
|
* Remove --output parameter from argument parser
* Remove FormattedFilePath class and its presence across the codebase
* Move logging module from cli to core
* The output format is now injected in the execution context and used
across MLIA
* Depending on the output format, TextReporter and JSONReporter have
been created and used accordingly.
* The whole output to standard output and/or logfile is driven via the
logging module: the only case where the print is used is when the
--json parameter is specified. This is needed becase all output
(including third party application as well) needs to be disabled
otherwise it might corrupt the json output in the standard output.
* Debug information is logged into the log file and printed to stdout
when the output format is plain_text.
* Update E2E test and config to cope with the new mechanism of
outputting json data to standard output.
Change-Id: I4395800b0b1af4d24406a828d780bdeef98cd413
|
|
Change-Id: I8e4d5d04f6b1b252dae872ea76d2bd8c41f4b376
|
|
- add version extraction function in compat.py
- create Metadata, MLIAMetadata, TOSAMetadata and MetadataDisplay classes
- update the reporting functions so tosa and mlia version will be displayed in output json
- update unit test test_configure_and_get_tosa_advisor to mock the get_events function
- update the copyright information of all changed/added files
- handle exception and report to json when program crashes
- write new context managers for capturing stderr and stdout
- support reporting stderr to json output
- support reporting model checksum and model name to json output
- made changes in test_e2e.py handling {model_name} replacement in --output
- add unit tests
Change-Id: I6629fd1c5754378e6accd488217c83d87c7eb6f1
|
|
Breaking change in the CLI and API: Sub-commands "optimization",
"operators", and "performance" were replaced by "check", which
incorporates compatibility and performance checks, and "optimize" which
is used for optimization. "get_advice" API was adapted to these CLI
changes.
API changes:
* Remove previous advice category "all" that would perform all three
operations (when possible). Replace them with the ability to pass a
set of the advice categories.
* Update api.get_advice method docstring to reflect new changes.
* Set default advice category to COMPATIBILITY
* Update core.common.AdviceCategory by changing the "OPERATORS" advice
category to "COMPATIBILITY" and removing "ALL" enum type.
Update all subsequent methods that previously used "OPERATORS" to use
"COMPATIBILITY".
* Update core.context.ExecutionContext to have "COMPATIBILITY" as
default advice_category instead of "ALL".
* Remove api.generate_supported_operators_report and all related
functions from cli.commands, cli.helpers, cli.main, cli.options,
core.helpers
* Update tests to reflect new API changes.
CLI changes:
* Update README.md to contain information on the new CLI
* Remove the ability to generate supported operators support from MLIA
CLI
* Replace `mlia ops` and `mlia perf` with the new `mlia check` command
that can be used to perform both operations.
* Replace `mlia opt` with the new `mlia optimize` command.
* Replace `--evaluate-on` flag with `--backend` flag
* Replace `--verbose` flag with `--debug` flag (no behaviour change).
* Remove the ability for the user to select MLIA working directory.
Create and use a temporary directory in /temp instead.
* Change behaviour of `--output` flag to not format the content
automatically based on file extension anymore. Instead it will simply
redirect to a file.
* Add the `--json` flag to specfy that the format of the output should
be json.
* Add command validators that are used to validate inter-dependent
flags (e.g. backend validation based on target_profile).
* Add support for selecting built-in backends for both `check` and
`optimize` commands.
* Add new unit tests and update old ones to test the new CLI changes.
* Update RELEASES.md
* Update copyright notice
Change-Id: Ia6340797c7bee3acbbd26601950e5a16ad5602db
|
|
Change-Id: Ieeaa9188ea1e29e2ccaad7475d457bce71e3140d
|
|
- Provide command for backend installation in case
if backend is not available
- Fix issue with connection timeout during downloading
- Show installation tools output only in verbose mode
Change-Id: Ic0e495ba19879cc2cda4fd0bce20b57ba896cfeb
|
|
With Vela 3.6 we are able to remove the special treatment of aarch64
in our dependencies, i.e.
- upgrade Vela to version 3.6 that resolves a compatibility issue for
aarch64 in 3.4 and 3.5.
- upgrade to TensorFlow 2.10 which now supports aarch64 (therefore
making it obsolete to use 'tensorflow-aarch64').
Change-Id: I86508b667b5ccb55bfd11dcae9defc54e5ef74de
|
|
- Rename module "mlia.devices" into "mlia.target"
- Rename module "mlia.target.ethosu" into "mlia.target.ethos_u"
- Rename module "mlia.target.cortexa" into "mlia.target.cortex_a"
- Rename and update tests
Change-Id: I6dca7c8646d881f739fb6b5914d1cc7e45e63dc2
|
|
- Create module "compat" for tosa_checker backend
- Move TOSA checker functions into new module
- Update tests
Change-Id: Ia07034515fe43b2061b8892535067d21315cc721
|
|
- Move backend management/executor code into module backend_core
- Create separate module for each backend in "backend" module
- Move each backend into corresponding module
- Split Vela wrapper into several submodules
Change-Id: If01b6774aab6501951212541cc5d7f5aa7c97e95
|
|
Resolves: MLIA-719, MLIA-720
Change-Id: Ib697046f5090260437f3b1ab5fe8c5b4975abae2
|
|
- Enable previously disabled test for clustering
- Remove fix made in the test for the previous TFMOT version
Change-Id: I46b87ce5bcccccca3c9703741dcde7f1ba9fa192
|
|
- Add new type of the backend based on python packages
- Add installation class for TOSA checker
- Update documentation
- Extend support of the parameter "force" in the
"install" command
Change-Id: I95567b75e1cfe85daa1f1c3d359975bb67b2504e
|
|
* add entry point for mlia-backend in setup.cfg and main.py
* add --force option for install from path: uninstall existing backend
in ML Inference Advisor and install from given path
* add uninstall and list program parameters: uninstall has
backend_name as input arg, install has backend_name as a mandatory argument
* add unit tests in test_cli_commands.py, test_cli_main.py,
test_tools_metadata_common.py, test_tools_metadata_corstone.py
* updated README.md
* remove --download option for installing backend
* add new lines for the display section when we do mlia-backen list
* add case insensitive support for backend names in command line argument
Change-Id: Icb89d8957fa6be4b767710e24fa074f26472674b
|