使用Tensorflow通过多进程进行预测时出现问题

时间:2019-09-19 11:16:52

标签: tensorflow multiprocessing

我有4个(或更多)模型(结构相同,但训练数据却不同)。现在,我想让他们做出一个预测。我想预加载模型,然后通过多进程并行预测一条输入消息(一次一条消息)。但是,程序始终在“ session.run”步骤中停止。我不知道为什么。

我尝试在每个进程中将所有参数传递给函数,如下面的代码所示。我还尝试使用Queue对象并将所有数据(模型对象除外)放入队列中。我还尝试将进程数设置为1。这没有区别。

with Manager() as manager:
    first_level_test_features=manager.list()
    procs =[]
    for id in range(4):
        p = Process(target=predict, args=(id, (message, models, configs, vocabs, emoji_dict,first_level_test_features)))
        procs.append(p)
        p.start()

    for p in procs:
        p.join()

我没有收到任何错误消息,因为它只是卡在那儿。我希望程序可以启动多个进程,并且每个进程都使用传递给它的模型进行预测。

1 个答案:

答案 0 :(得分:0)

我不确定不同进程之间的会话共享如何工作,这可能就是您的问题所在。考虑到TensorFlow的工作方式,我建议将整体调用实现为图形操作,以便可以通过单个session.run调用运行,并且TF尽可能地处理计算的并行化。

在实践中,如果您具有表示模型预测的符号张量,则可以使用TF运算来聚合它们(tf.concattf.reduce_meantf.add_n ...设计),最后得到代表整体预测的单个符号张量。

我希望这会有所帮助;如果没有,请提供更多有关您的设置的详细信息,特别是模型的形式。