【问题标题】:Using ARM Neon acceleration with TFLite C++ API on Android在 Android 上使用带有 TFLite C++ API 的 ARM Neon 加速
【发布时间】:2020-10-18 00:24:17
【问题描述】:

我正在尝试在 Android 设备上使用 Neon 加速进行 TFLite 推理。虽然这对于 Java 来说似乎有据可查且简单明了,但我可以在开始使用 C++ API 时使用帮助。我是新手,所以如果答案很明显,我很抱歉。

TensorFlow Lite 库在 https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/kernels 中包含 Neon 的源代码,但我想知道如何以及在何处包含和使用它。

设备规格为:处理器八核,2000 MHz,ARM Cortex-A75 和 ARM Cortex-A53,64 位,10 nm。 CPU(2x2.0 GHz 360 金色和 6x1.7 GHz Kryo 360 银色); GPU 肾上腺皮质激素 615。

到目前为止我所做的尝试:我将 build.gradle 文件从

android {
    externalNativeBuild {
        cmake {
            path file('CMakeLists.txt')
        }
}

android {
    defaultConfig {
        externalNativeBuild {
            cmake {
                arguments "-DANDROID_ARM_NEON=TRUE"
        }
    }
    externalNativeBuild {
        cmake {
            path file('CMakeLists.txt')
    }
}

然后,推理的时间和以前一样长,推理完成后出现以下错误:

A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x753b9d3000 in tid 9935 (m.example.test2), pid 9935 (m.example.test2)

【问题讨论】:

  • 据我了解,NEON 支持已经存在,如果适用于 CPU 路径,则会使用它。您没有提及您正在处理的模型类型,但 here is my answer regarding the state of NNAPI 可能很有用,因为它链接到基准论文。

标签: android c++ tensorflow hardware-acceleration tensorflow-lite


【解决方案1】:

您可以选择使用 XNNPACK 委托,如果您的 CPU 有它,它会主动使用 ARM NEON 优化内核。

https://blog.tensorflow.org/2020/07/accelerating-tensorflow-lite-xnnpack-integration.html

使用 Java / Obj-C / Swift API 启用 XNNPACK 要容易得多,只需按照博文中的说明设置布尔标志。如果你出于某种原因需要直接使用 C++,你可以这样做:

#include "tensorflow/lite/delegates/xnnpack/xnnpack_delegate.h"

// ...

TfLiteXNNPackDelegateOptions options = TfLiteXNNPackDelegateOptionsDefault();
// options.num_threads = <desired_num_threads>;
tflite::Interpreter::TfLiteDelegatePtr delegate(
    TfLiteXNNPackDelegateCreate(&options),
    [](TfLiteDelegate* delegate) { TfLiteXNNPackDelegateDelete(delegate); });
auto status = interpreter->ModifyGraphWithDelegate(std::move(delegate));
// check on the returned status code ...

另请参阅how the Java API calls the C++ API internally 以启用 XNNPack 委托。

【讨论】:

    猜你喜欢
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多