【问题标题】:Keras/TensorFlow error while running as Pyro4 Server作为 Pyro4 服务器运行时出现 Keras/TensorFlow 错误
【发布时间】:2018-03-07 08:30:53
【问题描述】:

我有一个使用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.__send(self.__name, args, kwargs)
_pyroInvoke
中的文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/Pyro4/core.py”,第 472 行 raise data # 如果您在回溯中看到这一点,您可能也应该检查远程回溯
ValueError:Fetch 参数不能解释为张量。 (操作名称:“lstm_1/init”
操作:“NoOp”
输入:“^lstm_1/内核/分配”
输入:“^lstm_1/recurrent_kernel/Assign”
输入:“^lstm_1/bias/Assign”
不是该图的元素。)

谁能为此提出一个可能的解决方案?

【问题讨论】:

  • 尽量先定义模型,再初始化变量。
  • 您是否按照错误消息中的注释查看了远程 Pyro 回溯?

标签: python tensorflow keras lstm pyro4


【解决方案1】:

我不熟悉Tensorflow,但实际错误是这样的:

ValueError: Fetch 参数不能解释为张量。

简化您的代码并使其首先正确独立运行,然后才将其包装在 Pyro 服务中。

【讨论】:

    【解决方案2】:

    嘿,我使用了那个代码,这对我很有用。

    $cat greeting-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
    

    $ cat greeting-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
    

    $ python greeting-server.py &
    [1] 2965
    准备好。对象 uri = PYRO:obj_a751da78da6a4feca49f18ab664cc366@loc​​alhost:53025

    $python greeting-client.py
    问候对象的 Pyro uri 是什么?

    PYRO:obj_a751da78da6a4feca49f18ab664cc366@loc​​alhost:53025


    你叫什么名字?

    Plm

    2018-03-06 16:20:32.271647: W tensorflow/core/platform/cpu_feature_guard.cc:45] TensorFlow 库未编译为使用 SSE4.1 指令,但这些在您的计算机上可用并且可以加速 CPU 计算。 2018-03-06 16:20:32.271673: W tensorflow/core/platform/cpu_feature_guard.cc:45] TensorFlow 库未编译为使用 SSE4.2 指令,但这些可在您的机器上使用并且可以加快 CPU计算。 2018-03-06 16:20:32.271678: W tensorflow/core/platform/cpu_feature_guard.cc:45] TensorFlow 库未编译为使用 AVX 指令,但这些可在您的机器上使用,并且可以加快 CPU 计算速度。 2018-03-06 16:20:32.271682: W tensorflow/core/platform/cpu_feature_guard.cc:45] TensorFlow 库未编译为使用 AVX2 指令,但这些可在您的机器上使用,并且可以加快 CPU 计算速度。 2018-03-06 16:20:32.271686: W tensorflow/core/platform/cpu_feature_guard.cc:45] TensorFlow 库未编译为使用 FMA 指令,但这些可在您的机器上使用,并且可以加快 CPU 计算速度。
    您好,Plm。这是您的问候语:
    b'你好,TensorFlow!'

    如您所见,如果再次连接到相同的 url,那么它可以在没有 TF 初始化时间的情况下工作,因为它已经在第一次调用期间完成。显然,只要您调用相同的 Pyro url,就可以在 2 个单独的调用中保持持久性。

    $ python greeting-client.py
    问候对象的 Pyro uri 是什么?

    PYRO:obj_a751da78da6a4feca49f18ab664cc366@loc​​alhost:53025


    你叫什么名字?

    Plm2


    你好,Plm2。这是您的问候语:
    b'你好,TensorFlow!'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 2013-09-18
      • 2017-05-17
      相关资源
      最近更新 更多