A partir de 27 de março de 2025, recomendamos usar android-latest-release
em vez de aosp-main
para criar e contribuir com o AOSP. Para mais informações, consulte Mudanças no AOSP.
Práticas recomendadas de implementação do driver da NNAPI
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Esta página descreve as práticas recomendadas para implementar drivers da API Neural Networks (NNAPI)
para permitir a adoção em larga escala da NNAPI por desenvolvedores de apps.
Manter os tempos de inicialização curtos
Se o driver transformar os pesos de um modelo no primeiro uso, verifique se ele
oferece suporte ao armazenamento em cache de compilação, o que reduz o tempo usado para a compilação
quando um app é iniciado. Isso é importante porque os apps podem evitar o uso da aceleração
de hardware se os tempos de inicialização forem muito longos. Por exemplo, alguns apps têm
mais de 100 MB de pesos, e transformá-los toda vez que o app
é iniciado é um desperdício.
Reduzir a latência mínima
Para garantir que os modelos usem a aceleração de hardware, é importante reduzir a
latência mínima nos drivers. Muitos apps usam modelos pequenos que são executados
várias vezes. Se a latência mínima para executar uma carga de trabalho for muito alta,
como alguns milissegundos, os modelos poderão executar a carga de trabalho na CPU, que leva apenas
um ou dois milissegundos, em vez de
usar acelerações de hardware. Cuidado com a sincronização de linhas de execução custosas.
Usar o grupo NN HAL SchedTune
No Android 11 ou versões mais recentes, o AOSP inclui um grupo
SchedTune
HAL de NN dedicado
que permite que os processos de HAL de NN entre processos usem núcleos
grandes, semelhante à implementação de mesmo processo no
cgroup top-app
predefinido. O uso desse
grupo SchedTune reduz a sobrecarga do driver, especialmente para modelos pequenos.
Para usar o grupo SchedTune, adicione a seguinte linha ao arquivo init.rc
do
processo HAL de NN:
writepid /dev/stune/nnapi-hal/tasks
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-07-27 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 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"]]