10. 常见问题解答

10.1 NPU环境准备问题

10.1.1 版本兼容性

NPU内核驱动和Runtime版本兼容

建议将NPU内核驱动升级到0.9.2或之后的版本。在遇到问题时,先更新到最新版本的NPU内核驱动。

RKNN-Toolkit2导出的模型和Runtime版本之间的兼容关系如下表所示

RKNN模型版本 Runtime版本
1.2.0 >=1.2.0 and <=1.5.0
1.3.0 >=1.3.0 and <=1.5.0
1.4.0 >=1.4.0 and <=1.5.0
1.5.0 1.5.0
1.5.2 >=1.5.2
1.6.0 >=1.5.2
2.0.0 >=2.0.0
2.1.0 >=2.0.0

10.1.2 如何更新NPU内核驱动

建议升级完整固件以更新NPU驱动,对应固件可以找厂商提供。

10.1.3 板端docker环境中如何使用NPU

在板端使用docker部署应用时,如果要使用NPU资源,需要在启动容器时,映射NPU相关资源,参考命令如下:

docker run -t -i --privileged -v /dev/dri/renderD129:/dev/dri/renderD129 -v 
/proc/device-tree/compatible:/proc/device-tree/compatible -v 
/usr/lib/librknnrt.so:/usr/lib/librknnrt.so ai_application:v1.0.0 /bin/bash

关注以下参数:

  • /dev/dri/renderD129:RK3588 NPU设备节点,Runtime依赖该节点以使能NPU。

  • /proc/device-tree/compatible:该文件记录SOC型号,RKNN-Toolkit Lite2等组件依赖该文件获取当前SOC信息。

  • /usr/lib/librknnrt.so:Runtime库存放位置,RKNN-Toolkit Lite2和RKNPU2 C API依赖该文件以使用NPU资源。

  • ai_application:v1.0.0:待启动容器所使用的镜像名和版本。

10.2 工具安装问题

10.2.1 RKNN-Toolkit2无法成功安装

在所有依赖库都已安装、但部分库的版本和要求不匹配时,可以尝试在安装指令后面加上"nodeps"参数,取消安装Python库时的环境检查。如:

pip install rknn-toolkit2*.whl --no-deps

10.2.2 PyTorch依赖说明

RKNN-Toolkit2的PyTorch模型加载功能,依赖于PyTorch。PyTorch的模型分为浮点模型和已量化模型(包含QAT及PTQ量化模型)。

对于PyTorch 1.6.0导出的模型,建议将RKNN-Toolkit2依赖的PyTorch版本降级至1.6.0以免出现加载失败的问题。

对于已量化模型(QAT、PTQ),我们推荐使用PyTorch 1.10~1.13.1导出模型,并将RKNN-Toolkit2依赖的PyTorch版本升级至1.10~1.13.1

另外在加载PyTorch模型时,建议导出原模型的PyTorch版本,要与RKNN-Toolkit2依赖的PyTorch版本尽量一致。

推荐使用的PyTorch版本为1.6.01.9.01.101.13.1版本。

10.2.3 TensorFlow依赖说明

RKNN-Toolkit2的TensorFlow模型加载功能依赖于TensorFlow。由于TensorFlow各版本之间的兼容性一般,其他版本可能会造成RKNN-Toolkit2模型加载异常,所以在加载TensorFlow模型时,建议导出原模型的TensorFlow版本,要与RKNN-Toolkit2依赖的TensorFlow版本一致。

对于TensorFlow版本引发的问题,通常会体现在"rknn.load_tensorflow()"阶段,且出错信息会指向依赖的TensorFlow路径。

推荐使用的TensorFlow版本为2.6.22.8.0

10.2.4 RKNN-Toolkit2安装包命名规则

以1.5.2版本的发布件为例,RKNN-Toolkit2 wheel包命令规则如下:

rknn_toolkit2-1.5.2+b642f30c-cp38-cp38-linux_x86_64.whl
  • rknn_toolkit2:工具名称。

  • 1.5.2:版本号。

  • b642f30c:提交号。

  • cp<xx>-cp<xx>:适用的Python版本,例如cp38-cp38表示适用的Python版本是3.8。

  • linux_x86_64:系统类型和CPU架构。

请按照自己所用的操作系统、CPU架构和Python版本安装对应的工具包,否则安装会失败。

10.2.5 RKNN-Toolkit2 ARM Linux版本

RKNN-Toolkit2没有ARM Linux版,如果需要在ARM Linux上使用Python接口进行推理,可以安装 RKNN-Toolkit-lite2,该工具可以在ARM Linux上用Python运行推理。

10.2.6 bfloat16依赖库安装不上

bfloat16的依赖库安装出错,如下:

bfloat16.cc:2013:57: note:  expected a type, got 'bfloat16'
bfloat16.cc:2013:57: error: type/value mismatch at argument 2 in templa
e, class Functor> struct greenwaves::{anonymous}::UnaryUFunc'
bfloat16.cc:2013:57: note:  expected a type, got 'bfloat16'
bfloat16.cc:2015:67: error: '>>' should be '> >' within a nested templa
RegisterUFunc<BinaryUFunc<bfloat16, bfloat16, ufuncs::NextAfter>>(
^
bfloat16.cc:2015:58: error: type/value mismatch at argument 1 in templa
e, class Functor> struct greenwaves::{anonymous}::BinaryUFunc'
RegisterUFunc<BinaryUFunc<bfloat16, bfloat16, ufuncs::NextAfter>>(

更换pip源为阿里源,或者更新RKNN-Toolkit2至1.5.0以及之后的版本(1.5.0以及之后的版本已经去除bfloat16库的依赖)。

10.3 模型转换常用参数说明

10.3.1 根据模型确定参数

10.3.2 RKNN模型的跨平台兼容性

10.3.3 量化校正数据的格式及要求

10.3.4 多输入模型dataset.txt文件的填写方式

10.3.5 确认rknn.config()的quant_img_RGB2BGR参数

10.3.6 rknn.config()的mean、std和quant_img_RGB2BGR的计算顺序问题

10.3.7 模型是非3通道输入或多输入时,rknn.config()的mean_values和std_values的设置问题

10.3.8 量化参数矫正算法和量化图片数量的选取

10.3.9 量化模型与非量化模型,推理时输入输出的差异

10.3.10 是否存在在线预编译的模式

10.3.11 RKNN-Toolkit转出来的RKNN模型可以在RK3566平台上使用吗

不可以。

RKNN-Toolkit转出来的RKNN模型适用于RK1806 / RK1808 / RK3399Pro / RV1109 / RV1126等平台;RK3566平台需要用RKNN-Toolkit2转出来的RKNN模型。RKNN-Toolkit2转出来的RKNN模型适用于RK3566 / RK3568 / RK3588 / RK3588S / RV1103 / RV1106 / RK3562 / RK3576等平台。

RKNN-Toolkit工具的使用说明请参考以下工程: https://github.com/airockchip/rknn-toolkit

RKNN-Toolkit2工具的使用说明请参考以下工程: https://github.com/airockchip/rknn-toolkit2

10.4 模型加载问题

10.5 模型量化问题

10.6 模型转换问题

10.7 模拟器推理及连板推理的说明

10.8 模型评估常见问题

10.9 C API 使用常见问题