Ab dem 27. März 2025 empfehlen wir, android-latest-release
anstelle von aosp-main
zu verwenden, um AOSP zu erstellen und Beiträge dazu zu leisten. Weitere Informationen finden Sie unter Änderungen am AOSP.
Best Practices für die Implementierung von NNAPI-Treibern
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
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 Zeit für die Kompilierung beim Starten einer App reduziert. 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 können, 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
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-07-27 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-07-27 (UTC)."],[],[],null,["# NNAPI driver implementation best practices\n\n| **Deprecated:** Starting in Android 15, the\n| [NNAPI (NDK API)](https://developer.android.com/ndk/guides/neuralnetworks) is deprecated. The Neural Networks HAL interface\n| continues to be supported.\n|\n| For more information, see the\n| [NNAPI Migration Guide](https://developer.android.com/ndk/guides/neuralnetworks/migration-guide).\n\nThis page describes best practices for implementing Neural Networks API (NNAPI)\ndrivers to allow for broad adoption of the NNAPI by app developers.\n\nKeep startup times short\n------------------------\n\nIf your driver transforms the weights of a model on first use, make sure the\ndriver supports compilation caching, which reduces the time used for compilation\nwhen an app starts. This is important as apps might avoid using hardware\nacceleration if start-up times are too long. For example, some apps have\nmore than 100 MB of weights and transforming these each time the app\nlaunches is wasteful.\n\nReduce minimal latency\n----------------------\n\nTo ensure that models use hardware acceleration, it's important to reduce the\nminimal latency in drivers. Many apps use small models that are executed\nmultiple times and if the minimal latency to execute a workload is too high,\nsuch as a few milliseconds, models might run the workload on the CPU, which only\ntakes one or two milliseconds, instead of\nusing hardware accelerations. Be careful of costly thread synchronization.\n\nUse the NN HAL SchedTune group\n------------------------------\n\nFrom Android 11 or higher, AOSP includes a dedicated\nNN HAL\n[SchedTune](https://android.googlesource.com/kernel/msm/+/android-msm-marlin-3.18-nougat-dr1/Documentation/scheduler/sched-tune.txt)\ngroup that allows interprocess NN HAL processes to use big\ncores, similar to same-process implementation within the predefined\n`top-app` [cgroup](/docs/core/perf/cgroups). Using this\nSchedTune group reduces driver overhead, especially for small models.\n\nTo use the SchedTune group, add the following line to the `init.rc` file of\nthe NN HAL process: \n\n writepid /dev/stune/nnapi-hal/tasks"]]