从GPU运行并使用多个线程来提取队列时,在张量流中的NaN值

时间:2017-04-06 20:48:54

标签: multithreading tensorflow gpu

我正在训练的模型中遇到NaN值。

我有2个tensorflow队列。第一个是由独立的加载器线程提供,第二个线程是从第一个队列读取,执行预处理,然后加载到第二个队列。

所有这些都发生在CPU上。然后模型从第二个队列中读取批次并在GPU上进行训练。

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

我可以通过两种方式解决问题:

  1. 在CPU上运行。相同的代码在CPU上运行良好。
  2. 删除线程,相同的代码,而不是在线程中运行加载器和预处理器,只需在训练步骤之前按顺序执行这两个步骤。
  3. 因此,只有当我运行多个线程从不同设备访问队列时才会遇到此问题。

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

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

    我在2个运行TF 1.0.1的系统和1个运行1.1.0-rc1的系统上重现了这个。我已经尝试了CUDNN 5和CUDNN 6库。

1 个答案:

答案 0 :(得分:0)

这个问题似乎与在GPU上定义的一些{{1}}处理函数有关,但是从CPU上的队列中提供数据。我不希望这是一个问题,但只要我将这些操作绑定到CPU使用一切正常。