自 2025 年 3 月 27 日起,我们建议您使用 android-latest-release
而非 aosp-main
构建 AOSP 并为其做出贡献。如需了解详情,请参阅 AOSP 的变更。
实现 NNAPI 驱动程序的最佳实践
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
本页将介绍实现 Neural Networks API (NNAPI) 驱动程序的最佳做法,以便应用开发者广泛采用 NNAPI。
缩短启动时间
如果您的驱动程序在第一次使用时转换模型的权重,请确保驱动程序支持编译缓存,这样可减少应用启动时用于编译的时间。这一点非常重要,因为如果启动时间过长,应用可能会避免使用硬件加速功能。例如,某些应用有超过 100 MB 的权重,每次启动时对这些权重进行转换会浪费时间和资源。
缩短最低延迟时间
为确保模型使用硬件加速功能,一定要降低驱动程序中的最短延迟时间。许多应用会使用多次执行的小型模型,如果执行工作负载的最低延迟过高(例如几毫秒),模型可能会在 CPU 上运行工作负载,这只需要一到两毫秒,而不是使用硬件加速功能。请谨慎处理占用大量资源的线程同步。
使用 NN HAL SchedTune 组
从 Android 11 或更高版本开始,AOSP 包含一个专用的 NN HAL SchedTune 组,这个组允许进程间 NN HAL 进程使用大核心,类似于预定义的 top-app
cgroup 组内的相同进程实现。使用此 SchedTune 组可以减少驱动程序开销,特别是对于小型模型而言。
如需使用 SchedTune 组,请将以下行添加到 NN HAL 进程的 init.rc
文件中:
writepid /dev/stune/nnapi-hal/tasks
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-03-26。
[null,null,["最后更新时间 (UTC):2025-03-26。"],[],[],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"]]