您当前的位置:首页 > 博客教程

飞蛾加速器好用吗

时间:2022-12-20 17:34 阅读数:5594人阅读

*** 次数不足,请联系开发者***

飞蛾加速器好用吗

小而准:小蜡蛾启发定向麦克风?澎湃号·湃客_澎湃新闻-The Paper“如果在未来的某一天,有关飞蛾听觉的研究能启发某种助听器,那就太好了。Lara Díaz-García表示。会议摘要截图|参考文献[3] 大型动物的双耳距离较远,可以让它们区分声音到达一只耳朵的时间360游戏加速器app下载_游戏加速器安卓版下载-酷酷游戏网360游戏加速器是360官方推出的一款网游加速器,能够有效的解决游戏延迟。360游戏加速器能够有效解决网卡问题,游戏延迟问题,丢包等等问题。赶快下载360游戏加速器,畅玩游戏!软件特色永远的。

Moth下载安装,游戏官方正版下载-OurPlay加速器OurPlay加速器为广大Moth玩家提供专线Moth官网下载安装,高速下载官方最新正版,提供Moth的最新游戏资讯及Moth游戏礼包码、攻略、评价等内容信息,更多Moth相关信息尽在OurPlay加速器。APEX英雄第十赛季新地图新赛季加速器推荐一只飞蛾并没有碰到蜡烛的火焰,但火焰却被公主熄灭了。飞蛾很感激公主,并告诉公主,我是故意飞进蜡烛的,但我可以帮你找到你心爱的人,但我只有一个条件,对于我现在的诅咒(指现在的飞蛾身体)。

我在FPGA组干什么CNN 加速器身为一个知名算法公司的不知名FPGA 工程师,最怕朋友问我到底在干什么。经常发生的对话大体这个样子:我:“旷视科技,侬晓得伐?”朋友:“貌似听过。”我:“支付宝不是有个刷脸支付么,用的就是我们的技术。”朋友:“哦~那个是你做的?”我:“不不不,那个是同事做的。我是做FPGA 加速器的。”朋友:“什么??FPGA是什么?”我:“哦,FPGA是(以下省略5000字)”基本上不等我介绍完FPGA ,朋友已经开始玩手机了。我是一个懒人,作为常年深海潜水党,出来冒个泡就不再费笔墨介绍FPGA 这些东西了。所以阅读这篇文章的朋友,我就假定你已经知道FPGA,也听过神经网络,知道CNN 是什么。当然最好也了解贵司的名号。不了解没关系,贵司FPGA 组常年招聘工程师、程序猿,有意者请联系tidbithr@megvii.com。起源作为专栏投稿,讲讲我们组的历史。据考究,我和贵司的缘分八成是始于这篇文章:DoReFa-Net: Training Low Bitwidth Convolutional Neural Networks with Low Bitwidth Gradients​arxiv.org/abs/1606.06160大概3 年前,贵司大牛@周舒畅博士和其他小伙伴搞出来了这个东西。可能是带着“既然网络都弄出来了,不让它发挥效果岂不是很可惜?!”的心态,FPGA 组成立了。最早组内只有两人:leader @梁喆和旷厂资深实习生@张宇翔。后来我开始加入,再后来陆陆续续来了很多小伙伴。3 年前,还没有现在遍地开花的AI 加速器,更别提低比特CNN 加速器了。所以组织最初的目标就是支持低比特CNN 加速,在FPGA 上实现并生产。如果你期待看到一个推陈出新的加速器,那么我可能要让你失望了。第一代CNN 加速器没有任何高深的东西,因为我们一直在追求小而快的目标。卷积核设计众所周知,CNN 加速器最核心的、计算量最大的部分就是卷积核了。受限于篇幅,这篇文章主要介绍卷积核,至于其他操作,后续补上。在介绍我们的设计前,先扯一些其他的。神经网络的操作多种多样,结构五花八门,所以很自然的,市面上的神经网络加速器也不可能结构单一。如何判断一个神经网络加速器的优劣,大家一般都会说算力有几Tops,功耗有多少多少W,跑Imagenet 有几个fps。如何在不丧失兼容性的前提下,尽可能高地提高算力降低功耗是大家都很头疼的问题。不过之前也提到了,我们设计的最初目标是支持低比特神经网络加速,换句话说,多种多样的神经网络操作兼容不是我们优先考虑的问题。而且要在资源有限的小型FPGA 上实现,削减资源用量是十分必要的。GoogleNet 要conv1x1,conv3x3,conv5x5,还要maxpool 3x3,AlexNet 还要全连接。不行啊,臣妾做不到啊,能不能只做conv3x3?算法说可以!嗯,我就是不要脸地用算法偷懒的。哪些做起来很复杂很慢,哪些操作硬件实现没有什么加速,双方可以顺畅地交流。得益于贵司得天独厚的算法能力,加速器的设计被极大地简化了。为了更明确地说明我们和其他人的差距,不妨先看一个其他的设计:Eyeriss StructureEyeriss 是17年发表的嵌入式加速器,我个人觉得它很有代表性。加速器的设计考虑到了支持多种卷积核尺寸、feature 的大小等。它们有一些典型的特点:有一个很明确的PE Array,用来支持不同尺寸的卷积,甚至全连接;有一个复杂的Global Buffer,通过从Buffer 重复取出的feature 来决定当前要进行的卷积计算的位置。如果你设计过类似的结构,考虑到不同卷积尺寸下的不同stride ,地址跳转真的神烦。来看我们的结构:简单吧,Google 绘图两分钟搞定。丑话写在前面,先看Limits:Layer-wiseConv 3x3, Stride 1 or 2Limited ChannelLimited Feature Width从存储入手Feature 我们记为3 个维度:channel, width, height],Weight 记为4 个:input-ch, output-ch, kernel-width, kernel-height]。我们的设计是layer-wise 的,即数据从DDR 出发,每做一个layer 的计算就返回DDR。那么Feature 在DDR 中如何存储呢?简单,它看起来什么样我们就存成什么样!我们完全按照channel-width-height 的顺序从地址低位到高位的形式来存储。那么从DDR 输出的时候,当然也希望是按照地址从低到高的顺序读出,毕竟乱跳DDR 地址是很降DDR 效率的。Feature Line Buffer好像如果数据按照这个顺序输出了,又希望计算带宽比高,不想从DDR 载入相同数据,Line Buffer 是必不可少的。之所以叫Line Buffer,是因为我们采用ISP 滤波器设计里常用的办法:让卷积的窗口划过待计算的Feature。以conv3x3,stride 2 举例,就至少需要3 行Buffer。那么一个Buffer 就需要channel x width x bit-width / 8 (Byte) 的空间。不过庆幸的是,我们是低比特啊,大部分时候bit-wdith 都是2,很爽有没有?所以假如channel=16,width=2048,那么一行需要16 x 2048 x 2 / 8=8192 Byte=8 KByte。一个Xilinx Zynq 系列FPGA 的BRAM 大小是4KByte。是不是也没有用很多资源?当然,你很快就会发现问题,神经网络channel 数量总是很大,那么Line Buffer 就会相应变大。同时,这种结构没法简单扩展到其他的卷积尺寸,例如conv5x5,就需要更多的Line Buffer。所以,又回到了最初的说明,我们的设计是有强烈的限制的。因为有不一样的需求,也就有了不一样的设计。Weight Buffer为了降低重复载入Weight 的DDR 带宽,Weight Buffer 我们采用了更极端的方式,将一层layer 计算所需的全部Weight 都放在片上RAM 里!是不是很粗暴?同时,为了隐藏从DDR 载入的时间,我们还使用了ping-pong Buffer 的结构。即当前layer 计算时,可以同时向Weight Buffer 写入下一个layer 计算需要的Weight。所以我们一般的设计里都需要使用近百块FPGA BRAM。尽管是低比特,这样的设计仍然有几个问题:由于计算并行度的需要,BRAM 总是要同时读,这造成了巨大的动态功耗;Weight 的大小也成为了网络的瓶颈,即channel 数量不能过大。卷积核前面已经说过了,卷积核采用是让卷积窗口划过待计算Feature 的方法实现的。具体划动的方式,就是从左往右从上往下啊!回滚什么的操作,烦死了,不做不做!既然没有回滚,那么每一个clock cycle 要做的计算就得足够多;既然每一个clock cycle 都要做大量的并行计算,那么数据就得预先排列好。我们在Feature Line Buffer 里把数据进行延展和复制,使每个clock cycle 都产生如下所示的数据,以ic-batch=16,oc-batch=16,kernel-w=3,kernel-h=3 为例:图中亮绿色的部分只是重复其余部分的数据15 次。以一段伪代码简单说明,一个Feature 点的卷积计算也就被我们拆分成了下面这个结构:for (c=0;c

天行加速器部分文章、数据、图片来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知删除。邮箱:xxxxxxx@qq.com