Esta página describe las mejores prácticas para implementar controladores de API de redes neuronales (NNAPI) para permitir una amplia adopción de NNAPI por parte de los desarrolladores de aplicaciones.
Mantenga los tiempos de inicio cortos
Si su controlador transforma los pesos de un modelo en el primer uso, asegúrese de que 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.
Reducir 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, lo que solo toma uno o dos milisegundos, en lugar de usar hardware. aceleraciones. Tenga cuidado con la costosa sincronización de subprocesos.
Utilice el grupo NN HAL SchedTune
Desde Android 11 o superior, AOSP incluye un grupo NN HAL SchedTune dedicado que permite que los procesos NN HAL entre procesos utilicen núcleos grandes, similar a la implementación del mismo proceso dentro del grupo de top-app
predefinido. El uso de este grupo SchedTune reduce la sobrecarga del conductor, especialmente en modelos pequeños.
Para utilizar el grupo SchedTune, agregue la siguiente línea al archivo init.rc
del proceso NN HAL:
writepid /dev/stune/nnapi-hal/tasks