为什么Tensorflow会创建如此多的CPU线程

时间:2018-02-09 00:24:58

标签: multithreading tensorflow

即使有了

inter_op_parallelism_threads = 1
intra_op_parallelism_threads = 1

值设置,TensorFlow 1.5进程不是单线程的。为什么?有没有办法完全禁用意外的线程产生?

1 个答案:

答案 0 :(得分:0)

首先,TensorFlow是一个多级软件堆栈,每一层都试图变得聪明,并引入了一些自己的工作线程:

  • 一个线程由Python运行时创建
  • NVIDIA CUDA运行时创建另外两个线程

接下来,有些线程源自TensorFlow管理内部计算作业的方式:

  • 创建/加入线程以在作业完成时轮询(GRPC引擎)

因此,即使将所有选项设置为1,TensorFlow也不能是单线程的。也许,此设计旨在减少异步作业的延迟。然而,存在一个缺点:多核计算库(例如线性代数)最好使用静态对称核心线程映射来执行高速缓存密集型操作。由TensorFlow产生的悬空回调线程将一直扰乱这种对称性。