经过前面几章的铺垫,接下来的章节就开始进入到 NPU 相关的开发测试了。本章呢,记录下我分别在 Solus 上对 npu 相关例程的仿真以及实际在 YY3568 上进行的 npu 例程测试,本章的重点是在 Solus 上仿真环境的搭建以及为了更友好地在 YY3568 和 Solus 上传递文件而在 Solus 上搭建 NFS 环境走的坑。本章记录了我碰到一下几个问题:
这里主要参考的资料是:
刚好 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上实际运行的结果进行对比。
这个文章之所以搁了这么就的原因就是这个 NFS 服务的问题,困扰了我将近两天,要不然文章昨天就发出去了。因为我开始是使用 eopkg install nfs-util
从官方仓库安装的 nfs 服务软件包,竟然不能正常启动 nfs-server.service,我感觉很惊讶,接着我就发了帖子start nfs-server.service failed,还好有很热情的社区伙伴回复,我尝试手动安装最新版本的 nfs-util-2.6.3 还是无法正常启动 nfs 服务,我尝试根据 systemd 的错误打印去看 nfs-util 的代码。在这个过程中我对使用 journalctl
查看日志又了进一步的印象,比如:
感谢 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 上进行测试结果具有明显的一致性。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !