添加新的执行提供者到 ONNX Runtime

目录

创建执行提供者

  1. 在 onnxruntime/core/providers 下创建一个文件夹
  2. 在 include/onnxruntime/core/providers 下创建一个文件夹,名称应与第一步相同。
  3. 创建一个新类,该类必须继承自 IExecutionProvider。源代码应放在 ‘onnxruntime/core/providers/[your_provider_name]’ 中。
  4. 在 include/onnxruntime/core/providers/[your_provider_name] 下创建一个新的头文件。该文件应提供一个用于创建 OrtProviderFactoryInterface 的函数。你可以使用 ‘include/onnxruntime/core/providers/cpu/cpu_provider_factory.h’ 作为模板。你不需要提供用于创建 MemoryInfo 的函数。
  5. 在 ‘onnxruntime/core/providers/[your_provider_name]’ 下放置一个 symbols.txt 文件。该文件应包含从你的提供者导出的所有函数名。通常,只需要一个用于创建提供者工厂的函数即可。
  6. 在 onnxruntime_providers.cmake 中添加你的提供者。将其构建为静态库。
  7. 在 cmake/onnxruntime.cmake 的 ‘target_link_libraries’ 函数调用中添加一行。将你的提供者放在那里。

示例

使用执行提供者

  1. 使用你在 ‘symbols.txt’ 中导出的 c 函数,为该提供者创建一个工厂
  2. 将提供者工厂放入会话选项中
  3. 从该会话选项创建会话

示例

  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 命令添加一个新的测试用例,方法是将其添加到 onnxruntime/test/onnx/main.cc 文件中,并遵循其他现有提供者的模式。

完成以上步骤后,你可以运行 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/