读论文11——Optimizing FPGA-based Accelerator Design for Deep Convolutional Neural Networks

本文探讨了FPGA在CNN加速中的应用,针对计算吞吐量与内存带宽不匹配的问题,提出了基于roofline模型的设计方法。通过量化分析计算和内存需求,优化了循环展开和数据访问,实现了一个高效的CNN加速器。实验结果显示,该设计在资源利用率和性能上优于现有方案。

Abstract

CNN通过仿效生物的视神经达到了高的准确率。基于深度学习算法的应用的快速发展,进一步完善了研究和实现。特别是大量基于FPGA平台的为CNN设计的加速器被提出,因为它有着高性能、可重构行、快速发展的优势。尽管现代的FPGA加速器已经在一般的处理器上证明了自己的高性能,但是设计空间还没有被充分利用到。
一个关键问题就是计算吞吐量和FPGA平台提供的内存带宽不匹配。结果就是现在的方法不能达到最好的效果。与此同时,深度学习应用的日益增长的复杂度和规模加重了这个问题。为了解决它,作者提出了一种分析设计方法,使用了roofline model。对于一个CNN的任何解决方案,都能量化分析它的计算吞吐量和需要的内存带宽,然后通过roofline model,确定性能最好的方案和最少的FPGA资源。作者还实现了一个样例,显著地战胜了现有的方案。

问题:什么是roofline model?(在background里面有)

Introduction

CNN是受到了生物视神经的激发,一个CNN的设计是通过多层神经元的连接来处理数据,以求在图像识别中达到高的性能。基于CNN的特殊计算模式,通用处理器对CNN的实现效率不高。所以大量基于FPGA、GPU、ASIC的加速器被提出了,用来提高CNN设计的性能。其中,FPGA加速器很受重视,因为其在高性能、高能量效率、快速发展、强重构能力方面都有显著优势。
对于任何一个CNN算法的实现,许多的解决方案给出了巨大的设计搜索空间。如果没有好的加速器结构,CNN的性能就会因为逻辑资源、内存带宽的未充分利用而退化,所以设计加速器的结构很重要。
另外,由于FPGA技术和深度学习算法的提升,FPGA平台提供的逻辑资源和内存带宽的增长,导致设计空间变大。另一方面,算法的规模和复杂度在不断提升。结果就是:在设计空间中找到最优解越来越难。所以就需要一个有效的方法来探索基于FPGA的CNN设计空间。
本文的主要贡献:

  1. 量化分析了任何可能的解决方案的计算吞吐量和需要的内存带宽。
  2. 在计算资源和内存带宽的限制下,使用roofline model来确定设计空间中所有可能的解。并讨论了:如何为设计空间中的每一层来找最优解。
  3. 提出了一种CNN加速器设计,在不同层具有均匀的环展开因子
  4. 实现了一个加速器作为样例,是现有方案中最好的。

问题:
什么是逻辑资源? logic resource
什么事是内存带宽? memory bandwith
什么是环展开因子? loop unroll factor

Background

CNN Basis

这里就是介绍了一下CNN。
CNN作为经典的监督学习算法,使用一个前馈过程去识别,使用反馈过程去训练。本文主要是聚焦于加速前馈计算——基于FPGA加速器设计。
典型的CNN由两部分组成:特征提取器和识别器。(feature extracter, classifier). feature extracter 主要是将输入的图片进行特征提取为特征图。这些特征包括角、边、圆形结构,且对于位置变化或者是形变不敏感。feature extracter输出一个包含这些特征的低维向量给classifier,它决定图像属于各个类的可能性。
考虑到卷积操作占用了90%的计算时间,所以本文主要是研究如何加速卷积层。

A Real-Life CNN

这里就举了AlexNet的例子。

the Roofline Model

在系统的吞吐量优化问题中,计算和通信是两大只要限制。(computation,communication)。一个系统的实现,可能是计算绑定或者通信限制。而roofline model,则将系统的性能和off-chip memory traffic(芯片外的内存流量)、硬件平台提供的峰值性能联系起来。
具体的联系就是下面的公式和图:
attainable performance就是系统能获得的浮点型能——对应吞吐量指标。它不大于后面两个术语的最小值。第一个术语Computational Roof描述的是系统中可用的计算资源提供的峰值浮点吞吐量。第二个术语CTC ratio以一个特定的系统中,核所需要的DRAM流量作为特征。二项限制了内存系统在给定计算与通信比率下可以支持的最大浮点性能。也就是说如果通信过多,则浮点性能被严重限制。
在这里插入图片描述
在这里插入图片描述
问题:
什么是浮点性能? floating-point performance:被用来当做吞吐量指标了。

Accelerator Design Exploration

Design OverView

基于FPGA的CNN加速器设计由几个主要部分组成:procesing elements, on-chip buffer, external memory, on/off-chip interconnect. PE是卷积的基本计算单元。所有要处理的数据都存储在external memory中。由于on-chip resource的限制,数据在被送到PEs前,先被cached到on-chip buffer上。我们注意到这里有两个buffer,可以用data transfer time 去Cover computation time。On-chip interconnect 是专门用来在PEs和on-chip buffer之间做data communication(数据通信)的。
一个加速器设计总览图:
在这里插入图片描述

关于加速器效率这方面,有如下几个棘手的问题:
(1)loop tiling的重要性。而且tiling必须设置合适,否则会降低数据的重复使用和并行处理的效率。
(2)PEs、buffer banks的组织和它们之间的interconnects需要认真考虑以高效处理on-chip datas.
然后在后面的部分中,将介绍作者为提高加速器效率而采取的措施。

有关循环分块(loop tiling)的理解在这:https://zhuanlan.zhihu.com/p/292539074
loop tiling的基本思路很简单,就是一个cache line现在被用过以后,后面什么时候还会被用,但是按循环默认的执行方式,可能到下次再被用到的时候已经被evict了。于是我们就把循环内外重排一下,使得一个cache line在被evict之前就被再次使用。

Computation Optimization

使用了一种名为standard polyhedral-based data dependence analysis的方法来提取一系列的合法设计参数(具体是哪些参数后面会说)。计算优化的目的是在充分利用fpga平台提供的所有计算资源的前提下,启动有效的loop unrolling/pipelining.
Loop Unrolling:可以提高对FPGA设备上大量的计算资源的使用率。 对于不同的循环维度的展开,将产生不同的实现模型。展开后的实例能够共享数据。两个unrolled execution instances之间是否以及在何种情况下共享数据,将会很大程度上影响生成的硬件的复杂度、性能。对于一个给定的数组上的循环维度(loop dimension),不同的loop iterations之间的数据共享关系可以分为三大类:
(1)Irrelevant:如果loop iterator i 不出现在向量A的任何访问函数中,则相应的循环维度与A毫不相干。
(2)Independent: 与dependent相反。
(3)Dependent. If the union of data space accessed on anarray A is not separable along a certain loop dimension i k i_k ik, the loop dimension ik is dependent of array A.
不同的数据分享关系,得到不同的硬件实现,如图:
在这里插入图片描述
independent数据共享关系在buffers和PEs之间产生direct connections,irrelavant产生broadcast connections。dependent产生具有复杂拓扑结构的连接。

问题:
(1) loop dimension:比如for(i=0;i<5;i++),这就是一个循环维度。
(2) loop iteration:这里理解为进行循环的参数。比如for(i=0;i<5;i++),那么i为loop iteration。
Loop Pipelining:重叠来自不同循环迭代的操作执行来提高计算吞吐量。基于多面体的优化框架,将并行循环级别排列到了最内层。代码结构图:
在这里插入图片描述

可以看到,最内层的循环i和j也加入了tiling,运算进一步高效。
Tile Size Selection:不同的tile size将导致不同的芯片性能。所有合法的参数设计应该满足:
在这里插入图片描述
给定一组参数 < T m , T n , T r , T c > <T_m, T_n, T_r, T_c> <T

### ImageNet Classification Using Deep Convolutional Neural Networks Paper Implementation and Explanation #### Overview of the Approach The approach described involves utilizing a deep convolutional neural network (ConvNet) for classifying images from the ImageNet dataset. When an unseen image enters this system, it undergoes forward propagation within the ConvNet structure. The outcome is a set of probabilities corresponding to different classes that the input could belong to[^1]. These probabilities result from computations involving optimized weights derived during training. #### Training Process Insights Training plays a crucial role in ensuring accurate classifications by optimizing these weights so they can effectively categorize previously seen data points accurately. A sufficiently large training set enhances generalization capabilities; thus, when presented with entirely novel inputs post-training phase completion, the model should still perform reliably well at assigning appropriate labels based on learned features rather than memorized instances. #### Historical Context and Impact In 2012, a groundbreaking paper titled "ImageNet Classification with Deep Convolutional Neural Networks" was published, marking significant advancements in computer vision technology. This work introduced innovations such as deeper architectures compared to earlier models along with improved techniques like ReLU activation functions which accelerated learning processes significantly over traditional methods used before then[^2]. #### Detailed Architecture Review For those interested in delving deeper into recent developments surrounding CNNs up until around 2019, surveys provide comprehensive reviews covering various aspects including architectural improvements made since AlexNet's introduction back in 2012[^3]. Such resources offer valuable insights not only regarding specific design choices but also broader trends shaping modern approaches towards building efficient yet powerful visual recognition systems capable of handling complex tasks efficiently while maintaining high accuracy levels across diverse datasets similar or even larger scale versions of what existed originally within ImageNet itself. ```python import torch from torchvision import models # Load pretrained ResNet-50 model trained on ImageNet model = models.resnet50(pretrained=True) # Set evaluation mode model.eval() def predict_image(image_tensor): """Predicts the class label given an image tensor.""" with torch.no_grad(): outputs = model(image_tensor.unsqueeze(0)) _, predicted_class = torch.max(outputs.data, 1) return predicted_class.item() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值