Best Practices für die Implementierung des NNAPI-Treibers

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

Halten Sie die Anlaufzeiten kurz

Wenn Ihr Treiber die Gewichtungen eines Modells bei der ersten Verwendung umwandelt, stellen Sie sicher, dass der Treiber Kompilierungs-Caching unterstützt, wodurch die für die Kompilierung beim Start einer App benötigte Zeit verkürzt wird. Dies ist wichtig, da Apps möglicherweise auf die Hardwarebeschleunigung verzichten, wenn die Startzeiten zu lang sind. Einige Apps verfügen beispielsweise über mehr als 100 MB Gewichtungen, und es ist verschwenderisch, diese bei jedem Start der App umzuwandeln.

Reduzieren Sie die minimale Latenz

Um sicherzustellen, dass 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 zur Ausführung einer Arbeitslast zu hoch ist, beispielsweise einige Millisekunden, führen Modelle die Arbeitslast möglicherweise auf der CPU aus, was nur ein oder zwei Millisekunden dauert, anstatt Hardware zu verwenden Beschleunigungen. Achten Sie auf eine kostspielige Thread-Synchronisierung.

Verwenden Sie die NN HAL SchedTune-Gruppe

Ab Android 11 oder höher enthält AOSP eine dedizierte NN HAL SchedTune- Gruppe, die es prozessübergreifenden NN HAL-Prozessen ermöglicht, große Kerne zu verwenden, ähnlich der Implementierung desselben Prozesses innerhalb der vordefinierten top-app Cgroup . Die Verwendung dieser SchedTune-Gruppe reduziert den Treiberaufwand, insbesondere bei kleinen Modellen.

Um die SchedTune-Gruppe zu verwenden, fügen Sie die folgende Zeile zur Datei init.rc des NN-HAL-Prozesses hinzu:

writepid /dev/stune/nnapi-hal/tasks