Python TensorFlow:单个示例的出列是否是一个瓶颈?

Python TensorFlow:单个示例的出列是否是一个瓶颈?,python,machine-learning,tensorflow,computer-vision,deep-learning,Python,Machine Learning,Tensorflow,Computer Vision,Deep Learning,在TF slim(参考read函数)中,我意识到有多个读卡器将解析的TF示例送入(排队)队列,但有一个函数dequeue一次只让一个元素出列。当我创建批处理时,这会导致我的培训出现瓶颈吗?使用dequeue\u many是否更好 当我之前训练我的模型时,我在TensorBoard上注意到parallelreader队列总是满的——这是一个令人担忧的原因还是入队op应该比出队op快?一般来说,出列操作的出列示例是否应与使操作入列的读卡器数量一样多 以下是我对队列的可视化: 我的猜测是,在任何时候

在TF slim(参考
read
函数)中,我意识到有多个读卡器将解析的TF示例送入(排队)队列,但有一个函数
dequeue
一次只让一个元素出列。当我创建批处理时,这会导致我的培训出现瓶颈吗?使用
dequeue\u many
是否更好

当我之前训练我的模型时,我在TensorBoard上注意到parallelreader队列总是满的——这是一个令人担忧的原因还是入队op应该比出队op快?一般来说,出列操作的出列示例是否应与使操作入列的读卡器数量一样多

以下是我对队列的可视化:


我的猜测是,在任何时候让更多的示例出列都可能是好的,只要有一个minu-after-dequeue参数确保队列中有足够的示例在任何一点被洗牌(事实上,洗牌发生的频率是多少?)。但是一次退出多个示例的代价是什么呢?

这说明了如何进行分析,对于该示例,每个退出操作在一个线程上花费60微秒。如果您在出列的基础上使用
tf.batch
,它将并行运行多个出列操作,因此每个出列平均可能会降低到12微秒。这意味着,只有当计算时间少于12微秒时,它才会成为瓶颈。前一段时间我检查时,调度一个GPU内核调用需要5微秒,因此任何具有2个以上GPU操作的网络都需要更长的时间来评估,并且
出列将不会成为瓶颈。

这说明了如何进行分析,例如,每个出列操作在一个线程上需要60微秒。如果您在出列的基础上使用
tf.batch
,它将并行运行多个出列操作,因此每个出列平均可能会降低到12微秒。这意味着,只有当计算时间少于12微秒时,它才会成为瓶颈。前一段时间我检查时,调度一个GPU内核调用需要5微秒,因此任何超过2个GPU操作的网络都需要更长的时间进行评估,
dequeue
将不会成为瓶颈。

如果队列已满,则可能意味着下游管道的任何部分都是瓶颈,即卷积层,等等。我会怀疑这些,然后再责怪他们。谢谢你的回答!我有一个相当慢的GPU(800系列),所以我限制了我的批量大小相当小的东西。我可以知道,在多个读者排队后,单个出列操作的速度是否足够快?使用这个和退出队列的权衡是什么?如果队列已满,则可能意味着下游管道的任何部分都是瓶颈,即卷积层等。在指责退出队列之前,我会怀疑这些。谢谢您的回答!我有一个相当慢的GPU(800系列),所以我限制了我的批量大小相当小的东西。我可以知道,在多个读者排队后,单个出列操作的速度是否足够快?使用此命令与退出多个命令的权衡是什么?GPU操作是指单个
sess.run
调用吗?如果我在一次运行中运行多个操作,比如
sess.run([train\u op,metrics\u op])
这会构成两个GPU操作吗?构建的图形的大小会影响GPU调用时间吗?我在文档中发现的一件事是,
train.batch
在出列操作之前完成了出列操作。这个单独的出列操作是否足够快,不会在
train.batch
的排队操作中造成瓶颈?我想象张量流动的方式是:将tf示例以随机ShuffleEQUEUE(并行读取器)的方式并行排队-->将tf示例单独出列(并行读取器)-->将一个tf示例解码为一组图像和标签张量(解码器)-->将
tf.train.batch
中的张量并行地放入内部的FIFO队列中,但一个接一个(train.batch)->使用dequeue\u many将一批示例(train.batch)->用于GPU Op的预处理/推理等,你是说一个
sess.run
呼叫吗?如果我在一次运行中运行多个操作,比如
sess.run([train\u op,metrics\u op])
这会构成两个GPU操作吗?构建的图形的大小会影响GPU调用时间吗?我在文档中发现的一件事是,
train.batch
在出列操作之前完成了出列操作。这个单独的出列操作是否足够快,不会在
train.batch
的排队操作中造成瓶颈?我想象张量流动的方式是:将tf示例以随机ShuffleEQUEUE(并行读取器)的方式并行排队-->将tf示例单独出列(并行读取器)-->将一个tf示例解码为一组图像和标签张量(解码器)-->将
tf.train.batch
中的张量并行地放入FIFO队列中,但一个接一个(train.batch)->使用dequeue\u many将一批示例(train.batch)->用于预处理/推理等。