本篇文章1580字,读完约4分钟
雷锋。(公开号码:雷锋。本文来源于王天琦在《如何用fpga加速卷积神经网络》一文中提出的问题。],雷锋的人工智能技术评论被授权转发。
以下内容主要引自Xi邮电大学李涛老师关于连接智能和符号智能的报告,以及华硕于飞马在fpl2016上的文章和幻灯片
fpga上卷积神经网络的可扩展模块化rtl编译
地址:fpl2016/slides/s5b_1.pdf
建议阅读原文
我在计算加速度方面做了一些工作。就我个人而言,我觉得首先需要考虑几个问题:什么样的应用需要加速,应用的瓶颈是什么,然后根据前面的工作选择合适的方案。
过早地沉迷于fpga的技术细节(hdl或hls、芯片和接口)使得只看到树木而看不到森林变得容易。目前,软件定义网络/flash/XXX已经成为大势所趋。当我宣布小组会议开始时,我和我的同志们谈了谈。算法是轮廓,轮廓是开放的;软件是妈妈,软件是爸爸,软件比基金会委员会更亲密。因此,建议先看看cnn的算法,拿一些开源代码来运行经典的例子(lenet,alexnet等),看看输入和输出,找出算法。
例如,下面是一个cpp和opencl的实现
nachiket/papa-open cl
地址:github/nachiket/papa-open cl
下图来自于飞·马的幻灯片
可以看出,cnn算法主要由conv、汇集、范数等组成。工作时,输入图像和权重,最终得到预测结果。
接下来,使用profiler(例如perf)来分析软件算法,并寻找热点和性能瓶颈。cnn最耗时的事情是conv二维卷积。性能瓶颈主要在于卷积时需要大量的乘法和加法运算,计算中涉及的大量权重参数会带来大量的内存访问请求。
接下来,我们调查了以前的工作和当前的灌溉热点。dsp应该适合如此大量的乘法和加法运算,这是理所当然的,但在美国有线电视新闻网,人们不需要这么大的位宽,有时8位就足够了。dsp使用32/64位乘法器和加法器是一种浪费。所以每个人都开始减少位宽,并堆积几个算术单位。面对大量的内存访问请求,每个人都开始设计各种棘手的缓存。
这里有一些给每个人的灌溉指南
还有以下硬件设计
有人根据dsp风格设计了加速器
Ceva还为cnn发布了一系列ip
有人使用脉动数组或数据流样式
有人设计了一种特殊的芯片,比如坎布里克
还有你提到的fpga
当一切都到了硬件层面,可用的手段实际上是有限的。无非是堆积资源和削减水资源。或者做一些位级技巧,如乘法器改变查找表等。这些技能在二十年前的许多dsp教科书中都有描述,所以就用它们吧。例如,这本书在测试前是有效的。
超大规模集成电路数字信号处理系统keshab的设计与实现
典型的fpga实现可以参考于飞·马的文章,无论是conv还是池化,根据葫芦画设计数据路径,切割流程,然后考虑状态机和控制信号。这取决于每个人的基本技能。
例如,下图所示的conv模块,主要是用一堆乘法器和加法器树来建立数据路径,切断自来水,然后添加控制信号。
共享也是相似的
还有诺姆
最后,通过路由器将这些模块连接起来,并在外面套一层控制模块,密封为ip。
剩下的就是集成到你的系统中(microblaze、nios或arm,配备dma,并编写填充数据的驱动程序,所有这些都有自己的方式)。建议在rtl之前写好文件,并在端口、注册和软件api上达成一致,否则在写的时候很容易混淆。
总的来说,有线电视新闻网的应用程序管道控制比中央处理器简单。不写cpu的危害是很烦人的,而且它不需要写汇编程序或任何东西。很难把一个太大的有线电视新闻网放在fpga上,也很难进行创新,但是写一个能在fpga上使用的lenet级别的有线电视新闻网是相当容易的。最后,您可以根据惯例比较cpu的性能和gpu的功耗。
雷锋文章版权所有。严禁擅自转载。详情请参考转载说明。
标题:如何用FPGA加速卷积神经网络(CNN)?
地址:http://www.hcsbodzyz.com/hcxw/10676.html