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 App-Entwickler 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 Anwendungen verwenden kleine Modelle, die mehrmals ausgeführt werden. Wenn die minimale Latenz zum Ausführen einer Arbeitslast zu hoch ist (z. B. wenige Millisekunden), führen Modelle die Arbeitslast möglicherweise auf der CPU aus, was nur ein oder zwei Millisekunden dauert, anstatt Hardwarebeschleunigungen zu verwenden. Gehen Sie bei kostspieligen Thread-Synchronisierungen vorsichtig vor.

NN HAL SchedTune-Gruppe verwenden

Ab Android 11 oder höher enthält AOSP eine dedizierte NN HAL-SchedTune-Gruppe, die es Interprozess-NN-HAL-Prozessen ermöglicht, große Kerne zu verwenden, ähnlich wie bei der Same-Prozess-Implementierung innerhalb der vordefinierten cgroup top-app. Die Verwendung dieser SchedTune-Gruppe reduziert den Treiberaufwand, 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