Einen neuen Execution Provider zu ONNX Runtime hinzufügen

Inhalt

Erstellen Sie den Execution Provider

  1. Erstellen Sie einen Ordner unter onnxruntime/core/providers
  2. Erstellen Sie einen Ordner unter include/onnxruntime/core/providers, der denselben Namen wie im ersten Schritt haben sollte.
  3. Erstellen Sie eine neue Klasse, die von IExecutionProvider erben muss. Der Quellcode sollte in 'onnxruntime/core/providers/[ihr_provider_name]' platziert werden.
  4. Erstellen Sie eine neue Header-Datei unter include/onnxruntime/core/providers/[ihr_provider_name]. Die Datei sollte eine Funktion zum Erstellen einer OrtProviderFactoryInterface bereitstellen. Sie können 'include/onnxruntime/core/providers/cpu/cpu_provider_factory.h' als Vorlage verwenden. Sie müssen keine Funktion zum Erstellen von MemoryInfo bereitstellen.
  5. Legen Sie eine symbols.txt unter 'onnxruntime/core/providers/[ihr_provider_name]' ab. Die Datei sollte alle Funktionsnamen enthalten, die von Ihrem Provider exportiert werden. Normalerweise reicht eine einzige Funktion zum Erstellen einer Provider-Factory aus.
  6. Fügen Sie Ihren Provider in onnxruntime_providers.cmake hinzu. Bauen Sie ihn als statische Bibliothek.
  7. Fügen Sie eine Zeile in cmake/onnxruntime.cmake, im Aufruf der Funktion 'target_link_libraries' hinzu. Fügen Sie dort Ihren Provider ein.

Beispiele

Verwenden Sie den Execution Provider

  1. Erstellen Sie eine Factory für diesen Provider, indem Sie die C-Funktion verwenden, die Sie in 'symbols.txt' exportiert haben.
  2. Fügen Sie die Provider-Factory zu den Session-Optionen hinzu.
  3. Erstellen Sie eine Session aus diesen Session-Optionen.

Beispiel

  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);

Testen Sie den Execution Provider

Um das Testen Ihres Execution Providers zu erleichtern, können Sie ihm einen neuen Fall für den Befehl onnx_test_runner hinzufügen. Tun Sie dies, indem Sie ihn zur Datei onnxruntime/test/onnx/main.cc hinzufügen, dem Muster für andere bestehende Provider folgend.

Sobald Sie dies eingerichtet haben, können Sie den onnx_test_runner wie folgt ausführen:

$ 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/