À partir du 27 mars 2025, nous vous recommandons d'utiliser android-latest-release
au lieu de aosp-main
pour créer et contribuer à AOSP. Pour en savoir plus, consultez la section Modifications apportées à AOSP.
Bonnes pratiques d'implémentation du pilote NNAPI
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Cette page décrit les bonnes pratiques à suivre pour implémenter des pilotes NNAPI (Neural Networks API) afin de permettre une large adoption de l'API NNAPI par les développeurs d'applications.
Réduire les temps de démarrage
Si votre pilote transforme les poids d'un modèle lors de la première utilisation, assurez-vous qu'il est compatible avec le cache de compilation, ce qui réduit le temps de 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 contiennent plus de 100 Mo de poids, et les transformer à chaque lancement de l'application est un gaspillage.
Réduire 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'un ou deux millisecondes, au lieu d'utiliser des accélérations matérielles. Faites attention à la synchronisation de threads coûteuse.
Utiliser le groupe NN HAL SchedTune
À partir d'Android 11 ou version ultérieure, AOSP inclut un groupe SchedTune HAL NN dédié qui permet aux processus HAL NN inter-processus d'utiliser des cœurs de grande taille, semblable à l'implémentation du même processus dans le cgroup top-app
prédéfini. L'utilisation de ce groupe SchedTune réduit la charge du pilote, en particulier pour les petits modèles.
Pour utiliser le groupe SchedTune, ajoutez la ligne suivante au fichier init.rc
du processus HAL de NN:
writepid /dev/stune/nnapi-hal/tasks
Le contenu et les exemples de code de cette page sont soumis aux licences décrites dans la Licence de contenu. Java et OpenJDK sont des marques ou des marques déposées d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/07/27 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/07/27 (UTC)."],[],[],null,["# NNAPI driver implementation best practices\n\n| **Deprecated:** Starting in Android 15, the\n| [NNAPI (NDK API)](https://developer.android.com/ndk/guides/neuralnetworks) is deprecated. The Neural Networks HAL interface\n| continues to be supported.\n|\n| For more information, see the\n| [NNAPI Migration Guide](https://developer.android.com/ndk/guides/neuralnetworks/migration-guide).\n\nThis page describes best practices for implementing Neural Networks API (NNAPI)\ndrivers to allow for broad adoption of the NNAPI by app developers.\n\nKeep startup times short\n------------------------\n\nIf your driver transforms the weights of a model on first use, make sure the\ndriver supports compilation caching, which reduces the time used for compilation\nwhen an app starts. This is important as apps might avoid using hardware\nacceleration if start-up times are too long. For example, some apps have\nmore than 100 MB of weights and transforming these each time the app\nlaunches is wasteful.\n\nReduce minimal latency\n----------------------\n\nTo ensure that models use hardware acceleration, it's important to reduce the\nminimal latency in drivers. Many apps use small models that are executed\nmultiple times and if the minimal latency to execute a workload is too high,\nsuch as a few milliseconds, models might run the workload on the CPU, which only\ntakes one or two milliseconds, instead of\nusing hardware accelerations. Be careful of costly thread synchronization.\n\nUse the NN HAL SchedTune group\n------------------------------\n\nFrom Android 11 or higher, AOSP includes a dedicated\nNN HAL\n[SchedTune](https://android.googlesource.com/kernel/msm/+/android-msm-marlin-3.18-nougat-dr1/Documentation/scheduler/sched-tune.txt)\ngroup that allows interprocess NN HAL processes to use big\ncores, similar to same-process implementation within the predefined\n`top-app` [cgroup](/docs/core/perf/cgroups). Using this\nSchedTune group reduces driver overhead, especially for small models.\n\nTo use the SchedTune group, add the following line to the `init.rc` file of\nthe NN HAL process: \n\n writepid /dev/stune/nnapi-hal/tasks"]]