Najlepsze praktyki w zakresie wdrażania sterowników NNAPI

Na tej stronie opisano najlepsze praktyki wdrażania sterowników interfejsu API sieci neuronowych (NNAPI), aby umożliwić szerokie zastosowanie interfejsu NNAPI przez twórców aplikacji.

Zadbaj o krótkie czasy uruchamiania

Jeśli sterownik zmienia wagę modelu przy pierwszym użyciu, upewnij się, że obsługuje buforowanie kompilacji, co skraca czas kompilacji po uruchomieniu aplikacji. Jest to ważne, ponieważ aplikacje mogą unikać przyspieszania sprzętowego, jeśli czas uruchamiania jest zbyt długi. Na przykład niektóre aplikacje mają ponad 100 MB wag i przekształcanie ich przy każdym uruchomieniu aplikacji jest marnotrawstwem.

Zmniejsz minimalne opóźnienia

Aby mieć pewność, że modele korzystają z akceleracji sprzętowej, ważne jest zmniejszenie minimalnych opóźnień w sterownikach. Wiele aplikacji korzysta z małych modeli, które są wykonywane wielokrotnie i jeśli minimalne opóźnienie wykonania obciążenia jest zbyt duże, na przykład kilka milisekund, modele mogą przejąć obciążenie procesora, co zajmuje tylko jedną lub dwie milisekundy, zamiast korzystać ze sprzętu przyspieszenia. Uważaj na kosztowną synchronizację wątków.

Skorzystaj z grupy NN HAL SchedTune

Od wersji Androida 11 lub nowszej AOSP zawiera dedykowaną grupę NN HAL SchedTune , która umożliwia międzyprocesowym procesom NN HAL korzystanie z dużych rdzeni, podobnie jak w przypadku implementacji tego samego procesu w predefiniowanej grupie cgroup top-app . Korzystanie z tej grupy SchedTune zmniejsza obciążenie sterownika, szczególnie w przypadku małych modeli.

Aby użyć grupy SchedTune, dodaj następujący wiersz do pliku init.rc procesu NN HAL:

writepid /dev/stune/nnapi-hal/tasks