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

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

Mantendo os tempos de inicialização curtos

Se o driver transformar os pesos de um modelo no primeiro uso, verifique se o driver oferece suporte ao cache de compilação, o que reduz o tempo usado para compilação quando um aplicativo é iniciado. Isso é importante, pois os aplicativos podem evitar o uso de aceleração de hardware se os tempos de inicialização forem muito longos. Por exemplo, alguns aplicativos têm mais de 100 MB de pesos e transformá-los toda vez que o aplicativo é iniciado é um desperdício.

Reduzindo a latência mínima

Para garantir que os modelos usem aceleração de hardware, é importante reduzir a latência mínima nos drivers. Muitos aplicativos 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 podem executar a carga de trabalho na CPU, o que leva apenas um ou dois milissegundos, em vez de usar hardware acelerações. Tenha cuidado com a sincronização de threads cara.

Usando o grupo NN HAL SchedTune

A partir do Android 11 ou superior, o AOSP inclui um grupo NN HAL SchedTune dedicado que permite que os processos NN HAL entre processos usem grandes núcleos, semelhante à implementação do mesmo processo no cgroup top-app predefinido. O uso deste 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 NN HAL:

writepid /dev/stune/nnapi-hal/tasks