如何解决当与pyzmq一起使用时,Tensorflow推理挂起
我正在尝试使用pyzmq将Tensorflow模型所做的预测传递给另一个进程。
我正在调用像self.model.predict(X)
这样简单的代码,其中self.model是Tensorflow模型。
当我单独呼叫此行时,它工作正常。但是,当我使用客户机/服务器体系结构时,客户机和服务器都位于单独的进程中,并连接到与以下相同的套接字端口:
客户:
context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect(f'tcp://localhost:1234')
...
socket.send_pyobj(X)
...
服务器:
self.model = tf.keras.models.load_model(...)
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind(f'tcp://*:1234')
while True:
X = socket.recv_pyobj()
...
self.model.predict(X) # <----- HANGS HERE
然后此行挂起。
我注意到的另一件事是,如果在挂起进程时杀死进程,则该端口仍在使用中。
我试图弄清楚如何调试它,因为我似乎无法弄清楚发生了什么。
解决方法
问题是tf.keras.models.load_model(...)
和socket.bind(f'tcp://*:1234')
的顺序
需要成为
-
socket.bind(f'tcp://*:1234')
-
tf.keras.models.load_model(...)
而不是其他方式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。