TensorFlow Lite Hexagon delegate
TensorFlow Lite Hexagon delegateのビルドから実行までに関してまとめる予定。
ここでは、C++ (NDK)から使うことを想定。
-
Qualcomm Hexagon libraryに対してDSP上で量子化カーネルを実行させる
-
8-bit量子化モデルが対象(post-training quantizationとquantization-aware training どちらも)
-
NNAPIを補完することが目的 (例えばNNAPIが使えない古い端末など)
-
Hexagon librariesが必要 (以下の3つ全て)
- libhexagon_nn_skel.so, libhexagon_nn_skel_v65.so, libhexagon_nn_skel_v66.so
- v1.20を使う (2020/07/22)
-
Cから使うときも、gradleで以下の依存ライブラリ設定が必要 (本当??)
dependencies { ... implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly' implementation 'org.tensorflow:tensorflow-lite-hexagon:0.0.0-nightly' }
- もしかしてこれ使えば、自分でAndroid用のlibtensorflowlite.so作る必要なし?
-
使うときはtflite.interpreterを作る前に、HexagonDelegateを作り追加 (他のdelegateと同様)
-
libtensorflowlite_hexagon_delegate.so みたいなものは必要? 不要? どうやって作るのか?
-
libhexagon_interface.so
が必要
コード全体をhexagon でgrepしてみた結果
-
https://github.com/tensorflow/tensorflow/blob/v2.4.0/tensorflow/lite/tools/benchmark/README.md
-
bazel build --config=android_arm64 tensorflow/lite/delegates/hexagon/hexagon_nn:libhexagon_interface.so
でビルドできそう - 先ほどの3つのHexagon librariesと
libhexagon_interface.so
の合計4個のsoファイルがあれば大丈夫そう
-
-
やはり、
libtensorflowlite_gpu_delegate.so
とは違い、libtensorflowlite_hexagon_delegate.so
のようなものは存在しないっぽい- サンプルコードでは、
//tensorflow/lite/delegates/hexagon:hexagon_delegate
を呼んでる - https://github.com/tensorflow/tensorflow/blob/v2.4.0/tensorflow/lite/examples/label_image/BUILD#L49
- サンプルコードでは、
-
tflite_execution_providersってなに?
-
https://github.com/tensorflow/tensorflow/blob/v2.4.0/third_party/hexagon/workspace.bzl
- hexagon library のバージョンはここと一致している必要がありそう
bazel build --config=android_arm64 tensorflow/lite/delegates/hexagon/hexagon_nn:libhexagon_interface.so
でビルドは成功
(build_tflite) ~/tensorflow$ ls bazel-bin/tensorflow/lite/delegates/hexagon/hexagon_nn/libhexagon_interface.so -la
-r-xr-xr-x 1 iwatake docker 88096 Jan 21 09:45 bazel-bin/tensorflow/lite/delegates/hexagon/hexagon_nn/libhexagon_interface.so