|
本帖最后由 jefferyzhang 于 2019-10-12 09:49 编辑
简介:
1808计算棒作为一个扩充运算单元,是完全可以组成计算棒阵列运算的。这里我们会提出几种思路讨论,并提供一个主动模式的多计算棒运行Sample给大家。
一般来说,使用多计算棒组成阵列的目的是为了:
1. 后端集群运算,避免前端重新改造。
2. 整合计算资源,共享计算资源,提高资源利用率。
3. 解决单个计算棒计算瓶颈,提高帧率。
4. 为上位机提供更多算力。
思路分析:
针对不同的需求,一般来说有3种设计思路:
1. 每个计算棒拥有同样的一个或多个完整模型,通过负载均衡分配每个计算棒推理任务。
2. 每个计算棒只运行模型的一部分,多个计算棒流水线作业,共同计算完成一个模型。
3. 每个计算棒拥有不同的模型,一个上位机通过连接多个计算棒同时进行多种模型的计算。(DEMO主要提供这种)
对于第一种情况:多个计算棒都在运行同一种模型,针对每个计算棒进行负载均衡,那么就可以通过重复瓶颈的方式提高帧率。运行速度取决于重复瓶颈的数量。
对于第二种情况:需要将一个模型拆分成多个子模型,分布在不同的计算棒上做成流水线串行运算,那么就可以通过拆分瓶颈的方式提高帧率。运行帧率取决于最慢的那个子模型。
对于第三种情况:有些案例是需要多个模型协作的,那通过部署多个计算棒,每个计算棒运行单一模型,可以直接扩充上位机运算能力。
三种情况其实对于上位机和计算棒的物理连接并没有太大区别,仅仅是之间的软件设计交互不同而已。
下面我们针对最简单的第三种情况来进行实例操作。
物理连接方式:
1. 计算棒切为主动模式运行。主动模式计算棒会虚拟为一个USB网卡和上位机通讯
2. 多个计算棒通过USB和上位机相连
3. 多个IPCamera通过以太网和上位机网卡相连
网络拓扑:
1. 网络结构上,计算棒通过上位机桥接,得到和上位机、IPCamera同一个网段IP。
2. 所有设备数据都在同一网段收发,这样开发上就方便了许多。
1808计算棒业务逻辑:
1. 直接通过网络获取需要的数据流(本Demo里是通过rtsp获取ipcamera数据)
2. 进行网络推理,处理输出结果。
3. 将最终推理结果发送给上位机
上位机业务逻辑:
1. 控制计算棒开关和工作模式,分配计算棒工作任务
2. 接受各个计算棒发来的结果数据
3. 对结果数据进行应用(本Demo不做其他应用)
FAQ:
Q:计算棒能否支持及联?
A:支持,需要自己开发逻辑代码,没有通用业务逻辑。计算棒仅仅是作为一个运算单元使用而已,不写代码他是不会知道你想如何及联或并行运算的。
Q:如何拆分模型?
A:转换RKNN时候根据设定不同的input和output节点来实现模型的拆分(建议不要拆散“卷积-激活-池化”这样一组操作)。
Q:被动模式是否可以多计算棒运行?
A:可以,在支持被动模式的上位机上可以识别不同计算棒ID,通过ID指定运行的计算棒(当前版本C/Python均已支持)
Q:主动模式是否可以多计算棒运行?
A:可以,主动模式和上位机会识别成USB网卡,插入多个计算棒相当于插入了多个网卡,根据你的路由器或者DHCP服务器,每个计算棒都会有一个独立IP可以访问
Q:上位机Linux如何桥接计算棒?
A:二楼Sample里我会放出脚本。
------------- Sample 请继续看2楼 --------------> |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|