Python 优化多个进程在CPU上运行TensorFlow,以100%使用CPU内核?

Python 优化多个进程在CPU上运行TensorFlow,以100%使用CPU内核?,python,performance,optimization,tensorflow,multiprocessing,Python,Performance,Optimization,Tensorflow,Multiprocessing,我试图在一台有很多CPU内核和足够数量的RAM(250GB)的机器上运行多个进程 每个进程构建一个TensorFlow图,并在传递给scipy.optimize.fmin\u l\u bfgs\u b()调用的函数中频繁调用session.run()。这不是一个非常繁重的计算(目前计算单层神经网络的输出和梯度,并且在CPU上运行更快,正如我测试的那样) 问题是,如果我运行多个这样的实例,session.run()调用会变得太慢 为了进行比较,我编写了numpy代码,它对单层神经网络的这种特定情况

我试图在一台有很多CPU内核和足够数量的RAM(250GB)的机器上运行多个进程

每个进程构建一个TensorFlow图,并在传递给
scipy.optimize.fmin\u l\u bfgs\u b()
调用的函数中频繁调用
session.run()
。这不是一个非常繁重的计算(目前计算单层神经网络的输出和梯度,并且在CPU上运行更快,正如我测试的那样)

问题是,如果我运行多个这样的实例,
session.run()
调用会变得太慢

为了进行比较,我编写了numpy代码,它对单层神经网络的这种特定情况做了相同的事情(而TF版本处理一般情况)。结果当然是numpy版本更快,但它的扩展性也更好。例如,numpy版本的15个进程仍然相当快,而TF版本相同数量的进程变得非常慢

  • 对于这些进程,环境变量
    CUDA\u VISIBLE\u DEVICES
    被设置为
    '

  • 我尝试在创建
    tf.Session
    时使用
    tf.ConfigProto
    (例如,设置
    设备计数
    来限制每个进程使用的内核数量,设置
    内部并行线程
    内部并行线程
    ),但效果不佳

  • 使用
    tf.device()
    也不起作用

  • 我甚至应用了引入的技巧(直接调用
    TF_Run()
    ,如果可能的话,使用目标列表而不是获取列表,以及XLA),这在扩展问题上对他们没有帮助

如果CPU或RAM使用率达到90%的话,我会放弃的,但事实并非如此!还有150GB的可用RAM,大多数CPU内核的使用率约为10%

我如何让他们,至少,有效地使用所有CPU核心

有人能帮我找出我做错了什么吗


谢谢大家!

我认为,如果你能将你的许多小计算汇总成一个批处理,并运行整个批处理,你会得到最好的结果。当我使用批量大小为1(太多的小操作)训练模型时,我在让tensorflow让我的高端GPU保持忙碌方面非常失败,但它很好地保持了GPU与较大批量的饱和。BLAS和其他库经过了很好的调优,以充分利用大型矩阵运算。如果你做了很多小的操作,就不会有那么多了。@David Parks谢谢你的评论!也许我可以尝试找到一种方法来收集输入并在以后立即处理它们,看看情况是否会好转,但我仍然希望提高CPU使用率。:)(可能在这种情况下)