Auf dieser Seite werden Best Practices für die Implementierung von NNAPI-Treibern (Neural Networks API) beschrieben, um eine breite Akzeptanz der NNAPI durch App-Entwickler zu ermöglichen.
Startzeiten kurz halten
Wenn Ihr Treiber die Gewichte eines Modells bei der ersten Verwendung transformiert, muss er das Kompilierungs-Caching unterstützen. Dadurch wird die für die Kompilierung benötigte Zeit beim Starten einer App verkürzt. Das ist wichtig, da Apps möglicherweise keine Hardwarebeschleunigung verwenden, wenn die Startzeiten zu lang sind. Einige Apps haben beispielsweise mehr als 100 MB an Gewichten. Diese jedes Mal zu transformieren, wenn die App gestartet wird, ist ineffizient.
Minimale Latenz reduzieren
Damit Modelle Hardwarebeschleunigung nutzen können, ist es wichtig, die minimale Latenz in Treibern zu reduzieren. 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 Modelle die Arbeitslast möglicherweise auf der CPU aus, was nur ein oder zwei Millisekunden dauert, anstatt Hardwarebeschleunigungen zu verwenden. Vermeiden Sie kostspielige Thread-Synchronisierung.
Die NN HAL SchedTune-Gruppe verwenden
Ab Android 11 enthält AOSP eine dedizierte NN HAL-Gruppe SchedTune, mit der NN HAL-Prozesse zwischen Prozessen Big-Cores verwenden können, ähnlich wie bei der Implementierung im selben Prozess innerhalb der vordefinierten top-app
-Cgroup. Die Verwendung dieser SchedTune-Gruppe reduziert den Treiber-Overhead, insbesondere bei kleinen Modellen.
Wenn Sie die SchedTune-Gruppe verwenden möchten, fügen Sie der Datei init.rc
des NN HAL-Prozesses die folgende Zeile hinzu:
writepid /dev/stune/nnapi-hal/tasks