瑞芯微RK3568内置NPU模块,处理性能最高可达1TOPS;RKNN是Rockchip NPU平台使用的模型类型。本文介绍了如何在润和DAYU200 RK3568开发板上基于OpenHarmony 4.0 Release系统进行RKNN模型的推理。嵌入式实验室的小伙伴们(胡宇昊、赵思蓉、谢国琪老师)实现了OpenHarmony for RKNN,即在OpenHarmony操作系统上实现瑞芯微NPU的支持与RKNN模型推理,并在润和开发板DAYU200成功验证通过。
一、简介
OpenHarmony:
OpenHarmony 是一个由开放原子开源基金会(OpenAtom Foundation)管理和推动的开源操作系统,主要由华为主导开发。它旨在为物联网(IoT)设备提供统一的平台,通过灵活、高效、可扩展的操作系统支持从智能家居、可穿戴设备、车载系统到工业物联网等广泛的设备类型。OpenHarmony 采用分布式架构,实现设备间的无缝连接和互操作,用户可以通过一个设备控制多个终端,享受一致的服务和应用体验。作为一个开源项目,OpenHarmony 提供了开放的源码和开发者生态,支持高性能、低功耗和全方位的安全保护,是构建智能设备互联互通生态的理想平台。OpenHarmony-4.0Release版本于2023年10月发布。
RKNN:
RKNN(Rockchip Neural Network)是由 Rockchip 开发的深度学习框架和工具链,专门用于在其系统级芯片(SoC)上部署和优化神经网络模型。RKNN 提供了从模型转换、量化、优化到推理的一整套工具,支持 TensorFlow、Caffe、ONNX 等多种常见深度学习框架。通过 RKNN,开发者可以充分利用 Rockchip NPU(神经网络处理单元)的计算能力,在边缘和嵌入式设备上实现高效的人工智能应用。
DAYU200:
DAYU200是润和软件推出了OpenHarmony富设备开发板。基于Rockchip RK3568,集成双核心架构GPU以及高效能NPU;板载四核64位Cortex-A55 处理器,主频2.0GHz;支持蓝牙、Wi-Fi、音频、视频和摄像头等功能。
DAYU200开发版
二、PC环境安装
本机环境:Windows10/11,DAYU200 RK3568开发版。
1.烧录工具安装
官方参考教程:https://wiki.t-firefly.com/zh_CN/ROC-RK3568-PC/Windows_upgrade_firmware.html
USB驱动:https://www.t-firefly.com/doc/download/107.html#other_432
RKDevTool烧录工具:https://www.t-firefly.com/doc/download/107.html#other_431
2.hdc工具安装
参考教程:https://forums.openharmony.cn/forum.php?mod=viewthread&tid=1458
安装包下载链接:http://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist
查找“流水线名称”名称为 ohos-sdk-full, 或者 ohos-sdk-public,点击‘下载链接’,选择‘全量包’。
三、将RKNPU驱动移植到Openharmony内核
1.RKNPU内核驱动源码获取
驱动源码获取:https://github.com/rockchip-linux/kernel 选择5.10分支,NPU驱动位于:drivers/rknpu 。或使用萤火虫Firefly、飞凌(建议)等厂家提供的5.10内核源码中RKNPU驱动。
2.编译环境搭建&驱动移植
参考教程:https://forums.openharmony.cn/forum.php?mod=viewthread&tid=897
搭建OpenHarmony编译环境,建议预留150G以上磁盘空间,内存12G以上。搭建完成后,目录如下:
首先,修改//kernel/linux/config/linux-5.10/rk3568/arch/arm64_defconfig文件,添加RKNPU的CONFIG配置项如下:
CONFIG_ROCKCHIP_RKNPU=y
CONFIG_ROCKCHIP_RKNPU_DEBUG_FS=y
CONFIG_ROCKCHIP_RKNPU_DRM_GEM=y
然后,单独编译内核:
sudo ./build.sh --product-name rk3568 --build-target kernel
编译完成后,目录如下:
将驱动代码drivers/rknpu移植到out/kernel/src_tmp/linux-5.10/drivers目录中,除drivers/rknpu外,还需考虑其中引用的各项函数因此还需对应修改:
drivers/iommu/rockchip-iommu.c
include/soc/rockchip/rockchip_iommu.h
drivers/soc/rockchip/rockchip_opp_select.c
include/soc/rockchip/rockchip_opp_select.h
这四个文件中的内容,同时修改drivers目录下的Makefile文件和Kconfig文件,分别添加如下内容:
# Makefile
obj-$(CONFIG_ROCKCHIP_RKNPU) += rknpu/
# Kconfig
source "drivers/rknpu/Kconfig"
查看rk3568设备树,添加对应的NPU节点信息(可参考其他rk3568主板的5.10版本内核设备树进行添加),主要是在pmu节点的power-controller节点中,添加npu节点:
# Kconfig
source "drivers/rknpu/Kconfig"
pmu: power-management@fdd90000 {
...
power: power-controller {
... /* These power domains are grouped by VD_NPU */
pd_npu@RK3568_PD_NPU {
reg = <RK3568_PD_NPU>;
clocks = <&cru ACLK_NPU_PRE>,
<&cru HCLK_NPU_PRE>,
<&cru PCLK_NPU_PRE>;
pm_qos = <&qos_npu>;
};
...
};
...
};
编译完成后,在 //out/rk3568/packages/phone/images目录下可查看全部镜像。
通过RKDevTool工具烧录到DAYU200后,在PC命令行通过hdc shell命令连接主板,运行命令: dmesg | grep RKNPU 有如下输出则内核驱动移植成功。
四、模型运行效果演示
运行环境:DAYU200开发板
推理demo的编译:
使用OpenHarmony的llvm编译工具链进行模型推理程序的编译,llvm工具链交叉编译器位于
//prebuilts/clang/ohos/linux-x86_64/llvm/bin/clang
编译完成后,通过hdc工具,将编译得到的可执行文件以及链接的
动态库传到DAYU200主板上:
hdc file send PC路径 主板路径
# 例如hdc file send d:\ohtest /data/
如出现发送失败问题,一般是选择的主板路径目录只读造成,在PC端运行:
hdc shell mount -o rw,remount
# 或运行hdc shell切换OpenHarmony shell端后,运行
mount -o rw,remount /
模型在OpenHarmony的推理:
# 首先通过hdc切换主板命令行
hdc shell
# 进入文件传入所在路径,将链接的动态库移动到/lib或/lib64中
mv xxx.so /lib/
# 运行可执行文件
chmod +x ./demo
./demo
运行推理结果如下则推理成功。
五、总结
湖南大学嵌入式实验室采用RKNN、OpenHarmony4.0Release以及DAYU200 RK3568开发板,通过添加内核驱动,修改框架配置文件、宏定义、API接口并创建设备树,成功实现了RKNN模型在OpenHarmony系统上的部署。这展示了RKNN与OpenHarmony在边缘计算中的强大潜力,特别是在资源受限的嵌入式设备上的高效应用,为物联网、边缘计算等领域的智能设备开发奠定了基础。