【问题标题】:How to multi-thread in ONNX Runtime?如何在 ONNX Runtime 中实现多线程?
【发布时间】:2020-04-17 21:49:28
【问题描述】:

使用 ONNX 运行时在深度学习模型上运行推理。假设我有 4 个不同的模型,每个模型都有自己的输入图像,我可以在 4 个线程中并行运行它们吗?会有一个“环境”然后是 4 个会话(使用相同的环境)吗?

【问题讨论】:

  • 另外,4 个会话是否会共享只读状态(权重、偏差等)?
  • 好吧,就我而言,我实际上会有 4 个独立的模型(每个模型都有自己的权重)。但是,是的,我们需要一些关于 ORT 如何与多线程一起工作(或不工作)的文档!

标签: onnxruntime


【解决方案1】:

是的 - 一个环境和 4 个单独的会话就是您的方式。

权重和偏差的“只读状态”特定于模型。

会话与模型具有 1:1 的关系,并且这些内容不会在会话之间共享,因为每个模型只需要一个会话,因为您可以使用不同的输入大小同时调用 Run(假设模型支持动态批量/输入大小)。

关于线程,默认是每会话线程池,但也可以跨会话共享全局线程池。

根据所使用的 API 不同,您的操作方式会有所不同:

  • 对于 C API,请使用 CreateEnvWithGlobalThreadPools
  • 对于 C++ API,在构造 Ort::Env 时提供 OrtThreadingOptions

【讨论】:

  • OrtThreadingOptions struct 没有被onnxruntime cxx api 公开
  • OrtThreadingOptions 可以使用 C-API CreateThreadingOptions 函数创建。 C++ API 只是 C-API 的一个便利包装器。创建环境后,使用ReleaseThreadingOptions 释放它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多