我搜索了最好的方法,但我无法找到明确的答案。
是否有人能够使用cmake构建一个服务于张量流的客户端?
我在从proto生成CPP文件时遇到困难,因为它们是预测服务所需要的。这些原型文件还包括tensorflow的原型文件。
到目前为止,我已经想出了这个: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
个文件。
这是否是正确的方法?
非常感谢任何帮助/建议。
答案 0 :(得分:0)
我能够在CMakeLists.txt文件所在的布局中使其工作在与serving
存储库here相同的级别。您也需要安装Tensorflow(使用tensorflow_cc)。
但,您可能不想使用官方tensorflow/serving
存储库的分支进行清理,因此我更进一步将CMakeLists.txt移出,以便您可以只是子模块官方存储库。我做了一个例子here
要点是protobuf CMake子模块需要将原始文件布置在它所调用的same directory中。我对子模块进行了一些修改,让我们从serving
以上的级别调用它,并确保它使用正确顺序的包含路径调用编译器,以支持{{1}中原型文件的嵌套结构(并将其相应地放在指定的构建目录中)
希望有更好知识的其他人可以做得更好!
答案 1 :(得分:0)
这些对我有用。
https://github.com/wardsng/inception_cmake
https://github.com/FloopCZ/tensorflow_cc
您可以选择一个私有安装目录,而不是默认目录,例如/ usr / local / ...
cmake -DCMAKE_INSTALL_PREFIX = ..