2016-09-19 29 views

回答

16

通过在创建队列时设置可选的shared_name参数,可以在工作人员之间共享相同的队列。与tf.Variable对象一样,您可以将队列放置在可以从不同工作人员访问的任何设备上。例如:

with tf.device("/job:ps/task:0"): # Place queue on parameter server. 
    q = tf.FIFOQueue(..., shared_name="shared_queue") 

的几个注意事项:

  • shared_name的值必须是唯一的,你要共享的特定队列。不幸的是,Python API目前不使用范围界定或自动名称统一来简化操作,因此您必须手动确保这一点。

  • 您不需要将队列放置在参数服务器上。一种可能的配置是设置包含一组执行预处理的任务的额外“输入作业”(例如"/job:input"),并导出共享队列供工作人员使用。

+0

太棒了!非常感谢! – kopopt

+0

当我用'tf.train.string_input_producer'和'tf.train.shuffle_batch'(都带有唯一的'shared_name')使用''/ job:input''时,它只有在'num_epochs'设置为'None '。当'num_epochs!= None'时,我得到'tensorflow.python.framework.errors_impl.CancelledError:RandomShuffleQueue'shared_shuffle_batch'已关闭.'错误。如何配置“输入作业”或队列,所以我可以让工作人员从同一个共享队列和同一时代读取数据? (例如数据并行的图间复制分布式训练) – MtDersvan

相关问题