经过前面几章的铺垫,接下来的章节就开始进入到 npu 相关的开发测试了。本章呢,记录下我分别在 solus 上对 npu 相关例程的仿真以及实际在 yy3568 上进行的 npu 例程测试,本章的重点是在 solus 上仿真环境的搭建以及为了更友好地在 yy3568 和 solus 上传递文件而在 solus 上搭建 nfs 环境走的坑。本章记录了我碰到一下几个问题:
搭建仿真环境安装 python 依赖时,bfloat16 软件包使用 pip 直接安装出错(error: ‘unique_ptr’ in namespace ‘std’ does not name a template type),解决方法是下载最新的源码包并对最新的源码打 sdist 包并使用 pip 本地安装搭建 nfs 环境时竟然出错,使用 systemctl status nfs-server.service查看出错(rpc.nfsd: writing fd to kernel failed: errno 111 (connection refused)),逐步定位是 /etc/netconfig 内容不正确导致(竟然为空,从网上找到 sample 粘贴进去解决问题)默认 buildroot 编译的根文件系统没有 mount.nfs 支持需要放开1. 在 solus 上搭建 npu 仿真环境这里主要参考的资料是:
rockchip_quick_start_rknn_sdk_v1.3.0_cn.pdfrockchip_rknpu_user_guide_rknn_api_v1.3.0_cn.pdfrockchip_quick_start_rknn_toolkit2_cn-1.3.0.pdfrockchip_user_guide_rknn_toolkit2_cn-1.3.0.pdf刚好 solus 上有 python3.8 版本,所以就按照 python3.8 的依赖进行安装了:
python3.8 -m pip install -r requirements_cp38-1.3.0.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
因为 pypi 上的 bfloat16 这个包有问题,问题截图如下:
最新的 bfloat16 已经修复了这个问题,我之前想的是临时修改 pip 下载的 bfloat16 的源码发现找不到源码,后来就在 github 上找到的上游仓库的源码,下面就是怎么打包并安装了,从网上了解到了 source distribution,然后尝试在 bfloat16 的源码执行 python setup.py sdist 顺利的打包出来了,接着就是直接 pip install xxxx 安装就可以了。这个问题解决了之后,后面步骤就参考文档进行模型测试了,我选取的是 external/rknn-toolkit2/examples/tflite/mobilenet_v1 这个例程,结果截图如下:
从图中可以看到仿真模拟结果显示的 top5 内容,后续可以和在yy3568上实际运行的结果进行对比。
2. 在 solus 上搭建 nfs 环境并在 yy3568 上测试同样的 npu 例程这个文章之所以搁了这么就的原因就是这个 nfs 服务的问题,困扰了我将近两天,要不然文章昨天就发出去了。因为我开始是使用 eopkg install nfs-util 从官方仓库安装的 nfs 服务软件包,竟然不能正常启动 nfs-server.service,我感觉很惊讶,接着我就发了帖子start nfs-server.service failed,还好有很热情的社区伙伴回复,我尝试手动安装最新版本的 nfs-util-2.6.3 还是无法正常启动 nfs 服务,我尝试根据 systemd 的错误打印去看 nfs-util 的代码。在这个过程中我对使用 journalctl 查看日志又了进一步的印象,比如:
使用 sudo journalctl -x 相比普通用户的 journalctl 可以看到更多内容的打印信息journalctl -p xx 可以过滤要打印的日志优先级,如果是单个数字,小于等于这个级别的日志都会打印出来;如果是一个范围:1...2,那么只会打印1和2这个级别范围内的打印信息。感谢 journalctl ,也正是这个打印后来逐步帮助我解决了这个问题:
首先我在 https://raindocs.blogspot.com/2019/09/kernel-svc-failed-to-register-nfsaclv2.html?m=1 了解到 nfs-server 之前需要启动 rpcbind 服务,然后我就尝试使用 systemd 启动 rpcbind 服务,我尝试启动这个服务并尝试使用 journalctl 查看日志,发现会打开 /etc/netconfig 文件,我的这个文件竟然是空的,所以我搜索了一下这个文件的 sample,找到了相关的内容复制到这个文件如下:
udp6 tpi_clts v inet6 udp - -tcp6 tpi_cots_ord v inet6 tcp - -udp tpi_clts v inet udp - -tcp tpi_cots_ord v inet tcp - -rawip tpi_raw - inet - - -local tpi_cots_ord - loopback - - -unix tpi_cots_ord - loopback - - -然后再启动 rpcbind 就正常了,接着启动 nfs-server 也就顺利启动了,解决了之后我现在本地挂载测试下通过了,截图如下:
下一步就是在 yy3568 上测试了,发现默认竟然没有 mount.nfs 工具,只能在 buildroot 中放开 nfs utils 编译,将需要的 mount.nfs 和依赖库 libtirpc.so.3.0.0 tftp 过去,就可以正常 nfs 挂载了,测试external/rknpu2/examples/rknn_mobilenet_demo 例程,截图如下:
对比在 solus 上的仿真结果,发现在 yy3568 的 npu 上进行测试结果具有明显的一致性。
贴片二极管是什么?怎么看型号?
大联大将携电商平台亮相第三届全球传感器高峰论坛
微美全息芯片技术的升级,保持了在行业中领先的地位
双超透镜:根据光线条件在拍摄模式之间切换
在Python中实现异步编程(附源码)
【风火轮YY3568开发板免费体验】第五章:在 Solus 上运行 npu 例程并搭建 nfs 环境实现在 YY3568 上实际运行 npu 例
一文看懂单模光纤和多模光纤的基础知识与区别
出乎意料强大! iPad mini及iPad 4终登场
cd4051内部结构图及真值表
技术方案:高精密划片机
MLCC价格只涨不跌_需警惕价格操纵
【PCBA方案开发设计】无刷电机和数字气压传感器的打气泵方案
STM32 Power Shield用于IoT设备的超低功耗监控板
一阶电路的全响应和三要素法
5G版小米MIX3亮相 下载速率最高达2Gbps以上
中国传感产业化四大方向分别是什么
三星QLED电视销量暴增 8K电视起到了重要的作用
变相降价华为Mate60 Pro乐臻版上架
智慧园区系统将会为人们提供更好的生活服务
电涡流传感器有何特点