Вы должны создать модель в каждом из процессов, установить равные веса и оставить там модели, не закрывая процессы. Вам нужно будет контролировать поток поездов между ними, заставляя процессы ждать основной поток и наоборот. Это, вероятно, слишком сложно, и есть другие варианты.
Вам не нужны процессы для передачи параллельных пакетов, вы можете создать параллельную модель:
mainModel = ....
inputs = []
outputs = []
for i in range(num_workers):
inp = Input(input_shape)
out = mainModel(inp)
inputs.append(inp)
outputs.append(out)
parallelModel = Model(inputs, outputs)
Train с num_workers
различные группы данных:
parallelModel.fit(
[xTrain1, xTrain2,...],
[yTrain1, yTrain2,...]
)
Если вы используете активное выполнение, даже без параллельной модели или других процессов, вы можете передавать num_workers
пакетов, вычислять их градиенты, суммировать их градиенты и, наконец, применять градиенты.
Если вы действительно хотите использовать параллельную обработку без создания предложенной параллельной модели, вам, вероятно, следует использовать multiprocessing.dummy
и оставить одну единственную модель в главном потоке, используя рабочих только для передачи данных и получения градиентов.
Теперь, еще проще, использование размера пакета, который в num_workers
раз превышает размер каждой из ваших параллельных партий, приведет к тому же самому.