为 android 构建没有 ruy 的 TFLite
Build TFLite without ruy for android
我正在尝试分析 DeepSpeech's (a third-party library that uses TensorFlow and TFLite) performance on android devices and had built it successfully as they mentioned in their docs。
看了源码后发现tensorflow在TFLite源码中使用了Google's ruy as the back-end for matrix operations for TFLite. But I also found out that there is support for different GEMM libraries like Eigen and GEMMLOWP
但我找不到使用它们构建 TFLite 的方法。
如何使用它们代替 ruy?
我的构建命令与DeepSpeech docs中的命令几乎相同。
bazel build --jobs 5 --workspace_status_command="bash native_client/bazel_workspace_status_cmd.sh" --config=monolithic --config=android --config=android_arm64 --define=runtime=tflite --action_env ANDROID_NDK_API_LEVEL=21 --cxxopt=-std=c++14 --copt=-D_GLIBCXX_USE_C99 --copt=-g --cxxopt=-g //native_client:libdeepspeech.so
修改后台库的命令需要修改什么?
请注意,我构建库没有问题,我可以成功构建它,对我来说效果很好。我想更改TFLite 的后端GEMM 库。
我没有测试过 DeepSpeech 库编译,但以下 bazel 标志可以禁用 RUY 以通过 bazel 工具为 TensorFlow Lite 库编译启用其他 GEMM 库。
bazel build --define=tflite_with_ruy=false
下表总结了 TensorFlow Lite 内核如何根据上述构建标志选择 GEMM 库:
在 ARM 平台上:
Quantized (uint8)
Quantized (int8)
Float
TFLITE_WITH_RUY
Ruy
Ruy
Ruy
!TFLITE_WITH_RUY
gemmlowp
Ruy/gemmlowp*
eigen
- 如果 NEON 不可用,请联系。
在 x86 平台上:
Quantized (uint8)
Quantized (int8)
Float
(default)
gemmlowp
Ruy
eigen
TFLITE_X86_RUY_ENABLED && (AVGX or above available)
Ruy
Ruy
Ruy
在 here 查看更多详细信息。
我正在尝试分析 DeepSpeech's (a third-party library that uses TensorFlow and TFLite) performance on android devices and had built it successfully as they mentioned in their docs。
看了源码后发现tensorflow在TFLite源码中使用了Google's ruy as the back-end for matrix operations for TFLite. But I also found out that there is support for different GEMM libraries like Eigen and GEMMLOWP
但我找不到使用它们构建 TFLite 的方法。
如何使用它们代替 ruy?
我的构建命令与DeepSpeech docs中的命令几乎相同。
bazel build --jobs 5 --workspace_status_command="bash native_client/bazel_workspace_status_cmd.sh" --config=monolithic --config=android --config=android_arm64 --define=runtime=tflite --action_env ANDROID_NDK_API_LEVEL=21 --cxxopt=-std=c++14 --copt=-D_GLIBCXX_USE_C99 --copt=-g --cxxopt=-g //native_client:libdeepspeech.so
修改后台库的命令需要修改什么?
请注意,我构建库没有问题,我可以成功构建它,对我来说效果很好。我想更改TFLite 的后端GEMM 库。
我没有测试过 DeepSpeech 库编译,但以下 bazel 标志可以禁用 RUY 以通过 bazel 工具为 TensorFlow Lite 库编译启用其他 GEMM 库。
bazel build --define=tflite_with_ruy=false
下表总结了 TensorFlow Lite 内核如何根据上述构建标志选择 GEMM 库:
在 ARM 平台上:
Quantized (uint8) | Quantized (int8) | Float | |
---|---|---|---|
TFLITE_WITH_RUY | Ruy | Ruy | Ruy |
!TFLITE_WITH_RUY | gemmlowp | Ruy/gemmlowp* | eigen |
- 如果 NEON 不可用,请联系。
在 x86 平台上:
Quantized (uint8) | Quantized (int8) | Float | |
---|---|---|---|
(default) | gemmlowp | Ruy | eigen |
TFLITE_X86_RUY_ENABLED && (AVGX or above available) | Ruy | Ruy | Ruy |
在 here 查看更多详细信息。