Я искал лучший способ сделать это, но не смог найти четкого ответа.
Был ли кто-нибудь в состоянии построить клиент, обслуживающий тензор, используя cmake?
У меня возникают трудности с генерацией файлов CPP из прото, так как они необходимы для службы прогнозирования. Эти прото-файлы также включают в себя прото-файлы из tenorflow.
до сих пор я придумал это:
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
,
Это даже правильный путь?
Любая помощь / совет будет высоко ценится.
Я смог заставить его работать в макете, который у вас есть, где файл CMakeLists.txt находится на том же уровне, что и файл serving
хранилище Вот. Вам также нужно будет установить Tensorflow (используя tensorflow_cc).
тем не мение, Вы, вероятно, не хотите гадить с вилкой чиновника tensorflow/serving
репозиторий, поэтому я пошел дальше и переместил CMakeLists.txt, чтобы вы могли просто подмодулировать официальный репозиторий. Я сделал пример Вот
Суть в том, что подмодуль CMake protobuf ожидает, что файлы протока будут размещены в тот же каталог из которого это называется. Я сделал некоторые изменения в подмодулях, чтобы мы могли вызывать их с уровня выше serving
и чтобы он вызывал компилятор с путями включения в правильном порядке для поддержки вложенной структуры прототипов в файлах serving/tensorflow_serving/apis/*
(и поместив его соответственно в указанный каталог сборки)
Надеюсь, кто-то еще с лучшим ноу-хау может сделать это лучше!
Других решений пока нет …