Best practice per l'implementazione del driver NNAPI

Questa pagina descrive le best practice per l'implementazione dei driver Neural Networks API (NNAPI) per consentire un'ampia adozione della NNAPI da parte degli sviluppatori di app.

Mantieni brevi i tempi di avvio

Se il tuo driver trasforma i pesi di un modello al primo utilizzo, assicurati che supporti la memorizzazione nella cache della compilazione, che riduce il tempo utilizzato per la compilazione all'avvio di un'app. Questo è importante poiché le app potrebbero evitare di utilizzare l'accelerazione hardware se i tempi di avvio sono troppo lunghi. Ad esempio, alcune app hanno più di 100 MB di peso e trasformarli ogni volta che l'app viene avviata è uno spreco.

Riduci la latenza minima

Per garantire che i modelli utilizzino l'accelerazione hardware, è importante ridurre la latenza minima nei driver. Molte app utilizzano modelli di piccole dimensioni che vengono eseguiti più volte e se la latenza minima per eseguire un carico di lavoro è troppo elevata, ad esempio pochi millisecondi, i modelli potrebbero eseguire il carico di lavoro sulla CPU, che richiede solo uno o due millisecondi, invece di utilizzare l'hardware accelerazioni. Fare attenzione alla costosa sincronizzazione dei thread.

Utilizzare il gruppo SchedTune NN HAL

A partire da Android 11 o versioni successive, AOSP include un gruppo SchedTune NN HAL dedicato che consente ai processi interprocessi NN HAL di utilizzare core di grandi dimensioni, in modo simile all'implementazione dello stesso processo all'interno del cgroup predefinito top-app . L'utilizzo di questo gruppo SchedTune riduce il sovraccarico del driver, soprattutto per i modelli di piccole dimensioni.

Per utilizzare il gruppo SchedTune, aggiungere la seguente riga al file init.rc del processo NN HAL:

writepid /dev/stune/nnapi-hal/tasks