【问题标题】:how does the tensorflow c++ code SessionFactory::GetFactory choose which session to use?Direct or Grpc Session?tensorflow c++代码SessionFactory::GetFactory如何选择使用哪个session?Direct还是Grpc Session?
【发布时间】:2017-06-25 03:19:01
【问题描述】:

在tensorflow c++代码中,有两种session类型,

tensorflow/core/common_runtime/direct_session.cc tensorflow/core/distributed_runtime/rpc/grpc_session.cc

我可以发现会话是由方法初始化的

状态 NewSession(const SessionOptions& options, Session out_session)

/tensorflow/core/common_runtime/session.cc,

问题是,我不知道*session_factories 何时在以下代码中填充了“DIRECT_SESSION”:

for (const auto& session_factory : *session_factories()) {
   if (session_factory.second->AcceptsOptions(options)) {
       VLOG(0) << "SessionFactory type " << session_factory.first
          << " accepts target: " << options.target;
  candidate_factories.push_back(session_factory);
} else {
  VLOG(0) << "SessionFactory type " << session_factory.first
          << " does not accept target: " << options.target;
}

}

/tensorflow/core/common_runtime/session_factory.cc

【问题讨论】:

    标签: c++ session tensorflow


    【解决方案1】:

    session_factories() 映射由对SessionFactory::Register() 的调用填充,该调用实现here,并在小类DirectSessionRegistrarGrpcSessionRegistrar 中调用。请注意,DirectSessionRegistrarGrpcSessionRegistrar 在各自的源文件中都定义为 static 变量的一个实例。这可确保工厂在静态初始化时被初始化,在第一次调用 NewSession() 之前。

    【讨论】:

    • 非常感谢!但是为什么在NewSession之前只有DirectSession注册呢?是bazel build deps只包含direct_session造成的吗?如果是,如何调试grpc session?能否举个例子?我用exmaple调试direct_session。
    • 顺便说一句,我想用 xcode 或 vs 之类的 IDE 调试代码?您有什么建议吗?
    • 该教程中的示例在构建 cc_binary 时不包括 gRPC 会话实现。要启用它,请将"//tensorflow/core/distributed_runtime/rpc:grpc_session" 添加到目标的deps。 (我通常不使用 IDE 来调试 TensorFlow,但如果您在 Windows 上运行,如果您进行调试构建,Visual Studio 工作得很好。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 2020-12-28
    • 2018-11-06
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    相关资源
    最近更新 更多