向 ONNX Runtime 添加新的执行提供程序
目录
创建执行提供程序
- 在 onnxruntime/core/providers 下创建一个文件夹
- 在 include/onnxruntime/core/providers 下创建一个文件夹,它应该与第一步的文件夹同名。
- 创建一个新类,它必须继承自 IExecutionProvider。源代码应放在 ‘onnxruntime/core/providers/[your_provider_name]’ 中
- 在 include/onnxruntime/core/providers/[your_provider_name] 下创建一个新的头文件。该文件应提供一个用于创建 OrtProviderFactoryInterface 的函数。您可以将 ‘include/onnxruntime/core/providers/cpu/cpu_provider_factory.h’ 作为模板。您无需提供用于创建 MemoryInfo 的函数。
- 在 ‘onnxruntime/core/providers/[your_provider_name]’ 下放置一个 symbols.txt 文件。该文件应包含将从您的 provider 导出的所有函数名称。通常,仅用于创建 provider 工厂的单个函数就足够了。
- 在 onnxruntime_providers.cmake 中添加您的 provider。将其构建为静态库。
- 在 cmake/onnxruntime.cmake 中的 ‘target_link_libraries’ 函数调用中添加一行。将您的 provider 放在那里。
示例
使用执行提供程序
- 通过使用您在 ‘symbols.txt’ 中导出的 c 函数,为该 provider 创建一个工厂
- 将 provider 工厂放入会话选项
- 从该会话选项创建会话
示例
OrtEnv* env;
OrtInitialize(ORT_LOGGING_LEVEL_WARNING, "test", &env)
OrtSessionOptions* session_option = OrtCreateSessionOptions();
OrtProviderFactoryInterface** factory;
OrtCreateCUDAExecutionProviderFactory(0, &factory);
OrtSessionOptionsAppendExecutionProvider(session_option, factory);
OrtReleaseObject(factory);
OrtCreateSession(env, model_path, session_option, &session);
测试执行提供程序
为了简化执行提供程序的测试,您可以为其添加到 onnx_test_runner
命令中添加一个新的 case,通过将其添加到 onnxruntime/test/onnx/main.cc
文件中来完成此操作,并遵循其他现有 provider 的模式。
一旦您完成了这些,您就可以像这样运行 onnx_test_runner
$ cd build/PLATFORM/CONFIGURATION
$ ./onnx_test_runner -e YOUR_BACKEND ./testdata/ort_minimal_e2e_test_data/
$ ./onnx_test_runner -e YOUR_BACKEND ./testdata/gemm_activation_fusion/