4

Я недавно работал над проектом, который использует нейронную сеть для управления виртуальным роботом. Я использовал shadoworflow, чтобы закодировать его, и он работает плавно. До сих пор я использовал последовательные симуляции для оценки того, насколько хороша нейронная сеть, однако я хочу запустить несколько симуляций параллельно, чтобы сократить время, необходимое для получения данных.Тензор и многопроцессорность: сеансы передачи

Для этого я импортирую пакет multiprocessing python. Первоначально я передавал переменную sess (sess=tf.Session()) функции, которая запускала симуляцию. Однако, как только я доберусь до любого оператора, который использует эту переменную sess, процесс завершается без предупреждения. После поиска вокруг немного я нашел эти два сообщения: Tensorflow: Passing a session to a python multiprocess и Running multiple tensorflow sessions concurrently

В то время как они сильно связаны, я не мог понять, как заставить его работать. Я попытался создать сеанс для каждого отдельного процесса и без особых усилий присвоить веса нейронной сети своим обучаемым параметрам. Я также попытался сохранить сеанс в файл, а затем загрузить его в процессе, но не повезло.

Кто-нибудь смог передать сеанс (или клоны сеансов) нескольким процессам?

Спасибо.

+0

Я подозреваю, что вы не можете передавать клоны сеансов между процессами, потому что в адресном пространстве C есть состояние, которое Python не умеет копировать. Но создание новых сессий в каждом новом процессе должно работать. Я не использовал многопроцессорность, но у меня часто есть пара процессов, открытых параллельно, которые сохраняют свои собственные сеансы TensorFlow. –

+0

Вторая ссылка, которую я предоставил, выполняет несколько процессов параллельно, но проблема в том, что мне нужна нейронная сеть, чтобы она была одинаковой для ВСЕ процессы. – MrRed

+0

Возможно, вы сможете обходить его, используя распределенный TensorFlow, то есть иметь локального рабочего и ps и создавать несколько сеансов параллельно, например 'tf.Session (« grpc: // localhost: 2222 »)' https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/how_tos/distributed/index.md –

ответ

1

Я использую keras в качестве обертки с тензорным потоком в качестве поддержки, но должен применяться тот же общий принцип.

Если вы пытаетесь что-то вроде этого:

import keras 
from functools import partial 
from multiprocessing import Pool 

def ModelFunc(i,SomeData): 
    YourModel = Here 
    return(ModelScore) 

pool = Pool(processes = 4) 
for i,Score in enumerate(pool.imap(partial(ModelFunc,SomeData),range(4))): 
    print(Score) 

Он потерпит неудачу. Однако, если вы попробуете что-то вроде этого:

from functools import partial 
from multiprocessing import Pool 

def ModelFunc(i,SomeData): 
    import keras 
    YourModel = Here 
    return(ModelScore) 

pool = Pool(processes = 4) 
for i,Score in enumerate(pool.imap(partial(ModelFunc,SomeData),range(4))): 
    print(Score) 

Должно работать. Попробуйте называть тензорный поток отдельно для каждого процесса.

+0

это просто спас мой день. Благодаря! –