Bonnes pratiques d'implémentation du pilote NNAPI

Cette page décrit les bonnes pratiques à suivre pour implémenter les pilotes de l'API Neural Networks (NNAPI) afin de permettre aux développeurs d'applications d'adopter largement la NNAPI.

Réduire les temps de démarrage

Si votre pilote transforme les pondérations d'un modèle lors de la première utilisation, assurez-vous qu'il est compatible avec la mise en cache de la compilation, ce qui réduit le temps nécessaire à la compilation au démarrage d'une application. Ce point est important, car les applications peuvent éviter d'utiliser l'accélération matérielle si les temps de démarrage sont trop longs. Par exemple, certaines applications comportent plus de 100 Mo de pondérations, et les transformer à chaque lancement de l'application est inefficace.

Réduire la latence minimale

Pour s'assurer que les modèles utilisent l'accélération matérielle, il est important de réduire la latence minimale des pilotes. De nombreuses applications utilisent de petits modèles exécutés plusieurs fois. Si la latence minimale d'exécution d'une charge de travail est trop élevée, par exemple quelques millisecondes, les modèles peuvent exécuter la charge de travail sur le processeur, ce qui ne prend qu'une ou deux millisecondes, au lieu des accélérations matérielles. Faites attention à la synchronisation des threads coûteuse.

Utiliser le groupe SchedTune HAL du réseau de neurones

À partir d'Android 11 ou version ultérieure, AOSP inclut un groupe NN HAL dédié SchedTune, qui permet aux processus NN HAL inter-processus d'utiliser de gros cœurs, comme pour l'implémentation du même processus dans le cgroup top-app prédéfini. L'utilisation de ce groupe SchedTune réduit la surcharge du pilote, en particulier pour les petits modèles.

Pour utiliser le groupe SchedTune, ajoutez la ligne suivante au fichier init.rc du processus NN HAL:

writepid /dev/stune/nnapi-hal/tasks