A partir del 27 de marzo de 2025, te recomendamos que uses android-latest-release
en lugar de aosp-main
para compilar y contribuir a AOSP. Para obtener más información, consulta Cambios en AOSP.
Prácticas recomendadas para la implementación del controlador de NNAPI
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
En esta página, se describen las prácticas recomendadas para implementar controladores de la API de redes neuronales (NNAPI) para permitir que los desarrolladores de apps adopten ampliamente la NNAPI.
Mantén los tiempos de inicio breves
Si tu controlador transforma los pesos de un modelo en el primer uso, asegúrate de que admita el almacenamiento en caché de compilación, lo que reduce el tiempo que se usa para la compilación cuando se inicia una app. Esto es importante, ya que las apps podrían evitar usar la aceleración de hardware si los tiempos de inicio son demasiado largos. Por ejemplo, algunas apps tienen más de 100 MB de pesos, y transformarlos cada vez que se inicia la app es un desperdicio.
Reduce la latencia mínima
Para garantizar que los modelos usen la aceleración de hardware, es importante reducir la latencia mínima en los controladores. Muchas apps usan modelos pequeños que se ejecutan varias veces y, si la latencia mínima para ejecutar una carga de trabajo es demasiado alta, como unos pocos milisegundos, los modelos pueden ejecutar la carga de trabajo en la CPU, que solo tarda uno o dos milisegundos, en lugar de usar aceleraciones de hardware. Ten cuidado con la sincronización de subprocesos costosa.
Usa el grupo NN HAL SchedTune
A partir de Android 11 o versiones posteriores, el AOSP incluye un grupo dedicado de SchedTune de HAL de NN que permite que los procesos de HAL de NN entre procesos usen núcleos grandes, de manera similar a la implementación del mismo proceso dentro del cgroup top-app
predefinido. El uso de este grupo de SchedTune reduce la sobrecarga del controlador, en especial para los modelos pequeños.
Para usar el grupo SchedTune, agrega la siguiente línea al archivo init.rc
del proceso de HAL de NN:
writepid /dev/stune/nnapi-hal/tasks
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2025-07-27 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-07-27 (UTC)"],[],[],null,["# NNAPI driver implementation best practices\n\n| **Deprecated:** Starting in Android 15, the\n| [NNAPI (NDK API)](https://developer.android.com/ndk/guides/neuralnetworks) is deprecated. The Neural Networks HAL interface\n| continues to be supported.\n|\n| For more information, see the\n| [NNAPI Migration Guide](https://developer.android.com/ndk/guides/neuralnetworks/migration-guide).\n\nThis page describes best practices for implementing Neural Networks API (NNAPI)\ndrivers to allow for broad adoption of the NNAPI by app developers.\n\nKeep startup times short\n------------------------\n\nIf your driver transforms the weights of a model on first use, make sure the\ndriver supports compilation caching, which reduces the time used for compilation\nwhen an app starts. This is important as apps might avoid using hardware\nacceleration if start-up times are too long. For example, some apps have\nmore than 100 MB of weights and transforming these each time the app\nlaunches is wasteful.\n\nReduce minimal latency\n----------------------\n\nTo ensure that models use hardware acceleration, it's important to reduce the\nminimal latency in drivers. Many apps use small models that are executed\nmultiple times and if the minimal latency to execute a workload is too high,\nsuch as a few milliseconds, models might run the workload on the CPU, which only\ntakes one or two milliseconds, instead of\nusing hardware accelerations. Be careful of costly thread synchronization.\n\nUse the NN HAL SchedTune group\n------------------------------\n\nFrom Android 11 or higher, AOSP includes a dedicated\nNN HAL\n[SchedTune](https://android.googlesource.com/kernel/msm/+/android-msm-marlin-3.18-nougat-dr1/Documentation/scheduler/sched-tune.txt)\ngroup that allows interprocess NN HAL processes to use big\ncores, similar to same-process implementation within the predefined\n`top-app` [cgroup](/docs/core/perf/cgroups). Using this\nSchedTune group reduces driver overhead, especially for small models.\n\nTo use the SchedTune group, add the following line to the `init.rc` file of\nthe NN HAL process: \n\n writepid /dev/stune/nnapi-hal/tasks"]]