Android NPU 使用指南
1. 概述
1.1 功能简介
M4-R2(RK3576)集成单核 NPU,算力 6 TOPS(INT8),支持 INT4/INT8/INT16 混合运算。本文档介绍 M4-R2 Android 14 系统下的 NPU 使用方法,涵盖 RKNN Android API 集成、模型部署、性能监控、核心调度以及 AI 应用开发等内容。
NPU 在 Android 系统中的典型应用场景包括:
- 端侧 AI 推理:目标检测、人脸识别、OCR、分类
- AI 画质优化:超分辨率、运动补偿(以 SDK 是否集成 AILab 为准)
- AI 语音:端侧语音识别(以 SDK 是否集成 ASR 为准)
- 自定义 RKNN 推理:通过 RKNN API 加载用户自训练模型
1.2 应用场景
- Android 端 AI 推理应用(目标检测、人脸识别、OCR)
- NPU 加速的图像处理与视频画质优化
- 单模型推理与多模型串行调度
- NPU 与 GPU/CPU 混合调度
1.3 工作原理
Android NPU 推理架构(参考说明):
Java App → JNI → RKNN Android API → RKNN Runtime → NPU Driver → NPU 硬件2. 硬件准备
| 设备 | 型号/规格 | 数量 | 说明 |
|---|---|---|---|
| 核心板 | C-3576BQ | 1 | 6 TOPS NPU(单核),INT4/INT8/INT16 混合运算 |
| 底板 | M4-R2(ShimetaPi) | 1 | |
| USB 摄像头(可选) | UVC 兼容 | 1 | 用于 AI 视觉应用(目标检测、体感推理等) |
| 显示器 | HDMI 接口 | 1 | 用于 AI 效果验证 |
3. 软件准备
3.1 RK3576 Android 14 SDK
- RK3576 Android 14 SDK(以实际发布的 SDK 为准)
- 启用 NPU 驱动的 Android 固件
lunch选项:参考格式rk3576_u-userdebug(以实际 SDK 为准)
3.2 RKNN 开发工具
参考说明:RK3576 SDK 中 RKNN 开发工具路径与 RK 平台通用结构一致(以实际 SDK 为准)。
| 工具 | 说明 | 路径(参考) |
|---|---|---|
| RKNN Toolkit2 | PC 端模型转换、量化、评估工具 | hardware/rockchip/rknn-toolkit2/ |
| RKNN Android API | Android 端 RKNN 推理库 | hardware/rockchip/rknn-toolkit2/ |
| RKNN 模型文件 | 转换后的 .rknn 格式模型 | PC 端转换后部署到设备 |
4. 操作步骤
4.1 NPU 驱动确认
4.1.1 查看 NPU 设备节点
adb shell ls -l /dev/rknpu0 # RK3576 单核 NPU 设备节点
adb shell ls -l /dev/dri/ # DRM 设备参考说明:RK3576 为单核 NPU,设备节点为
/dev/rknpu0(以实际 SDK 为准)。
4.1.2 查看 NPU 负载
adb shell cat /sys/kernel/debug/rknpu/load输出示例(单核):
NPU load:
Core0: 49%4.1.3 查看 NPU 驱动信息
adb shell dmesg | grep -i rknpu4.2 RKNN 模型转换(PC 端,参考说明)
RKNN 模型转换在 PC 端使用 RKNN Toolkit2 完成:
# 安装 RKNN Toolkit2
pip install rknn-toolkit2
# 转换模型示例(Python)
from rknn.api import RKNN
rknn = RKNN()
# 配置模型输入
rknn.config(mean_values=[123.675, 116.28, 103.53],
std_values=[58.395, 57.12, 57.375],
target_platform='rk3576')
# 加载原始模型(如 ONNX、Caffe、TensorFlow)
rknn.load_onnx(model='./model.onnx')
# 量化与转换
rknn.build(do_quantization=True, dataset='./dataset.txt')
# 导出 .rknn 模型文件
rknn.export_rknn('./model.rknn')注意: RKNN Toolkit2 的具体安装方法与 API 请参考
hardware/rockchip/rknn-toolkit2/doc/中的官方文档。模型转换需在 PC 端完成,目标平台参数必须指定rk3576(详见 RKNN Toolkit2 安装与使用)。
4.3 模型文件部署到 Android 系统
将转换好的 .rknn 模型文件部署到设备:
# 推送到设备
adb push ./model.rknn /data/local/tmp/
# 或推送到应用私有目录
adb push ./model.rknn /data/data/com.example.app/files/4.4 自定义 RKNN 推理应用(参考说明)
4.4.1 加载 RKNN 库
// Java 层加载 RKNN 运行时库
static {
System.loadLibrary("rknn_api");
System.loadLibrary("native-lib");
}4.4.2 JNI 调用 RKNN 推理
参考 Android JNI开发 中 4 节 JNI 与 RKNN NPU 集成部分。
4.4.3 推理流程
1. rknn_init() — 初始化 RKNN 上下文,加载模型
2. rknn_query() — 查询模型输入输出信息
3. rknn_inputs_set() — 设置输入数据
4. rknn_run() — 执行推理
5. rknn_outputs_get() — 获取输出结果
6. rknn_outputs_release() — 释放输出
7. rknn_destroy() — 销毁上下文4.5 NPU 核心调度
参考说明:RK3576 为单核 NPU,不支持多核心并发分配。RKNNLite 中对应核心枚举为
NPU_CORE_0,多模型推理需串行调度或以框架层管理(以实际 SDK 为准)。
5. 代码详解
5.1 查看 NPU 性能(参考说明)
# 查看 NPU 负载(单核)
adb shell cat /sys/kernel/debug/rknpu/load
# 查看 CPU 负载
adb shell top
# 查看应用日志
adb shell logcat -v time --pid=$(pidof com.example.app)
# 设置 RKNN 日志级别
adb shell setprop persist.rockx.log.level 55.2 RkAuth 授权配置(参考说明)
参考说明:部分 AI 算法库(AILab 相关功能)需要授权才能使用,授权机制以 RK3576 SDK 是否集成 AILab 为准。授权配置文件位置:
- 编译时生成:
packages/apps/RkAuth/etc/rkauth_config.json - 固件中位置:
/vendor/etc/rkauth_config.json和/system/etc/rkauth_config.json
注意: 试用模式通常限制为开机后 30 分钟内,需重启设备重新计时。正式授权需联系 Rockchip 商务申请。M4-R2 SDK 是否集成 AILab 需在板上确认。
6. 常见问题
6.1 NPU 设备节点不存在
- 确认内核配置中 NPU 驱动已启用
- 确认 GKI 模式下 KO 模块已正确加载(详见 Android HAL开发)
- 使用
dmesg | grep rknpu查看驱动加载日志
6.2 RKNN 推理失败
- 确认模型文件已正确转换,目标平台为
rk3576 - 确认输入数据的格式、尺寸与模型要求一致
- 确认 RKNN 运行时库版本与模型转换时的 Toolkit2 版本匹配
6.3 RKNN 库加载失败
- 确认目标系统包含
librknnrt.so(/vendor/lib64/ 或 /system/lib64/) - 确认模型路径可读
- 查看 logcat 中 rknn 相关错误
7. 相关文档
- RKNN Toolkit2 安装与使用 — 模型转换
- Android JNI开发 — JNI 与 RKNN 集成
- Android HAL开发 — HAL 层开发
- Linux NPU使用指南 — Linux 端 NPU 使用
- 目标检测部署(YOLOv5/v7/v8) — 模型部署参考
