基于FPGA的CNN算法移植(一)概述

更多精彩内容,请微信搜索“FPGAer俱乐部”关注我们

做了半年的CNN算法移植,有时候需要回避一些东西,所以写的东西不能太多。简单提一下自己的总结,既是笔记,又是与网友们交流讨论。

        CNN兴起,深圳这个躁动的城市很多人就想趁着这个机会捞一笔风投。于是各种基于CNN的在GPU上的demo出现后立马就成立公司,招FPGA工程师或者ARM 等嵌入式工程师,希望通过他们进行产品落地。毕竟GPU功耗高,散热不好,价格不便宜。于是有些公司招聘FPGA工程师,就问:你会做算法优化吗?

         基于FPGA的CNN算法移植误区一:FPGA工程师做算法优化。

        嗯,已经很不错了,知道将CNN移植到嵌入式平台需要做优化。可是百度一下CNN优化策略,那些基于tensorflow,caffe的东西是FPGA干的活儿吗(为啥不是算法工程师要懂FPGA呢,为难一下算法工程师)?  当然有人说作为FPGA工程师对算法一无所知没有核心竞争力,我想说CNN的算法压缩是在它原有的开发平台上进行的,不是在FPGA上进行的,愿意学CNN的算法开发平台的同学当然好,只是难度很大。还有一点,作为FPGA工程师目前形势很严峻,我们自身有太多东西要学,因为现在FPGA都往SOC发展了,xilinx推出的一大堆工具等待着我们去熟悉。还有一种思维那就是觉得xilinx很可能也走不远,所以趁早转行了的。

        基于FPGA的CNN算法移植误区二:FPGA工程师先做demo再慢慢优化。

        有些公司稍微好点,最后明白了算法优化是算法工程师干的事情。后面要求FPGA工程师按照目前这个样子做一款Demo出来,性能不好没关系,后面再慢慢优化。姑且不论HLS ,SDsoc的实现方法对于不同的算法差异有多大,因为这两个工具我才刚玩,可是基于HDL设计的硬件架构,算法改动一点点可能导致整个FPGA项目推倒重来。所以对于FPGA的工程,要不就是目前这个样子出结果。要不就是推倒重来。—— 或许HLS,SDsoc不是,你可以不断的选择优化策略。

         基于FPGA的CNN算法移植误区三:性能不好怪FPGA工程师硬件架构不好?

        这个我只能说或许,可是一般的FPGA工程师能去定制架构水平也不会太差,不至于胡拼乱凑一个工程出来,特别对于庞大的CNN想胡拼乱凑都难。你必须思路清晰,结构清晰。还有一个主要的,对于CNN算法移植FPGA硬件上真的开不出花儿,这个观点知乎上也有大牛提到了。所以深鉴公开DPU 架构,google公开TPU 架构,为何?因为硬件就是这么玩的,没啥新意。

         

         这个是深鉴科技的 笛卡尔架构。对于FPGA工程师是不是很熟悉,就是典型的zynq架构,谁都会这么去设计。深鉴还有一款 亚里士多德 架构,把AXI4换成更高速的,外面再加一个处理器,和英伟达的GPU 架构类似。总结起来就是input buffer,处理,outputbuffer。只是inputbuffer和outputbuffer的数据怎么来怎么去,处理的时候有多少资源可以充分利用。例如google推出TPU的“脉动”结构,FPGA工程师一板子甩他脸上:你脉动个XX,不就是我们经常挂嘴边的流水线处理嘛。

        基于FPGA的CNN算法移植误区四:算法实现了,剩下FPGA去实现就行

        唉,真的好伤心,为啥这个锅要FPGA工程师背。前面说了,做算法移植是要优化后才能移植,不能直接移植,除非很小的算法(CNN 有小的吗?)可是算法工程师不懂硬件啊(是啊,为何要求我们硬件工程师懂算法呢),他优化的方法不一定正确,还有就是这里优化了,那里问题又出来了。所以算法demo出来后要不断的沟通如何去优化,FPGA工程师不断的去评估性能得出移植瓶颈反馈给算法工程师。如此反反复复。        

 

        误会解除了,与算法工程师沟通好了那么就要做FPGA架构了(我这个是纯HDL的方式)。查主芯片有多少资源可以用,可以并行加速多少路,如何实现数据交互。这些定制下来了你就可以列一个表格,去算你的项目latency了,这就是你的性能。性能达不到就去看看DSP 是不是充分利用了,尽量不要闲置。性能还达不到,就要反馈给算法算法移植瓶颈了,对于CNN通常是中间结果太大,就是缓存太大。FPGA工程师可以并行N路进行加速,可是DDR送数速率只够N/3路并行计算 —— 对,这就是典型的CNN算法移植瓶颈。

        补充一点:做FPGA架构当然要去看软件的架构了。很多纯算法工程师不懂硬件,看下表。他们由下表就认为选择SqueezeNet网络作为项目算法网络结构,因为运算量MACC最小,参数也小,精度过的去。可是这个SqueezeNet目前没有找到一个效果不错的项目。这个表格是一个硕士他在做分类网络的时候给出的,他不懂FPGA,最后他选择了SqueezeNet,并且把MACC从8.6亿次优化到了5.3亿次。可是最终他的项目性能是 0.51帧(best)的速度

       

         这里给大家看两个案例,看MACC ,案例2的MACC巨大,可是在7045上却可以实现17.53帧。因为SqueezeNet和YOLO网络的相差太大了,称之为  架构的魅力 (记住我说的是软件)

        图1 是YOLO的软件算法架构,很简洁。HLS 也喜欢

       图 2 是SqueezeNet 结构

                   

          

                                       图 1   

 

 

   

 

                                          图 2 

 

 

        个人水平有限,以上言论抛砖引玉,有什么总结不当的地方欢迎及时指出来一起讨论。


本文转载自http://www.cnblogs.com/sepeng/p/8572121.html,如涉及侵权,请私信小编删除。

============华 丽 的 分 割 线============


想加入我们FPGA学习交流群吗?可以长按或扫描以下二维码,审核通过后我们邀请您加入

这些微信群旨在打造一个提供给FPGA工程开发人员及兴趣爱好者(统称“FPGAer”)进行技术交流、答疑解惑和学习的平台。而且我们也将会通过网络举办FPGA技术讲座,分享相关研究文献 



了解更多FPGA知识可以长按或扫描以下二维码关注FPGAer俱乐部



  • 5
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值