Doc*_*ven 6 python bazel tensorflow tensorflow-lite
为了能够运行TensorFlow支持本机TensorFlow操作的精简模型,libtensorflow-lite必须重新编译静态库。C++可以在此处找到执行此操作的说明。
它指出
使用 bazel 管道构建 TensorFlow Lite 库时,可以包含和启用额外的 TensorFlow ops 库,如下所示:
如有必要,通过添加 --config=monolithic 构建标志来启用单体构建。
将 TensorFlow ops 委托库依赖添加到构建依赖中:tensorflow/lite/delegates/flex:delegate。
请注意,只要委托链接到客户端库,在运行时创建解释器时将自动安装必要的 TfLiteDelegate。没有必要像其他委托类型通常需要的那样显式安装委托实例。
问题是构建静态库的标准方法是通过 shell 脚本/make(请参阅此处的文档;这是用于arm64,但也有脚本可用于x86_64)。我没有明显的方法可以tensorflow-lite通过bazel那里的构建命令进行构建和修改。
有没有人在尝试构建arm64/x86_64架构模型时成功构建了这个并且可以分享这个?我是新手,bazel找不到详细的演练。
编辑
在@jdehesa 提出的故障排除步骤之后,我能够构建libtensorflowlite.so,但遇到了另一个问题。我的应用程序构建成功,但在执行应用程序时,.so找不到该文件:
./myapp: error while loading shared libraries: libtensorflowlite.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
由于其他.so文件位于可以找到的同一目录中,因此路径是正确的。此外,如果使用静态库,该应用程序也能正常工作。
为了重现该问题,我使用了tensorflow/tensorflow:devel-gpu-py3docker 构建映像(此处提供了说明)。
我使用默认设置执行了配置脚本,并使用了命令
bazel build --config=monolithic --define=with_select_tf_ops=true -c opt //tensorflow/lite:libtensorflowlite.so
Run Code Online (Sandbox Code Playgroud)
创建库。我已在我的个人存储库 ( https://github.com/DocDriven/debug-lite )上通过内置库上传。
编辑:似乎实验选项在发布后不久就with_select_tf_ops被删除了。据我所知,似乎没有任何内置选项可以将 TF 委托库包含在libtensorflowlite. 如果您想使用 Bazel 构建库,目前唯一的选择似乎是包含tensorflow/lite/delegates/flex:delegate在目标依赖项列表中,如文档中建议的那样。
几天前提交了一份提交,其中包含对使用 CMake 构建 TFLite 的初步支持。在该构建脚本中,有一个选项SELECT_TF_OPS可以在构建中包含委托库。我不知道该版本目前是否有效,但我认为它最终将成为即将发布的正式版本的一部分。
它似乎是用 Bazel 的Makefileslibtensorflow-lite.a构建的,所以我不确定您是否真的可以为该库使用该选项。然而,我认为您可能需要一个实验性共享库目标。您可以提供实验选项以在其中包含 TensorFlow 内核。所以我认为构建命令会是这样的:libtensorflowlite.sowith_select_tf_ops
bazel build --config=monolithic --define=with_select_tf_ops=true -c opt //tensorflow/lite:libtensorflowlite.so
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2337 次 |
| 最近记录: |