#!/bin/bash # This script build and run DumpIntermediateTensors activity # The results will be pulled to /tmp/intermediate by default. # Usage # ./test/mlts/benchmark/tools/build_and_dump_intermediate.sh -o /tmp -r intermediate_test -p -m fssd_100_8bit_gray_v1,fssd_100_8bit_v1,fssd_25_8bit_gray_v1,fssd_25_8bit_v1 if [[ -z "$ANDROID_BUILD_TOP" ]]; then echo ANDROID_BUILD_TOP not set, bailing out echo you must run lunch before running this script exit 1 fi # Default output directory: /tmp/intermediate_currentdate INTERMEDIATE_OUTPUT_DIR="/tmp" CURRENTDATE=`date +"%m%d%y"` RENAME="intermediate_$CURRENTDATE" BUILD_MODE=true RUN_PYTHON=false MODEL_LIST="" while getopts 'o:r:m:nph' flag; do case "${flag}" in o) INTERMEDIATE_OUTPUT_DIR="${OPTARG}" ;; r) RENAME="${OPTARG}" ;; m) MODEL_LIST="modelName ${OPTARG}" ;; n) BUILD_MODE=false ;; p) RUN_PYTHON=true ;; h) echo "Optional flags:" echo " -h Display this help message." echo " -o Set destination directory for the output folder." echo " -r Name of the output folder." echo " -m A list of target model names separated by comma(,) e.g. asr_float,tts_float." echo " -n If set, skipping build and installation to save time." echo " -p If set, run Python script to generate visualization html." exit 0 ;; *) error "Unexpected option ${flag}, please run with -h to see the options" exit 1 ;; esac done cd $ANDROID_BUILD_TOP if [[ "$BUILD_MODE" == true ]]; then # Build and install benchmark app build/soong/soong_ui.bash --make-mode NeuralNetworksApiBenchmark if ! adb install -r $OUT/testcases/NeuralNetworksApiBenchmark/arm64/NeuralNetworksApiBenchmark.apk; then adb uninstall com.android.nn.benchmark.app adb install -r $OUT/testcases/NeuralNetworksApiBenchmark/arm64/NeuralNetworksApiBenchmark.apk fi fi # Default to run all public models in DumpIntermediateTensors adb shell am start -n com.android.nn.benchmark.app/com.android.nn.benchmark.util.DumpIntermediateTensors \ --es "$MODEL_LIST" inputAssetIndex 0 && # Wait for the files to finish writing. # TODO(veralin): find a better way to wait, maybe some sort of callback sleep 13 && mkdir -p $INTERMEDIATE_OUTPUT_DIR && cd $INTERMEDIATE_OUTPUT_DIR && rm -rf intermediate && adb pull /data/data/com.android.nn.benchmark.app/files/intermediate/ && rsync -a --delete intermediate/ $RENAME/ && echo "Results pulled to $INTERMEDIATE_OUTPUT_DIR/$RENAME" if [[ "$RUN_PYTHON" == true ]]; then cd $ANDROID_BUILD_TOP && python test/mlts/benchmark/tools/tensor_utils.py $ANDROID_BUILD_TOP $INTERMEDIATE_OUTPUT_DIR/$RENAME fi exit