Best Practices für die Implementierung von NNAPI-Treibern

Auf dieser Seite werden Best Practices für die Implementierung von NNAPI-Treibern (Neural Networks API) beschrieben, um eine breite Einführung der NNAPI durch Anwendungsentwickler zu ermöglichen.

Kurze Startzeiten

Wenn der Treiber die Gewichtungen eines Modells bei der ersten Verwendung transformiert, muss der Treiber das Kompilierungs-Caching unterstützen. Dadurch wird beim Start einer Anwendung die für die Kompilierung benötigte Zeit reduziert. Das ist wichtig, da Anwendungen die Hardwarebeschleunigung möglicherweise vermeiden, wenn die Startzeiten zu lang sind. Einige Anwendungen haben beispielsweise eine Gewichtung von über 100 MB und die Transformation dieser bei jedem Start ist Verschwendung.

Minimale Latenz reduzieren

Damit Modelle die Hardwarebeschleunigung nutzen, ist es wichtig, die minimale Latenz in den 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 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 oder höher enthält AOSP eine spezielle NN HAL-Gruppe SchedTune, die es Interprozess-NN HAL-Prozessen ermöglicht, Big-Cores zu verwenden, ähnlich wie bei der Implementierung desselben Prozesses innerhalb der vordefinierten top-app cgroup. Durch die Verwendung dieser SchedTune-Gruppe wird der Treiberoverhead reduziert, insbesondere bei kleinen Modellen.

Wenn Sie die SchedTune-Gruppe verwenden möchten, fügen Sie der init.rc-Datei des NN HAL-Prozesses die folgende Zeile hinzu:

writepid /dev/stune/nnapi-hal/tasks