深度学习与FPGA的过去、现在和将来

原创内容,转载请注明:  [http://www.ssdfans.com]  谢谢!

眼下最热的技术莫过于人工智能了,很多大公司都开始布局。比如老牌PC厂商联想最近聘请原微软亚洲研究院常务副院长,人工智能科学家芮勇担任CTO,他说,联想正在进行” from device only to device + cloud powered by AI”的转型,而这些新型智能设备都是联想为迎接”设备+云”的未来时代所做出的创新尝试。随着芮勇的加盟,他将进一步加大对人工智能相关性人才的引进和研发投入,从而开启联想发力人工智能的新篇章。可以看出,首先进入物联网时代之后,人工智能有着迫切的需求,各种空调,冰箱,汽车,手机,手表,家电等设备需要更加智能,同时也要能够对云端大数据进行分析,挖掘信息中的规律。其次,人工智能在深度学习技术被发现之后,发展突飞猛进,因为深度学习一下子提高了机器学习的精度。但是深度学习对计算的要求很高,所以目前是硬件落后的计算能力限制了深度学习的大规模推广

 

 

曾经的人工智能是比较简单的,针对某一个领域的问题,由熟悉这个领域的人依赖自己的专业知识,使用已知的公式或者模型,从数据中通过分析获得规律。但是现在,人工智能面临着越来越复杂的问题,比如人脸识别,语音识别,医疗诊断等,这些没有现成的公式或者算法来解决。2006年,潜心研究人工智能几十年的Geoffrey Hinton教授(上图中的老大爷)提出了源于神经网络的深度学习技术,很快吸引了大家的注意。维基上说Hinton爸爸的爷爷是Boole,这个人提出了码农最熟悉的Bool代数。看来也是出生于书香门第啊。

 

对硬件计算来说,深度学习有以下优点:

  • 数据并行:图像或者视频中像素或者区域上进行的计算可以并行,而且目前流行的办法不是一次处理一整张图,而是切成很多小块进行处理,小块之间相互独立计算;
  • 流水线操作:深度学习分很多层计算,层与层之间可以流水线操作,就是一层计算做完,数据集体跳到下一个计算单元,空出的位置留给后面的层继续算。

并行和流水线都是硬件的优势,为什么?其实我们的CPU一般单线程程序都是顺序执行,时间比较长,但是只用一个ALU。而用硬件做计算,它最擅长的就是用空间换时间(蒋介石抗日的大战略),把计算任务分成很多并行和流水线的小任务,大家同时进行,性能翻成千上万倍。举个例子,汽车过收费站,为了加快通关速度,同时开很多个车道,这个叫做并行。每个车道里面把验车、收钱、找钱、开门分成四个任务,安排四个人流水操作,这个叫做流水线。

 

传统上,硬件计算有两种选择:通用处理器和定制芯片。前者不太灵活,性能差,后者成本太高。而FPGA因为可编程的特征,介于二者之间。目前FPGA市场85%的份额都在Altera和Xilinx两大巨头手里,整个FPGA市场是100亿美金量级。首先CPU 做深度学习实在是差了点,并行性太弱。比较常用的是GPU,所以我们来把GPU和FPGA做个比较。GPU的架构是成千上万个并行处理单元,如下图,要用GPU做计算,就是要对算法进行重构,使得能够分解为很多个并行小任务,平摊到GPU的每个核心去执行。

 

而FPGA就不需要为了特定架构去改算法,因为它是定制逻辑,直接把算法转成硬件逻辑。但是FPGA也有两个缺点:

  1. 编程语言Verilog或VHDL需要硬件逻辑基础,需要你懂时序图,能调时序;
  2. 编译综合和布局布线比较久,一般稍大一点的工程要几个小时。

 

所以FPGA厂商开始支持程序员友好的语言:OpenCL,它跟Nvidia的CUDA有点类似,就是个并行程序编程语言。只不过CUDA是Nvidia自家的,OpenCL是开源,免费的,由Khronos组织负责维护。目前Xilinx和Altera都有OpenCL的开发包SDK,支持在自己芯片上编程。OpenCL的核心叫做kernel,就是把计算分成很多个叫做kernel的小单元并行计算,至于kernel里面是什么自己定制。尽管硬件编译时间久,但是深度学习的特点是算法修改后,很多kernel是不变的,所以增量编译就很快。

上图是一个FPGA来做图像分类的例子,一次分类分以下步骤:

  1. CPU做图像预处理,主要是图片调成标准格式;
  2. 图像送到CNN;
  3. 把需要硬件加速的数据写到FPGA的DDR内存;
  4. FPGA对数据进行硬件加速,结果写回到DDR内存;
  5. CPU把结果读到主机;
  6. CPU对结果进行分类并输出:原来是一只猫猫!

 

看起来FPGA现在才和人工智能缠缠绵绵,但其实他俩很早就有染了。下图是八卦妓者记录的时间表。看得出来,1992年就有人用FPGA做神经网络加速了。但是那时候FPGA性能不行,到现在,已经有人跑出了很高的速度。比如微软的研究员Ovtcharov用FPGA做卷积神经网络CNN,基于ImageNet 1K数据集,每秒处理图像134张,使用了一块Stratix V D5 FPGA,功耗25W。但是如果用更牛的Arria 10 GX1150 FPGA,能在同样功耗下实现每秒处理233张图。同样的计算,高性能GPU的结果是每秒500-824张,但是功耗却达到235W,差了10倍!微软使用了自己开发的FPGA板卡和服务器,打算放到数据中心,来提升搜索引擎性能。还有很多人发表论文,使用FPGA来做深度学习的各个方面和领域,不仅是分类,还有训练。

 

展望未来,深度学习进一步普及,需要硬件能力的提升。所以很多硬件厂商纷纷出动,比如Intel收购了Altera之后,今年8月又收购了深度学习初创公司 Nervana Systems,交易金额据传约为 4.08 亿美元,Nervana 由原高通神经网络研发负责人于 2014 年创建,拥有目前最快的深度学习框架,并且预计于明年推出深度学习专用芯片,号称速度比 GPU 快10倍。深度学习算法更新换代很快,通用深度学习处理器要想通用又有高性能很难。FPGA的优势是很明显的,算法可定制,同时有很省电。FPGA最适合部署在深度学习集群中,每个节点配若干块,占用空间小,同时不增加数据中心的供电和散热成本。还能配置服务器的其他计算功能到FPGA,比如索引数据存储,KV存储,固态硬盘控制等。

 

目前最需要的就是FPGA的开发工具更加简单,编译速度更快,方便更多硬件小白使用。

 

想学习用OpenCL搞深度学习的可以关注一下项目:

  • Caffe:目前最主流的工具;
  • Torch:用Lua编写的计算框架,有个CLTorch项目支持OpenCL;
  • Theano:也支持OpenCL;
  • Deep CL:一个支持深度卷积神经网络的OpenCL库。

它们对OpenCL的支持如上表。Caffe用的人最多,资源也多,最适合初学者。

 

引用:

Deep Learning on FPGAs: Past, Present, and Future;Griffin Lacey等,University of Guelph

分类目录 存储, 技术文章.
扫一扫二维码或者微信搜索公众号ssdfans关注(添加朋友->点最下面的公众号->搜索ssdfans),可以经常看到SSD技术和产业的文章(SSD Fans只推送干货)。
ssdfans微信群介绍
技术讨论群 覆盖2000多位中国和世界华人圈SSD以及存储技术精英
固件、软件、测试群 固件、软件和测试技术讨论
异构计算群 讨论人工智能和GPU、FPGA、CPU异构计算
ASIC-FPGA群 芯片和FPGA硬件技术讨论群
闪存器件群 NAND、3D XPoint等固态存储介质技术讨论
企业级 企业级SSD、企业级存储
销售群 全国SSD供应商都在这里,砍砍价,会比某东便宜20%
工作求职群 存储行业换工作,发招聘,要关注各大公司招聘信息,赶快来
高管群 各大SSD相关存储公司高管和创始人、投资人

想加入这些群,请微信扫描下面二维码,或搜索nanoarchplus,加阿呆为微信好友,介绍你的昵称-单位-职务,注明群名,拉你进群。SSD业界需要什么帮助,也可以找阿呆聊。