当前位置: 首页 > 知识库问答 >
问题:

在Android原生环境中使用Tensorflow Lite GPU delegate和C-API

杜凯
2023-03-14

我通过C-API(按照这些说明)在Android的本机环境中使用Tensorflow Lite,但与通过JavaAPI(在ART上)的GPU委托相比,运行时间要长得多。

JNI AAR文件(2.2)提供了C标头和共享库,但共享库似乎不包含GPU委托,而只包含一个在(TfLiteServer ate对象和TfLiteServer ateCreate())上配置委托的框架。

**例如,它不提供任何名称空间访问。

  • 我试图包括一个libtensorflowlite\u gpu\u委托。因此,在使用cmake的项目中,虽然它的构建和链接似乎还可以,但无法通过本机代码访问该库

如何使用C-API在Android的原生环境中使用GPU委托运行推理?

共有1个答案

杨宏儒
2023-03-14

我设法做到了以下几点:

将tensorflow从GitHub中克隆到repo中,然后运行配置。有一点很重要,那就是回答你想为Android构建交互配置/工作区吗?[y/N]并正确指定Android NDK和SDK目录。

我与成功构建了GPU代理共享库

bazel build -c opt --cxxopt=--std=c++11 --config android_arm64 tensorflow/lite/delegates/gpu:libtensorflowlite_gpu_delegate.so

我针对Android NDK18.1.5063045构建了最低API级别27。请注意,我只测试了android_arm64架构,我不能保证其他架构。

(我编译TensorFlow的时候,HEAD指向提交0f8a27183657972c8ba2bce150e1364179ded6f9。)

相关线路如下:

include_directories(
    /Users/<name>/tensorflow/tensorflow/lite/delegates/gpu # for Mac 
)

add_library(tensorflow-lite_gpu_delegate SHARED IMPORTED)
set_target_properties(tensorflow-lite_gpu_delegate PROPERTIES IMPORTED_LOCATION
    /private/var/tmp/_bazel_<name>/fe60511640322ef6962b77bab4b291e3/execroot/org_tensorflow/bazel-out/arm64-v8a-opt/bin/tensorflow/lite/delegates/gpu/libtensorflowlite_gpu_delegate.so) # I obtained this path pressing Cmd+Option+C on the libtensorflow-lite_gpu_delegate.so file on Mac, might be different on your OS

target_link_libraries(
    tensorflow-lite_gpu_delegate
    )

相关线路如下:

#include <delegate.h>

auto *delegate = TfLiteGpuDelegateV2Create(/*default options=*/nullptr);

// Create the model and interpreter options.
TfLiteModel *model = TfLiteModelCreate(/* create as usual */);
TfLiteInterpreterOptions* options = TfLiteInterpreterOptionsCreate();
TfLiteInterpreterOptionsAddDelegate(options, delegate);

// Create the interpreter.
TfLiteInterpreter *interpreter = TfLiteInterpreterCreate(model, options);

注意:对我来说,GPU委托并没有在推理速度上产生很大的提高。这可能是因为我的模型使用了GPU委托不支持的操作(现在支持的操作集似乎很小),因此必须在CPU上计算。

 类似资料:
  • 问题内容: 有没有人最近在使用SQL Server数据库后端部署Django应用程序方面获得过经验?我们的工作场所在SQL Server上投入了大量资金,如果没有足够完善的后端,它将不支持Django。 我知道mssql.django-pyodbc和django- mssql是非正式支持的后端。这两个项目似乎都只有一个人供款,尽管供款似乎有些规律,但这有点令人担忧。 是否有其他受支持的SQL Se

  • 本文向大家介绍C++ 使用CMake生成构建环境,包括了C++ 使用CMake生成构建环境的使用技巧和注意事项,需要的朋友参考一下 示例 CMake可以从单个项目定义为几乎所有编译器或IDE生成构建环境。以下示例将演示如何将CMake文件添加到跨平台的“ Hello World” C ++代码。 CMake文件始终被命名为“ CMakeLists.txt”,并且应该已经存在于每个项目的根目录中(可

  • Kibana 的配置很大程度上依赖于您的使用场景。如果只有自己使用,可以在自己的机器上运行 Kibana,配置它指向任何您想要交互的 Elasticsearch 实例。相反,如果有大量的 Kibana 使用者,需要多个 Kibana 实例连接至同一个 Elasticsearch 节点,来保证负载均衡。 尽管 Kibana 不是非常耗费资源,我们仍然建议运行 Kibana 的节点和 Elastics

  • 问题内容: 我正在使用IdentityServer4和来自ASP.NET Core 3.0的React启动项目。预览4,它可以完美工作,直到构建解决方案并尝试使用dotnet命令从cmd提示符运行它为止。每次我启动应用程序时,它都会告诉我未指定密钥类型。 我没有尝试过各种有关生成证书的指南,因为我对.NET没有任何经验。我提到这一点是为了防止问题可能是由于生成证书的方式不正确引起的。 我也尝试过将

  • 引言 Sentinel 目前已可用于生产环境,除了阿里巴巴以外,也有很多企业在生产环境中广泛使用 Sentinel。 生产环境的 Sentinel Dashboard 需要具备下面几个特性: 规则管理及推送,集中管理和推送规则。sentinel-core 提供 API 和扩展接口来接收信息。开发者需要根据自己的环境,选取一个可靠的推送规则方式;同时,规则最好在控制台中集中管理。 监控,支持可靠、快

  • 除了内置的 Web 版游戏发布功能外,Cocos Creator 3D 使用基于 cocos2d-x 引擎的 JSB 技术实现跨平台发布原生应用。在使用 Cocos Creator 3D 打包发布到原生平台之前,我们需要先配置好 cocos2d-x 相关的开发环境。 Android 平台相关依赖 要发布到 Android 平台,需要安装以下全部开发环境依赖。 如果您没有发布到 Android 平台