Einen neuen Execution Provider zu ONNX Runtime hinzufügen
Inhalt
- Erstellen Sie den Execution Provider
- Verwenden Sie den Execution Provider
- Testen Sie den Execution Provider
Erstellen Sie den Execution Provider
- Erstellen Sie einen Ordner unter onnxruntime/core/providers
- Erstellen Sie einen Ordner unter include/onnxruntime/core/providers, der denselben Namen wie im ersten Schritt haben sollte.
- Erstellen Sie eine neue Klasse, die von IExecutionProvider erben muss. Der Quellcode sollte in 'onnxruntime/core/providers/[ihr_provider_name]' platziert werden.
- 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.
- 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.
- Fügen Sie Ihren Provider in onnxruntime_providers.cmake hinzu. Bauen Sie ihn als statische Bibliothek.
- 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
- Erstellen Sie eine Factory für diesen Provider, indem Sie die C-Funktion verwenden, die Sie in 'symbols.txt' exportiert haben.
- Fügen Sie die Provider-Factory zu den Session-Optionen hinzu.
- 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/