TFLite benchmark toolを使ってAndroid端末上でTFLiteモデルのベンチマークをとる。

2022.09.28

Smartphone

TFLiteモデルのベンチマークをとりたい時に使えるツールをTensorFlowが公式で出してくれているので、使い方のメモ。
TFLiteモデルをAndroid端末上で動かしてパフォーマンス測定したい時に、サンプルプログラムとかを書かなくて済むので、とても便利。
使う手順や実行時の詳しいオプションなどは、公式ドキュメントGithubリポジトリを参照すると書いてある。 ベンチマークをとるのには、Android benchmark appとNative benchmark binaryの2種類の方法があるが、今回は、後者を使う。

ビルド済みバイナリのダウンロード

まず公式ドキュメントに、 それぞれのプラットフォーム向けにビルド済みのバイナリをダウンロードできるリンクが貼ってあるので、そこからバイナリファイルをダウンロードする。
私はGoogle Pixel 6上で動かすので、android_aarch64版をダウンロード。
ABIがarmeabi-v7aのスマホは、android_armのリンクから、arm64-v8aのスマホは、android_aarch64のリンクからダウンロードすれば良いと思われる。
Flex delegateやHexagon delegate用にいろいろなバージョンが用意されているが、今回試したのはノーマルのバージョンだけ。

バイナリを端末にpushして実行権限付与

Android端末をUSBケーブルでPCに繋いでおく。 以下のコマンドでダウンロードしたバイナリファイルをAndroid端末上にpushして、実行権限を付与する。
3行目のコマンドを実行しないと、Permission deniedエラーが出るので注意。

adb shell mkdir -p /data/local/tmp/tfliteexample
adb push ./android_aarch64_benchmark_model /data/local/tmp/tfliteexample/
adb shell chmod +x /data/local/tmp/tfliteexample/android_aarch64_benchmark_model

計測対象のTFLiteモデルをpush

以下のコマンドでTFLiteモデルをAndroid端末にpush。 いくつかのサンプルモデルは、公式ドキュメントからダウンロードできる。

adb push ./mobilenet_v1_1.0_224_quant.tflite /data/local/tmp/tfliteexample/

ベンチマークツールを実行する

以下のコマンドでベンチマークツールを実行する。 --use_gpu=true--use_nnapi=trueなどのオプションで特定のdelegateを適用できるし、 --enable_op_profiling=trueのオプションを使うと、各オペレーションの実行時間が表示されるので、 どのオペレーションに時間がかかっているかがわかる。

adb shell /data/local/tmp/tfliteexample/android_aarch64_benchmark_model \
    --graph=/data/local/tmp/tfliteexample/mobilenet_v1_1.0_224_quant.tflite \
    --use_nnapi=true \
    --enable_op_profiling=true

補足

  • ベンチマークツールで実行した速度と実際にアプリで実行した場合の速度は異なる場合がある。
©︎ 2022・ごんすなのブログ