【问题标题】:Running Multiple ONNX Model for Inferencing in Parallel in Python在 Python 中并行运行多个 ONNX 模型进行推理
【发布时间】:2021-05-23 02:00:17
【问题描述】:

有没有办法并行运行多个 ONNX 模型并使用多个可用内核?

目前,我已经训练了两个 ONNX 模型并想使用它们进行推断。我使用了 Python 中的线程,但这并没有真正使用多核。

之后我尝试了多处理,但这给了我以下错误:

不能腌制 onnxruntime.capi.onnxruntime_pybind11_state.SessionOptions 对象

如果有任何解决方法,请告诉我?

【问题讨论】:

标签: python multithreading parallel-processing multiprocessing onnxruntime


【解决方案1】:

第 1 步: 如果您在 GPU 上运行您正在运行的应用程序,则以下解决方案会有所帮助。

import multiprocessing

CUDA 运行时不支持 fork 启动方法,所以在多进程调用之前使用 spawn,如下所示:

multiprocessing.set_start_method('spawn')

更多理解请参考:https://github.com/microsoft/onnxruntime/issues/7846

第 2 步: 您需要在单个进程内存中传递您的引用对象,或者您也可以使用共享内存方法,如下所示:

 from multiprocessing.managers import BaseManager
 from PythonFile import ClassName

 BaseManager.register('LabelName', ClassName)
 manager = BaseManager()
 manager.start()
 obj = manager.ClassName()

现在您可以将这个“obj”作为参数传递给进程调用,然后可以在所有多个进程中访问。

【讨论】:

    猜你喜欢
    • 2018-12-01
    • 2022-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多