Best practice per l'implementazione del driver NNAPI

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