Skip to content

enable xnnpack in default_full_aar_build_settings#12682

Merged
wejoncy merged 1 commit intomainfrom
jicwen/android-default_full_aar_build_settings
Aug 25, 2022
Merged

enable xnnpack in default_full_aar_build_settings#12682
wejoncy merged 1 commit intomainfrom
jicwen/android-default_full_aar_build_settings

Conversation

@wejoncy
Copy link
Copy Markdown
Contributor

@wejoncy wejoncy commented Aug 23, 2022

Description: Describe your changes.

Motivation and Context

  • Why is this change required? What problem does it solve?
  • If it fixes an open issue, please link to the issue here.

@wejoncy wejoncy merged commit eba4f77 into main Aug 25, 2022
@wejoncy wejoncy deleted the jicwen/android-default_full_aar_build_settings branch August 25, 2022 02:41
@edgchen1
Copy link
Copy Markdown
Contributor

Hi @Craigacp,
After enabling the XNNPACK EP in the Android package we started seeing these failures from some Android package Java tests:

ai.onnxruntime.example.javavalidator.SimpleTest > runSigmoidModelTest[ort_android(AVD) - 11] FAILED 
	java.lang.ExceptionInInitializerError
	at ai.onnxruntime.OrtEnvironment.getEnvironment(OrtEnvironment.java:81)

stack trace:
java.lang.ExceptionInInitializerError
at ai.onnxruntime.OrtEnvironment.getEnvironment(OrtEnvironment.java:81)
at ai.onnxruntime.example.javavalidator.SimpleTest.runSigmoidModelTestImpl(SimpleTest.kt:61)
at ai.onnxruntime.example.javavalidator.SimpleTest.runSigmoidModelTestImpl$default(SimpleTest.kt:57)
at ai.onnxruntime.example.javavalidator.SimpleTest.runSigmoidModelTest(SimpleTest.kt:41)
... 32 trimmed
Caused by: java.lang.IllegalArgumentException: Unknown execution provider - XnnpackExecutionProvider
at ai.onnxruntime.OrtProvider.mapFromName(OrtProvider.java:60)
at ai.onnxruntime.OnnxRuntime.initialiseProviders(OnnxRuntime.java:415)
at ai.onnxruntime.OnnxRuntime.init(OnnxRuntime.java:142)
at ai.onnxruntime.OrtEnvironment.<clinit>(OrtEnvironment.java:29)
... 37 more

Noticed this comment in the code about an unrecognized provider:

* <p>Throws IllegalArgumentException if a provider isn't recognised (note this exception should
* only happen during development of ONNX Runtime, if it happens at any other point, file an issue
* on Github).

What do we need to do to add support for a new EP in the Java API?

@Craigacp
Copy link
Copy Markdown
Contributor

Craigacp commented Aug 30, 2022

At minimum you need to add an entry to this enum

CORE_ML("CoreMLExecutionProvider");
then add whatever is necessary to turn it on in the session options.

@skottmckay
Copy link
Copy Markdown
Contributor

FWIW xnnpack uses the new generic 'add ep' interface - SessionOptionsAppendExecutionProvider.

ORT_API2_STATUS(SessionOptionsAppendExecutionProvider, _In_ OrtSessionOptions* options,
_In_ const char* provider_name,
_In_reads_(num_keys) const char* const* provider_options_keys,
_In_reads_(num_keys) const char* const* provider_options_values,
_In_ size_t num_keys);

Can probably copy logic from existing 'add ep' implmentations, with the handling of the config key/value strings when calling the C API being similar to

JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_addConfigEntry
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong optionsHandle, jstring configKey, jstring configValue) {
(void) jobj; // Required JNI parameters not needed by functions which don't need to access their host object.
const OrtApi* api = (const OrtApi*)apiHandle;
OrtSessionOptions* options = (OrtSessionOptions*) optionsHandle;
const char* configKeyStr = (*jniEnv)->GetStringUTFChars(jniEnv, configKey, NULL);
const char* configValueStr = (*jniEnv)->GetStringUTFChars(jniEnv, configValue, NULL);
checkOrtStatus(jniEnv,api,api->AddSessionConfigEntry(options, configKeyStr, configValueStr));
(*jniEnv)->ReleaseStringUTFChars(jniEnv, configKey, configKeyStr);
(*jniEnv)->ReleaseStringUTFChars(jniEnv, configValue, configValueStr);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants