【问题标题】:Building tensorflow serving client with cmake使用 cmake 构建 tensorflow 服务客户端
【发布时间】:2018-03-30 09:35:43
【问题描述】:

我搜索了执行此操作的最佳方法,但找不到明确的答案。

有人能够使用 cmake 构建一个 tensorflow 服务客户端吗?

我在从 proto 生成 CPP 文件时遇到困难,因为预测服务需要它们。这些 proto 文件还包括来自 tensorflow 的 proto 文件。

到目前为止,我想出了这个:

project(serving C CXX)
find_package(Protobuf REQUIRED)

file(GLOB_RECURSE proto_files RELATIVE ${serving_SOURCE_DIR}/tensorflow/
    "${serving_SOURCE_DIR}/tensorflow/*.proto")

set(PROTOBUF_GENERATE_CPP_APPEND_PATH OFF)
include_directories(${PROTOBUF_INCLUDE_DIRS})
include_directories( ${CMAKE_CURRENT_BINARY_DIR} )
PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${proto_files})

add_library(tf_protos ${PROTO_SRCS} ${PROTO_HDRS})
target_link_libraries(tf_protos PUBLIC ${PROTOBUF_LIBRARIES})

Cmake 构建成功,但是 make 命令给了我一个错误:

No rule to make target '../tensorflow/tools/proto_text/test.proto', needed by 'tensorflow/tools/proto_text/test.pb.cc'.  Stop.

为了克服.proto的问题,我使用了命令

set(PROTOBUF_GENERATE_CPP_APPEND_PATH OFF)

这里有解释:https://groups.google.com/forum/#!topic/protobuf/eow2fNDUHvc

我当前的文件夹结构是

serving/
    CmakeLists.txt
    tensorflow/
    tensorflow_serving/
        apis/

文件夹apis 包含客户端实现所需的.proto 文件,它们包括来自文件夹tensorflow.proto 文件。

这是正确的方法吗?

任何帮助/建议将不胜感激。

【问题讨论】:

    标签: c++ cmake tensorflow-serving


    【解决方案1】:

    我能够让它在 CMakeLists.txt 文件与serving 存储库here 放置在同一级别的布局中工作。不过,您也需要安装 Tensorflow(使用 tensorflow_cc)。

    但是,您可能不想使用官方 tensorflow/serving 存储库的分支,所以我更进一步,将 CMakeLists.txt 移出,这样您就可以对官方进行子模块存储库。我做了一个例子here

    要点是 protobuf CMake 子模块期望 proto 文件放置在调用它的 same directory 中。我对子模块进行了一些修改,以便我们从serving 以上的级别调用它,并确保它以正确的顺序使用包含路径调用编译器,以支持serving/tensorflow_serving/apis/* 中原始文件的嵌套结构(并放置它相应地在指定的构建目录中)

    希望其他拥有更好知识的人可以做得更好!

    【讨论】:

    • 我放弃了。我能够找到的是,CMake 命令(GENERATE_CPP)仅在其构建树中生成 .pb 文件。我所做的是将所有需要的 proto 文件复制到一个单独的文件夹(保持目录结构),并通过调用 protoc shell 命令显式生成 .pb 文件。然后用cmake构建了一个单独的prorotobuf库。
    • 我使用this 作为参考。 Florian Dahms 更详细地解释了here
    【解决方案2】:

    这些对我有用。

    https://github.com/wardsng/inception_cmake

    https://github.com/FloopCZ/tensorflow_cc

    您可以选择私有安装目录而不是默认安装目录,例如/usr/local/...

    cmake -DCMAKE_INSTALL_PREFIX= ..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 2013-06-28
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多