Tensorflow 数据集性能?
Tensorflow Dataset performances?
我正在实施一个受 NMT model. I am using a training set stored as TFRecords files, using a TFRecordDataset to fetch it and feed the model. Following Google's recommendations 关于输入管道性能改进的启发的模型,我有:
- 预先在 CPU
上尽可能多地进行预处理
- 堆叠了几个训练示例,最多约 100 MB TFrecords 文件(包含更多示例的文件更少)
- 在数据集
map
操作上使用了 num_parallel_calls
和 prefetch
。
然而,GPU 仍保持在最大 40%,几乎没有 运行 在 CPU 上慢。因此,我想知道 prefetch
操作。
如果我没理解错的话,它会创建一个特殊的线程来缓冲N个例子。但是这是什么意思 ?其他未缓冲的示例会怎样?
预取缓冲区大小、完整数据集中的示例数和批量大小之间是否存在最佳关系?在 NMT 代码中,预取缓冲区大小设置为 1000*batch_size
,但为什么呢?如果例如我正在使用 10000 个示例,批量大小为 100,预取缓冲区大小应该是多少?
如有关于数据集加速的任何其他建议,我们将不胜感激。
显然,数据集 API 在 CPU and not on GPU 上运行,所以这回答了问题。
我正在实施一个受 NMT model. I am using a training set stored as TFRecords files, using a TFRecordDataset to fetch it and feed the model. Following Google's recommendations 关于输入管道性能改进的启发的模型,我有:
- 预先在 CPU 上尽可能多地进行预处理
- 堆叠了几个训练示例,最多约 100 MB TFrecords 文件(包含更多示例的文件更少)
- 在数据集
map
操作上使用了num_parallel_calls
和prefetch
。
然而,GPU 仍保持在最大 40%,几乎没有 运行 在 CPU 上慢。因此,我想知道 prefetch
操作。
如果我没理解错的话,它会创建一个特殊的线程来缓冲N个例子。但是这是什么意思 ?其他未缓冲的示例会怎样?
预取缓冲区大小、完整数据集中的示例数和批量大小之间是否存在最佳关系?在 NMT 代码中,预取缓冲区大小设置为
1000*batch_size
,但为什么呢?如果例如我正在使用 10000 个示例,批量大小为 100,预取缓冲区大小应该是多少?
如有关于数据集加速的任何其他建议,我们将不胜感激。
显然,数据集 API 在 CPU and not on GPU 上运行,所以这回答了问题。