【问题标题】:Running Python Tensorflow on CPU and GPU in parallel在 CPU 和 GPU 上并行运行 Python Tensorflow
【发布时间】: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


【解决方案1】:

您的任何网络是否共享运营商? 例如。他们在设置为variable_scope(reuse=True)的同一个variable_scope中使用同名变量

然后多个网络将尝试重用相同的底层张量结构。

还要检查 tf.ConfigProto.allow_soft_placement 在您的 tf.Session 中是否设置为 True 或 False。如果为 True,则无法保证设备放置将按照您在代码中的预期方式实际执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 2020-08-11
    • 2016-11-07
    相关资源
    最近更新 更多