Can TensorFlow可以运行多个CPU(无GPU)?
问题描述:
我在学习分布式TensorFlow。尝试了一块代码解释here:Can TensorFlow可以运行多个CPU(无GPU)?
with tf.device("/cpu:0"):
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
with tf.device("/cpu:1"):
y = tf.nn.softmax(tf.matmul(x, W) + b)
loss = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
得到以下错误:
tensorflow.python.framework.errors_impl.InvalidArgumentError: Cannot assign a device for operation 'MatMul': Operation was explicitly assigned to /device:CPU:1 but available devices are [ /job:localhost/replica:0/task:0/cpu:0 ]. Make sure the device specification refers to a valid device. [[Node: MatMul = MatMul[T=DT_FLOAT, transpose_a=false, transpose_b=false, _device="/device:CPU:1"](Placeholder, Variable/read)]]
意思是说TensorFlow不能识别CPU:1。
我在有40个CPU的RedHat服务器上运行(cat /proc/cpuinfo | grep processor | wc -l
)。
任何想法?
答
继在评论中link:
原来,会议应配置具有设备计数> 1:
config = tf.ConfigProto(device_count={"CPU": 8})
with tf.Session(config=config) as sess:
...
有点震惊,我错过了这么基本的东西,没有人能指出一个似乎太明显的错误。
不确定是否对我或TensorFlow代码示例和文档有问题。既然是Google,我不得不说这是我的。
答
首先,在“一个CPU”上运行它,看看Tensorflow是否将线程正确地分配给所有CPU。它可能会多线程正确,你将不必做任何事情。
如果没有,您应该尝试启动具有不同CPU亲和力的多个Tensorflow实例,并执行“分布式”系统。 Tensorflow为多台机器提供分布式服务;它应该在一台机器上使用不同的进程,只要你正确地设置你的文件,以便它们不写入相同的位置。你可以从https://www.tensorflow.org/deploy/distributed开始。您可能需要设置CPU的亲和力,使得它的每个物理CPU的一个过程,一拉https://askubuntu.com/questions/102258/how-to-set-cpu-affinity-to-a-process
你有40个CPU或40核心吗? – raam86
raam86根据https://askubuntu.com/questions/724228/how-to-find-the-number-of-cpu-cores-including-virtual 40 cpus –
我曾经使用过多个CPU处理使用sci-kit学习( GridSearchCV函数)在tensorflow骨干..所以我想这是可能的。然而,我不确定如何在tensorflow级别实现它 – Eduardo