【问题标题】:How To Run Two Models In Parallel On Two Different GPUs In Keras如何在 Keras 的两个不同 GPU 上并行运行两个模型
【发布时间】:2018-05-22 20:56:19
【问题描述】:

我想对神经网络上的参数进行网格搜索。我有两个 GPU,我想在第一个 GPU 上运行一个模型,在第二个 GPU 上运行另一个具有不同参数的模型。第一次尝试失败是这样的:

with tf.device('/gpu:0'):
    model_1 = sequential()
    model_1.add(embedding) // the embeddings are defined earlier in the code
    model_1.add(LSTM(50))
    model_1.add(Dense(5, activation = 'softmax'))
    model_1.compile(loss = 'categorical_crossentropy', optimizer = 'adam')
    model_1.fit(np.array(train_x), np.array(train_y), epochs = 15, batch_size = 15)
with tf.device('/gpu:1'):
    model_2 = sequential()
    model_2.add(embedding)
    model_2.add(LSTM(100))
    model_2.add(Dense(5, activation = 'softmax'))
    model_2.compile(loss = 'categorical_crossentropy', optimizer = 'adam')
    model_2.fit(np.array(train_x), np.array(train_y), epochs = 15, batch_size = 15)

编辑:我再次运行我的代码并没有收到错误。但是,这两个模型按顺序运行而不是并行运行。这里可以做多线程吗?那是我的下一次尝试。

网上有很多关于在 keras 上使用多个 GPU 的讨论,但是当涉及到同时运行多个模型时,讨论仅限于在单个 GPU 上运行多个模型。关于多 GPU 的讨论也仅限于数据并行化和设备并行化。我不相信我想这样做,因为我不想分解单个模型以在多个 gpus 上运行。是否可以在具有两个 GPU 的 keras 中同时运行两个单独的模型?

【问题讨论】:

    标签: tensorflow keras


    【解决方案1】:

    可以在here 找到解决此问题的方法。然而,softmax 激活函数目前仅在 CPU 上运行。需要指挥cpu去执行dense layer:

    with tf.device('cpu:0')
    

    在 cpu 和 gpu 之间切换似乎不会导致明显的减速。不过,使用 LSTM,最好在 cpu 上运行整个模型。

    【讨论】:

      【解决方案2】:

      您可以使用multi_gpu_model(参考here

      首先定义你的模型

      model = sequential()
      model.add(embedding) // the embeddings are defined earlier in the code
      model.add(LSTM(50))
      model.add(Dense(5, activation = 'softmax'))
      

      然后创建一个带有 2 个 GPU 的 multi_gpu_model

      parallel_model = multi_gpu_model(model, gpus=2)
      

      如果您想划分输入并在 2 个 GPU 上处理它,这将起作用。不过,它不会涵盖您在两个 GPU 上拥有两个不同模型的用例。

      【讨论】:

      • 我可以接受,但是parallel_model 速度较慢,它不提供加速。我认为是因为模型太小,没有任何好处。
      【解决方案3】:

      因为您的代码是按顺序排列的。您可以尝试使用线程来并行运行 2 个块。谷歌“python 多线程”将帮助您获得大量示例。

      【讨论】:

      • 虽然这可能是对问题的回答,但它被概括为它也可能是一个评论。你应该edit你的答案包含更多上下文或包含一些特定于所问问题的示例代码。
      猜你喜欢
      • 1970-01-01
      • 2018-03-08
      • 2018-06-01
      • 2017-11-30
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多