我目前正在尝试找到一种有效的方法,使用tensorflow. 根据我发现的信息,有两种主要方法可以做到这一点。第一个是使用两个 tensorflow 变量 intra_op_parallelism_threads 和 inter_op_parallelism_threads,然后使用此配置创建会话。第二个是使用OpenMP. 设置环境变量OMP_NUM_THREADS允许操作为进程生成的线程数量。当我发现通过 conda 和通过 pip 安装 tensorflow 提供了两种不同的环境时,我的问题就出现了。在conda install修改OpenMP环境变量时似乎改变了进程并行化的方式,而在“pip 环境”中似乎唯一改变它的是我之前提到的 inter/intra 配置变量。由于基准测试的原因,这导致在尝试比较两个安装时遇到一些困难。如果我OMP_NUM_THREADS在 48 核处理器上设置为 1 和 inter/intra 为 16,conda install我只能得到大约 200% 的 CPU 使用率,因为大多数线程在任何给定时间都是空闲的。omp_threads = 1mkl_threads = 1os.environ["OMP_NUM_THREADS"] = str(omp_threads)os.environ["MKL_NUM_THREADS"] = str(mkl_threads)config = tf.ConfigProto()config.intra_op_parallelism_threads = 16config.inter_op_parallelism_threads = 16session = tf.Session(config=config)K.set_session(session)我希望这段代码会产生 32 个线程,其中大部分线程在任何给定时间都在使用,而实际上它会产生 32 个线程并且一次只使用 4-5 个线程。在使用 tensorflow 之前,有没有人遇到过类似的情况?为什么通过 conda 和通过 pip 安装似乎会给出两种不同的环境?通过使用前面讨论的两种方法的某种组合,是否有任何方法可以在两次安装上获得可比的性能?最后,是否有更好的方法将 python 限制为特定数量的核心?
2 回答
![?](http://img1.sycdn.imooc.com/54584ed2000152a202200220-100-100.jpg)
MMMHUHU
TA贡献1834条经验 获得超8个赞
回答你的第一个和最后一个问题。
是的,我在使用通过 pip 安装的 TensorFlow 时遇到了类似的情况。您可以通过在 Linux 上使用线程关联、numatcl 或任务集将 python 限制为特定数量的内核。
查看以下链接提供的详细信息,TensorFlow 将始终生成多个线程,其中大多数默认情况下会处于休眠状态。
![?](http://img1.sycdn.imooc.com/5458502c00012d4a02200220-100-100.jpg)
慕桂英546537
TA贡献1848条经验 获得超10个赞
我认为这里的重点是 conda 使用 MKL 安装 Tensorflow,但 pip 没有。
OpenMP 控件仅在 MKL 中有效,在 pip install 中,OpenMP 环境变量不起作用,仅将 TFSessionConfig 设置为 intra/inter 可能会影响多线程
添加回答
举报
0/150
提交
取消