我目前正在尝试找到一种有效的方法,使用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 回答
MMMHUHU
TA贡献1834条经验 获得超8个赞
回答你的第一个和最后一个问题。
是的,我在使用通过 pip 安装的 TensorFlow 时遇到了类似的情况。您可以通过在 Linux 上使用线程关联、numatcl 或任务集将 python 限制为特定数量的内核。
查看以下链接提供的详细信息,TensorFlow 将始终生成多个线程,其中大多数默认情况下会处于休眠状态。
慕桂英546537
TA贡献1848条经验 获得超10个赞
我认为这里的重点是 conda 使用 MKL 安装 Tensorflow,但 pip 没有。
OpenMP 控件仅在 MKL 中有效,在 pip install 中,OpenMP 环境变量不起作用,仅将 TFSessionConfig 设置为 intra/inter 可能会影响多线程
添加回答
举报
0/150
提交
取消
