aboutsummaryrefslogtreecommitdiff
path: root/src/mlia/nn
AgeCommit message (Collapse)Author
2024-01-23fix: Improve error handling for invalid fileAnnie Tallund
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
2023-12-07MLIA-835 Invalid JSON outputGergely Nagy
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>
2023-12-04Update to Vela 3.10, TensorFlow 2.14, Python 3.9Benjamin Klimczak
Updating to Vela 3.10 which requires TensorFlow 2.14 which requires Python 3.9 (dropping support for Python 3.8). Resolves: MLIA-997 Change-Id: Id60bd08f7156a8efa204ef71ba81590edf0e3b28 Signed-off-by: Benjamin Klimczak <benjamin.klimczak@arm.com>
2023-10-31MLIA-1019 Fix rebase artifactGergely Nagy
Fixed an artifact that crept in during the upstream rebase process, change a6ae703b6e41c73 was being taken out, but 3cd84481fa25 reintroduced the first part of a try/except block which caused a syntax error. Change-Id: I7fc2e18a227a30ebaaee0763450ee68646611add Signed-off-by: Benjamin Klimczak <benjamin.klimczak@arm.com>
2023-10-11Enable rewrites for quantized input modelsBenjamin Klimczak
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
2023-10-11Re-factoring of rewrite management & added metricsGergely Nagy
- 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>
2023-10-11Bug-fixes and re-factoring for the rewrite moduleBenjamin Klimczak
- 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
2023-10-11Implement first rewrite (proof of concept)Ruomei Yan
* 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>
2023-10-11Adapt rewrite module to MLIA coding standardsAnnie Tallund
- 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
2023-10-11MLIA-843 Add unit tests for module mlia.nn.rewriteBenjamin Klimczak
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>
2023-10-11Add a CLI component to enable rewritesRuomei Yan
* 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
2023-10-11MLIA-845 Migrate rewrite codeAnnie Tallund
- Add required files for rewriting of TensorFlow Lite graphs - Adapt rewrite dependency paths and project name - Add license headers Change-Id: I19c5f63215fe2af2fa7d7d44af08144c6c5f911c Signed-off-by: Benjamin Klimczak <benjamin.klimczak@arm.com>
2023-09-26MLIA-469 Support batch size > 1 for optimizationsAnnie Tallund
- 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
2023-09-05MLIA-961 Update tox dependenciesBenjamin Klimczak
- Update version dependencies in the tox.ini - Fix linter issues Change-Id: I04c3a841ee2646a865dab037701d66c28792f2a4 Signed-off-by: Benjamin Klimczak <benjamin.klimczak@arm.com>
2023-08-22MLIA-757: Update Vela and TensorFlow dependenciesJoseph Tummon
Ignoring new 'Conv_hwcn_Weights' layer that is named in TensorFlow 2.11.1 and used as buffer for float32 only. Signed-off-by: Joseph Tummon <Joseph.Tummon@arm.com> Change-Id: Iaa579c76013b1e0dc505466c46f5864a96af8c6d
2022-11-15MLIA-685 Warn about custom operators in SavedModel/Keras modelsDmitrii Agibov
- Add new error types for the TensorFlow Lite compatibility check - Try to detect custom operators in SavedModel/Keras models - Add warning to the advice about models with custom operators Change-Id: I2f65474eecf2788110acc43585fa300eda80e21b
2022-11-11MLIA-701 Update dependenciesBenjamin Klimczak
- Update TensorFlow dependencies for x86_64 - Adapt unit tests to new TensorFlow version - Update linters (including pre-commit hooks) and fix issues - Use conditional import to fix tflite compat code for aarch64 Change-Id: I1a9b080b900ab65e38f7f2552562822bbfdcd259
2022-11-10MLIA-411 Report Cortex-A operator compatibilityBenjamin Klimczak
Check input model for Arm NN TensorFlow Lite Delegate 22.08 support. Change-Id: I1253c4c0b294c5283e08f0a39561b922ef0f62e6
2022-10-26MLIA-433 Add TensorFlow Lite compatibility checkDmitrii Agibov
- Add ability to intercept low level TensorFlow output - Produce advice for the models that could not be converted to the TensorFlow Lite format - Refactor utility functions for TensorFlow Lite conversion - Add TensorFlow Lite compatibility checker Change-Id: I47d120d2619ced7b143bc92c5184515b81c0220d
2022-10-07MLIA-607 Update documentation and commentsDmitrii Agibov
Use "TensorFlow Lite" instead of "TFLite" in documentation and comments Change-Id: Ie4450d72fb2e5261d152d72ab8bd94c3da914c46
2022-09-09MLIA-386 Simplify typing in the source codeDmitrii Agibov
- Enable deferred annotations evaluation - Use builtin types for type hints whenever possible - Use | syntax for union types - Rename mlia.core._typing into mlia.core.typing Change-Id: I3f6ffc02fa069c589bdd9e8bddbccd504285427a
2022-08-31MLIA-599 Enable testing for aarch64: unit testsRuomei Yan
- mypy issue: to make the comment #type: ignore platform specific, flags like platform.machine() cannot be recognized by mypy, so we cannot isolate the specific lines of code that fail mypy tests - numpy issue: for numpy version < 1.20, the function np.unique has not been type annotated, which caused mypy throwing the error when we run our unit tests in aarch64 - because of the above two reasons, we use function decorator to turn off type checking for entire functions to remove all annotations so that the mypy error for certain lines can be silented Change-Id: Id91e65ef7677b78b4c9c85b8412229e3672e3a66
2022-07-26MLIA-551 Rework remains of AIET architectureBenjamin Klimczak
Re-factoring the code base to further merge the old AIET code into MLIA. - Remove last traces of the backend type 'tool' - Controlled systems removed, including SSH protocol, controller, RunningCommand, locks etc. - Build command / build dir and deploy functionality removed from Applications and Systems - Moving working_dir() - Replace module 'output_parser' with new module 'output_consumer' and merge Base64 parsing into it - Change the output consumption to optionally remove (i.e. actually consume) lines - Use Base64 parsing in GenericInferenceOutputParser, replacing the regex-based parsing and remove the now unused regex parsing - Remove AIET reporting - Pre-install applications by moving them to src/mlia/resources/backends - Rename aiet-config.json to backend-config.json - Move tests from tests/mlia/ to tests/ - Adapt unit tests to code changes - Dependencies removed: paramiko, filelock, psutil - Fix bug in corstone.py: The wrong resource directory was used which broke the functionality to download backends. - Use f-string formatting. - Use logging instead of print. Change-Id: I768bc3bb6b2eda57d219ad01be4a8e0a74167d76
2022-07-22MLIA-569 Update TensorFlow to version 2.8Raul Farkas
- Update TensorFlow to version 2.8 (now supported by Vela 3.4) - Adapt existing codebase to preserve intermediary tensors in the interpreter in order to avoid errors when trying to print all of them in the future. - Ignore types for numpy methods that do not have typing annotations in their definitions. This is needed because otherwise mypy would consider the calling function to also be untyped. Change-Id: I943ac196fd4e378f5238949b15c23a2d628c8b5e
2022-07-22MLIA-507 Upgrade Vela versionRaul Farkas
Upgrade Vela version from 3.3.0 to 3.4.0. - Adapt code to use new typing notation by replacing `numpy.array` with `numpy.ndarray` where necessary. Change-Id: I035e9564d448652aa09a52d79c71ef09663ea776
2022-06-23MLIA-545 Make quantization non-strictBenjamin Klimczak
Use TFLITE_BUILTINS instead of TFLITE_BUILTINS_INT8 to make the quantization non-strict. Note: De facto this does not change the behavior of MLIA because the TFLITE_BUILTINS_INT8 is not correctly applied with the new quantizer. See: https://github.com/tensorflow/tensorflow/issues/56535 Change-Id: Ia0782ba22c5e9223fa10fec71c16aee60b79bb57
2022-05-30Add MLIA codebase0.3.0-rc.1Diego Russo
Add MLIA codebase including sources and tests. Change-Id: Id41707559bd721edd114793618d12ccd188d8dbd