如何使用针对x86_64系统的精选TensorFlow ops构建TensorFlow lite?

时间:2019-10-30 11:02:56

标签: python tensorflow bazel tensorflow-lite

要能够运行支持本机TensorFlow操作的TensorFlow精简模型,必须重新编译libtensorflow-lite静态库。可以在HERE中找到在C++中执行此操作的说明。

声明

  

使用bazel管道构建TensorFlow Lite库时,   可以包含其他TensorFlow ops库并将其启用为   如下:

     
      
  • 启用必要的整体构建,方法是添加   --config =单片构建标志。

  •   
  • 将TensorFlow ops委托库依赖项添加到构建依赖项中:   tensorflow / lite / delegates / flex:delegate。

  •   
     

请注意必要   TfLiteDelegate创建时会自动安装   只要将委托链接到   客户端库。不必显式安装委托   其他委托类型通常需要的实例。

问题在于,构建静态库的标准方法是通过shell脚本/ make(请参阅文档HERE;这是针对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

由于其他.so文件位于同一目录中,因此路径正确。此外,如果使用静态库,则该应用程序也可以运行。

为重现该问题,我使用了tensorflow/tensorflow:devel-gpu-py3 docker构建映像(找到了here的指令)。

我使用默认设置执行了配置脚本,并使用了命令

bazel build --config=monolithic --define=with_select_tf_ops=true -c opt //tensorflow/lite:libtensorflowlite.so

创建库。我已按构建库上传到我的个人存储库(https://github.com/DocDriven/debug-lite)。

1 个答案:

答案 0 :(得分:1)

看来libtensorflow-lite.a是用Makefiles构建的,位于Bazel之外,所以我不确定您是否可以对该库真正使用该选项。但是,我认为您可能需要一个实验性的共享库目标libtensorflowlite.so。您可以给实验性选项with_select_tf_ops包括TensorFlow内核。因此,我认为构建命令将类似于:

bazel build --config=monolithic --define=with_select_tf_ops=true -c opt //tensorflow/lite:libtensorflowlite.so