Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

EdgeBoard中CNN架构的剖析

人工智能领域边缘侧的应用场景多种多样,在功能、性能、功耗、成本等方面存在差异化的需求,因此一款优秀的人工智能边缘计算平台,应当具备灵活快速适配全场景的能力,能够在安防、医疗、教育、零售等多维度行业应用中实现快速部署。

百度大脑EdgeBoard嵌入式AI解决方案,以其丰富的硬件产品矩阵、自研的多并发高性能通用CNN(Convolution Neural Network)设计架构、灵活多样的软核算力配置,搭配移动端轻量级Paddle Lite高效预测框架,通过百度自定义的MODA (Model Driven Architecture)工具链,依据各应用场景定制化的模型和算法特点,向用户提供高性价比的软硬一体的解决方案,同时和百度大脑模型开发平台(AIStudio、EasyDL)深度打通,实现模型的训练、部署、推理等一站式服务。

1. EdgeBoard计算平台的多产品矩阵

EdgeBoard是基于Xilinx 16nm工艺Zynq UltraScale+ MPSoC的嵌入式AI解决方案,采用Xilinx异构多核平台将四核ARM Cortex-A53处理器和FPGA可编程逻辑集成在一颗芯片上,高性能计算板卡上搭载了丰富的外部接口和设备,具有开发板、边缘计算盒、抓拍机、小型服务器、定制化解决方案等表现形态。

EdgeBoard计算卡产品可以分为FZ9、FZ5、FZ3三个系列,是基于Xilinx XCZU9EG、XAZU5EV、XAZU3EG研发而来,分别具有高性能,视频硬解码,低成本等特点,同时还有不同的DDR容量版本。以上三个版本PS侧同样采用四核Cortex-A53 、双核Cortex-R5、以及GPU Mali-400MP2等处理器配置,PS到PL的接口均为12x32/64/128b AXI Ports,主要的区别在于PL侧拥有的芯片逻辑资源大小不同,可参见下表。

采用上述三种标准产品的硬件板卡或者一致的硬件参考设计,用户可无缝适配运行EdgeBoard公开发布的最新版标准镜像,也可根据自身项目需求定制相关的硬件设计,并进一步根据性能、成本和功耗要求,以及其他功能模块的集成需求,对软核的算力和资源进行个性化配置。(多款开发板适配视频教程:https://ai.baidu.com/forum/topic/show/957750

2. 高性能的通用CNN设计架构

2.1 CNN加速软核的整体设计框架

EdgeBoard的CNN加速软核(整体的加速方案称之为软核)提供了一套计算资源和性能优化的AI软件栈,由上至下分别包括应用层软件API、计算加速单元的SDK调度管理、Paddle Lite预测框架基础管理器、Linux操作系统、负责设备管理和内存分配的驱动层和CNN算子的专用硬件加速单元,用来完成卷积神经网络模型的加载、解析、优化和执行等功能。

这些主要组成部分在软件栈中功能和作用相互依赖,承载着数据流、计算流和控制流。基于上图设计框架,EdgeBoard的AI软件栈主要分为4个层次:

  • 应用使能层

面向用户的应用级(APP)封装,主要是面向计算机视觉领域提供图像处理神经网络推理的业务执行API。

  • 执行框架层

Paddle Lite预测框架提供了神经网络的执行能力,支持模型的加载、卸载、解析和推理计算执行。

  • 调度使能层

SDK调度使能单元负责给硬件派发算子层面的任务,完成算子相应任务的调度、管理和分发后,具体计算任务的执行由计算资源层启动。

  • 计算资源层

专用计算加速单元搭配操作系统和驱动,作为CNN软核的计算资源层,主要承载着部分CNN算子的高密度矩阵计算,可以看作是Edgeboard的硬件算力基础。

2.2 CNN算子的加速分类

专用计算加速单元基于FPGA的可编程逻辑资源开发实现,采用ARM CPU和FPGA共享内存的方式,通过高带宽DMA(Direct Memory Access)实现二者数据的高速交互,共享内存也并作为异构计算平台各算子数据在CPU和FPGA协同处理的桥梁,减少了数据在CPU与FPGA之间的重复传输。此外,CNN算子功能模块可直接发起DDR读写操作,充分发挥了FPGA的实时响应特性,减少了CPU中断等待的时间消耗。

根据CNN算子的计算特点,EdgeBoard的算子加速单元可划分为如下两类:

  • 复杂算子加速单元

顾名思义,是指矩阵计算规则较为复杂,处理数据量较多,由于片上存储资源限制,通常需要多次读写DDR并进行分批处理的算子加速单元。

  1. 卷积(Convolution):包含常规卷积、空洞卷积、分组卷积、转置卷积,此外全连接(Full Connection)也可通过调用卷积算子实现。
  2. 池化(Pooling):包含Max和Average两种池化方式。
  3. 深度分离卷积(Depth-wise Convolution):与Pooling的处理特点类似,因此复用同样的硬件加速单元,提高资源利用率。
  4. 矩阵元素点操作(Element-wise OP):可转换为特定参数的Pooling操作,因此复用同样的硬件加速单元,提高资源利用率。
  5. 归一化函数(L2-Normalize):拥有较高处理精度,且实现资源最优设计。
  6. 复杂激活函数(Softmax):与Normalize处理特点相似,复用同样的硬件加速单元和处理流程,提高资源利用率。
  7. 通路算子加速单元

通路算子是指在复杂算子加速单元的计算数据写回DDR的流水路径上实现的算子,适合一些无需专门存储中间结果,可快速计算并流出数据的简单算子。

  1. 各类简单激活函数(Relu, Relu6, Leaky-Relu, Sigmoid, Tanh):基本涵盖了CNN网络中常见的激活函数类型。
  2. 归一化(Batch norm/Scale):通常用于卷积算子后的流水处理,也可支持跟随在其他算子后的流水处理。

另外一种分类方式,是根据CNN网络里的算子常用程度划分为必配算子和选配算子,前者指CNN软核必需的算子单元,通常对应大部分网络都涉及的算子,或者是芯片资源消耗极少的算子;后者指CNN软核可以选择性配置的算子单元,通常是特定的网络会有的特定算子。这样划分的好处是,用户根据MODA工具链自定义选择,减少了模型中无用算子造成的逻辑资源的开销和和功耗的增加。

  • 必配算子:Convolution, Pooling, Element-Wise, Depth-Wise Convolution, BN/Scale, Relu, Relu6
  • 选配算子:Normalize, Softmax, Leaky-Relu, Sigmoid, Tanh

2.3 卷积计算加速单元的设计思路

作为CNN网络中比重最大、最为核心的卷积计算加速单元,是CNN软核性能加速的关键,也占用了FPGA芯片的大部分算力分配和逻辑资源消耗。下面将针对EdgeBoard卷积计算加速单元的设计思路进行简要介绍,此章节也是理解CNN软核算力弹性配置的技术基础。

每一层网络的卷积运算,有M个输入图片(称之为feature map,对应着一个输入通道),N个输出feature map(N个输出通道),M个输入会分别进行卷积运算然后求和,获得一幅输出map。那么需要的卷积核数量就是M*N。

针对上述计算特点,EdgeBoard的卷积单元采用脉动阵列的数据流动结构,将数据在PE之间通过寄存器进行打拍操作,可以实现在第二个PE计算结果出来的同时完成和前一个PE的求和。这样可以使数据在运算单元的阵列中进行流动,减少访存的次数,并且结构更加规整,布线更加统一,提高系统工作频率,避免了采用加法树等并行结构所造成的高扇出问题。

因此,如上图所示,我们可以分别从Feature Map和Kernel两个维度去定义脉动阵列的并行结构。从Feature Map的角度,纵向的行与行直接卷积窗口相互独立,也就是输出的每行之间所对应的数据计算互不干扰,在此维度定义的多并发计算称之为Window维度的并行度。从Kernel的角度,为了达到计算结果的快速流出减少片上缓存占用,我们设计了每个Kernel核之间的多并发计算,称之为Kernel维度的并行度。以上两个维度同时并发既可以提高整体并行计算效率,也充分利用了脉动阵列的数据流水特性。

2.4 卷积计算加速单元的通用性扩展

前一章节详细介绍了基于PL实现的卷积计算加速单元的设计原理,那么如果是由于芯片的SRAM存储资源不够而导致的CNN网络参数支持范围较小,EdgeBoard将如何拓展CNN软核的网络支持通用性? 我们可以利用灵活的SDK调度管理单元提前将Feature Map或者Kernel数据进行拆分,然后再执行算子任务的下发。

  • 一条滑窗链的Feature Map数据不够存储

SDK可以将一条滑窗链的Feature Map数据分成B块,并将分块数B和每个块的数据量告诉卷积计算加速单元,那么后者则可以分批依次从DDR读取B次Feature Map数据,每次的数据量是可以存入到Image SRAM内。

  • Kernel的总体数据不够存储

SDK可以将Kernel的数量分割成S份,使得分割后的每份Kernel数量可以下发到PL侧的Filter SRAM中,然后SDK分别调度S次卷积算子执行操作,所有的数据返回DDR后,再从通道(Channel)维度做这S次计算结果的数据拼接(Concat)即可。不过要注意的是,我们的Filter SRAM虽然不需存储所有Kernel的数据量,但至少要保证能够存储一个Kernel的数据量。

由此看来,即使EdgeBoard三兄弟中最小的FZ3拥有极其有限的片上存储资源,也是能够很好地完成大多数CNN网络的参数适配。

3.软核算力的弹性配置

Edgeboard的CNN软核除了公开发布的标准版本外,还可以由用户根据自身模型需求和FPGA芯片选型,进行CNN卷积计算单元算力的定制化配置。配置算力的两个关键指标包括Window维度并行度和Kernel维度并行度,具体含义可参考2.3章节,此处不再赘述。

我们以卷积计算加速单元的核心矩阵乘加运算消耗DSP硬核(Hard core)的个数作为CNN软核核心算力的考察指标。当然,这并不包括卷积前处理、后处理模块,以及其他算子加速单元或者用户自定义功能模块所消耗的DSP数量,因此这并不是整个解决方案在FPGA芯片内部的DSP资源消耗。我们的设计可以支持Window并行度1-8的任意整数,支持Kernel并行度包括4,8,16。具体的卷积双维度配置组合所对应的核心DSP消耗可以参见下表。

Window并行度
Kernel并行度
核心DSP消耗
1
4
72
8
144
16
288
2
4
144
8
288
16
576
3
4
216
8
432
16
864
4
4
288
8
576
16
1152
5
4
360
8
720
16
1440
6
4
432
8
864
16
1728
7
4
504
8
1008
16
2016
8
4
576
8
1152
16
2304

目前,EdgeBoard公开版针对卷积计算加速单元Window维度和Kernel维度的并行度配置,以及核心矩阵乘加运算的DSP硬核消耗可参见下表。

 
FZ3
FZ5
FZ9
Window并行度
2
4
4
Kernel并行度
4
8
16
核心DSP消耗
144
576
1152

EdgeBoard的CNN软核以其灵活的算力搭配组合以及算子可定制化的特点,既可以根据具体模型的算子组合和所占比例,将一定成本和资源条件内的芯片性能发挥到极致,还可以在满足场景所要求性能的前提下减少不必要的功耗支出,此外还允许开发者缩减软核尺寸并将芯片资源应用于自定义功能的IP中,极大地增强了EdgeBoard人工智能多场景覆盖的能力。

理论EdgeBoardCNN
相关数据
池化技术

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

激活函数技术

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

调度技术

调度在计算机中是分配工作所需资源的方法。资源可以指虚拟的计算资源,如线程、进程或数据流;也可以指硬件资源,如处理器、网络连接或扩展卡。 进行调度工作的程序叫做调度器。调度器通常的实现使得所有计算资源都处于忙碌状态,允许多位用户有效地同时共享系统资源,或达到指定的服务质量。 see planning for more details

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

边缘计算技术

边缘运算(英语:Edge computing),又译为边缘计算,是一种分散式运算的架构,将应用程序、数据资料与服务的运算,由网络中心节点,移往网络逻辑上的边缘节点来处理。边缘运算将原本完全由中心节点处理大型服务加以分解,切割成更小与更容易管理的部分,分散到边缘节点去处理。边缘节点更接近于用户终端装置,可以加快资料的处理与传送速度,减少延迟。在这种架构下,资料的分析与知识的产生,更接近于数据资料的来源,因此更适合处理大数据。

计算机视觉技术

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

操作系统技术

操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。

图像处理技术

图像处理是指对图像进行分析、加工和处理,使其满足视觉、心理或其他要求的技术。 图像处理是信号处理在图像领域上的一个应用。 目前大多数的图像均是以数字形式存储,因而图像处理很多情况下指数字图像处理。

空洞卷积技术

空洞卷积最大的特性就是扩张感受野,它不是在像素间插入空白像素,而是略过一些已有的像素。当然,我们也可以理解为保持输入不变,并向卷积核中添加一些值为零的权重,从而在计算量基本不变的情况下增加网络观察到的图像范围或序列长度。

百度智能云机构

百度是全球最大的中文搜索引擎,是一家互联网综合信息服务公司,更是全球领先的人工智能平台型公司。2000年1月1日创立于中关村,公司创始人李彦宏拥有“超链分析”技术专利,也使中国成为美国、俄罗斯、和韩国之外,全球仅有的4个拥有搜索引擎核心技术的国家之一。

http://www.baidu.com
分块技术

将标注好词性的句子按句法结构把某些词聚合在一起形成比如主语、谓语、宾语等等。

暂无评论
暂无评论~