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

Esta página descreve as práticas recomendadas para implementação de drivers de API de redes neurais (NNAPI) para permitir a ampla adoção da NNAPI por desenvolvedores de aplicativos.

Mantenha 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 porque 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 peso e transformá-los sempre que o aplicativo é iniciado é um desperdício.

Reduza a latência mínima

Para garantir que os modelos utilizem aceleração de hardware, é importante reduzir a latência mínima nos drivers. Muitos aplicativos usam modelos pequenos que são executados diversas 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 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 dispendiosa.

Use o grupo NN HAL SchedTune

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