【问题标题】:TensorFlow very slow on second run (Ubuntu)TensorFlow 在第二次运行时非常慢(Ubuntu)
【发布时间】: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


【解决方案1】:

为了确保很明显发生了什么并回答了这个问题:这是因为 tensorflow 是从 /dev/random 而不是 /dev/urandom 读取的。在某些系统上,/dev/random 可能会耗尽其随机性并阻塞直到有更多可用,从而导致速度变慢。现在是fixed in github。修复程序包含在 release 0.6.0 及更高版本中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多