探游·R329·AI部署实战(一)

1. 先提个纲

今天上手一块板子:R329 EVB板。

R329来自国产芯片厂商全志科技,定位是智能语音芯片。
其上一代产品是R328,19年用在了很多智能语音产品上,比如天猫精灵、百度语音助手等。
为什么能用进去致可以认为是功耗低、价格低、性能够用、产品阔以(绝不不是因为前东家所以才夸~)。

在2020年,全志推出了新一代的R329,主打的是更优功耗,更高性能,更高性价比,其次的亮点是里面的Arm china 0.256T AIPU,双核DSP HIFI,这我刚拿到了开发板r329_evb5_v1,就迫不及待地上手了~

上手之前我稍微构思了下,觉得应该做成系列记录教程,由浅入深地记录我的开发过程,让工程能力偏弱的算法工程师也能跟着一步步看懂,然后上手部署实践。

于是我就想着以我朋友(接近新手)的视角来玩这块板子,分为三个阶段,上手阶段,应用阶段,魔改阶段。

上手阶段:
就是从一开始的板子上电,接线,搭开发环境、看文档、配置编译内核等等,总之是板子跑起来,为后续的开发做准备;

应用阶段:
我们尝试交叉编译过程,移植深度学习推理框架(如NCNN,TNN等),使用zhouyi AIPU跑深度学习模型,使用双核DSP做回声消除等等,最终的目的是跑一个语音模型实现关键词唤醒,跑yolo实现目标检测功能,咱先实现功能,性能、精度调优留到第三步。

魔改阶段:
这个阶段,我们越过应用者视角,进入精英开发者视角,就NPU、CPU的硬件特点进行深入hack,了解分析底层的硬件原理,知道每一条指令跑在硬件的哪个部分,知道在任一时刻,该指令出现在哪个地方哪个阶段;深入的剖析AI模型部署的方方面面,比如AI算法优化啊、量化分析啊,算子性能优化啊,性能分析啊等等,总之我觉得这部分是最有意思的。

2. 上手篇·新手级记录过程

首先,你得拿到板子对吧,怎么拿/p>

要么淘宝买,要么申请试用(下阶段的试用申请可以私信我了解哟)!

板子拿到了,我相信你跟我朋友(没接触过嵌入式有AI基本了解的某一线大厂算法工程师,简称朋友)一样有这样的疑问/p>

“这块板子能干啥

我想了下,这么回的:
“你用过智能音箱没度的小度、小米的小爱,阿里的天猫精灵等等,你语音一叫它就答应,还能语音互动;你去吃海底捞的时候,会发现一个端菜的机器人对吧,这种机器人可以分辨行人、桌子、菜品,你挡住它道了还会跟你battle;刚刚所说的那些产品 那些功能都是这样的板子实现的,具体来说就是在板子上跑了深度学习语音模型、图像模型比如KWS,YOLO啊啥的。”

解决了朋友的能干啥的疑问之后,我问了下朋友:

“从你的角度来看,你觉得应该要有哪些资源以及知识才可把板子跑起来后把AI模型部署上去实现上面说的那些功能

朋友回答说:

“。。。我还是之前在大学的时候接触过嵌入式,现在基本都忘了,我也不太清楚了呀,你突然这么一问,现在完全是懵的呀~”

也对,其实也理解,边缘嵌入式端模型工程部署是伴随着AI的发展而蓬勃兴起的,17年左右开始发展,在19年到达顶峰,目前已趋于平缓;而原来学校阶段基本教的都是嵌入式的基础知识,毕竟那时候AI还没火起来呢,现在相当于在原来的嵌入式基础上加入了AI的相关属性,因此 一部分的嵌入式工程师学习深度学习的知识,或者新晋的深度学习算法工程师学习嵌入式知识,从而就衍生了边缘端部署优化工程师的岗位,属于一个偏小众的领域。

这一顿battle之后,就得吃中饭了,先去吃饭先~好好做个干饭人~拜拜~

俺回来啦~开整开整~~~~~~睡午觉~

。。。。。。

(下次再也不能在周末睡午觉了,比较费钱,刚吃完午饭又得吃晚饭了。。。)

好在不饿,先开个箱吧~

上电后,灯亮了,就知道硬件没啥大问题了,接下来开始准备软件环境。

板子的通信接口有两种一种是adb连接,一种是串口连接,我们作为开发者,两个都得配好。

第一步先装驱动,在http://netstorage.allwinnertech.com:5000/sharing/dsn8IbX8s链接下载驱动,然后在压缩包路径:

于是去测一下麦克风,在板子上测得数据,然后adb pull到电脑上听一下效果,一开始用arecord指令出来很大电流声,指定参数如下图所示就声音正常了。

此时按照SDK下载方法一步步执行就好啦~

然后你可以开始下代码啦,但此时你发现不知道宿主环境是啥/p>

找到文档《Tina Linux 系统软件 开发指南》

直接按照官 的流程来(行文此时正在编译中),编完后烧录一下看有没有什么问题。。。。。

A few years later……

然后上电,完美~

可以看到AIPU是默认驱动支持了的,但是在软件包配置部分:

确保宿主机能正常运行。

我们的目标平台是arm,因此选择arm目录;
目录内有glibc跟musl两套库,我咨询官方得知是musl库,于是我一路先择到:

推测可能是:

  1. 编译器版本的问题,编译内核的跟应用的而不一致,
  2. 也有可能是因为宿主机是64bit的,而我们目标板的程序是32bit的(试了下aarch64也不行)。

因此我们先用static编译顶一下:

至此,整个流程算是跑通啦~

小结一下:

  1. 文档还是有一些盲区的,对于一些新手朋友不是很友好,建议直接上docker啊,这样我就完全不用管环境配置问题啦~
  2. 主要的玩点在于HIFI双核DSP跟0.25TOPs的AIPU核,但是这两个目前都没法用啊,这部分希望尽快解决呀~后面的语音+图像模型部署还等着上呢~我总不能跑在算力10几个GFLOPs的A53核上 吧~
  3. 文档开放的不够全面,比如AIPU的一系列开发文档(手动狗头)。

呼~ 开篇总算水完啦~我这次是带着朋友一边做一边写的,根据朋友的建议,特意把某些地方写的很繁琐,希望大家不要嫌弃呀~下次见,掰掰~

相关阅读:

  • R329开发板教程之四|Debian系统初体验
  • R329开发板教程之三|视觉模型实时运行

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年7月7日
下一篇 2021年7月7日

相关推荐