前言
瑞芯微(RockChip)的AI解决方案可以从硬件和软件两个角度去了解。硬件方面,主要指的是瑞芯微设计了和生产了一系列内置NPU的芯片模组。本片文章着重介绍软件方面的内容。在软件方面,瑞芯微为开发者提供了rknn-toolkit2和rknpu2两个工具,其中前者还包含子库rknn_toolkit_lite2。这两款软件在功能上的侧重点不同,但只要你是基于瑞芯微的NPU平台进行神经网络模型的软件开发,那就必须学会如何实用它们。
工具及辅助文档
😋为方便查阅,我将官方手册(V1.5.2版本)贴在这里:
此外瑞芯微还为用户提供了开发指南:
rknpu2 简介
rknpu2的定位是SDK,是针对瑞芯微的NPU硬件平台而设计和开发的一套底层软件,功能上简单讲就是让神经网络模型能够运行在瑞芯微自家NPU上。当我们从Github上下载了rknpu2后,会发现它对不同型号芯片(如RK356X系列于RK3568需要实用不同的.so库文件)以及不同的操作系统(Linux和Android)都做了适配。
下面先看一下nknpu2的目录树(在接触新的软件工程时,我喜欢先将工程的目录输出,这样便可以从宏观上把握软件的结构,有利于使用方式理解和后续开发)。根目录下有以下文件和文件夹:
rknpu2
├── LICENSE
├── README.md
├── doc/
├── examples/
├── rknn_server_proxy.md
├── rknpu.mk
└── runtime/
最主要的内容存放在runtime目录下。runtime目录下存在按不同芯片划分的子目录(在v1.5.2版本,包括RK356X、RK3588和RV1106),为了不让文章内容过于冗余,此处仅列出RK356X子目录的内容。
runtime
├── Android.bp
├── Android.go
├── RK356X
│ ├── Android
│ │ ├── librknn_api
│ │ │ ├── arm64-v8a
│ │ │ │ ├── librknn_api.so
│ │ │ │ └── librknnrt.so
│ │ │ ├── armeabi-v7a
│ │ │ │ ├── librknn_api.so
│ │ │ │ └── librknnrt.so
│ │ │ └── include
│ │ │ ├── rknn_api.h
│ │ │ └── rknn_matmul_api.h
│ │ └── rknn_server
│ │ ├── arm
│ │ │ └── rknn_server
│ │ └── arm64
│ │ └── rknn_server
│ └── Linux
│ ├── librknn_api
│ │ ├── aarch64
│ │ │ ├── librknn_api.so
│ │ │ └── librknnrt.so
│ │ ├── armhf
│ │ │ ├── librknn_api.so
│ │ │ └── librknnrt.so
│ │ └── include
│ │ ├── rknn_api.h
│ │ └── rknn_matmul_api.h
│ └── rknn_server
│ ├── aarch64
│ │ └── usr
│ │ └── bin
│ │ ├── restart_rknn.sh
│ │ ├── rknn_server
│ │ └── start_rknn.sh
│ └── armhf
│ └── usr
│ └── bin
│ ├── restart_rknn.sh
│ ├── rknn_server
│ └── start_rknn.sh
└── init.rknn_server.rc
不难猜测对于开发最重要的是 librknn_api 和 rknn_server 两个子目录。
rknn-toolkit2 简介
rknn-toolkit2的定位更多是Toolkit工具集,它主要提供的功能如下:
- 模型转换:支持 Caffe、TensorFlow、TensorFlow Lite、ONNX、DarkNet、PyTorch 等模型转为 RKNN 模型,并支持 RKNN 模型导入导出,RKNN 模型能够在Rockchip NPU平台上加载使用。
- 量化功能:支持将浮点模型量化为定点模型,目前支持非对称量化(asymmetric_quantized-8),并支持混合量化功能。
- 模型推理:能够在 PC 模拟 NPU 运行 RKNN 模型并获取推理结果;或将RKNN模型分发到指定的 NPU 设备上进行推理并获取推理结果。
- 性能和内存评估:将 RKNN 模型分发到指定 NPU 设备上运行,以评估模型在实际设备上运行时的性能和内存占用情况。
- 量化精度分析:该功能将给出模型量化后每一层推理结果与浮点模型推理结果的余弦距离,以便于分析量化误差是如何出现的,为提高量化模型的精度提供思路。
- 模型加密功能:使用指定的加密等级将 RKNN 模型整体加密。因为RKNN模型的解密是在 NPU 驱动中完成的,所以使用加密模型时,与普通 RKNN 模型一样加载即可,NPU驱动会自动对其进行解密。
请登录后查看评论内容