使用cmake构建服务客户端的tensorflow

问题描述 投票:2回答:2

我搜索了最好的方法来做到这一点,但我无法找到一个明确的答案。

有人能够使用cmake构建一个服务于张量流的客户端吗?

我在从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文件,它们包含.proto文件夹中的tensorflow文件。

这是否是正确的方法?

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

c++ cmake tensorflow-serving
2个回答
0
投票

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

但是,您可能不希望使用官方tensorflow/serving存储库的分支,因此我更进了一步并将CMakeLists.txt移出,因此您只需子模块化官方存储库。我做了一个例子here

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

希望有更好知识的其他人可以让这更好!


0
投票

这些对我有用。

https://github.com/wardsng/inception_cmake

https://github.com/FloopCZ/tensorflow_cc

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

cmake -DCMAKE_INSTALL_PREFIX = ..

© www.soinside.com 2019 - 2024. All rights reserved.