Создание тензорного потока, обслуживающего клиента с помощью cmake

Я искал лучший способ сделать это, но не смог найти четкого ответа.

Был ли кто-нибудь в состоянии построить клиент, обслуживающий тензор, используя 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,

Это даже правильный путь?

Любая помощь / совет будет высоко ценится.

2

Решение

Я смог заставить его работать в макете, который у вас есть, где файл CMakeLists.txt находится на том же уровне, что и файл serving хранилище Вот. Вам также нужно будет установить Tensorflow (используя tensorflow_cc).

тем не мение, Вы, вероятно, не хотите гадить с вилкой чиновника tensorflow/serving репозиторий, поэтому я пошел дальше и переместил CMakeLists.txt, чтобы вы могли просто подмодулировать официальный репозиторий. Я сделал пример Вот

Суть в том, что подмодуль CMake protobuf ожидает, что файлы протока будут размещены в тот же каталог из которого это называется. Я сделал некоторые изменения в подмодулях, чтобы мы могли вызывать их с уровня выше serving и чтобы он вызывал компилятор с путями включения в правильном порядке для поддержки вложенной структуры прототипов в файлах serving/tensorflow_serving/apis/* (и поместив его соответственно в указанный каталог сборки)

Надеюсь, кто-то еще с лучшим ноу-хау может сделать это лучше!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]