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

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