Tensorflow: передача сеанса в многопроцессорный Python

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

Дело в том, что я использую многопроцессные очереди Python и по какой-то неизвестной причине не могу передать сеанс тензорного потока от моего родительского процесса к детям. Используя некоторые продвинутые методы отладки (например, печатая что-то каждые несколько строк), я заметил, что python просто бездействует внутри строки, где я использую сеанс, он не выдает сообщение об ошибке.

Мой код выглядит примерно так:

def subprocess(some_image, sess, q):
    with sess.as_default():
        # ... use sess and q ...
        print "All good and well" #This is printed
        some_image.eval() #Nothing happens here in console
        print "Still all good and well" #This is not printed

if __name__ == '__main__':
    # ... some initial operations ...
    some_image = read_some_image()

    sess = tf.Session()

    q = Queue()
    q.put(something)
    p = Process(target=subprocess, args=(some_image, sess, q))
    p.start()
    p.join()

В чем может быть проблема? Большое спасибо!

2 ответа

Решение

Я не думаю, что вы можете поделиться "государством", как в tf.Session() между такими процессами. Я думаю, что для каждого процесса нужна своя сессия.

Все, что вам нужно, это распределенный тензор потока.

  1. Создайте график и сессию в родительском процессе. Поместите некоторые операторы (особенно переменные) в рабочие при построении графа.
  2. Создавайте дочерние процессы и запускайте их
Другие вопросы по тегам