TFLite benchmark toolを使ってAndroid端末上でTFLiteモデルのベンチマークをとる。
2022.09.28
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
補足
- ベンチマークツールで実行した速度と実際にアプリで実行した場合の速度は異なる場合がある。