Prácticas recomendadas para la implementación del controlador de NNAPI

En esta página, se describen las prácticas recomendadas para implementar controladores de la API de Neural Networks (NNAPI) y permitir que los desarrolladores de apps adopten ampliamente la NNAPI.

Mantén los tiempos de inicio cortos

Si tu controlador transforma los pesos de un modelo en el primer uso, asegúrate de que admita el almacenamiento en caché de la 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 el uso de la aceleración por hardware si los tiempos de inicio son demasiado largos. Por ejemplo, algunas apps tienen más de 100 MB de pesos, y transformar estos cada vez que se inicia la app es un desperdicio.

Reduce la latencia mínima

Para garantizar que los modelos usen la aceleración por 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 podrían ejecutar la carga de trabajo en la CPU, lo que solo lleva uno o dos milisegundos, en lugar de usar aceleraciones de hardware. Ten cuidado con la sincronización de subprocesos costosa.

Cómo usar el grupo SchedTune de HAL de NN

A partir de Android 11, el AOSP incluye un grupo SchedTune de HAL de NN dedicado 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. Usar 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 del HAL de NN:

writepid /dev/stune/nnapi-hal/tasks