首发:知乎
作者:张新栋
之前的一些文章主要跟大家探讨如何在端上的cpu做AI的推理加速,推理框架不限于MNN、NCNN、Tengine、ArmNN等等。今天跟大家讨论一款比较有意思的设备,瑞芯微出品的RK1808。该芯片的其他参数,大家感兴趣的话可以网上搜索相关的datasheet,我们在本专栏仅关注其AI方面的能力。该芯片峰值算力可达3 TOPS(int8),同时也支持int16、fp16的混合计算,各类配套的工具链相当完善,wiki和社区支持也相对到位。
我们在进行开发板的评估的时候,一般只需要满足如下几个条件就可以进行NPU-AI相关的开发了(仅考虑int8的inference):
1、量化工具链是否完善
2、runtime工具链是否完善
3、调试链路是否完善
一般满足了上述几个条件,我们在进行AI相关的开发时候,过程会相对流畅一些。下面我们来看一下关于RK1808计算棒的AI开发流程,我归纳为如下几个步骤:
1、模型离线训练,这里你可以用caffe、mxnet、pytorch、tensorflow等各种框架进行AI模型的训练。瑞芯微支持的前端模型类型非常丰富,基本主流框架的模型文件都支持解析。
2、模型转换。这里需要借助瑞芯微提供的量化工具的工具链,工具链的使用方式比较人性化,github地址可参考RKNN-Toolkit。RKNN模型转换工具链和runtime-sdk的工具链是匹配的,所以在进行AI模型的网络结构设计上,需要注意尽量在runtime-sdk支持的op-sets里面进行选取,否则可能需要进行适当的网络裁剪才能进行模型转换。该步骤在我的项目经验当中,遇坑的记录较高,大家可以根据碰到的log信息进行调试。若是选取了非runtime-sdk支持的op,则返回第一步重新进行模型的构建即可。
3、runtime-sdk业务逻辑的书写。瑞芯微提供了两套流程让用户去验证AI模型的结果,第一种是提供了c/c++的rknn-runtime library,用户可以自行根据情况再native层进行sdk的封装和开发;第二种,瑞芯微基于开发的rknn-runtime library的基础上封装了对应的python接口,用户不需要开发native应用即可进行快速验证。(ps,瑞芯提供的C/C++和python的接口,在native和remote端的调试调用都支持,赞一个)。
4、调试方式,因设备而异。目前接触到的RK1808设备主要有两套调试模式,第一种跟android的开发调试比较类似,可以基于adb与设备进行连接和调试;第二种方式,类似RK1808计算棒,其内置了一个sshd服务,用户可以根据local ip地址进行ssh的相关操作。
上述基于rk1808的AI研发流程,后续我们会选取一两个比较有代表性的视觉任务的porting流程(物体检测、识别等视觉任务)跟大家进行讨论。大家如果有感兴趣的任务或者话题,可以下方留言。欢迎大家留言、关注专栏,谢谢大家!
- 参考
1、http://t.rock-chips.com/wiki.php?mod=view&pid=28
推荐阅读
专注嵌入式端的AI算法实现,欢迎关注作者微信公众号和知乎嵌入式AI算法实现专栏。
更多嵌入式AI相关的技术文章请关注极术嵌入式AI专栏