使用C API更改Tensorflow推理的线程数

问题描述 投票:2回答:1

我正在编写一个围绕tensorflow 1.2 C API的c ++包装器(用于推理目的,如果重要的话)。由于我的应用程序是一个多进程和多线程的应用程序,其中资源是显式分配的,我想限制Tensorflow只使用一个线程。

目前,运行一个允许批量处理的简单推理测试,我看到它正在使用所有CPU内核。我已经尝试使用C和C ++的混合来限制新会话的线程数,如下所示(原谅我的部分代码片段,我希望这是有道理的):

tensorflow::ConfigProto conf;
conf.set_intra_op_parallelism_threads(1);
conf.set_inter_op_parallelism_threads(1);
conf.add_session_inter_op_thread_pool()->set_num_threads(1);
std::string str;
conf.SerializeToString(&str);
TF_SetConfig(m_session_opts,(void *)str.c_str(),str.size(),m_status);
m_session = TF_NewSession(m_graph, m_session_opts, m_status);

但我认为它没有任何区别 - 所有核心仍然得到充分利用。

我正确使用C API吗?

(我目前的工作是编译Tensorflow,硬编码线程数为1,这可能会起作用,但显然不是最好的方法......)

- 更新 -

我也尝试过添加:

conf.set_use_per_session_threads(true);

没有成功。仍然使用多个核心......

我也尝试以高日志冗长运行,并获得此输出(仅显示我认为相关的内容):

tensorflow/core/common_runtime/local_device.cc:40] Local device intraop parallelism threads: 8
tensorflow/core/common_runtime/session_factory.cc:75] SessionFactory type DIRECT_SESSION accepts target: 
tensorflow/core/common_runtime/direct_session.cc:95] Direct session inter op parallelism threads for pool 0: 1

一旦我使用TF_NewGraph()实例化新图形,就会出现“parallelism threads:8”消息。虽然我没有找到在此图分配之前指定选项的方法......

c++ tensorflow
1个回答
3
投票

我有同样的问题,并通过在创建我的应用程序创建的第一个TF会话时设置线程数来解决它。如果未使用选项对象创建第一个创建的会话,则TF将创建工作线程作为计算机上的核心数* 2。

这是我使用的C ++代码:

// Call when application starts
void InitThreads(int coresToUse)
{
    // initialize the number of worker threads
    tensorflow::SessionOptions options;
    tensorflow::ConfigProto & config = options.config;
    if (coresToUse > 0)
    {
        config.set_inter_op_parallelism_threads(coresToUse);
        config.set_intra_op_parallelism_threads(coresToUse);
        config.set_use_per_session_threads(false);  
    }
    // now create a session to make the change
    std::unique_ptr<tensorflow::Session> 
        session(tensorflow::NewSession(options));
    session->Close();
}

传递1以将内部和内部线程的数量限制为1。

编辑:重要说明:此代码在从主应用程序(谷歌样本培训师)调用时工作但当我将其移动到专用于包裹tensorFlow的DLL时停止工作。 TF 1.4.1忽略我传递的参数并旋转所有线程。我想听听你的意见......

© www.soinside.com 2019 - 2024. All rights reserved.