Práticas recomendadas para a implementação do driver da NNAPI

Esta página descreve as práticas recomendadas para implementar drivers da API Neural Networks (NNAPI) para permitir uma ampla adoção da NNAPI por desenvolvedores de apps.

Reduza os tempos de inicialização

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 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 a transformação deles toda vez que são iniciados é 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 e, 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 na CPU, o que leva apenas um ou dois milissegundos, em vez de usar aceleração de hardware. Tenha cuidado com sincronizações de linhas de execução dispendiosas.

Usar o grupo NN HAL SchedTune

No Android 11 ou versões mais recentes, o AOSP inclui um grupo SchedTune de NN HAL dedicado que permite que os processos da NN HAL entre processos usem grandes núcleos, semelhante à implementação do mesmo processo no cgroup predefinido top-app. O uso desse grupo do 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 NN HAL:

writepid /dev/stune/nnapi-hal/tasks