Mejores prácticas de implementación del controlador NNAPI

Esta página describe las mejores prácticas para implementar los controladores de la API de redes neuronales (NNAPI) para permitir una amplia adopción de la NNAPI por parte de los desarrolladores de aplicaciones.

Mantener cortos los tiempos de inicio

Si su controlador transforma los pesos de un modelo en el primer uso, asegúrese de que el controlador admita el almacenamiento en caché de compilación, lo que reduce el tiempo utilizado para la compilación cuando se inicia una aplicación. Esto es importante ya que las aplicaciones pueden evitar el uso de la aceleración de hardware si los tiempos de inicio son demasiado largos. Por ejemplo, algunas aplicaciones tienen más de 100 MB de peso y transformarlos cada vez que se inicia la aplicación es un desperdicio.

Reducción de la latencia mínima

Para garantizar que los modelos utilicen aceleración de hardware, es importante reducir la latencia mínima en los controladores. Muchas aplicaciones 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 toma uno o dos milisegundos, en lugar de usar hardware. aceleraciones. Tenga cuidado con la costosa sincronización de subprocesos.

Uso del grupo NN HAL SchedTune

A partir de Android 11 o superior, AOSP incluye un grupo NN HAL SchedTune dedicado que permite que los procesos NN HAL entre procesos usen grandes núcleos, similar a la implementación del mismo proceso dentro del cgroup predefinido top-app superior. El uso de este grupo SchedTune reduce la sobrecarga del controlador, especialmente para modelos pequeños.

Para usar el grupo SchedTune, agregue la siguiente línea al archivo init.rc del proceso NN HAL:

writepid /dev/stune/nnapi-hal/tasks