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()
между такими процессами. Я думаю, что для каждого процесса нужна своя сессия.
Все, что вам нужно, это распределенный тензор потока.
- Создайте график и сессию в родительском процессе. Поместите некоторые операторы (особенно переменные) в рабочие при построении графа.
- Создавайте дочерние процессы и запускайте их