blob: 0591b5fbe70d24c2524b589c79eca4f464930041 [file] [log] [blame]
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
------------------------------------------------------------------
This directory contains files for the Android MLTS (Machine Learning
Test Suite). MLTS allows to evaluate NNAPI acceleration latency and accuracy
on an Android device, using few selected ML models and datesets.
Models and datasets used description and licensing can be found in
platform/test/mlts/models/README.txt file.
Usage:
* Connect a target device to your workstation, make sure it's
reachable through adb. Export target device ANDROID_SERIAL
environment variable if more than one device is connected.
* cd into android top-level source directory
> source build/envsetup.sh
> lunch aosp_arm-userdebug # Or aosp_arm64-userdebug if available.
> ./test/mlts/benchmark/build_and_run_benchmark.sh
* At the end of a benchmark run, its results will be
presented as html page, passed to xdg-open.
# Crash test
The MLTS suite contains a series of tests to validate the behaviour of the drivers under stress or
in corner case conditions.
To run the tests use the specific targets available in the build_and_run_benchmark.sh script.
By default, every test gets run on each available accelerator in isolation. It is possible to filter the
accelerators to test against by invoking the build_and_run_benchmark.sh script with the option
-f (--filter-driver) and specifying a regular expression to filter the acccelerator names with.
It is also possible to run additional tests without specified target accelerator to let NNAPI
partition the model and assign the best available one(s) by using the
-r (--include-nnapi-reference) option.
Currently available tests are:
* parallel-inference-stress: to test the behaviour of drivers with different amount of inference
executed in parallel. Tests are running in a separate process so crashes can be detected and
notified as test failures.
* parallel-inference-stress-in-process: same as parallel-inference-stress but the tests are running
in the same process of the test so in case of crash the testing app will crash too
* client-early-termination-stress: to test the resilience of device drivers to failing clients.
It spawns a separate process each running a set of parallel threads compiling different models.
The process is then forcibly terminated. The test validates that the targeted driver is not
crashing or hanging
* multi-process-inference-stress: this extends the `parallel-inference-stress` running inference
on a single model in multiple processes and threads with different probabilities in client process
early termination
* multi-process-model-load-stress: this extends the `parallel-inference-stress` running inference
on a single model in multiple processes and threads with different probabilities in client process
early termination
* memory-mapped-model-load-stress: runs a series of parallel model compilation with memory mapped
TFLite models
* model-load-random-stress: test compiling a large set of randomly generated models
* inference-random-stress: test running a large set of randomly generated models
* performance-degradation-stress: verifies that accelerator inference speed is not degrading over
a certain threshold when running concurrent workload
# Testing a NNAPI Support Library implementation
All tests documented above can be run using a NNAPI Support Library implementation.
To do so you need to:
- copy all the shared objects part of the libraries under the `sl_prebuilt`
folder
- Use the `-s` or `--use-nnapi-sl` option when running `build_and_run_benchmark.sh`.
By default the system will use the sl_prebuilt/Android.bp.template to map
every library under sl_prebuilt to a native library to include in the APK.
The file is already configured for the Qualcomm NNAPI SL binaries.
If you have different libraries that the ones defined under sl_prebuilt/Android.bp.template
you should
- configure a sl_prebuilt/Android.bp with the list of binaries you added.
You can use the sl_prebuilt/Android.bp.template file as an example template.
- Set in in Android.mk the SL_LIBS variable with the list of drivers