相关疑难解决方法(0)

TensorFlow/Keras多线程模型拟合

我正在尝试keras使用多个线程(和tensorflow后端)训练具有不同参数值的多个模型.我已经看到了在多个线程中使用相同模型的一些示例,但在这种特殊情况下,我遇到了有关冲突图等的各种错误.这是我希望能够做的一个简单示例:

from concurrent.futures import ThreadPoolExecutor
import numpy as np
import tensorflow as tf
from keras import backend as K
from keras.layers import Dense
from keras.models import Sequential


sess = tf.Session()


def example_model(size):
    model = Sequential()
    model.add(Dense(size, input_shape=(5,)))
    model.add(Dense(1))
    model.compile(optimizer='sgd', loss='mse')
    return model


if __name__ == '__main__':
    K.set_session(sess)
    X = np.random.random((10, 5))
    y = np.random.random((10, 1))
    models = [example_model(i) for i in range(5, 10)]

    e = ThreadPoolExecutor(4)
    res_list = [e.submit(model.fit, X, y) for model in models]

    for …
Run Code Online (Sandbox Code Playgroud)

concurrency multithreading python-multithreading keras tensorflow

23
推荐指数
1
解决办法
8534
查看次数

是否可以在单个 python 脚本中在多个 GPU 上并行训练多个 Keras 模型?

如果我想训练 Keras 模型并拥有多个可用的 GPU,有多种有效使用它们的方法:

  1. 将每个 GPU 分配给不同的模型,并并行训练它们(例如,用于超参数调整或不同架构之间的比较)。例如,我将 model1 分配给 GPU1,将 model2 分配给 GPU2,在一次全局数据加载操作之后,Keras 会在每个 GPU 上并行运行每个模型的 model.fit()。

  2. 划分一个模型并在所有 GPU 上并行训练。这是通过将模型分割成连续的块,然后计算整个模型的所有梯度来完成的。它的实现方式不适用于不同的独立模型。

  3. 挖掘数据并将不同批次输入到不同 GPU 上的同一模型。

似乎有很多关于 2) 和 3) 的文档

https://keras.io/guides/distributed_training/

https://www.run.ai/guides/multi-gpu/keras-multi-gpu-a-practical-guide/

https://www.pyimagesearch.com/2017/10/30/how-to-multi-gpu-training-with-keras-python-and-deep-learning/

但我找不到 1) 的任何解决方案,并且要求它的帖子没有解决方案:

在不同的 GPU 上同时训练多个 keras/tensorflow 模型

看起来,既然这些选项已经可用,那么为每个模型分配不同的 GPU 并并行训练的选项应该很简单。我有什么遗漏的吗?

编辑:一种建议的解决方案是运行不同的 python 脚本。但这并不是最优的,因为它是按脚本划分每个 GPU,而不是按模型划分,这意味着脚本的所有其他部分都需要冗余地运行两次。如果数据加载部分很昂贵,这将非常低效,因为两个脚本都会竞争数据访问。

python deep-learning keras tensorflow

5
推荐指数
1
解决办法
2465
查看次数