2017-05-07 23 views
5

我想了解为什么每个列车迭代需要约1.5秒。 我使用了描述here的跟踪方法。我正在研究TitanX Pascal GPU。我的结果看起来很奇怪,似乎每个操作都相对较快,系统在操作之间的大部分时间都处于空闲状态。我怎么能从这个理解什么是限制系统。 Regular Batch Size 但是似乎确实如此,当我大幅减少批量时,差距就会缩小,正如我们在这里看到的。Tensorflow - 使用时间线进行分析 - 了解什么是限制系统

Small Batch Size 不幸的是,代码是非常复杂的,我不能发布一个小版也有同样的问题

有没有办法从什么走的是空间的间隙之间的探查了解操作?

谢谢!

编辑:

在CPU ONY我没有看到这种行为: CPU Only

我运行

+0

顺便说一句,现在不需要使用时间线。看看[我的答案在这里](http://stackoverflow.com/a/43692312/1090562),看看你可以通过张量板调试你的模型。 –

+0

谢谢,但由于某种原因,我没有看到我的结核病中的节点状态... – aarbelle

+1

有些想法:有些事情可能无法反映在时间表中 - 通过feed dict,grpc延迟传输数据的时间。如果仅在CPU上运行,您是否也有类似的差距?有些东西可以等待一些出队操作吗?您还可以插入tf.Print节点并查看在那里生成的时间戳。 –

回答

0

这里有一些猜测,但很难不被包含的自说我可以运行和调试的复制品。

  • 是否有可能您的GPU内存不足?其中一个信号是如果您在培训期间看到Allocator ... ran out of memory的日志消息。如果用完GPU内存,则分配器退出并等待希望更多可用。这可能解释如果您减少批量大小,大量的操作员间差距消失。

  • 正如Yaroslav在上面的评论中所建议的那样,如果仅在CPU上运行模型会发生什么情况?时间表是什么样的?

  • 这是分布式培训工作还是单机工作?如果是分布式作业,单机版本是否显示相同的行为?

  • 你是否多次调用session.run()或eval(),或者每次训练步骤只调用一次?每次run()或eval()调用都会耗尽GPU管道,因此为了提高效率,通常只需要一次run()调用即可将计算表达为一个大图。 (我怀疑这是你的问题,但我提到它的完整性。)

+0

1.我没有用完内存。我正在使用我的gpu内存的〜10%。 2.这不会发生在CPU上。我将时间线添加到原始问题 3.这是一台单机作业。 4.我为每个训练步骤调用一次sess.run()。 谢谢! – aarbelle

相关问题