即使在会话关闭后,Tensorflow线程池也会永远旋转

时间:2017-08-14 20:49:59

标签: c++ ios tensorflow

快速版:

我在iOS项目中使用Tensorflow,即使在我关闭Tensorflow会话之后也看到了非常高的CPU使用率:

auto status = session->Close();
delete session;
session = nil;

详细说明:

阅读完代码后,我的工作假设是Tensorflow正在使用DirectSession的{​​{1}}子类,它明确地清理了它的线程池,如果它是'配置为拥有自己的线程。为了确保这一点,我在创建会话时更新了配置:

Session

但仍然在分析器中我看到tensorflow::SessionOptions options; options.config.clear_session_inter_op_thread_pool(); options.config.set_use_per_session_threads(true); auto status = tensorflow::NewSession(options, &session); 中的CPU使用量在关闭会话后无限期地继续增加。似乎Eigen::NonBlockingThreadPoolImpl<tensorflow::thread::EigenEnvironment>::WorkerLoop循环永远不会停止。

如果我将其强制转换为单个线程,则没有Steal。像这样:

Steal

然后Tensorflow停止占用CPU,但线程仍然存在 - 它们只是暂停,等待(可能)被唤醒以处理新任务。显然,这不是问题的真正解决方案 - 我希望能够使用尽可能多的线程。

0 个答案:

没有答案
相关问题