Rockchip · AI & Linux Hub

AI 推理

RKNN2 V2.5.0 入门(三):Toolkit、Android/Linux Runtime 与编译器

RKNN2 V2.5.0 入门(三):Toolkit、Android/Linux Runtime 与编译器 · RKNN2 V2.5.0

· ArmSoM Editorial · Rockchip source documentation · 5 分钟阅读

适用范围:本系列为 RKNN2 V2.5.0 平台参考,原稿覆盖 RK3562、RK3566/3568/3576/3588 系列及 RV1126B。ArmSoM 同 SoC 板卡仍需匹配的 BSP、NPU 驱动和 Runtime;不能直接照搬 Rockchip EVB 的电源、USB 接口或固件。主机与驱动要求见正文;未进行 ArmSoM 硬件验证。

依据本地中英文 V2.5.0 原稿整理,保留原章节编号。中文用中文原图,英文、俄文和德文用英文原图;恢复 PDF 换行、跨页表格与代码缩进。示例输出不是 ArmSoM 实测。

Rockchip source

RKNN2 V2.5.0 入门(一):部署链路、平台与 SDK 仓库

RKNN2 V2.5.0 入门(二):硬件连接与 ADB 检查

RKNN2 V2.5.0 入门(三):Toolkit、Android/Linux Runtime 与编译器

RKNN2 V2.5.0 入门(四):MobileNet 转换与部署

RKNN2 V2.5.0 入门(五):YOLOv5 检测与精度评估

RKNN2 V2.5.0 入门(六):Docker、启动问题与文档导航

3. 主机端和板端环境准备

3.1 安装RKNN-Toolkit2

快速入门仅给出推荐的Conda + pip安装路径。Docker方式的安装请参考第 5 章。

3.1.1 安装Python环境

如果系统中没有安装Python 3.8(建议版本),或者同时有多个版本的Python环境,建议使用MiniforgeConda创建新的Python 3.8环境。

步骤1:安装Miniforge Conda

在计算机的终端窗口中执行以下命令,检查是否安装Miniforge Conda,若已安装则可省略此步骤。

conda -V
# 参考输出信息:conda 23.3.1 ,表示 Miniforge conda 版本为 23.3.1
# 如果提示 conda: command not found,则表示未安装 Miniforge

如果没有安装Miniforge Conda,可以通过下面的链接下载Miniforge Conda安装包:https://github.com/conda-forge/miniforge/releases/download/25.3.0-1/Miniforge3-25.3.0-1-Linux-x86_64.sh

然后通过以下命令安装Miniforge Conda:

# 拷⻉到用戶目录
cp /path/to/Miniforge3-25.3.0-1-Linux-x86_64.sh ~

# 增加运行权限
chmod 777 Miniforge3-25.3.0-1-Linux-x86_64.sh

# 运行安装脚本
bash Miniforge3-25.3.0-1-Linux-x86_64.sh

步骤2:创建Python环境

安装Miniforge Conda后,在计算机的终端窗口中,执行以下命令进入Conda base环境:

source ~/miniforge3/bin/activate # Miniforge 安装的目录
# 成功后,命令行提示符会变成以下形式:
# (base) xxx@xxx:~$

通过以下命令创建名称为toolkit2的Python 3.8环境:

conda create -n toolkit2 python=3.8

激活toolkit2环境,后续将在此环境中安装RKNN-Toolkit2:

conda activate toolkit2
# 成功后,命令行提示符会变成以下形式:
# (toolkit2) xxx@xxx:~$

说明: 后续Python运行命令默认在 toolkit2 环境中执行。

3.1.2 安装RKNN-Toolkit2

激活toolkit2环境后,可通过pip源或者本地wheel包这两种方式安装RKNN-Toolkit2。

方式一:通过pip源安装

pip install rknn-toolkit2 -i https://pypi.org/simple

# 如果已安装 RKNN-Toolkit2,可通过以下命令升级 RKNN-Toolkit2
pip install rknn-toolkit2 -i https://pypi.org/simple --upgrade

方式二:通过本地wheel包安装

# 进入 rknn-toolkit2 目录
cd Projects/rknn-toolkit2/rknn-toolkit2

# 请根据不同的 python 版本及处理器架构,选择不同的 requirements 文件:
# 其中 cpxx 是 python 版本号
pip install -r packages/x86_64/requirements_cpxx.txt
# pip install -r packages/arm64/arm64_requirements_cpxx.txt

# 安装 RKNN-Toolkit2
# 请根据不同的 python 版本及处理器架构,选择不同的 wheel 安装包文件:
# 其中 x.x.x 是 RKNN-Toolkit2 版本号,cpxx 是 python 版本号
pip install packages/x86_64/rknn_toolkit2-x.x.x-cpxx-cpxx-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
# pip install packages/arm64/rknn_toolkit2-x.x.x-cpxx-cpxx-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

3.2 检查Toolkit安装结果

保持 toolkit2 环境处于激活状态,执行:

python -c "from rknn.api import RKNN; print('RKNN-Toolkit2 import OK')"

若输出:

RKNN-Toolkit2 import OK

表示最基本的Toolkit导入检查通过。

如果安装失败,请查阅《RKNN2 SDK 开发指南》文档中的第5.4.2章节”工具安装问题”,其中详细介绍了RKNN-Toolkit2环境安装失败的解决方法。

3.3 安装或检查板端RKNPU2环境

板端运行Demo前,需要确认NPU驱动、rknn_server服务和Runtime库已正确安装。

3.3.1 确认NPU驱动版本

可以在板端执行以下命令查询RKNPU2驱动版本:

dmesg | grep -i rknpu

如下图所示,当前RKNPU2驱动版本为0.8.8。

中文原稿配图 · PDF 16

中文原稿配图 · PDF 16

图3-1 RKNPU2 驱动版本信息

Rockchip开发板的官方固件均自带RKNPU2驱动。若以上命令查询不到NPU驱动版本,则可能使用的是第三方固件,其中可能没有安装NPU驱动。如果有固件源码,可以在 kernel config 中将CONFIG_ROCKCHIP_RKNPU 选项的值改成y以集成NPU驱动,然后重新编译内核驱动并烧录。建议RKNPU2驱动版本 >= 0.9.8。

3.3.2 检查rknn_server与Runtime库

RKNN-Toolkit2的连板调试功能要求板端已安装RKNPU2环境,并且启动rknn_server服务。如果板端没有安装rknn_server和Runtime库,或者两者的版本不一致,都需要重新安装RKNPU2环境。

通常情况下,开发板默认已经安装版本一致的RKNPU2环境,可以通过下面命令确认(如果没有安装RKNPU2环境或者版本不一致,请按照3.3.3节中的步骤来安装/更新RKNPU2环境)。

1. 板端为Android系统

检查RKNPU2环境是否安装:如果能够启动rknn_server服务,则代表板端已经安装RKNPU2环境。

# 进入板端
adb shell

# 启动 rknn_server
su
setenforce 0
/vendor/bin/rknn_server &

如果出现以下输出信息,则代表启动rknn_server服务成功,即已经安装RKNPU2环境。

start rknn server, version: x.x.x

检查版本是否一致:

# 查询 rknn_server 版本
strings /vendor/bin/rknn_server | grep -i "rknn_server version"

# 查询 librknnrt.so 库版本
# 64位系统
strings /vendor/lib64/librknnrt.so | grep -i "librknnrt version"
# 32位系统
strings /vendor/lib/librknnrt.so | grep -i "librknnrt version"

如果出现以下输出信息,则代表rknn_server版本为x.x.x,librknnrt.so的版本为x.x.x。

rknn_server version: x.x.x
librknnrt version: x.x.x

2. 板端为Linux系统

检查RKNPU2环境是否安装:如果能够启动rknn_server服务,则代表板端已经安装RKNPU2环境。

# 进入板端
adb shell

# 启动 rknn_server
restart_rknn.sh

如果出现以下输出信息,则代表启动rknn_server服务成功,即已经安装RKNPU2环境。

start rknn server, version: x.x.x

检查版本是否一致:

# 查询 rknn_server 版本
strings /usr/bin/rknn_server | grep -i "rknn_server version"

# 查询 librknnrt.so 库版本
strings /usr/lib/librknnrt.so | grep -i "librknnrt version"

如果出现以下输出信息,则代表rknn_server版本为x.x.x,librknnrt.so的版本为x.x.x。

rknn_server version: x.x.x
librknnrt version: x.x.x

3.3.3 安装/更新RKNPU2环境

不同的板端系统需要安装不同的RKNPU2环境,下面分别介绍各自的安装方法。

说明: 如果已经安装版本一致的RKNPU2环境,则本节内容可以跳过。

1. 板端为Android系统

进入rknpu2目录,使用adb工具将相应的rknn_server和librknnrt.so推送至板端,然后启动rknn_server,参考命令如下:

# 进入 rknpu2 目录
cd Projects/rknn-toolkit2/rknpu2

# 切换到 root 用戶权限
adb root

# 挂载文件系统为可读写模式
adb remount

# 推送 rknn_server
# 注:在 64 位 Android 系统中,BOARD_ARCH 对应 arm64 目录;在 32 位系统中,对应 arm 目录。
adb push runtime/Android/rknn_server/${BOARD_ARCH}/rknn_server /vendor/bin/

# 推送 librknnrt.so
# 64位系统
adb push runtime/Android/librknn_api/arm64-v8a/librknnrt.so /vendor/lib64/
# 32位系统
adb push runtime/Android/librknn_api/armeabi-v7a/librknnrt.so /vendor/lib/

# 进入板端
adb shell

# 赋予可执行权限
chmod +x /vendor/bin/rknn_server

# 重启 rknn_server 服务
su
setenforce 0
/vendor/bin/rknn_server &

2. 板端为Linux系统

进入rknpu2目录,使用adb工具将相应的rknn_server和librknnrt.so推送至板端,然后启动rknn_server,参考命令如下:

# 进入 rknpu2 目录
cd Projects/rknn-toolkit2/rknpu2

# 推送 rknn_server 到板端
# 注:在64位Linux系统中,BOARD_ARCH对应aarch64目录,在32位系统,对应armhf目录。
adb push runtime/Linux/rknn_server/${BOARD_ARCH}/usr/bin/* /usr/bin

# 推送 librknnrt.so
adb push runtime/Linux/librknn_api/${BOARD_ARCH}/librknnrt.so /usr/lib

# 进入板端
adb shell

# 赋予可执行权限
chmod +x /usr/bin/rknn_server
chmod +x /usr/bin/start_rknn.sh
chmod +x /usr/bin/restart_rknn.sh

# 重启 rknn_server 服务
restart_rknn.sh

3.4 安装编译工具

3.4.1 安装CMake

在计算机的终端中,执行以下命令:

# 更新包列表
sudo apt update

# 安装 cmake
sudo apt install cmake

3.4.2 安装编译器

3.4.2.1 确认开发板的系统类型、系统架构

为了方便描述,后续文档使用”板端”来表示开发板端。

步骤1:确认板端系统类型

在计算机的终端中,执行以下命令:

adb shell getprop ro.build.version.release

如果输出是数字(Android系统版本号),则表示板端是Android系统:

12

否则板端是Linux系统:

/bin/sh: getprop: not_found

步骤2:确认板端系统架构

如果板端是Android系统,可以在计算机端执行以下命令查询系统架构:

adb shell getprop ro.product.cpu.abi

该命令的输出信息参考如下,其中arm64-v8a表示ARM 64位架构、第八版本的ABI。

arm64-v8a

如果板端是Linux系统,可以在计算机端执行以下命令查询系统架构:

adb shell uname -a

该命令的参考输出信息如下,其中aarch64表示ARM 64位架构。

Linux Rockchip 5.10.160 #183 SMP Tue Oct 24 18:52:11 CST 2023 aarch64 GNU/Linux
3.4.2.2 Android系统开发板安装NDK

适用范围: 本节适用于Android系统的开发板,如果板端是Linux系统,请忽略此节。

NDK下载地址(建议下载r19c版本):https://dl.google.com/android/repository/android-ndk-r19c-linux-x86_64.zip

解压软件包

建议将NDK软件包解压到Projects的文件夹中,位置如下:

Projects
├── rknn-toolkit2
├── rknn_model_zoo
└── android-ndk-r19c # 此路径在后面编译 RKNN C Demo 时会用到

此时,NDK编译器的路径就是 Projects/android-ndk-r19c 。

3.4.2.3 Linux系统开发板安装GCC交叉编译器

适用范围: 本节适用于Linux系统的开发板,如果板端是Android系统,请忽略此节。

GCC下载地址

板端为64位系统:https://developer.arm.com/-/cdn-downloads/permalink/legacy-linaro-gnu-toolchains/6.3-2017.05/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz

板端为32位系统:https://developer.arm.com/-/cdn-downloads/permalink/legacy-linaro-gnu-toolchains/6.3-2017.05/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz

解压软件包

建议将GCC软件包解压到Projects的文件夹中。以板端为64位系统的GCC软件包为例,存放位置如下:

Projects
├── rknn-toolkit2
├── rknn_model_zoo
└── gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu # 此路径在后面编译RKNN C Demo时会用到

此时,GCC编译器的路径是 Projects/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu 。

3.5 运行环境预检查

在开始模型转换前,建议一次完成以下检查:

# Toolkit
conda activate toolkit2
python -c "from rknn.api import RKNN; print('Toolkit OK')"

# 编译工具
cmake --version

# 设备
adb devices

如果需要运行RKNN C Demo,还应根据板端系统确认编译器路径:

板端为Android系统:确认NDK路径(如 Projects/android-ndk-r19c );

板端为Linux系统:确认GCC编译器路径(如 Projects/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu )。

浏览此主题 → · 入门路线 →