Код: Выделить всё
.soДвижок отлично работает на устройствах Pixel и Samsung. Однако на устройствах некоторых китайских производителей (в частности, Vivo V2419 под управлением Android 14) приложение аварийно завершает работу сразу после инициализации делегата NNAPI.
Сбой происходит не в моем коде, а внутри процесса Android Hardware Service (
Код: Выделить всё
android.hardware.neuralnetworks@aidl-service-armnn-gpu). Поскольку это ошибка сегментации на уровне драйвера (SIGSEGV), я не могу ее обнаружить с помощью стандартного блока try-catchСоответствующие журналы (LogCat):
Код: Выделить всё
tflite I Created TensorFlow Lite delegate for NNAPI.
tflite I Initialized TensorFlow Lite runtime.
tflite W NNAPI SL driver did not implement SL_ANeuralNetworksDiagnostic_registerCallbacks!
TypeManager I Failed to read /vendor/etc/nnapi_extensions_app_allowlist ; No app allowlisted for vendor extensions use.
tflite W NNAPI SL driver did not implement SL_ANeuralNetworksDiagnostic_registerCallbacks!
...
... After a few milliseconds
...
libc and...tworks@aidl-service-armnn-gpu A Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xb4000080bd37b900 in tid 20214 (android.hardwar), pid 20202 (android.hardwar)
Код: Выделить всё
TfLiteInterpreterOptionsSetNumThreadsВот код, который я использую для инициализации NNAPI:
Код: Выделить всё
options = TfLiteInterpreterOptionsCreate();
// types must be recognized
TfLiteNnapiDelegateOptions nnapiOpts = TfLiteNnapiDelegateOptionsDefault();
nnapiOpts.allow_fp16 = 1;
nnapiDelegate = TfLiteNnapiDelegateCreate(&nnapiOpts);
if (nnapiDelegate) {
TfLiteInterpreterOptionsAddDelegate(options, nnapiDelegate);
interpreter = TfLiteInterpreterCreate(model, options);
if (interpreter && TfLiteInterpreterAllocateTensors(interpreter) == kTfLiteOk) {
LOGI("Using NNAPI delegate");
valid = true;
return;
}
LOGE("NNAPI Failed");
if (interpreter) TfLiteInterpreterDelete(interpreter);
interpreter = nullptr;
TfLiteNnapiDelegateDelete(nnapiDelegate);
nnapiDelegate = nullptr;
Существует ли рекомендуемый способ безопасного использования NNAPI на Android без сбоя основного процесса? Известны ли конкретные флаги (например, отключение определенных ускорителей), которые уменьшают сбои в драйверах Armnn-GPU? Если у вас есть другая информация по этой проблеме, просветите.
Окружающая среда
- NDK: r26b / r29
- TensorFlow Lite: 2.16 (C API)
- Устройство (для воспроизведения сбоя): Vivo V2419 (графический процессор Mali-G57)
- ОС: Android 14
Подробнее здесь: https://stackoverflow.com/questions/798 ... ate-on-spe
Мобильная версия