8
在TensorFlow中,我希望在不同计算机上的不同工作人员之间共享一个文件名队列,以便每台计算机都可以获得要训练的文件子集。我搜索了很多,而且似乎只有变量可以放在PS任务上才能共享。有没有人有任何例子?谢谢。在分布式TensorFlow中,是否可以在不同的工作人员之间共享相同的队列?
在TensorFlow中,我希望在不同计算机上的不同工作人员之间共享一个文件名队列,以便每台计算机都可以获得要训练的文件子集。我搜索了很多,而且似乎只有变量可以放在PS任务上才能共享。有没有人有任何例子?谢谢。在分布式TensorFlow中,是否可以在不同的工作人员之间共享相同的队列?
通过在创建队列时设置可选的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"
),并导出共享队列供工作人员使用。
太棒了!非常感谢! – kopopt
当我用'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