当来自 GPU 运行 并使用多个线程来提供队列时,tensorflow 中的 NaN 值

NaN values in tensorflow when running from GPU and using multiple threads to feed queues

我正在 运行正在训练的模型中使用 NaN 值。

我有 2 个张量流队列。第一个由独立的加载程序线程提供,第二个线程从第一个队列读取数据,执行预处理,然后加载到第二个队列。

这一切都发生在 CPU。然后模型从第二个队列中读取一批并在 GPU 上训练。

我在可变数量的步骤后得到 NaN,通常是 10-20 的数量级。

我可以通过两种方式回避问题:

  1. 运行 上 CPU。相同的代码 运行 在 CPU 上没问题。
  2. 删除线程,相同的代码,而不是 运行在线程中加载加载器和预处理器,只需在训练步骤之前按顺序执行这两个步骤。

所以只有当我 运行 有多个线程从不同的设备访问队列时才会遇到这个问题。

或者看起来,到目前为止,我未能成功地将问题提炼成最小的测试用例。对此的简化测试似乎有效。

想知道是否有任何已知的相关问题。

我在两个系统上复制了这个,一个 运行ning TF 1.0.1 和一个 运行ning 1.1.0-rc1。我已经尝试了 CUDNN 5 和 CUDNN 6 库。

此问题似乎与在 GPU 上定义了一些 tf.image 处理函数有关,但从 CPU 上的队列向它们提供数据。我没想到这会成为一个问题,但是一旦我将这些操作绑定到 CPU 使用一切正常。