Cette page décrit les bonnes pratiques à suivre pour implémenter des pilotes d'API Neural Networks (NNAPI) afin de permettre une large adoption de l'API NN par les développeurs d'applications.
Réduisez les temps de démarrage
Si votre pilote transforme les pondérations d'un modèle lors de sa première utilisation, assurez-vous qu'il prend en charge la mise en cache de la compilation, ce qui réduit le temps utilisé pour la compilation au démarrage d'une application. Cela 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 ont plus de 100 Mo de pondérations, et les transformer à chaque lancement de l'application est un gaspillage.
Réduisez la latence minimale
Pour vous assurer que les modèles utilisent l'accélération matérielle, il est important de réduire la latence minimale dans les pilotes. De nombreuses applications utilisent de petits modèles qui sont exécutés plusieurs fois. Si la latence minimale pour exécuter 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 d'utiliser des accélérations matérielles. Faites attention à la synchronisation coûteuse des threads.
Utilisez le groupe SchedTune NN HAL
À partir d'Android 11, AOSP inclut un groupe
NN HAL
SchedTune
dédié qui permet aux processus NN HAL interprocessus d'utiliser des cœurs
volumineux, comme l'implémentation dans le même processus au sein du
top-app cgrouppré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