TensorFlow:出列单个示例是瓶颈吗?
TensorFlow: Is dequeueing single examples a bottleneck?
在 TF-slim documentation(参考 read
函数)中,我意识到有多个阅读器将解析后的 TF-examples 送入(排队)到队列中,但是有是一个函数 dequeue
,一次只使一个元素出队。这会在我创建批次时导致我的训练出现瓶颈吗?用 dequeue_many
代替更好吗?
当我之前训练我的模型时,我注意到 TensorBoard 上的并行读取器队列总是满的 - 这是一个令人担忧的原因还是入队操作应该比出队操作更快?一般而言,出队操作出队的示例数量应该与入队操作的读者数量一样多吗?
这是我对队列的可视化:
我的猜测是,只要有一个 min_after_dequeue 参数确保队列中有足够的示例在任何时候被洗牌(事实上,改组多久发生一次?)。但是一次使许多示例出队的权衡是什么?
此 answer 展示了如何进行分析,对于该示例,每个出队操作在一个线程上花费 60 微秒。如果您在出队之上使用 tf.batch
,它将 运行 多个并行出队操作,因此平均每个出队时间可能会下降到 12 微秒。这意味着如果您的计算时间少于 12 微秒,它只会成为瓶颈。前一段时间我检查时,安排单个 GPU 内核调用需要 5 微秒,因此任何具有超过 2 个 GPU 操作的网络将需要更长的时间来评估,dequeue
不会成为瓶颈。
在 TF-slim documentation(参考 read
函数)中,我意识到有多个阅读器将解析后的 TF-examples 送入(排队)到队列中,但是有是一个函数 dequeue
,一次只使一个元素出队。这会在我创建批次时导致我的训练出现瓶颈吗?用 dequeue_many
代替更好吗?
当我之前训练我的模型时,我注意到 TensorBoard 上的并行读取器队列总是满的 - 这是一个令人担忧的原因还是入队操作应该比出队操作更快?一般而言,出队操作出队的示例数量应该与入队操作的读者数量一样多吗?
这是我对队列的可视化:
我的猜测是,只要有一个 min_after_dequeue 参数确保队列中有足够的示例在任何时候被洗牌(事实上,改组多久发生一次?)。但是一次使许多示例出队的权衡是什么?
此 answer 展示了如何进行分析,对于该示例,每个出队操作在一个线程上花费 60 微秒。如果您在出队之上使用 tf.batch
,它将 运行 多个并行出队操作,因此平均每个出队时间可能会下降到 12 微秒。这意味着如果您的计算时间少于 12 微秒,它只会成为瓶颈。前一段时间我检查时,安排单个 GPU 内核调用需要 5 微秒,因此任何具有超过 2 个 GPU 操作的网络将需要更长的时间来评估,dequeue
不会成为瓶颈。