我目前正在开发在两个Tensorflow实例之间交换Tensors的代码-第一个实例是生产者,第二个实例是使用者。
经过一些研究,我决定使用FIFOQueue和GrpcSession。但是,关于GrpcSession的文档很少,我不确定如何正确使用它。我查看了Tensorflow存储库中的一些测试源代码(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/distributed_runtime/rpc/grpc_session_test.cc和https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/distributed_runtime/rpc/grpc_testlib.cc),但仍然担心我不了解GrpcSession生命周期。
当前,我在创建GraphSession时遇到问题。我已经编写了这样的代码:
queue_root = Scope::Newrootscope();
//defining a graph
...
//creating a graph
GraphDef graph_def;
TF_CHECK_OK(queue_root.ToGraphDef(&graph_def));
SessionOptions opts;
opts.target = "grpc://some_path:2222";
std::unique_ptr<GrpcSession> session;
TF_CHECK_OK(tensorflow::GrpcSession::Create(opts,&session));
TF_CHECK_OK((session)->Create(graph_def));
不幸的是,链接器引发异常:
CMakeFiles/queue_trial.dir/queues_initializer.cpp.o: In function `QueueInitializer::fireEnqueue()':
queues_initializer.cpp:(.text+0x2685): undefined reference to `tensorflow::GrpcSession::Create(tensorflow::SessionOptions const&,std::unique_ptr<tensorflow::GrpcSession,std::default_delete<tensorflow::GrpcSession> >*)'
对于我来说,这似乎很奇怪-当我删除该行时
TF_CHECK_OK(tensorflow::GrpcSession::Create(opts,&session));
该程序已成功编译(但是,当然,会话仍未初始化,因此在这种情况下会引发segfault)。因此,似乎所有必需的标头都已包含在内并且库已链接,但GrpcSession::Create
仍未正确访问...
此错误的原因可能是什么?
我想知道是否存在更简单的解决方案。是否可以在使用Session API或ClientSession API创建的多个会话之间共享Tensorflow节点? 我非常感谢您的支持:-)