假设此代码:
w1 = tf.get_variable(...)
w2 = tf.get_variable(...)
x = ...
y1 = tf.matmul(x, w1)
y2 = tf.matmul(x, w2)
session.run([y1, y2], ...)
TensorFlow可以并行运行操作(通过选项inter_op_parallelism_threads
控制)。
我的问题:在这里(matmul
)上是否真的适合这种情况(并扩展为:在各种GPU操作上)?我认为要这样做,就需要创建多个CUDA流,对吗?它会自动(以及如何)执行此操作吗?还是将它们在GPU上顺序执行?
(请注意,对于这个简单的示例,您还可以通过串联w1
和w2
,然后执行一个matmul
,然后进行拆分来重写代码。但这不是我的问题。)
(相关的是this question,这基本上可以回答为所有GPU ops都将始终使用单个CUDA流,因此不会并行运行。尽管不确定是否是最新的) )
答案 0 :(得分:-1)
来自官方FAQ:
运行时是否并行化图执行的一部分?
TensorFlow运行时在多个不同维度上并行执行图执行:
各个操作具有并行实现,使用CPU中的多个内核或GPU中的多个线程。
TensorFlow图中的独立节点可以在多个设备上并行运行,这使得使用多个GPU加速CIFAR-10训练成为可能。
Session API允许多个并行步骤(即,并行调用tf.Session.run。如果单个步骤未使用计算机中的所有资源,则运行时可以获得更高的吞吐量。