【发布时间】:2015-12-04 21:37:47
【问题描述】:
我在 Ubuntu 14.04(VM、droplet)上遇到 TensorFlow(CPU)问题,第一次运行脚本很快,但在第一次运行完成后直接运行相同(或另一个)脚本时,事情变得非常缓慢。 我说的是分钟而不是秒。即使是简单的测试脚本(如教程中提供的那些)也需要很长时间,没有可见的 CPU 负载。
为了比较:教程中的测试脚本的第一次运行给出:
{real:0m0.790s, user:0m0.688s, sys:0m0.111s}
第二次运行相同的脚本,在第一次运行完成后直接给出:
{real: 2m46.628s, user: 0m0.783s, sys: 0m0.104s}
最终,事情似乎变得清晰起来,性能又恢复了(不过只有一次运行)。
我把问题缩小到这个:
sess=tf.Session()
需要很长时间。显然,以前的 Session 使用的资源没有正确释放 [?]。我的脚本使用上下文管理器,例如
with tf.Session() as sess:
sess.run(...)
我的最新假设是,这与系统属性(虚拟机设置、与 TF 上下文管理器交互的管理程序问题)有关。使用 TF 的 docker 容器没有区别。重新启动也没有帮助。相同的脚本在 OS X 上运行正常。
【问题讨论】:
-
当您第一次运行脚本时,您是否有可能在图表中动态添加了很多符号(由于一些错误代码)。
-
不太可能,因为tensorflow.org/versions/master/get_started/index.html 上的教程脚本也会发生这种情况,我认为它没有错误
-
你是如何运行脚本的?如果您在同一个解释器会话中调用它两次,正如 colinfang 指出的那样,图中将有两个节点副本,这可能会导致明显的减速。您可以尝试在代码的每次调用周围添加一个
with tf.Graph().as_default():块吗?这将导致先前调用的节点在开始下一次调用之前被释放。 -
感谢您的建议,但我正在从命令行连续运行脚本。 TensorFlow 教程中的测试脚本会产生相同的行为。
-
我现在正在调查groups.google.com/a/tensorflow.org/forum/?nomobile=true#!topic/…,其中类似的问题是由 TensorFlow 等待 /dev/random 引起的。切换到 /dev/urandom 解决了他们的问题。
标签: tensorflow