我目前正在尝试找到一种有效的方法,使用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 = 1
mkl_threads = 1
os.environ["OMP_NUM_THREADS"] = str(omp_threads)
os.environ["MKL_NUM_THREADS"] = str(mkl_threads)
config = tf.ConfigProto()
config.intra_op_parallelism_threads = 16
config.inter_op_parallelism_threads = 16
session = tf.Session(config=config)
K.set_session(session)
我希望这段代码会产生 32 个线程,其中大部分线程在任何给定时间都在使用,而实际上它会产生 32 个线程并且一次只使用 4-5 个线程。
在使用 tensorflow 之前,有没有人遇到过类似的情况?
为什么通过 conda 和通过 pip 安装似乎会给出两种不同的环境?
通过使用前面讨论的两种方法的某种组合,是否有任何方法可以在两次安装上获得可比的性能?
最后,是否有更好的方法将 python 限制为特定数量的核心?
catspeake
MMMHUHU
慕桂英546537
随时随地看视频慕课网APP
相关分类