tensorflow - 如何在 Keras 中的两个不同 GPU 上并行运行两个模型

标签 tensorflow keras

我想对神经网络上的参数进行网格搜索。我有两个 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 的讨论也仅限于数据并行化和设备并行化。我也不相信我想做,因为我不想分解单个模型以在多个 gpu 上运行。是否可以使用两个 GPU 在 keras 中同时运行两个独立的模型?

最佳答案

可以在 here 找到此问题的解决方案.然而,softmax 激活函数目前只在 CPU 上运行。需要直接cpu执行dense层:

with tf.device('cpu:0')

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

关于tensorflow - 如何在 Keras 中的两个不同 GPU 上并行运行两个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50476340/

相关文章:

tensorflow - .pb和.h5之间的区别

python - 调整 Keras 中隐藏层的数量

python - 如何打印 Keras 张量值?

python - 自定义数据生成器

parameters - 训练 VGG-16 需要多少个 epoch

tensorflow - 输出中的节点数大于神经网络中的类数

machine-learning - 为什么在处理深度学习时 GPU 比 CPU 更重要?

python - 减少 LSTM keras 上的输出维度

python - keras python 中 model.summary() 的不同参数是什么意思?

python-3.x - 最小化 AdamOptimizer 时,运算输入和计算输入梯度之间的形状不兼容