欢迎访问宙启技术站
智能推送

在onnxruntime中设置SessionOptions()的推理模式有哪些选项

发布时间:2023-12-28 03:16:24

在onnxruntime中,可以使用SessionOptions()来设置推理模式,主要有以下几个选项:

1. 设置推理类型

可以使用SessionOptions().set_execution_mode()来设置推理类型。有三种可选的推理类型:

- ORT_SEQUENTIAL:默认类型,表示在主线程中按顺序执行每个操作。

- ORT_PARALLEL:表示在多个线程中同时执行操作。这可以通过设置环境变量OMP_NUM_THREADS来指定并行线程数。

- ORT_PARALLEL_LOOP:表示在多个线程中同时执行操作,并使用循环自动分配工作负载。

以下是设置为ORT_PARALLEL类型的示例:

#include <onnxruntime/core/providers/cpu/cpu_execution_provider.h>

ort::SessionOptions session_options;
session_options.SetExecutionMode(ort::ExecutionMode::ORT_PARALLEL);

2. 设置优化级别

可以使用SessionOptions().set_optimization_level()来设置模型优化级别。有三种可选的优化级别:

- ORT_DISABLE_ALL:禁用所有优化。

- ORT_ENABLE_BASIC:启用基本优化,如常数折叠和不需要运行时支持的基本优化。

- ORT_ENABLE_EXTENDED:启用扩展优化,如图剪枝、乘法融合以及内存优化等。

以下是设置为ORT_ENABLE_EXTENDED级别的示例:

ort::SessionOptions session_options;
session_options.SetOptimizationLevel(ort::TransformerLevel::ORT_ENABLE_EXTENDED);

3. 设置代理提供者

可以使用SessionOptions().add_delegate_provider()来添加代理提供者。代理提供者是扩展onnxruntime功能的一种方式,可以通过添加第三方库来提供新的算子和优化。常见的代理提供者有OpenVINO、TensorRT等。

以下是添加OpenVINO代理提供者的示例:

#include <onnxruntime/core/providers/openvino/openvino_provider_factory.h>

ort::SessionOptions session_options;
session_options.AddDelegateProvider(onnxruntime::GetOpenVINOExecutionProviderFactory().CreateProvider());

4. 设置日志输出级别

可以使用SessionOptions().set_log_verbosity_level()来设置日志输出级别。有五种可选的输出级别,从0到4依次增加详细程度。

以下是设置为最低级别(0)的示例:

ort::SessionOptions session_options;
session_options.SetLogVerbosityLevel(0);

5. 设置自定义的执行提供者

还可以使用SessionOptions().add_execution_provider()来添加自定义的执行提供者。执行提供者可以是一个属于onnxruntime的内置算子集,也可以是自定义的前端工具。

以下是添加CPU执行提供者的示例:

#include <onnxruntime/core/providers/cpu/cpu_execution_provider.h>

ort::SessionOptions session_options;
session_options.AddExecutionProvider(std::make_unique<onnxruntime::CPUExecutionProvider>(onnxruntime::CPUExecutionProviderInfo()));

上述是onnxruntime中设置SessionOptions()的推理模式的一些选项和使用示例,根据需要选择相应的设置,以满足性能要求和定制需求。