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