我知道使用TensorFlow可以手动控制我们声明变量的位置(例如:GPU上的神经网络的一半,其他GPU上的其余部分)。
尽管我们确定可以在多个GPU 手动上放置变量,但是它们是否可以自动放在那些多个GPU上,例如使用自动变量放置? TensorFlow的文档似乎从未明确提及自动设备放置是否处理多GPU案例。
例如,让我们说我用Keras和TensorFlow后端构建了一个模型。如果模型不适合第一个GPU内部,因为它太大,TensorFlow会自动使用第二个GPU(可能还有更多的GPU)来声明神经网络的变量吗?
感谢。
答案 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移动到另一个可能成本很高,并且系统并不真正知道在哪种情况下移动数据是合理的。