目前的位置: 首页 实验室新闻 正文

OpenHarmony for RKNN: 在OpenHarmony操作系统上实现瑞芯微NPU的支持与RKNN模型推理


瑞芯微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以上。搭建完成后,目录如下:

6601

首先,修改//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

编译完成后,目录如下:

9009

将驱动代码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 有如下输出则内核驱动移植成功。

EA81


四、模型运行效果演示

运行环境: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

运行推理结果如下则推理成功。

6420


五、总结

湖南大学嵌入式实验室采用RKNN、OpenHarmony4.0Release以及DAYU200 RK3568开发板,通过添加内核驱动,修改框架配置文件、宏定义、API接口并创建设备树,成功实现了RKNN模型在OpenHarmony系统上的部署。这展示了RKNN与OpenHarmony在边缘计算中的强大潜力,特别是在资源受限的嵌入式设备上的高效应用,为物联网、边缘计算等领域的智能设备开发奠定了基础。


上一条:嵌入式实验室一篇论文被TDSC接收:功能安全和信息安全的快速博弈验证 下一条:EtherCAT for Zephyr:Zephyr RTOS对工业以太网EtherCAT的支持及在ZVM虚拟化环境下的实现

关闭

嵌入式与网络计算湖南省重点实验室
版权所有 © 2023 湖南大学