当前位置: 首页 > 科技观察

以“大功率小心脏”改变AI通用CNN加速设计

时间:2023-03-13 12:31:12 科技观察

介绍基于FPGA的通用CNN加速设计,可大大缩短FPGA开发周期,支持业务深度学习算法的快速迭代;提供媲美GPU的计算性能,但相比GPU具有数量级的时延优势,为企业构建最强大的实时AI服务能力。什么时候?深度学习异构计算现状随着互联网用户的快速增长和数据量的快速膨胀,对数据中心的计算需求也在快速上升。同时,随着人工智能、高性能数据分析、金融分析等计算密集型领域的兴起,对计算能力的需求已经远超传统CPU处理器的能力。异构计算被认为是现阶段解决这一计算鸿沟的关键技术。目前,“CPU+GPU”和“CPU+FPGA”是业界最受关注的异构计算平台。与传统的CPU并行计算相比,它们具有更高效率和更低延迟的计算性能优势。面对如此巨大的市场,一大批科技行业的公司投入了大量的资金和人力,异构编程的开发标准逐渐成熟,主流的云服务商也在积极布局。为什么?通用CNNFPGA加速业界可以看到微软等巨头公司大量部署FPGA用于AI推理加速。与其他设备相比,FPGA有哪些优势?灵活性:可编程性和自然适应性是快速发展的ML算法,如DNN、CNN、LSTM、MLP、强化学习、决策树等任意精度动态支持模型压缩、稀疏网络、更快更好的网络性能:构建能力实时AI服务比GPU/CPU高一个数量级与GPU/CPU相比,低时延预测能力比GPU/CPU高一个数量级,单瓦性能能力Scalehigh板间IO高速互联IntelCPU-FPGA架构同时,FPGA的缺点也很明显,FPGA采用HDL硬件描述语言来开发,开发周期长,入门门槛高。以Alexnet、Googlenet等个别经典模型为例,对一个模型进行定制化加速开发往往需要几个月的时间。业务方和FPGA加速团队需要兼顾算法迭代和适配FPGA硬件加速,非常痛苦。一方面,FPGA需要提供低延迟高性能服务,与CPU/GPU相比具有足够的竞争力。另一方面,FPGA的开发周期需要跟上深度学习算法的迭代周期。基于这两点,我们设计开发了一个通用的CNNAccelerator。考虑到主流模型算子的通用设计,编译器生成指令驱动模型加速,可支持短时间模型切换;同时,对于新兴的深度学习算法,相关算子也在这个通用的基础版本上快速实现。开发迭代,模型加速开发时间已经从几个月减少到现在的一到两周内。如何?通用CNNFPGA架构基于FPGA的通用CNN加速器的总体框架如下。Caffe/Tensorflow/Mxnet等框架训练的CNN模型,通过编译器的一系列优化,生成模型对应的指令;同时,图像数据和模型权重数据根据优化规则进行预处理和压缩,通过PCIe发送至FPGA加速器。FPGA加速器完全按照指令缓冲区中的指令集进行工作,加速器将完整的指令缓冲区中的指令执行一次,完成一张图片深度模型的计算加速。每个功能模块相对独立,只负责每个单独模块的计算请求。加速器与深度学习模型分离,各层的数据依赖和执行关系控制在指令集中。简单来说,编译器的主要工作就是对模型结构进行分析和优化,然后生成指令集供FPGA高效执行。编译器优化的指导思想是:更高的MACdsp计算效率和更少的内存访问要求。下面我们以GooglenetV1模型为例,简单分析一下加速器的设计和优化思路。Inceptionv1的网络将1x1、3x3、5x5的conv和3x3的poolingstack结合在一起,一方面增加了网络的宽度,另一方面增加了网络对scale的适应性。下图展示了模型中Inception的基本结构。数据依赖分析这部分主要分析挖掘模型中可以精简并行化的计算。流水线设计可以提高加速器中计算单元的利用率,并行计算可以同时利用尽可能多的计算单元。关于流水线,分析部分包括从DDR加载数据到FPGA片上SRAM的操作和PE的计算流水线。通过这种优化,内存访问时间重叠;DSP计算列的计算控制过程保证了DSP利用率的提高。关于并行性,需要重点分析PE计算数组与激活、池化、归一化等“后处理”模块的并行关系。如何确定数据依赖关系,防止冲突,是这里设计的关键。在Inception中,从它的网络结构可以看出,分支a/b/c的1x1卷积计算和分支d中的pooling可以并行计算,两者之间没有数据依赖。通过这里的优化,3x3的maxpooling层的计算可以完全重叠。模型优化在设计上主要考虑两个方面:寻找模型结构优化和动态精度调整的定点支持。FPGA是一种支持大量并行计算的设备。从模型结构中寻找更高维的并行性对于计算效率和减少内存访问非常有意义。在InceptionV1中,我们可以看到brancha\branchb\branchc的第一层1x1卷积层的输入数据完全相同,并且卷积层的stride和pad一致。那我们能否在输出的featuremap维度上对齐叠加呢?叠加后,输入数据的内存访问要求降低到原来的1/3。另一方面,为了充分发挥FPGA硬件加速的特点,模型的Inference过程需要对模型进行定点运算。在FPGA中,int8的性能可以是int16的两倍,但是为了让公司和腾讯云上的客户可以无感知的部署他们训练好的浮点模型,不用重新训练int8模型来控制精度的损失,我们采用了支持动态精度调整的定点int16方案。这样,用户训练的模型可以直接通过编译器部署,而不会损失任何准确性。内存架构设计带宽问题一直是制约计算机架构性能的瓶颈之一,内存访问直接影响加速设备的功耗效率。为了尽量减少模型计算过程中的DDR内存访问,我们设计了如下内存架构:Inputbuff和outputbufferping-pong设计,最大化pipeline和parallelism以支持inner-copyoperationinputbuff之间的cross-copyoperation和输出缓冲区使用这种架构。对于目前大多数主流机型,加速器可以容纳FPGA芯片上的所有中间数据。除了加载模型权重外,不需要消耗任何中间数据。额外的内存操作。对于不能将中间层的featuremap完全存储在slice上的模型,我们在设计中引入了channel维度slicefragmentation的概念和featuremap维度partfragmentation的概念。通过编译器,将一个卷积或pooling\Norm运算合理拆分,将DDR内存访问操作和FPGA加速计算流水化,在优先考虑DSP计算效率的前提下,将DDR内存访问需求降到最低。.计算单元设计基于FPGA的通用CNN加速器的核心是它的计算单元。目前这款加速器的版本是基于XilinxKu115芯片设计的。PE计算单元由4096个工作在500MHz的MACdsp内核组成,理论峰值计算能力为4Tflops。其基本组织架构如下图所示。KU115芯片由两对DIE堆叠而成,加速器有两组并行放置的处理单元PE。每个PE由4个XBAR组成,XBAR由32x16=512个MAC计算DSP核组成。设计的关键是在设计中提高数据复用和降低带宽,实现模型权重复用和层特征图复用,提高计算效率。应用场景及性能对比目前深度学习主流使用GPU进行深度学习的训练过程,在部署在线Inference时,选择加速平台需要综合考虑实时性、低成本、低功耗.按深度学习落地场景、广告推荐、语音识别、图片/视频内容实时监控等分类,是实时AI服务和终端实时低功耗场景,如智能交通、智能音箱、和无人驾驶。与GPU相比,FPGA可以为业务提供强大的实时高性能支持。对于用户来说,平台性能、开发周期、易用性如何?加速性能以实际googlenetv1机型为例,CPU测试环境:2颗6核CPU(E5-2620v3),64G内存。整机CPU满载时,单个基于KU115的加速器性能比CPU提升16倍,单幅图像检测时延从250ms降低至4ms,降低TCO成本90%。同时,FPGA的预测性能略强于Nvidia的GPUP4,但在延迟上有一个数量级的优化。开发周期常见的CNNFPGA加速架构,可以支持深度学习模型的快速业务迭代和持续演进,包括Googlenet/VGG/Resnet/ShuffleNet/MobileNet等经典模型和新的模型变种。对于经典模型和基于标准层的自研算法变体,现有的加速架构已经可以支持,通过编译器可以在一天内实现模型对应的指令集,并可以在线部署。对于自研的特殊模型,如非对称卷积算子、非对称池化算子等,需要根据实际模型结构在本平台上迭代开发相关算子,开发周期可缩短至一到两周为了支持。EaseofuseFPGACNN加速器封装了底层加速流程,为加速平台业务端提供了简单易用的SDK。业务端调用简单的API函数即可完成加速操作,业务本身的逻辑几乎没有变化。如果在线模型需要更改,只需调用模型初始化函数,用相应的模型指令集初始化FPGA,几秒内即可切换加速服务。结论基于FPGA的通用CNN加速设计,可大大缩短FPGA开发周期,支持业务深度学习算法快速迭代;它提供与GPU相当的计算性能,但与GPU相比具有一个数量级的延迟优势。通用型RNN/DNN平台正在紧锣密鼓研发中,FPGA加速器为业务构建最强大的实时AI服务能力。在云端,2017年初,我们在腾讯云上线了国内第一台FPGA公有云服务器,我们会逐步将基础的AI加速能力推向公有云。AI异构加速的战场很大,也很精彩。为公司内部和云端业务提供最优解决方案是FPGA团队不断努力的方向。原文链接:https://www.qcloud.com/community/article/811840作者:腾讯架构师【本文为专栏作者《腾讯云技术社区》原创稿件,转载请联系原作者获得授权】点此查看该作者更多好文