Meilleures pratiques de mise en œuvre du pilote NNAPI

Cette page décrit les meilleures pratiques pour la mise en œuvre des pilotes de l'API Neural Networks (NNAPI) afin de permettre une large adoption de la NNAPI par les développeurs d'applications.

Gardez les temps de démarrage courts

Si votre pilote transforme les poids d'un modèle lors de la première utilisation, assurez-vous qu'il prend en charge la mise en cache de compilation, ce qui réduit le temps nécessaire à la compilation au démarrage d'une application. Ceci 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 poids et les transformer à chaque lancement de l'application est un gaspillage.

Réduisez la latence minimale

Pour garantir 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 qui sont exécutés plusieurs fois et 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 du matériel. accélérations. Faites attention à la synchronisation coûteuse des threads.

Utiliser le groupe NN HAL SchedTune

À partir d'Android 11 ou version ultérieure, AOSP inclut un groupe NN HAL SchedTune dédié qui permet aux processus NN HAL interprocessus d'utiliser de gros cœurs, similaire à l'implémentation du même processus au sein du groupe de contrôle prédéfini top-app . 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