Python 优化多个进程在CPU上运行TensorFlow,以100%使用CPU内核?
我试图在一台有很多CPU内核和足够数量的RAM(250GB)的机器上运行多个进程 每个进程构建一个TensorFlow图,并在传递给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代码,它对单层神经网络的这种特定情况
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()
- 我甚至应用了引入的技巧(直接调用
,如果可能的话,使用目标列表而不是获取列表,以及XLA),这在扩展问题上对他们没有帮助TF_Run()
谢谢大家! 我认为,如果你能将你的许多小计算汇总成一个批处理,并运行整个批处理,你会得到最好的结果。当我使用批量大小为1(太多的小操作)训练模型时,我在让tensorflow让我的高端GPU保持忙碌方面非常失败,但它很好地保持了GPU与较大批量的饱和。BLAS和其他库经过了很好的调优,以充分利用大型矩阵运算。如果你做了很多小的操作,就不会有那么多了。@David Parks谢谢你的评论!也许我可以尝试找到一种方法来收集输入并在以后立即处理它们,看看情况是否会好转,但我仍然希望提高CPU使用率。:)(可能在这种情况下)