我尝试使用 Estimator 设置一个非常简单的 Mnist 示例。
首先,我使用了估计器不推荐使用的 fit() 参数 x、y 和 batch_size。这执行得非常快,并且使用了我大约 100% 的 GPU,而对 CPU 的影响不大(大约 10% 的使用率)。所以它按预期工作。
因为不推荐使用 x、y 和 batch_size 参数,所以我想将 input_fn 参数用于 fit() 函数。为了构建 input_fn,我使用了 tf.slice_input_producer 并使用 tf.train.batch 对其进行批处理。这是我的代码https://gist.github.com/andreas-eberle/11f650fca0dce4c9d3d6c0955145e80d。您应该可以使用 tensorflow 1.0 运行它。
我的问题是训练现在运行得很慢,只使用了大约 30% 的 GPU(显示在 nvidia-smi 中)。
我还尝试增加 slice_input_producer 的队列容量并增加用于批处理的线程数。然而,这只有助于达到大约 45% 的 GPU 利用率,并导致 100% 的 GPU 利用率。
我究竟做错了什么?有没有更好的方法来提供输入并对其进行批处理?我不想手动创建批次(创建 numpy 输入数组的子数组),因为我想将此示例用于更复杂的输入队列,我将在其中读取和预处理图中的图像。
我不认为我的硬件应该是问题:
- 项目清单
- 视窗 10
- 英伟达 GTX 960M
- i7-6700HQ
- 32 GB 内存