2017-08-31 80 views
4

我在学习分布式TensorFlow。尝试了一块代码解释hereCan 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)。

任何想法?

+1

你有40个CPU或40核心吗? – raam86

+0

raam86根据https://askubuntu.com/questions/724228/how-to-find-the-number-of-cpu-cores-including-virtual 40 cpus –

+0

我曾经使用过多个CPU处理使用sci-kit学习( GridSearchCV函数)在tensorflow骨干..所以我想这是可能的。然而,我不确定如何在tensorflow级别实现它 – Eduardo

回答

0

继在评论中link

原来,会议应配置具有设备计数> 1:

config = tf.ConfigProto(device_count={"CPU": 8}) 
with tf.Session(config=config) as sess: 
    ... 

有点震惊,我错过了这么基本的东西,没有人能指出一个似乎太明显的错误。

不确定是否对我或TensorFlow代码示例和文档有问题。既然是Google,我不得不说这是我的。

0

首先,在“一个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