我正在尝试在具有许多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内核?
有人可以帮我找出我做错了吗?
谢谢!