Android Neural Networks API (NNAPI) 是一个 Android C API,旨在运行计算密集型操作进行机器学习。NNAPI 为更高级别的机器学习框架(如 TensorFlow Lite 和 Caffe2)提供了一个基础层。
1. NNAPI 的核心职责
NNAPI 的主要作用是利用设备上的加速器(如 GPU、DSP 和 NPU)来加速机器学习模型的推断过程。
| 职责 | 详细描述 |
|---|---|
| 设备发现与选择 | 自动发现设备上的加速硬件,并根据模型需求选择最合适的驱动。 |
| 计算分发 | 将复杂的机器学习算子(Operators)分发给对应的硬件加速器(NPU/GPU/DSP)。 |
| 内存管理 | 优化模型数据在不同处理器之间的传输效率,支持内存映射(mmap)。 |
| 执行编排 | 协调模型编译、执行请求,并返回计算结果。 |
2. NNAPI 的分层架构
NNAPI 在 Android 系统中处于承上启下的位置:
- **应用层 (App Layer)**:使用 TFLite 等框架编写机器学习应用。
- **框架层 (Framework Layer)**:TFLite 通过 NNAPI 接口与系统通信。
- **系统服务层 (NNAPI Runtime)**:负责加载驱动、验证模型、分发计算任务。
- **硬件抽象层 (HAL Layer)**:厂商提供的驱动程序(HIDL/AIDL 接口),直接操控 NPU 等硬件。
3. 如何将任务分发给 NPU?
NNAPI 将任务分发给硬件加速器的核心流程如下:
| 关键步骤 | 执行角色 | 核心行为 |
|---|---|---|
| 1. 获取设备 | ANeuralNetworks_getDevice |
查询系统内支持的加速设备(如 Qualcomm NPU)。 |
| 2. 模型编译 | ANeuralNetworksCompilation |
将 TFLite 模型转换为特定硬件支持的指令集(Binary)。 |
| 3. 内存映射 | ANeuralNetworksMemory |
将模型权重数据映射到共享内存,减少数据拷贝开销。 |
| 4. 异步执行 | ANeuralNetworksExecution |
发起计算请求,驱动程序在 NPU 上运行模型,结果通过回调返回。 |
4. 为什么需要 NNAPI?
- 性能加速:NPU 处理张量运算的效率远高于 CPU,功耗更低。
- 降低延迟:本地处理 AI 任务,无需上传云端,保护隐私且实时性强。
- 硬件无关性:开发者只需对接 NNAPI 接口,无需关心底层是哪家厂商的 NPU 驱动。
5. 总结
| 关键术语 | 定义与作用 |
|---|---|
| NPU (Neural Processing Unit) | 专门为神经网络运算设计的硬件加速器。 |
| TFLite Delegate | 代理机制,允许 TFLite 将计算任务“委托”给 NNAPI 处理。 |
| Operand (操作数) | NNAPI 中的基本数据单位(如张量、标量)。 |
NNAPI 是 Android 迈向端侧人工智能(On-device AI)的核心组件,它通过标准化的分发逻辑,屏蔽了硬件差异,让 AI 应用能够在不同设备上高效运行。