并行运行具有共享内存的多个tensorflow操作

时间:2017-03-31 09:45:19

标签: parallel-processing tensorflow

我正在尝试并行运行依赖于共享内核(张量流变量)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)
  • 1,2.35
  • 5,10.32
  • 10,24.58

1 个答案:

答案 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中所述。