当前位置: 首页 > article >正文

深度神经网络 FPGA 设计与现状

一、引言

1.1 轻量化神经网络的硬件部署需求

神经网络模型不断革新发展,经历了从浅层神经网络到深度神经网络的重要变革。在追求更好精度的同时,深度神经网络模型层数和参数数量也在不断增加,从而对硬件的计算能力、内存带宽及数据存储等的要求也越来越高. 因此,计算能力强、可并行加速、数据吞吐高的高性能硬件平台对于模型训练和产业应用来说显得尤为重要。

轻量级神经网络是在保证模型的精度下对神经网络结构进行压缩、量化、剪枝、低秩分解、教师-学生网络、轻量化设计后的小体积网络模型. 2015年之前,(2015年的ResNet在学习任务中取得了超越人眼的准确率)随着神经网络模型性能的不断提升,不断增大的网络体积和复杂度对计算资源也有较高的需求,这就限制了当前高性能的网络模型在移动设备上的灵活应用. 为了解决这一问题,在保证精确度的基础上,一些轻量级网络应运而生. 从 2016 年开始,SqueezeNet、ShuffleNet、NasNet以及MobileNet、MobileNetV2、MobileNetV3等轻量级网络模型相继出现,这些轻量级网络的出现使一些嵌入式设备和移动终端运行神经网络成为可能,也使神经网络得到更广泛的应用。

1.2 深度神经网络的主流硬件平台
1.2.1 GPU

GPU(Graphic Processing Unit)起初专门用于处理图形任务,主要由控制器、寄存器和逻辑单元构成. GPU 包含几千个流处理器,可将运算并行化执行,大幅缩短模型的运算时间。英伟达在 2006 年推出了统一计算设备构架 CUDA 第一次让 GPU 具有可编程性,使得 GPU 的流式处理器除了处理图形也具备处理单精度浮点数的能力。

大量依赖 GPU 运算的深度神经网络软件框架(如:TensorFlow、PyTorch、Caffe、MXNet等)的出现极大地降低了 GPU 的使用难度. 因此它也成为人工智能硬件首选,在云端和终端各种场景均被率先应用,也是目前应用范围最广、灵活度最高的 AI 硬件.

1.2.2 FPGA

FPGA(Field Programmable Gate Array)是现场可编程门阵列,它允许无限次的编程,并利用小型查找表来实现组合逻辑. FPGA 可以定制化硬件流水线,可以同时处理多个应用或在不同时刻处理不同应用,具有可编程、高性能、低能耗、高稳定、可并行和安全性的特点。

人工智能产品中往往是针对一些特定应用场景而定制的,定制化芯片的适用性明显比通用芯片的适用性高. FPGA 成本低并且具有较强的可重构性,可进行无限编程. 因此,在芯片需求量不大或者算法不稳定的时候,往往使用 FPGA 去实现半定制的人工智能芯片,这样可以大大降低从算法到芯片电路的成本. 随着人工智能技术的发展,FPGA 在加速数据处理、神经网络推理、并行计算等方面表现突出。

1.2.3 ASIC

ASIC(Application Specific Integrated Circuit)是专用集成电路,是指根据特定用户要求和特定电子系统的需要而设计、制造的集成电路. 相比于同样工艺 FPGA 实现,ASIC 可以实现 5~10 倍的计算加速,且量产后 ASIC 的成本会大大降低. 不同于可编程的 GPU 和 FPGA,ASIC 一旦制造完成将不能更改,因此具有开发成本高、周期长、门槛高等问题.

1.2.4 SoC

SoC(System on Chip)是系统级芯片,一般是将中央处理器、储存器、控制器、软件系统等集成在单一芯片上,通常是面向特殊用途的指定产品. 系统级芯片能降低开发和生产成本,相比于 ASIC 芯片的开发周期短,因此更加适合量产商用.

1.2.4 总结

相比 GPU,FPGA 具有更强的计算能力和较低的功耗. 相比 ASIC 和 SoC,FPGA 具有更低的设计成本和灵活的可编程性,FPGA 的开发设计更简单. 综合当前深度神经网络芯片的特性可知,FPGA 的设计性能更适合应用于深度神经网络在普通领域的开发和应用。

二、FPGA 的基本介绍

2.1 FPGA平台

FPGA 是基于可编程逻辑器件发展的一种半定制电路,它可以使用硬件描述语言(Verilog 或VHDL)或 C/C++/OpenCL 编程,利用小型查找表来实现组合逻辑,并对 FPGA 上的门电路以及存储器之间的连线进行调整,从而实现程序功能。

2.2 FPGA的开发方式及流程

结合 FPGA 自身硬件架构特点,目前其开发主要有两种方式:寄存器传输级(RTL)描述和高层次综合(HLS)描述.

寄存器传输级描述,又称 RTL 级描述,是指用寄存器这一级别的描述方式来描述电路的数据流 . 开发人员利用硬件描述语言(Verilog 和 VHDL)或者 IP 核对硬件结构进行描述. RTL 级开发的主要优势是高稳定性、高资源利用率、高性能等. 其劣势也很突出,主要有开发难度大、开发效率低、周期长、成本高等.

基于此,利用高级语言实现算法的开发方式应运而生,即 HLS级. 开发人员只需要利用高级语言(C、C++)实现算法,而算法程序到 FPGA 硬件结构的映射由编译器自动完成.广义上讲,Xilinx 公司推出了高层次综合 HLS 工具和 Altera 公司主推的 OpenCL SDK 都属于 HLS 级. HLS 级开发的主要优势是门槛低、开发效率高、周期短,其缺点主要是资源利用率低、性能低、不透明等

FPGA 的设计流程通常包括设计需求理解、方案评估、芯片理解、详细方案设计、仿真、综合、布局布线、时序优化、芯片编程与调试. 神经网络加速设计开始之前,需要先确定神经网络的网络结构和各层级参数,避免因修改而造成的资源浪费和工程延期. 在神经网络算法效果符合预期后,需要对神经网络算法进行拆解和分析. 通过分析算法所需的计算带宽、存储带宽、存储容量、关键计算瓶颈、计算数据流等,结合 FPGA 芯片的资源特性进行加速效果推算,把适合 FPGA 做加速的算法交给FPGA 来加速. 其中需要特别注意的是,FPGA 加速计算推演的数据精度需要和软件验证的数据精度保持一致,否则可能在 FPGA 加速后会有精度损失而达不到预期的算法效果.

三、FPGA 深度神经网络的加速与优化

深度神经网络往往是在大内存、较强计算力的GPU 上进行训练学习的. 但在相关模型进行产品化落地应用时,必须考虑设备资源的尺寸、内存、能耗、带宽和成本等因素. 神经网络模型压缩和加速的提出,让复杂的深度神经网络在小型设备(FPGA)上的实现成为了可能。

3.1 FPGA神经网络加速器

VGGNet、GoogleNet、ResNet 的出现,让我们清楚的看到神经网络正往更深、更复杂的网络设计方向发展. 那么,如何将更复杂的神经网络部署到FPGA上,并能够满足一定的速度要求,成为研究者们关注的焦点. 在现有的研究中,涌现出大量的 FPGA 深度学习加速器,例如: DLAU 、 Deep-Burning、DeepX、BISMO、Bit Fusion与为 SGEMV设计的 FPGA 加速器等等

3.2 神经网络压缩与加速技术

FPGA 加速设计中涉及的几种常见的神经网络压缩与加速方法:包含网络剪枝在内的深度压缩、低秩估计、模型量化以及知识蒸馏方

3.2.1 神经网络深度压缩

神经网络深度压缩过程的第一阶段是模型剪枝,核心思想主要是通过估计每个参数的重要程度,删除不重要的参数,以达到模型压缩的目的。

神经网络深度压缩过程的第二阶段是模型量化与参数共享,比如:典型的聚类量化方法将训练的每一层的权值参数进行 k-means 聚类,聚类完成之后属于同一类的参数都使用该类聚类中心的数值作为它们的权值参数数值,然后通过索引矩阵将共享权值一一对应到权值参数的确定位置

神经网络深度压缩过程的第三阶段是哈夫曼编码。 哈夫曼编码可以用短的码值来表示更多的数字,提高编码效率,以达到深度压缩的效果. 因此,在深度压缩过程中最后保存网络的时候常常使用哈夫曼编码进行进一步的压缩.

3.2.2 低秩估计

低秩估计是利用矩阵分解或者张量分解以及矩阵乘法或者卷积运算这种线性运算的结合律,将原本的参数张量分解成若干个小张量,或将原本的卷积用几个小卷积代替 . 高维矩阵的运算会采用Tensor 分解方法对神经网络进行加速和压缩. 目前的 Tensor 分解方法主要包含了 CP 分解、Tucker 分解、Tensor Train 分解和 Block Term 分解方法等等.

优势: 低秩估计没有改变基础运算的结构,也不需要进行额外定义新的操作. 低秩估计的分解方法有很多种,任何的矩阵或者张量分解方法都可以用于低秩分解. 在神经网络中应用低秩估计的方法进行网络的分解,分解后的网络参数量将大大减少.

劣势: 为保证分解后网络模型的准确率,一般都需要对于分解后的网络进行参数调优. 同时,在低秩估计时,对于秩的保留数量没有明确的规定. 保留的秩太多,可以保证一定的准确率,但加速压缩效果不好. 保留的秩太少,加速压缩的效果较好,但准确率无法保证

3.2.3 模型量化

模型量化可以通过量化函数将全精度的数(激化量,参数,甚至是梯度值)映射到有限的整数空间. 模型量化可以减少每个参数的存储空间,降低计算复杂度,因此可以实现神经网络加速与前面介绍的方法不同,网络裁枝方法与低秩估计方法都是从矩阵乘法角度出发,着眼于减少参数量和计算量. 而模型量化则着眼于参数本身,直接减少每个参数的存储空间,提升计算速度 . 比如:BWN, TWN、TNN将模型的参数量化到{-1, +1} 或者{ -1,0,1} ,这样就能将网络计算里的乘加运算转化为加减运算,从而实现模型压缩和计算加速的目的. 除了参数外,BNN、XNOR-Net将模型的激活值也量化到{-1, +1 },这样就能将乘加运算转化为比特级别的位运算。

现有的量化方式主要有均匀量化、对数量化和自适应量化. 以上方法都是将模型所有层的参数或者激活值量化到相同的精度,而混合精度量化可以根据模型不同层次的重要性和灵敏度来匹配更好的解,从而获得更好的性能。基于 FPGA 的深度神经网络实现也将量化作为一种常用技术手段

3.2.4 知识蒸馏

知识蒸馏[是将训练好的复杂网络模型具备的推广能力“知识”迁移到一个结构简单的网络中. 以上提到的网络裁枝、低秩估计以及模型量化,都是对特定网络模型进行压缩和加速. 然而知识蒸馏方法直接设计了一个简单结构的小网络,将难点转移成对小网络的训练上. 整个思想中最大的难题在于如何有效地表达“知识”,并有效地指导小网络的训练. 知识蒸馏的结构主要由三大部分构成:指导网络、指导损失函数以及学习网络

3.3 计算加速与优化
3.3.1 矩阵乘法优化

矩阵分块技术与 Winograd 转换方法常常作为神经网络中的优化算法

3.3.2 卷积优化

神经网络结构往往是由卷积层,池化层以及全连接层构成的. 其中的卷积层和全连接层在硬件结构上,往往是针对于矩阵运算进行设计的. 将卷积层和全连接层可以转化为矩阵,然后利用 FPGA 进行计算并加速.

3.3.3 频率优化

提高 FPGA 的峰值性能也是目前 FPGA 加速设计中的一个研究方向,FPGA 能够达到多少工作频率不仅需要考虑 FPGA 芯片自身支持的频率是多少,同时需要考虑如何内部提高时钟频率,即如何对程序优化,来提高多用寄存器工作频率.

3.4 基于带宽的神经网络加速

在基于 FPGA 的神经网络加速中,内存带宽也常常是影响计算速度的瓶颈. 当模型的计算强度小于计算平台的计算强度上限时,此时模型理论性能的大小完全由计算平台的带宽上限以及模型自身的计算强度所决定. 由此可见,在模型处于带宽瓶颈区间的前提下,计算平台的带宽越大,模型的理论性能可呈线性增长. 因此,通过提高带宽上限或者减小带宽需求,可以实现对模型的加速.

4 FPGA型号选择

进行 FPGA 选择时,需要根据应用的方向结合 FPGA 器件的特点进行考虑. 例如,从器件特色、规模大小、速度需求、功耗、成本、稳定性、安全性等方面进行选择. FPGA 芯片内部资源主要包括 IO 资源、时钟资源、逻辑资源、RAM资源、DSP 资源、高速接口资源、硬核 IP 等,型号选择通常需要平衡各种资源需求并优先考虑关键资源的瓶颈. 例如,在深度神经网络计算加速设计中,通常需要优先考虑 DSP 数量、BRAM 数量以及所支持的外部存储最大带宽等. 在选择具体的芯片型号以及封装时,要根据实验的需求与具体情况做出选择. 一般来说,可以从芯片特点、规模大小、速度需求、功耗等几个方面做综合的考量.

较为常用的 FPGA 厂家 Xilinx 与 Altera 均推出了不同系列的产品以供选择. 总的来说,企业开发选择时,Xilinx 占得比重相对较大,但 Altera 价格相较 Xilinx更低. 而对于二者的特点,Xilinx 的短线资源非常丰富,因此在实现时布线成功率高. 而 Altera 的 FPGA的短线资源经常不够用,需要经常占用逻辑单元来充当布线资源.

5 影响 FPGA 应用于深度神经网络的主要因素

5.1 生态环境不完善

由于 FPGA 生态系统限制,其落地应用的速度无法跟上软件算法的开发速度,同时也限制了深度神经网络的进一步应用,成为限制 FPGA 应用于深度神经网络,乃至其自身发展的最大难题

5.2 编程语言门槛高

传统的硬件描述语言包括 VHDL、verilog HDL、System Verilog 以及相对成熟的硬件 C 语言 System C、Handle-C 等,但对于芯片复杂程度不断增加的 FPGA 来说,其对编程人员的要求也越来越高,这极大的影响了 FPGA 应用的设计效率,也限制了其在深度神经网络上的应用.

在这种情况下,FPGA 的高层次综合(High-Level Synthesis)应运而生. 其可将 C++、C 等高层语言,通过特定编译工具直接转化成 FPGA 上可以运行的硬件代码. 虽然现在已经出现了包括 AutoPilot、OpenCL SDK 等成功的 FPGA HLS 工具,但对于完全取代人工硬件编程来说,HLS 仍有很长的路要走. 如何进行HLS 的仿真调试、如何利用 HLS 提高系统的性能等等都是 HLS 所面临的问题.

虽然 FPGA 的应用范围不断扩大,但目前其编程模型还是以硬件工程师进行 RTL 开发为主. 因此,将高层次语言描述的逻辑结构映射到硬件语言的 HLS,必将成为助力 FPGA广泛应用的得力工具,将拥有十分广阔的发展前景

5.3 数据和模型的复杂化

为了使 FPGA能够搭载大数据以及复杂网络计算,我们必须增加FPGA 带宽或者提高带宽利用率. 但是提高带宽往往成本较高,因此,如何以较低的成本扩展 FPGA带宽或提高带宽利用率将成为 FPGA 的一大发展趋势. 除此之外,人工智能产品往往需要迅速的反应能力,这也就要求 FPGA 具有较快的计算速度


http://www.kler.cn/a/399928.html

相关文章:

  • 视觉SLAM--经典视觉SLAM框架
  • IPTV智慧云桌面,后台服务器搭建笔记
  • 什么是SMARC?模块电脑(核心板)规范标准简介三
  • Vue2+ElementUI:用计算属性实现搜索框功能
  • 3步实现贪吃蛇
  • Python 网络爬虫入门教程
  • PCL点云开发-解决在Qt中嵌入点云窗口出现的一闪而过的黑窗口
  • 2024RISC-V中国峰会 演讲幻灯片和视频回放公开
  • 跨平台编译Go程序:GOOS和GOARCH环境变量的使用
  • 儿童玩具常用的语音ic芯片类别?
  • DNS原理详解,DNS解析过程
  • Python函数——函数的传入参数
  • HTTP/3 深入解读:现代互联网的加速引擎
  • WEB攻防-通用漏洞SQL注入Tamper脚本Base64Jsonmd5等
  • OceanBase 闪回查询
  • 国标GB28181视频平台EasyCVR视频融合平台H.265/H.264转码业务流程
  • FPGA开发流程
  • 企业组网面临的安全挑战及SD-WAN解决方案
  • [产品管理-89]:《产品思维30讲》的主要内容与核心思想,产品的本质是利用各种工具和思维模式,为用户和社会创造真正解决问题和满足需求的价值
  • OLED透明屏在零售行业有哪些优势
  • 【vba源码】导入excel批注信息
  • IDEA 2024.3正式版发布,速览新功能!
  • 51c自动驾驶~合集27
  • 华为刷题笔记--题目索引
  • MySQL查询执行(七):临时表
  • 掌握docker部署Spring boot项目演示