开发 | 如何用FPGA加速卷积神经网络(CNN)?

AI科技评论按,本文来源于王天祺在知乎问题【如何用FPGA加速卷积神经网络(CNN)?】下的回答,AI科技评论获其授权转发。

以下主要引用自西安邮电大学李涛老师关于连接智能和符号智能的报告,以及fpl2016上ASU的 Yufei Ma的文章和slide,推荐大家去读下原文。

Scalable and Modularized RTL Compilation of Convolutional Neural Network onto FPGA

地址:http://fpl2016.org/slides/S5b_1.pdf

我做过一些计算加速的工作,个人感觉要入手先要想好几个问题: 要加速的是什么应用,应用的瓶颈是什么,再针对这个瓶颈,参考前人工作选择合适的方案。

过早地执着于fpga的技术细节(用hdl还是hls,用啥芯片,用啥接口)容易只见树木不见森林。现在software define network/flash/xxx,已然大势所趋。之前开组会时跟同志们聊过,算法是纲,纲举目张;软件是妈,软件是爹,软件比基金委都亲。所以推荐先把cnn的算法看一下,拿一些开源代码跑一下经典的例子(lenet, alexnet, etc)看好输入输出,摸清算法。

比如以下是一个lenet的cpp和opencl的实现:

nachiket/papaa-opencl

地址:https://github.com/nachiket/papaa-opencl

以下图片源自Yufei Ma的Slide。

可以看到cnn算法主要由conv ,pooling,norm等几个部分组成。工作时将image跟weight灌进去,最终得到预测结果。

接下来拿profiler(比如perf)去分析下软件算法,找找热点和性能瓶颈。在cnn里面主要耗时的就是conv二维卷积了。性能瓶颈也主要在于卷积时需要大量乘加运算,参与计算的大量weight参数会带来的很多访存请求。

接下来考察下前人的工作和当前的灌水热点。按理说这种大量的乘加运算用dsp应该不错,但是在cnn中大家并不需要这么大的位宽,有时候8位就够了。dsp动辄32/64位的乘加器实在是浪费。于是乎大家就开始减位宽,多堆几个运算单元。面对大量的访存请求,大家就开始设计各种tricky的缓存了。

以下是大家的一些灌水方向:

于是就有了以下各路硬件设计:

有人照着dsp风格去设计加速器:

ceva也出了一系列面向CNN的IP:

有人用了脉动阵列或者Dataflow的风格:

有人设计了专用的芯片比如计算所的Cambricon:

还有的就是你提到的fpga。

所有的事情到了硬件层面实际上能用的手段也就有限了。不外乎堆资源和切流水两招。再不然就是做一些bit level的小技巧,比如乘法器变查表之类的,这些技巧在很多二十年前的dsp教材里面都描述得很细致了,拿来用就好。比如这本书亲测有效。

VLSI Digital Signal Processing System--Design and Implementation by Keshab

典型的fpga实现可以参考Yufei Ma的文章,不论是conv,还是pooling,依葫芦画瓢设计data path,切好流水,再想好状态机加上控制信号。这些就看大家撸rtl的基本功了。

比如Conv模块如下图,主要拿一堆乘法器以及加法器树搭好data path,切好流水,接着加上控制信号。

Pooling也是大同小异:

还有Norm:

最后把这些模块通过router连接,外面再套一层控制模块,封成ip就好了。

剩下的就是集成进你的系统(microblaze, nios还是arm,配好dma,写好灌数据的驱动,这些就是各有各的道儿了)。推荐动手码rtl前先写好文档,约定好端口,寄存器和软件api,否则边写边改容易乱。

整体来说,cnn这种应用流水线控制相对cpu简单,没有写cpu的那一堆hazard让人烦心,也不用写汇编器啥的。太大的cnn放在fpga里挺费劲,做出创新很难,但是fpga上写个能用的lenet这种级别的cnn还是挺容易的。最后还可以依照惯例跟cpu比性能,跟gpu比功耗。

原文发布于微信公众号 - AI科技评论(aitechtalk)

原文发表时间:2017-09-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏华章科技

在机器学习方面使用 R + Hadoop 方案真的有那么好?

因为他们在不懂R和Hadoop的特征应用场景的情况下,恰好抓到了一根免费,开源的稻草。

1643
来自专栏互联网杂技

2018年3月份GitHub上最热门的Python项目:深度学习占半壁江山

https://github.com/NVIDIA/FastPhotoStyle Star 5978

782
来自专栏深度学习那些事儿

浅谈深度学习的落地问题

关于深度学习人工智能落地,已经有有很多的解决方案,不论是电脑端、手机端还是嵌入式端,将已经训练好的神经网络权重在各个平台跑起来,应用起来才是最实在的。

1241
来自专栏IT大咖说

Apache顶级开源项目——机器学习库MADlib简介与应用实例

摘要 Apache MADlib是Pivotal与UCBerkeley合作的一个开源机器学习库,提供了精确的数据并行实现、统计和机器学习方法对结构化和非结构化数...

3328
来自专栏Albert陈凯

CPU与GPU区别大揭秘

有网友在网上提问:“为什么现在更多需要用的是 GPU 而不是 CPU,比如挖矿甚至破解密码? ”以下是比较准确靠谱的回答:   1、现在更多被需要的依然是CP...

4063
来自专栏PPV课数据科学社区

【工具】数据科学家必知必会的 7 款 Python 工具

如果你有志于做一个数据专家,你就应该保持一颗好奇心,总是不断探索,学习,问各种问题。在线入门教程和视频教程能帮你走出第一步,但是最好的方式就是通过熟悉各种已经在...

3146
来自专栏目标检测和深度学习

github最热门的Python项目:深度学习占半壁江山

本篇文章为大家盘点了1月份最热门的Python 项目,本月最热门的开源项目中,深度学习相关的开源项目占据了半壁江山,让我们一起来看下吧! 1 FastPhoto...

28110
来自专栏龙行天下CSIEM

科学瞎想系列之七十二 电机设计宝典(中学版)

【图片来自网络如有侵权敬请邮箱联系。欢迎原文转发到朋友圈,未经许可的媒体平台谢绝转载,如需转载或合作请邮件联系。联系邮箱laolicsiem@126.com】 ...

1984
来自专栏企鹅号快讯

Apache顶级开源项目——机器学习库MADlib简介与应用实例

内容来源:2017年11月4日,Pivotal Greenplum Madlib研发工程师梅靖怡在“Greenplum和机器 学习客户研讨会”进行《Machin...

26810
来自专栏人工智能LeadAI

5700刀打造3卡1080Ti深度学习机器

? 5700美刀,打造3x1080Ti实验室GPU深度学习机器 最近为公司搭建了一台实验用的深度学习主机,在网络上参考了大量的资料,给出了目前最好的配置。本文...

4303

扫码关注云+社区