我正在尝试并行运行依赖于共享内核(张量流变量)K
的操作的多个实例。
来自tensorflow FAQ:
Session API允许多个并发步骤(即并行调用tf.Session.run。如果单个步骤不使用计算机中的所有资源,这将使运行时获得更高的吞吐量。
我的代码与此类似:
def some_op(K):
# Do some processing on shared K
return some_value
K = tf.random_uniform([kernel_size, kernel_size], 0, 1, dtype=tf.float32)
op_ = some_op(K)
op_list = []
for i in range(n_experiments):
op_list.append(op_)
with tf.Session() as sess:
init = tf.global_variables_initializer()
sess.run(init)
vals = sess.run(op_list)
print vals
我根本没有加速。运行时如下:
n_experiments
,runtime(s)答案 0 :(得分:2)
您的grep -o '[0-9]\{1,\}\.WAV'
包含同一op_list
的{{1}}份副本。如果是这种情况,调用n_experiments
将执行op一次,然后生成tf.Tensor
个结果副本。如果要并行调用sess.run(op_list)
的多个实例,则应按如下方式重写代码:
n_experiments
请注意,增加some_op(K)
可能会增加执行时间,因为您要向同一组资源发出更多工作。如果您想增加潜在的并行度,可以在创建会话时使用op_list = []
for i in range(n_experiments):
op_list.append(some_op(K))
,如this answer中所述。