Ошибка Keras/TensorFlow при работе в качестве сервера Pyro4
У меня есть клиент-серверный дизайн с использованием Pyro4, в котором код клиента выглядит следующим образом:
import Pyro4
uri = 'PYRO:PYRO_SERVER@123.123.123.123:10000
test_1 = Pyro4.Proxy(uri)
test_1.run_model()
Код на стороне сервера выглядит следующим образом:
import Pyro4
import socket
from keras.models import Sequential
from keras.layers import LSTM
import tensorflow as tf
@Pyro4.expose
class PyroServer(object):
def run_model(self):
session = tf.Session()
session.run(tf.global_variables_initializer())
session.run(tf.local_variables_initializer())
session.run(tf.tables_initializer())
session.run(tf.variables_initializer([]))
tf.reset_default_graph()
model = Sequential()
model.add(LSTM(25, input_shape=(5, 10)))
host_name = socket.gethostbyname(socket.getfqdn())
daemon = Pyro4.Daemon(host = host_name,port = 10000)
uri = daemon.register(PyroServer,objectId = 'PYRO_SERVER')
daemon.requestLoop()
После запуска сервера первый вызов клиента в метод run_model() работает нормально. Для второго и всех последующих вызовов отображается следующее сообщение об ошибке:
Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/Pyro4/core.py", строка 187, в вызове
вернуть себя.__ отправить (self.__ имя, аргументы, kwargs)
Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/Pyro4/core.py", строка 472, в _pyroInvoke
поднять данные # если вы видите это в вашей трассировке, вам, вероятно, следует также проверить удаленную трассировку
ValueError: Аргумент Fetch нельзя интерпретировать как Tensor. (Название операции: "lstm_1 / init"
op: "NoOp"
вход: "^lstm_1/kernel/Assign"
вход: "^lstm_1/recurrent_kernel/Assign"
ввод: "^ lstm_1 / смещение / Назначить"
не является элементом этого графа.)
Кто-нибудь может предложить возможное решение для этого?
2 ответа
Я не знаком с Tensorflow, но фактическая ошибка заключается в следующем:
ValueError: Аргумент Fetch нельзя интерпретировать как Tensor.
Упростите свой код и сделайте его сначала корректно автономным, а затем оберните его в сервис Pyro.
Эй, я использую этот код, и он прекрасно работает для меня.
$ catreeting-server.py
import Pyro4
import tensorflow as tf
@Pyro4.expose
class GreetingMaker(object):
def get_fortune(self, name):
var = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
return "Hello, {0}. Here is your greeting message:\n" \
"{1}".format(name,sess.run(var))
daemon = Pyro4.Daemon() # make a Pyro daemon
uri = daemon.register(GreetingMaker) # register the greeting maker as a Pyro object
print("Ready. Object uri =", uri) # print the uri so we can use it in the client later
daemon.requestLoop() # start the event loop of the server to wait for calls
$ catreeting-client.py
import Pyro4
uri = input("What is the Pyro uri of the greeting object? ").strip()
name = input("What is your name? ").strip()
greeting_maker = Pyro4.Proxy(uri) # get a Pyro proxy to the greeting object
print(greeting_maker.get_fortune(name)) # call method normally
$ pythonreeting-server.py &
[1] 2965
Готовы. Object uri = PYRO: obj_a751da78da6a4feca49f18ab664cc366 @ localhost:53025
$ pythonreeting-client.py
Что такое пироури объекта приветствия?
PYRO: obj_a751da78da6a4feca49f18ab664cc366 @ локальный:53025
Как тебя зовут?
Plm
2018-03-06 16: 20: 32.271647: W tenorflow/core/platform/cpu_feature_guard.cc:45] Библиотека TensorFlow не скомпилирована для использования инструкций SSE4.1, но они доступны на вашем компьютере и могут ускорить ЦП вычисления.
2018-03-06 16:20:32.271673: W tenorflow/core/platform/cpu_feature_guard.cc:45] Библиотека TensorFlow не скомпилирована для использования инструкций SSE4.2, но они доступны на вашем компьютере и могут ускорить ЦП вычисления.
2018-03-06 16:20:32.271678: W tenorflow/core/platform/cpu_feature_guard.cc:45] Библиотека TensorFlow не скомпилирована для использования инструкций AVX, но они доступны на вашем компьютере и могут ускорить вычисления ЦП.
2018-03-06 16:20:32.271682: W tenorflow/core/platform/cpu_feature_guard.cc:45] Библиотека TensorFlow не была скомпилирована для использования инструкций AVX2, но они доступны на вашем компьютере и могут ускорить вычисления ЦП.
2018-03-06 16:20:32.271686: W tenorflow/core/platform/cpu_feature_guard.cc:45] Библиотека TensorFlow не скомпилирована для использования инструкций FMA, но они доступны на вашем компьютере и могут ускорить вычисления ЦП.
Здравствуйте, Plm. Вот ваше приветственное сообщение:
Привет, Тензорный поток!
И, как вы можете видеть, если подключиться к тому же URL снова, то он работает без времени инициализации TF, так как это было сделано уже во время первого вызова. Затем сохраняется стойкость при 2 отдельных вызовах, если, конечно, вы вызываете один и тот же Pyro url.
$ pythonreeting-client.py
Что такое пироури объекта приветствия?
PYRO: obj_a751da78da6a4feca49f18ab664cc366 @ локальный:53025
Как тебя зовут?
Plm2
Здравствуйте, Plm2. Вот ваше приветственное сообщение:
Привет, Тензорный поток!