当来自 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 的数量级。
我可以通过两种方式回避问题:
- 运行 上 CPU。相同的代码 运行 在 CPU 上没问题。
- 删除线程,相同的代码,而不是 运行在线程中加载加载器和预处理器,只需在训练步骤之前按顺序执行这两个步骤。
所以只有当我 运行 有多个线程从不同的设备访问队列时才会遇到这个问题。
或者看起来,到目前为止,我未能成功地将问题提炼成最小的测试用例。对此的简化测试似乎有效。
想知道是否有任何已知的相关问题。
我在两个系统上复制了这个,一个 运行ning TF 1.0.1 和一个 运行ning 1.1.0-rc1。我已经尝试了 CUDNN 5 和 CUDNN 6 库。
此问题似乎与在 GPU 上定义了一些 tf.image
处理函数有关,但从 CPU 上的队列向它们提供数据。我没想到这会成为一个问题,但是一旦我将这些操作绑定到 CPU 使用一切正常。
我正在 运行正在训练的模型中使用 NaN 值。
我有 2 个张量流队列。第一个由独立的加载程序线程提供,第二个线程从第一个队列读取数据,执行预处理,然后加载到第二个队列。
这一切都发生在 CPU。然后模型从第二个队列中读取一批并在 GPU 上训练。
我在可变数量的步骤后得到 NaN,通常是 10-20 的数量级。
我可以通过两种方式回避问题:
- 运行 上 CPU。相同的代码 运行 在 CPU 上没问题。
- 删除线程,相同的代码,而不是 运行在线程中加载加载器和预处理器,只需在训练步骤之前按顺序执行这两个步骤。
所以只有当我 运行 有多个线程从不同的设备访问队列时才会遇到这个问题。
或者看起来,到目前为止,我未能成功地将问题提炼成最小的测试用例。对此的简化测试似乎有效。
想知道是否有任何已知的相关问题。
我在两个系统上复制了这个,一个 运行ning TF 1.0.1 和一个 运行ning 1.1.0-rc1。我已经尝试了 CUDNN 5 和 CUDNN 6 库。
此问题似乎与在 GPU 上定义了一些 tf.image
处理函数有关,但从 CPU 上的队列向它们提供数据。我没想到这会成为一个问题,但是一旦我将这些操作绑定到 CPU 使用一切正常。