实现 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):2024-10-03。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"没有我需要的信息"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"太复杂/步骤太多"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"内容需要更新"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻译问题"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"示例/代码问题"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"其他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"易于理解"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"解决了我的问题"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"其他"
}]
{"lastModified": "\u6700\u540e\u66f4\u65b0\u65f6\u95f4 (UTC)\uff1a2024-10-03\u3002"}
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2024-10-03。"]]