一种面向访存优化的稀疏卷积神经网络加速器

文档序号:191855 发布日期:2021-11-02 浏览:34次 >En<

阅读说明:本技术 一种面向访存优化的稀疏卷积神经网络加速器 (Sparse convolution neural network accelerator oriented to memory access optimization ) 是由 马胜 崔益俊 黄立波 邢座程 成元虎 徐睿 王波 于 2021-07-26 设计创作,主要内容包括:一种面向访存优化的稀疏卷积神经网络加速器,包括:稀疏激活值处理模块SSG,用于去除零值激活数据,筛选出有效的非零激活值;缓存模块CBUF,用于存储输入神经元数据和实现重复激活数据复用;缓存模块PB,用于存储并行读取的权值数据;运算模块CMAC,用于完成卷积操作的乘加运算;在读数据阶段,读入当前卷积操作所需的神经元数据至缓存模块中,读入权值数据至缓存模块PB中;在筛选和复用阶段,所述稀疏激活值处理模块将缓存模块中的非零激活数据筛选出,同时检查是否有复用的激活数据;在运算阶段,将筛选出的非零激活数据传输至运算模块进行卷积计算。本发明具有原理简单、容易实现、对计算和访存的效率提升明显等优点。(A memory access optimization oriented sparse convolutional neural network accelerator, comprising: the sparse activation value processing module SSG is used for removing zero-value activation data and screening out effective non-zero activation values; the buffer module CBUF is used for storing input neuron data and realizing repeated activation data multiplexing; the cache module PB is used for storing the weight data read in parallel; the operation module CMAC is used for completing the multiply-add operation of the convolution operation; in the data reading stage, reading neuron data required by the current convolution operation into a cache module, and reading weight data into a cache module PB; in the screening and multiplexing stage, the sparse activation value processing module screens out the non-zero activation data in the cache module, and simultaneously checks whether multiplexed activation data exist or not; and in the operation stage, transmitting the screened non-zero activation data to an operation module for convolution calculation. The invention has the advantages of simple principle, easy realization, obvious improvement on the efficiency of calculation and memory access, and the like.)

一种面向访存优化的稀疏卷积神经网络加速器

技术领域

本发明主要涉及到神经网络应用技术领域,特指一种面向访存优化的稀疏卷积神经网络加速器。

背景技术

目前,深度学习(Deep Learning)技术发展迅速,其在很多领域都得到了广泛的应用,同时也一跃成为学术界研究的热门领域。在深度学习技术中,关注度最高的便是深度神经网络模型,深度神经网络在许多人工智能应用中表现出很好的效果,包括计算机视觉、自然语言处理、机器翻译、图象识别等领域。然而,神经网络模型训练和推导对算力提出了很高的要求,普通的CPU和嵌入式处理器已经不能满足神经网络模型计算所需的算力。

为了解决神经网络模型快速发展带来的计算复杂性日益增加的问题。目前,有业内人士提供了两种主流方案来为神经网络模型的运算提供算力支撑。一种方案是使用具有大量并行性线程的GPU来完成模型的计算;另一种方案是基于FPGA设计或者ASIC设计来研发专用的神经网络加速器。GPU尽管能够为神经网络模型提供高算力的支持,但是其巨大的功耗成本是一个需要考虑的问题。因此,低功耗、高算力的专用神经网络加速器成为了解决神经网络模型计算的有效方法。

NVDLA是专用神经网络加速器的代表之一,它是英伟达推出的面向深度学习推理过程的开源神经网络加速器平台。但是其在卷积操作的过程中,仍然还存在两个问题:

第一、大量的零值激活值数据占用了大量的内存空间和运算单元,这些零值激活值参与的计算被称为无效计算。由于NVDLA不支持针对稀疏激活值的处理,因此高效的去除这些零值激活值数据可以提升卷积操作的效率;

第二、在卷积层内滑式窗口中存在大量的重复激活值数据,即相邻的卷积操作相同位置的数据需要多次重复参与计算,这导致了NVDLA加速器访存量的激增。

综上所述,现在亟需能够处理卷积操作中的稀疏激活数据和复用不同卷积操作中的重复激活数据,进而能够提高NVDLA卷积过程计算和访存效率的方法。

发明内容

本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种原理简单、容易实现、对计算和访存的效率提升明显的面向访存优化的稀疏卷积神经网络加速器。

为解决上述技术问题,本发明采用以下技术方案:

一种面向访存优化的稀疏卷积神经网络加速器,其包括:

稀疏激活值处理模块SSG,用于去除零值激活数据,筛选出有效的非零激活值;

缓存模块CBUF,用于存储输入神经元数据和实现重复激活数据复用;

缓存模块PB,用于存储并行读取的权值数据;

运算模块CMAC,用于完成卷积操作的乘加运算;

在读数据阶段,读入当前卷积操作所需的神经元数据至缓存模块CBUF中,读入权值数据至缓存模块PB中;

在筛选和复用阶段,所述稀疏激活值处理模块SSG将缓存模块CBUF中的非零激活数据筛选出,同时检查是否有复用的激活数据;

在运算阶段,将筛选出的非零激活数据传输至运算模块CMAC进行卷积计算。

作为本发明的进一步改进:所述稀疏激活值处理模块SSG包括:

输入神经元、权值通道,用于存储每次卷积操作所需的输入神经元和权值数据;

索引表,用于记录非零激活值数据在内存中的位置;

阈值设置模块,用于设置数据筛选的阈值参数。

作为本发明的进一步改进:所述输入神经元、权值通道中输入神经元和权值数据的大小设置为16*1*1*128byte。

作为本发明的进一步改进:所述阈值设置模块中筛选数据阈值T设置为零值,用于将非零的激活值数据筛选出。

作为本发明的进一步改进:所述缓存模块CBUF包括:

计数模块,用于决定加速器发起访存操作的起始时间,计数模块被设置是2bit来标识加速器何时开始执行访存操作;

标识模块,用于标识当次卷积操作是否已经完成,当标识是0时,则当次卷积操作未完成,反之,则当前卷积操作已完成。

作为本发明的进一步改进:所述计数模块包括计数部件Stripe Count,用来对卷积操作中实现计数功能,即第一次卷积操作和第二次卷积操作;所述第一次卷积操作没有数据复用,在完成卷积操作后,需要丢弃数据段前部分数据,保留后部分数据给下一次卷积操作进行数据复用,依此类推;

作为本发明的进一步改进:所述标识模块包括标识部件C_Flag,卷积标识部件设置为0或者1,0值表示当前卷积操作因数据量缺少没有完成,反之则表示当次卷积操作完成;所述第二次卷积操作的卷积标识位设置为0,第三次卷积操作和第二次卷积操作一样,卷积标识位也被设置为0;直到第四次卷积操作,缺少的激活数据段总量累计到了一次卷积操作的所需激活数据量;此时发起一次读操作,将这些新数据全部读入到Buffer中;数据在CBUF中按照使用的先后顺序在缓存中存储。

作为本发明的进一步改进:所述运算模块CMAC被用来设置是执行卷积操作中的乘加操作,CMAC部件一共分是16组,每一组数据输入均是64bit,每一组的输入神经元数据相同,而输入权值数据则各不相同。

作为本发明的进一步改进:所述运算模块CMAC包括三级流水栈:

第一级为乘法器层,一共包含16个乘法器,每个乘法器输入均为64bit;

第二级为加法器层,共设置为16输入的端口;

第三层是线性处理单元,用来完成对激活数据的非线性化处理工作;

所述乘法器层采用权值固定流的方式进行映射,即权值通道遍历完该组权值对应的所有激活数据,才更新权值通道中权值元素。

作为本发明的进一步改进:所述缓存模块PB中存储输入权值数据,其数量一共被设置为16个,分布不在不同的PE单元中;所述输入权值数据的大小被设置为256KB的SRAM,一共由16组1KB的Bank组成;每个Bank由64位宽、128个入口的双端口SRAM构成。

与现有技术相比,本发明的优点就在于:

本发明的面向访存优化的稀疏卷积神经网络加速器,结构简单、容易实现,对计算和访存的效率提升明显;本发明利用了稀疏激活值处理模块使得加速器能够动态的跳过零值激活值,提升了加速器计算阵列在卷积操作中的计算效率。进一步,本发明通过设置多个权值存储模块PB和对CBUF的改进,加速器能够高效的复用相邻卷积操作中的重复激活值数据。

附图说明

图1是本发明的拓扑结构原理示意图。

图2是本发明在具体应用实例中稀疏激活值处理模块结构的原理示意图。

图3是本发明在具体应用实例中稀疏激活值处理模块工作流程原理示意图。

图4是本发明在具体应用实例中稀疏激活值处理模块在具体计算实例中的原理示意图。

图5是本发明在具体应用实例中运算部件结构的原理示意图。

图6是本发明在具体应用实例中缓存模块PB结构的原理示意图。

图7是本发明在具体应用实例中缓存模块CBUF结构的原理示意图。

具体实施方式

以下将结合说明书附图和具体实施例对本发明做进一步详细说明。

如图1所示,本发明的面向访存优化的稀疏卷积神经网络加速器,包括:

稀疏激活值处理模块SSG,用于去除零值激活数据,筛选出有效的非零激活值;

缓存模块CBUF,用于存储输入神经元数据和实现重复激活数据复用;

缓存模块PB,用于存储并行读取的权值数据;

运算模块CMAC,用于完成卷积操作的乘加运算;

读数据阶段,加速器读入当前卷积操作所需的神经元数据至缓存模块CBUF中,读入权值数据至缓存模块PB中;

筛选和复用阶段,稀疏激活值处理模块SSG将缓存模块CBUF中的非零激活数据筛选出,同时检查是否有复用的激活数据;运算阶段,将筛选出的非零激活数据传输至运算模块CMAC进行卷积计算。

参见图2所示,在具体应用实例中,所述稀疏激活值处理模块SSG包括:

输入神经元、权值通道,存储每次卷积操作所需的输入神经元和权值数据;

索引表,记录非零激活值数据在内存中的位置;

阈值设置模块,设置数据筛选的阈值参数。

在具体应用实例中,所述输入神经元、权值通道中存储每次卷积操作中所需的输入神经元和权值数据,输入神经元和权值数据的大小一般设置是16*1*1*128byte。

在具体应用实例中,所述阈值设置模块被用来设置筛选数据的阈值,其大小的设置和网络模型的精度有直接的关系,在这里,阈值T一般被设置是零值,从而可以将非零的激活值数据筛选出。

如图3所示,在具体应用实例中,本发明稀疏激活值处理模块中加速器处理完成非零激活值的筛选流程包括:

第一步,读入当次卷积操作中所需的神经元数据和权值数据;

第二步,将读取的输入神经元数据和阈值进行比较,将大于零值的神经元数据的位置记录在索引表Indexing result中;

第三步,通过查找索引表中非零神经元数据的位置,将有效的神经元数据和权值数据传输至运算模块CMAC中进行计算。

如图4所示,本发明中稀疏激活值处理模块在具体计算实例中的示意图。假设一次卷积操作输入的神经元维度为4*4,卷积核的维度为1*1*16。在具体计算实例中,加速器完成非零激活值数据筛选一共需要三个步骤:

第一步,将维度为4*4的输入神经元数据传输到输入神经元通道Input neurons;

第二步,将输入的神经元数据和阈值进行比较,同时在索引表Indexingresult中记录下非零神经元数据的相对位置。同时,通过索引表中非零激活值元素的相对位置,筛选出对应的权值数据;

第三步,依次将非零的神经元通过广播的形式传输到计算阵列CMAC端口,每个CMAC中的输入神经元数据均相同,而权值数据则各不相同。

在具体应用实例中,所述缓存模块CBUF包括:计数模块,用于决定加速器发起访存操作的起始时间,重复激活数据的复用实际上减少了加速器访存的次数,因此计数部件被设置是2bit来标识加速器何时开始执行访存操作。标识模块,用于标识当次卷积操作是否已经完成,当标识是0时,则当次卷积操作未完成,反之,则当前卷积操作已完成。

所述缓存模块PB被用来设置是存储权值数据。其数量一共被设置是16个,分布在不同的CMAC单元中,从而实现加速器并行化读取权值的目的。

在具体应用实例中,所述运算模块CMAC被用来设置是执行卷积操作中的乘加操作。CMAC部件一共分是16组,每一组数据输入均是64bit,每一组的输入神经元数据相同,而输入权值数据则各不相同。

如图5所示,在具体应用实例中,本发明的运算模块CMAC包括三级流水栈:

第一级为乘法器层,一共包含16个乘法器,每个乘法器输入均为64bit;

第二级为加法器层,共设置为16输入的端口;

第三层是线性处理单元,完成对激活数据的非线性化处理工作。

其中,乘法器层采用权值固定流的方式进行映射,即权值通道遍历完该组权值对应的所有激活数据,才更新权值通道中权值元素。

如图6所示,在具体应用实例中,本发明的缓存模块PB中存储输入权值数据,其数量一共被设置为16个,分布不在不同的PE单元中。输入权值数据的大小被设置为256KB的SRAM,一共由16组1KB的Bank组成。每个Bank由64位宽、128个入口的双端口SRAM构成。缓存模块PB设置为16个的目的是为了减少权值数据读取的时间,从而方便相邻卷积窗口中重复激活数据的复用。

如图7所示,在具体应用实例中,本发明的缓存模块CBUF包括:

缓存部件Buffer,用来存储经数据复用后的非重复输入神经元数据,其大小设置为256KB的SRAM。一共由16组16KB的Bank组成,每个Bank由512位宽、256个入口的双端口SRAM组成。

计数部件Stripe Count,用来对卷积操作中实现计数功能,即第一次卷积操作、第二次卷积操作等。以相邻的卷积操作中重复的激活值元素占整个卷积操作激活值数据为75%为例,第一次卷积操作没有数据复用,在完成卷积操作后,需要丢弃数据段前25%的数据,保留后75%的数据给下一次卷积操作进行数据复用,依此类推。计数器的加入可以量化每次卷积操作中数据复用的数量。

标识部件C_Flag,卷积标识部件设置为0或者1,0值表示当前卷积操作因数据量缺少没有完成,反之则表示当次卷积操作完成。第二次卷积操作因为缺少后25%的激活数据,因此其卷积标识位设置为0,第三次卷积操作和第二次卷积操作一样,也因为缺少数据段的后25%,其卷积标识位也被设置为0。直到第四次卷积操作,缺少的激活数据段总量累计到了一次卷积操作的所需激活数据量。此时发起一次读操作,将这些新数据全部读入到Buffer中。数据在CBUF中按照使用的先后顺序在缓存中存储。

以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视是本发明的保护范围。

12页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:基于深度可分离卷积模块的剪枝方法及系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!