Questa pagina descrive le best practice per l'implementazione dei driver dell'API Neural Networks (NNAPI) per consentire l'adozione su larga scala dell'API NNAPI da parte degli sviluppatori di app.
Ridurre i tempi di avvio
Se il 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. Ciò è importante perché 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 pesi e trasformarli ogni volta che l'app viene avviata è uno spreco.
Ridurre 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 workload è troppo elevata, ad esempio alcuni millisecondi, i modelli potrebbero eseguire il workload sulla CPU, che richiede solo uno o due millisecondi, anziché utilizzare accelerazioni hardware. Fai attenzione alla costosa sincronizzazione dei thread.
Utilizzare il gruppo NN HAL SchedTune
A partire da Android 11 o versioni successive, AOSP include un gruppo
NN HAL
SchedTune
dedicato che consente ai processi NN HAL interprocesso di utilizzare i core
big, in modo simile all'implementazione nello stesso processo all'interno del
top-app
cgroup predefinito. L'utilizzo di questo
gruppo SchedTune riduce l'overhead del driver, soprattutto per i modelli piccoli.
Per utilizzare il gruppo SchedTune, aggiungi la seguente riga al file init.rc
del processo NN HAL:
writepid /dev/stune/nnapi-hal/tasks