TensorFlow可以在多个CPU上运行吗(没有GPU)?

9

我正在尝试学习分布式TensorFlow。根据这里的解释,试用了一段代码:

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: 不能为操作'MatMul'分配设备:操作明确分配给/device:CPU:1,但可用的设备是[/job:localhost/replica:0/task:0/cpu:0]。请确保设备规范引用有效设备。
     [[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
根据https://askubuntu.com/questions/724228/how-to-find-the-number-of-cpu-cores-including-virtual,raam86有40个CPU。 - Elad Weiss
我曾经使用过sci-kit learning(GridSearchCV函数)在tensorflow框架下进行多CPU处理。所以我想这是可能的。但是我不太确定如何在tensorflow层面上实现它。 - Eduardo
1
看看这个能否帮到你:https://dev59.com/mFoU5IYBdhLWcg3wEz6N#37864489 - LI Xuhong
2个回答

4

根据评论中的链接

事实证明,会话应配置为具有设备计数 > 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那样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接