我对 Tensorflow 比较陌生,仍在努力理解如何提高性能。我使用 TF Timeline 工具检查了我的代码的执行,我惊讶地发现执行看起来像是串行的,如下图所示:
下面的代码是我用来设置数据输入的:
filenames = tf.placeholder(tf.string, shape=[None])
dataset = tf.data.TFRecordDataset(filenames, "ZLIB", 128 * 1024 * 1024)
dataset = dataset.map(_parse_function, 13)
dataset = dataset.batch(8192)
dataset = dataset.prefetch(8192 * 3)
iterator = dataset.make_initializable_iterator()
X, y = iterator.get_next()
特别是,鉴于我已将工作线程的数量设置map
为 13(与我的硬件一致)并且还设置了等于 3 倍批量大小的预取,我预计 CPU 将与 GPU 和 CPU/GPU 传输完全重叠时间。所以我的问题是:
- 为什么这看起来是连续的?我误读了我所看到的吗?
- 我使用数据集的方式有问题吗?我知道最终应该调整批处理大小和预取大小以获得最佳性能,但是如果我根本看不到 CPU 与 GPU 的并行使用,那又有什么意义呢?