TensorFlow的自动设备放置是否处理多GPU案例?

时间:2017-07-28 23:47:25

标签: tensorflow keras tensorflow-gpu

我知道使用TensorFlow可以手动控制我们声明变量的位置(例如:GPU上的神经网络的一半,其他GPU上的其余部分)。

尽管我们确定可以在多个GPU 手动上放置变量,但是它们是否可以自动放在那些多个GPU上,例如使用自动变量放置? TensorFlow的文档似乎从未明确提及自动设备放置是否处理多GPU案例。

例如,让我们说我用Keras和TensorFlow后端构建了一个模型。如果模型不适合第一个GPU内部,因为它太大,TensorFlow会自动使用第二个GPU(可能还有更多的GPU)来声明神经网络的变量吗?

感谢。

2 个答案:

答案 0 :(得分:0)

不,请参考official doc

如果系统中有多个GPU,默认情况下将选择ID最低的GPU。如果您想在不同的GPU上运行,则需要明确指定首选项:

# Creates a graph.
with tf.device('/gpu:2'):
  a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
  b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
  c = tf.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print(sess.run(c))

答案 1 :(得分:0)

No, you are responsible for device placement:

  

如果系统中有多个GPU,则GPU最低   默认情况下会选择ID。

我认为这样做是因为将数据从GPU移动到另一个可能成本很高,并且系统并不真正知道在哪种情况下移动数据是合理的。