学习总结——基于FPGA的深度学习算法加速

1、深度学习算法加速的方法

2、为什么用FPGA来加速YOLOV2

3、FPGA简介

4、PYNQ框架与HLS加速理论

5、实验结果

1、深度学习算法加速的方法

1.1 加速方案

1.GPU加速:GPU是一种多核处理器,GPU起初是用来进行图形处理任务的,经过长时间的发展,GPU的发展是日趋复杂的,而且针对不同的领域也有不同。

当GPU被用来进行通用计算时,就产生了一些通用的计算框架,比如说Opencl和CUDA。比如说高端GPU TItan系列,其频率可以达到1Ghz,拥有330GB的带宽,提供每秒极高的算力,但是功耗也达到了惊人的250W。对于嵌入式的GPU,比如说TegraX1,拥有256个处理核,带宽为25GB/s,同样在1Ghz的频率下,算力仍可以达到近Titan的十分之一,但是功耗只有10W。

2.ASIC加速:这些芯片分为两类:第一类,用来做训练和推理,这些芯片可以用来做DNN的训练,也可以做DNN的推理。第二类,用来做推理,这些ASICs用来运行在GPU或者其他硬件上已经训练好的模型,然后对训练过的网络进行修改,使得网络可以运行在不同的ASIC上。

3.FPGA加速:FPGA是一种可以重复配置的电路。在延迟方面,FPGA要比GPU更好。FPGA可以提供很高的带宽同时也可以降低延迟。

1.2 FPGA实现

要实现某种运算,其中一种方法就是将这种运算以电路的方式实现,而使用FPGA就是其中一个相对简单的方法,使用者可以将FPGA配置为所需要的电路。基于指令的硬件是通过软件来实现的,而FPGA是通过专用硬件实现的。对于一些需要低延迟的算法,比如说智能驾驶,FPGA的延迟要比GPU更低。当时用FPGA时,可以将延迟控制在1微秒或者1微秒之外,但是对于CPU来说,延迟低于50微秒,性能就已经很强了。除此之外,FPGA的定制化更强,延迟能够人为的控制,FPGA不需要操作系统,内部也不需要想CPU一样通过总线进行通行。

在FPGA中,可以连接任何的数据源,比如说网口或者传感器,可以直接通过芯片的引脚就可以连接,这就和GPU与CPU形成了鲜明的对比(GPU和CPU与外界数据交互需要标准总线进行连接)。

FPGA的直连技术可以为数据提供很高的带宽,同时也降低了时延。

2、为什么用FPGA来加速YOLOV2

对于卷积核和池化的运算来说,因为是矩阵运算,这就需要相当高的算力。而由于卷积和池化运算都是流式运算,所以将他们放在FPGA中实现从而进行加速是一个很好的选择。对于YOLOV2中的部分运算,比如说计算坐标图像的预处理等,都是一些非流式运算,或者是标准运算,这些运算适合放在ARM中进行,于是将YOLOV2中的运算做一下划分,充分利用软硬件协同的优势,从而对整个算法进行加速。

FPGA:卷积层和池化层
ARM:Softmax

3、FPGA简介

3.1 FPGA的基本结构

基本构成:CLB(可配置逻辑块),IOS(输入输出模块),IR(互联资源)

FPGA的功能是由SRAM中的数据类配置的,所以大部分FPGA芯片中都是采用查找表结构的。FPGA中组合逻辑使用小型LUT实现的,这些LUT输出端连接到D触发器的输入端,D在连接到其他逻辑电路或者是驱动IO来对其进行驱动。

FPGA中的逻辑是通过加载编程数据来实现的,这些编程数据通过内部静态存储单元来进行加载。存储单元的值可以配置逻辑单元各个模块的连接通路,以及逻辑单元所实现的功能,也可以配置IO的功能以及电气鼠性等,这些最终构成了一个可以实现目标功能的FPGA系统。

3.2 FPGA的相对优势:

与DSP和MCU相比,FPGA的运算速度较快,实现控制功能更加灵活,与传统的CPLD相比,FPGA更适合做一些规模更大逻辑更复杂的设计。

(1).FPGA有六部分构成:可编程CLB,可编程IO,布线资源,嵌入式RAM,专用迎合以及内嵌功能模块。CLPD功能更加简单,构成:可编程IO,基本逻辑单元,布线pool。 2).FPGA更容易实现时序逻辑,CPLD更适合大规模组合逻辑。
(3).FPGA连线资源非常丰富,且CLB的利用率很高。
(4).同专用集成电路比,FPGA更加灵活,开发周期更短,可以降低成本,同时也可以保证保密性和可靠性。

4、PYNQ开发框架与HLS加速理论

4.1 PYNQ

传统的FPGA的框架有两种,一种是FPGA与CPU互联的,另一种是FPGA与RAM互联的。但是这两种开发对于然间人员来说很不友好,而PYNQ就很好的解决了这个问题,。PYNQ可以在ZYNQ上面运行,ZYNQ包含PL和PS部分,PS部分是ARM的处理器,上面可以运行LINUX系统,操作系统上运行ptyhon。PL部分是可编程逻辑资源,在开发过程中,首先在PL端设计IP核,将IP核配置成为AXI总线形式,然后在PS中对驱动函数进行调用。

PYQN是一种全新的开发框架,能够用PYTHON对其进行快速的FPGA部署,在部署过程中不用研究硬件的实现细节。

4.2 HLS

开发流程是基于C语言,能够节约用户大量的时间。其重要流程包括:C开发,C仿真,C综合以及RTL综合等。

4.2.1 用HLS加速IP

内层并行现实化:在FPGA实现深度学习算法中的一层,在计算时候对这一层进行复用,计算完一层以后将数据缓存到片外的DDR中,当进行下一层计算式,再将数据读入运算单元中,在这个过程中需要FPGA的ARM来对IP核进行配置,包括输入输出通道的数量,卷积核的尺寸等。配置完成后,IP和就可以进行相应层的运算。

实现卷积IP核的经典架构

这个系统包含了片外DDR,ARM处理器,控制器,运算单元以及各种缓冲器。 缓存器:输入输出,权重缓冲等。 输入的图像首先要加载带输入的寄存器中,然后通过运算单元执行卷积操作,卷积操作是通过多个运算单元来运算的,以保证运算的速度。 在进行卷积运算时,第一季输出缓存中的数据会被输出到第二级输出缓存,在当前层运算完之后,运算结构就会成为下一级的运算输出,用这样的方式实现网络每一层的加速。

如上图所展示的流程图,可以实现网络在单层内部运算的并行优化,不必将整个网络全部展开,可以奖励网络的资源占用率,进而降低功耗,实现了新跟你乖面积以及功耗的平衡。如果想药实现单层网络的加速效果,就需要在层的内部实现流水。所以就需要一种数据拆分机制,将数据分为多个小块,然后并行去处理这些数据。

将图像分割为多个小块,每个小块的尺寸为Tr X Tc X Tn,而这一块经过计算之后得到的结果应该是卷积计算的部分和,尺寸为Th X Tl X Tm,在这个运算过程中,所欲要的权重尺寸是K X K X Tn X Tm。在处理完这一块数据后,再处理这个特征图的下一块数据。这样按快处理,直到本层的数据处理完成。

4.2.2 循环优化

HLS针对循环的优化指令很多,这里只使用Loop Pipeline和Loop Unrolling。

Loop Pipeline的作用是对循环的进行流水线化的并行处理,这种方式可以让两轮循环执行时间重叠,使得在本轮循环过程中下一轮循环也可以同时执行。

上述图片是未经过流水化处理和经过处理的运算步骤,可以清楚地看出,如果以两次迭代为例,未经过处理的运算需要经过5个时钟周期才能完成运算,而经过流谁化处理的运算仅仅需要三个时钟周期。

Loop Unorlling在没有进行循环优化之前,循环的运行按照默认设置来操作的。而当进行循环展开后,循环的电路会被设置为N份,N一般有HLS中的指令factor来指定。比如说factor为2时,此时的迭代次数为8的话,那么迭代会被分为4次进行,内次是2个循环一次实现的。

4.3 硬件系统的构建

4.3.1 PL部分

PL部分使用HLS来实现卷积神经网络。

硬件配置如下:

最后将PL端生成的bitfile加载到FPGA中,最后在PC上观察吃力后的图像,进行结果分析与统计。

5、实验结果

加速前
加速后
加速前后的时间对比。

基于FPGA的深度学习算法加速相关推荐

  1. CUDA和cuDNN到底是啥关系?(cuDNN是基于CUDA的深度学习GPU加速库)

    1.什么是CUDA CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台. CUDA是一种由NVIDIA推出的通用并行计算架构,该架构 ...

  2. 腾讯云FPGA的深度学习算法

    由腾讯云基础产品中心.腾讯架构平台部组成的腾讯云FPGA联合团队,在这里介绍国内首款FPGA云服务器的工程实现深度学习算法(AlexNet),讨论深度学习算法FPGA硬件加速平台的架构. 背景是这样的 ...

  3. 基于微软开源深度学习算法,用 Python 实现图像和视频修复

    ‍‍ 作者 | 李秋键 编辑 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 图像修复是计算机视觉领域的一个重要任务,在数字艺术品修复.公安刑侦面部修复等种种实际场景中被广泛应用.图像 ...

  4. 基于预训练深度学习算法的番茄作物病害分类

    1.期刊信息 2.研究内容 从PlantVillage数据集获得的番茄叶图像(6种疾病和一个健康类别)作为输入提供给两个基于深度学习的架构,即AlexNet和VGG16 net.分析了图像数量和超参数 ...

  5. AI 进军考古学!科学家用深度学习算法发现了近 100 万年前人类用火的证据,登上PNAS...

    来源:AI科技评论 本文约1600字,建议阅读8分钟 100万年前的人类可能曾在以色列的一个遗址处做过饭! 火的使用是智人进化的一个关键因素,火不仅可以用于创造更复杂的工具,还可让食物变得更安全,从而 ...

  6. 浪潮科大讯飞Altera用OpenCL实现FPGA深度学习语音识别加速方案

    11月17日,在正在举行的2015全球超级计算大会(SC15)上,浪潮联合全球可编程逻辑芯片巨头Altera,以及中国最大的智能语音技术提供商科大讯飞,共同发布了一套面向深度学习.基于AlteraAr ...

  7. 高性能加速深度学习算法

    1.       深度学习 深度学习是机器学习研究中的一个新的领域,其动机在于建立.模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本.深度学习典型应用为图像识别和语音识 ...

  8. 基于深度学习算法和传统立体匹配算法的双目立体视觉

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 01 立体视觉是什么? 在开始之前,我相信很多站友都会有这个疑问, ...

  9. 深度学习算法实践(基于Theano和TensorFlow)

    深度学习算法实践(基于Theano和TensorFlow) 闫涛 周琦 著 ISBN:9787121337932 包装:平装 开本:16开 用纸:胶版纸 正文语种:中文 出版社:电子工业出版社 出版时 ...

最新文章

  1. SpringBoot mybatis 输出SQL语句到控制台
  2. [Spring cloud 一步步实现广告系统] 17. 根据流量类型查询广告
  3. 010_JavaScript变量
  4. 文巾解题 2. 两数相加
  5. Poj_3984走迷宫(广搜)
  6. subprocess installed post-installation script returned error exit status 127
  7. 渗透测试入门24之渗透测试参考书、课程、工具、认证
  8. OpenStack 集群部署工具:ProStack
  9. 亚洲诚信亮相2018天翼智能生态博览会
  10. dreamweaver代码提示失效
  11. windows系统迁移,C盘搬家
  12. 散列表的概念及其拉链法和常见的散列函数(C语言)
  13. c语言 链表怎么调用,求教!!!链表,函数调用高手进!!!
  14. 如何自动生成一本epub电子书
  15. 隔行插入行、隔行标示颜色,#E灵 #Excel插件
  16. 电视K歌软件哪个好?这10款最火,最好用的电视K歌软件,赶紧收藏
  17. 类模板中的友元,友元类
  18. 【Hive】内置函数—日期函数
  19. Windows 下 android自动打包 volley项目
  20. cps配置之淘宝联盟篇

热门文章

  1. JavaScript——宠物狗
  2. Windows下查看mysql版本
  3. spring security自定义过滤器
  4. 6 款最优秀,数据最全,免费,稳定,各类场景均适合的天气 API
  5. 基于ssm的固定收益营销系统设计与实现(ERP系统)
  6. iOS形变之CGAffineTransform
  7. Java注解Target、Retention、Inherited、Documented的作用简述,以@Transactional注解为例(处女座总结)
  8. python3嵌套列表排序
  9. 10张图带你认识2022年十大新锐品牌,提高审美,突破摄影瓶颈
  10. 漫谈程序员系列:一个老程序员的2014年终总结