Best Practices für die Implementierung von NNAPI-Treibern

Auf dieser Seite werden Best Practices für die Implementierung der Neural Networks API (NNAPI) beschrieben Treiber für eine breite Akzeptanz der NNAPI durch App-Entwickler.

Kurze Startzeiten

Wenn der Treiber die Gewichtungen eines Modells bei der ersten Verwendung ändert, Treiber unterstützt das Kompilierungs-Caching, was den Zeitaufwand für die Kompilierung verringert wenn eine App gestartet wird. Das ist wichtig, da Apps die Hardwarebeschleunigung möglicherweise vermeiden, wenn die Startzeiten zu lang sind. Einige Apps haben beispielsweise ein Gewicht von mehr als 100 MB. Es wäre verschwenderisch, diese jedes Mal zu transformieren, wenn die App gestartet wird.

Minimale Latenz reduzieren

Damit Modelle die Hardwarebeschleunigung nutzen, ist es wichtig, Latenz bei den Treibern zu minimieren. Viele Apps verwenden kleine Modelle, die mehrmals ausgeführt werden. Wenn die minimale Latenz für die Ausführung einer Arbeitslast zu hoch ist, z. B. einige Millisekunden, führen die Modelle die Arbeitslast möglicherweise auf der CPU aus, was nur ein bis zwei Millisekunden dauert, anstatt die Hardwarebeschleunigung zu verwenden. Achten Sie auf eine kostenintensive Threadsynchronisierung.

NN HAL SchedTune-Gruppe verwenden

Ab Android 11 enthält AOSP einen speziellen NN HAL SchedTune Gruppe, die es Interprozess-NN HAL-Prozessen ermöglicht, große ähnlich wie bei der Same-Process-Implementierung top-app cgroup. Mit diesem Die SchedTune Group reduziert den Fahraufwand, insbesondere bei kleinen Modellen.

Um die SchedTune-Gruppe zu verwenden, fügen Sie die folgende Zeile in die Datei init.rc von NN HAL-Prozess:

writepid /dev/stune/nnapi-hal/tasks