TensorFlow:如果 tf.train.batch 已经并行出列示例,并行排队示例是否会加快批处理创建速度?

TensorFlow: Does queuing examples in parallel speed up a batch creation if tf.train.batch is already dequeuing examples in parallel?

在TensorFlow-slim文档中,有一个ParallelReader对象,可以通过让多个reader将example strings读入queue来并行读取TFRecords数据。但是,如果我没记错的话,tf.train.batch 会从队列中取出示例,并且能够与参数 num_threads 并行执行此操作。如果是这样,批量创建和读取数据是否必须具有相同的速度,否则会导致批量创建速度变慢?

实际上我不太确定出列操作是在 tf.train.batch 中发生还是在手动创建 queue_runner 以出列示例时发生,因为我相信 tf.train.batch 可以有效地替换 queue_runner操作。这是正确的吗?

就您的第一段而言:答案是输入管道中的每个步骤都应该有足够的带宽来为模型提供数据(可能不会太多)。你很容易 运行 进入瓶颈,例如从一个队列移动到另一个队列很快,但没有足够的数据被馈送到第一个队列(例如,由于 I/O 问题)。您还可以想象拥有大量并行读取器和大量 I/O 带宽,但只有一个线程负责收集所有这些示例是瓶颈。一些 back-of-the-envelope 计算可能会有所帮助,但最终你应该 .

关于第二个问题,tf.train.batch does start its own queue runner。实际 enqueuing/dequeuing 是异步发生的,这就是为什么监控队列大小以确保训练消耗数据的速度不会快于输入管道生成数据的速度很重要。