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

时间:2017-12-02 21:08:01

标签: python performance optimization tensorflow multiprocessing

我正在尝试在具有许多CPU内核和足够RAM(250GB)的计算机上运行多个进程。

每个进程都会构建一个TensorFlow图,并在传递给session.run()调用的函数内频繁调用scipy.optimize.fmin_l_bfgs_b()。这不是一个非常繁重的计算(现在计算单层神经网络的输出和梯度,并且在我测试的CPU上运行得更快)。

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

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

  • 对于这些流程,环境变量CUDA_VISIBLE_DEVICES设置为''

  • 我在创建tf.ConfigProto时尝试使用tf.Session(例如,设置device_count以限制每个进程使用的核心数,并设置inter_op_parallelism_threads和{{1但是它没有效果。

  • 使用intra_op_parallelism_threads也不起作用。

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

如果CPU或RAM的使用率达到90%,我会放弃,但他们完全不是!仍有150GB的可用内存,大多数CPU内核的使用率约为10%

如何制作它们,至少有效使用所有CPU内核

有人可以帮我找出我做错了吗?

谢谢!

0 个答案:

没有答案