A partire dal 27 marzo 2025, ti consigliamo di utilizzare android-latest-release
anziché aosp-main
per compilare e contribuire ad AOSP. Per ulteriori informazioni, vedi Modifiche ad AOSP.
Best practice per l'implementazione del driver NNAPI
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Questa pagina descrive le best practice per l'implementazione dei driver dell'API Neural Networks (NNAPI) per consentire un'ampia adozione dell'API da parte degli sviluppatori di app.
Riduci i tempi di avvio
Se il driver trasforma i pesi di un modello al primo utilizzo, assicurati che supporti la memorizzazione nella cache della compilazione, che riduce il tempo impiegato per la compilazione all'avvio di un'app. Questo è importante perché le app potrebbero evitare di utilizzare l'accelerazione hardware se i tempi di avvio sono troppo lunghi. Ad esempio, alcune app hanno più di 100 MB di pesi e trasformarli ogni volta che l'app viene lanciata è uno spreco.
Riduci la latenza minima
Per assicurarti che i modelli utilizzino l'accelerazione hardware, è importante ridurre la latenza minima nei driver. Molte app utilizzano modelli di piccole dimensioni che vengono eseguiti più volte e, se la latenza minima per l'esecuzione di un carico di lavoro è troppo elevata, ad esempio alcuni millisecondi, i modelli potrebbero eseguire il carico di lavoro sulla CPU, che richiede solo uno o due millisecondi, anziché utilizzare le accelerazioni hardware. Fai attenzione alla sincronizzazione dei thread dispendiosa.
Utilizzare il gruppo NN HAL SchedTune
A partire da Android 11 o versioni successive, AOSP include un gruppo dedicato
SchedTune
HAL NN
che consente ai processi HAL NN interprocess di utilizzare i core
grandi, in modo simile all'implementazione nello stesso processo all'interno del predefinito
top-app
cgroup. L'utilizzo di questo gruppo SchedTune riduce l'overhead del driver, in particolare per i modelli di piccole dimensioni.
Per utilizzare il gruppo SchedTune, aggiungi la seguente riga al file init.rc
del processo HAL NN:
writepid /dev/stune/nnapi-hal/tasks
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-07-27 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 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"]]