【发布时间】:2018-04-06 08:24:07
【问题描述】:
我需要使用 TensorFlow 和 Python 训练大量神经网络。我的神经网络 (MLP) 范围从非常小的(约 2 个隐藏层,每层约 30 个神经元)到大型(3-4 层,每层 >500 个神经元)。
我能够在我的 GPU 上按顺序运行所有这些,这很好。但是我的 CPU 几乎处于空闲状态。另外我发现,对于我的非常小的网络,我的 CPU 比 GPU 更快(我假设是因为 GPU-Overhead 等......)。这就是为什么我想同时使用我的 CPU 和我的 GPU 来训练我的网络。 CPU 应该将较小的网络处理到较大的网络,而我的 GPU 应该从较大的网络处理到较小的网络,直到它们在中间的某个地方相遇……我想,这是个好主意 :-)
所以我只是简单地在不同的进程中启动我的消费者两次。一个设备= CPU,另一个设备= GPU。两者都按预期开始并消耗前 2 个网络。但是随后,GPU 消费者抛出一个异常,他的张量被 CPU 上的另一个进程访问/违反(!),我觉得这很奇怪,因为它应该在 GPU 上运行......
任何人都可以帮助我,将我的流程完全隔离吗?
【问题讨论】:
-
如果您同时使用 CPU 和 GPU,它将无法按预期工作。他们需要更多的通信,这比 GPU 中的计算要慢得多。所以没关系,使用 GPU 运行一个小程序会更慢,因为会有更多的数据传输/通信。
-
此外,“3-4 层,每层 >500 个神经元”只是一个婴儿网。
-
@Sraw:感谢您的回答。但要澄清一下:我不想在 CPU 和 GPU 上一起训练一个单一的网络。我希望 CPU 训练 net1 和 GPU 独立训练 net2。所以两个进程之间不需要通信。事实上,我想完全隔离它们。我只想使用空闲 CPU 的计算能力..
-
@Sraw:你可能对婴儿网的帖子是正确的,但我的数据集对于更大的网络来说不够具有挑战性......
标签: python tensorflow gpu cpu