我需要使用Tensorflow和Python训练大量的神经网络。我的神经网络(MLP)范围从非常小的(~2个隐藏层,每个约30个神经元)到大的(3-4个层,每个> 500个神经元)。
我可以在GPU上顺序运行所有这些,这很好。但我的CPU几乎是空转。另外我发现,对于我的小网来说,我的CPU比GPU更快(我假设因为GPU-Overhead等......)。这就是为什么我要同时使用我的CPU和我的GPU来训练我的网。 CPU应该将较小的网络处理为较大的网络,我的GPU应该从较大的网络处理到较小的网络,直到它们在中间的某个地方相遇...我想,这是一个好主意: - )
所以我只是在不同的过程中两次启动我的消费者。设备= CPU,另一个设备= GPU。两者都按照预期开始并消耗前两个网。但是,GPU消费者会抛出异常,他的张量被CPU上的另一个进程(!)访问/侵犯,我觉得很奇怪,因为它应该在GPU上运行......
任何人都可以帮助我,将我的流程完全隔离开来吗?
答案 0 :(得分:1)
您的任何网络是否共享运营商?
例如。他们在同一个variable_scope中使用具有相同名称的变量,该变量设置为variable_scope(reuse=True)
然后多个网络将尝试重用相同的底层Tensor结构。
同时检查你的tf.Session中tf.ConfigProto.allow_soft_placement
是否设置为True或False。如果为True,则无法保证设备放置将以您在代码中的预期方式实际执行。