CN112215345B - 一种基于Tensorcore的卷积神经网络运转方法和装置 - Google Patents
一种基于Tensorcore的卷积神经网络运转方法和装置 Download PDFInfo
- Publication number
- CN112215345B CN112215345B CN202011104681.8A CN202011104681A CN112215345B CN 112215345 B CN112215345 B CN 112215345B CN 202011104681 A CN202011104681 A CN 202011104681A CN 112215345 B CN112215345 B CN 112215345B
- Authority
- CN
- China
- Prior art keywords
- convolution
- matrix
- input
- data matrix
- core
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 49
- 238000013527 convolutional neural network Methods 0.000 title claims abstract description 34
- 239000011159 matrix material Substances 0.000 claims abstract description 185
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical group OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 claims abstract description 65
- 238000010606 normalization Methods 0.000 claims abstract description 30
- 238000012937 correction Methods 0.000 claims abstract description 20
- 238000005192 partition Methods 0.000 claims description 41
- 238000004364 calculation method Methods 0.000 abstract description 44
- 238000004891 communication Methods 0.000 abstract description 11
- 230000008569 process Effects 0.000 description 19
- 238000004422 calculation algorithm Methods 0.000 description 6
- 238000011017 operating method Methods 0.000 description 5
- 238000013528 artificial neural network Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 238000000844 transformation Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000008034 disappearance Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 229920006395 saturated elastomer Polymers 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Mathematical Analysis (AREA)
- Molecular Biology (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Computational Mathematics (AREA)
- Computational Linguistics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开了一种基于Tensorcore的卷积神经网络运转方法和装置,方法包括:由图形处理器指定CUDA核心,并将进行卷积运算使用的输入矩阵从图形处理器的全局内存传输到CUDA核心的共享内存或寄存器;由CUDA核心独立地对输入矩阵依次执行基于第一卷积核的卷积、批量归一化、和线性修正,获得第一临时结果;由CUDA核心独立地对第一临时结果依次执行基于第二卷积核的卷积、批量归一化、和线性修正,获得第二临时结果;由CUDA核心独立地对第二临时结果依次执行基于第三卷积核的卷积和批量归一化,获得卷积残差;由CUDA核心将卷积残差叠加到输入矩阵以形成输出矩阵,并从共享内存或寄存器回传到全局内存。本发明能够减少数据计算时核心与全局内存的通信,提高网络计算性能。
Description
技术领域
本发明涉及神经网络领域,更具体地,特别是指一种基于Tensorcore的卷积神经网络运转方法和装置。
背景技术
目前对人工智能图像识别与分类方面的研究主要有两方面,一方面是如何能够提高图像识别过程中的准确率,相关学者提出了各种卷积神经网络,比如Resnet50卷积神经网络模型,通过引入残差结构大大提高图像识别的精度;另一方面是如何提高图像识别过程的速度,在这一方面,有学者提出了各种关于卷积计算的高效实现方法,比如im2col、FFT、Winograd算法等,其中Winograd算法是基于最小滤波算法提出的一种快速卷积算法,它可以通过降低卷积的计算复杂度从而提升卷积计算效率,适用于小尺寸的卷积核进行卷积运算。
Resnet是由Kaiming He等人于2015年提出的具有残差结构的卷积神经网络,该模型通过引入残差单元解决了网络加深时的梯度消失问题,随着层次的加深,识别精度相应提高,当网络达到饱和时,采用全等映射的思想解决深层次网络退化的问题,具有较高的图像识别精度,目前Resnet50网络在图像识别领域具有较为广泛的应用。Resnet50是具有50层计算结构的神经网络卷积模型,在该模型中大部分计算都是卷积计算,当模型在GPU上运行时,每一层卷积都会调用一个CUDA kernel程序进行计算,在调用kernel时便会产生GPU中寄存器以及共享内存与全局内存的较低效率的通信。
具体来说,当网络模型在GPU上基于CUDA进行计算时,目前比较普遍的计算方法是每一层卷积运算都会调用一个计算卷积的Kernel(内核)进行计算,在计算时Kernel会将数据矩阵以及权重矩阵由全局读入Kernel,然后在寄存器或者共享内存中进行卷积运算,计算完成后结果数据会由寄存器或者共享内存写回全局内存以进行下一层卷积的运算。
在目前的GPU结构上,数据由全局内存读入共享内存或者寄存器,或者数据由共享内存或者寄存器写回全局内存,是目前调用CUDA Kernel必须要经过的流程,但是这个流程存在的问题就是通信比较慢,当CUDA核心计算较快的时候,计算时数据在全局内存的频繁读取,通信延迟就会成为计算瓶颈。
针对现有技术中核心频繁读取全局内存导致通信延迟高、拖慢计算性能的问题,目前尚无有效的解决方案。
发明内容
有鉴于此,本发明实施例的目的在于提出一种基于Tensorcore的卷积神经网络运转方法和装置,能够减少数据计算时核心与全局内存的通信,提高网络计算性能。
基于上述目的,本发明实施例的第一方面提供了一种基于Tensorcore的卷积神经网络运转方法,包括在多个卷积层中依次执行以下步骤:
由图形处理器指定CUDA核心,并将进行卷积运算使用的输入矩阵从图形处理器的全局内存传输到CUDA核心的共享内存或寄存器;
由CUDA核心独立地对输入矩阵依次执行基于第一卷积核的卷积、批量归一化、和线性修正,获得第一临时结果;
由CUDA核心独立地对第一临时结果依次执行基于第二卷积核的卷积、批量归一化、和线性修正,获得第二临时结果;
由CUDA核心独立地对第二临时结果依次执行基于第三卷积核的卷积和批量归一化,获得卷积残差;
由CUDA核心将卷积残差叠加到输入矩阵以形成输出矩阵,并从共享内存或寄存器回传到全局内存。
在一些实施方式中,对输入矩阵执行基于第一卷积核的卷积包括:
基于输入矩阵的长度和宽度将输入矩阵划分为具有重叠区域的多个第一分块;
基于第一卷积核对多个第一分块分别执行卷积并叠加,获得第一数据矩阵;
将第一数据矩阵与第一权重矩阵在输入通道上相乘。
在一些实施方式中,对输入矩阵执行基于第一卷积核的卷积还包括:
在第一数据矩阵的外围增加一圈零像素点。
在一些实施方式中,对第一临时结果执行基于第二卷积核的卷积包括:
基于第一数据矩阵的长度和宽度将第一数据矩阵划分为多个第二分块;
基于第二卷积核对多个第二分块分别执行卷积并叠加,获得第二数据矩阵;
将第二数据矩阵与第二权重矩阵在输入通道上相乘。
在一些实施方式中,对第二临时结果执行基于第三卷积核的卷积包括:
基于第二数据矩阵的长度和宽度将第二数据矩阵划分为多个第三分块;
基于第三卷积核对多个第三分块分别执行卷积并叠加,获得第三数据矩阵;
将第三数据矩阵与第三权重矩阵在输入通道上相乘。
在一些实施方式中,第一卷积核为1*1;第二卷积核为3*3;第三卷积核为1*1。
在一些实施方式中,对多个第一分块、第二分块、和第三分块分别执行卷积包括:使用Tensorcore的矩阵乘加PTX指令来执行卷积,其中第一分块、第二分块、和第三分块的长度与宽度之积、输入通道数、输出通道数分别是8、8、16的整倍数。
本发明实施例的第二方面提供了一种基于Tensorcore的卷积神经网络运转装置,包括:
处理器;和
存储器,存储有处理器可运行的程序代码,程序代码在被运行时在多个卷积层中依次执行以下步骤:
由图形处理器指定CUDA核心,并将进行卷积运算使用的输入矩阵从图形处理器的全局内存传输到CUDA核心的共享内存或寄存器;
由CUDA核心独立地对输入矩阵依次执行基于第一卷积核的卷积、批量归一化、和线性修正,获得第一临时结果;
由CUDA核心独立地对第一临时结果依次执行基于第二卷积核的卷积、批量归一化、和线性修正,获得第二临时结果;
由CUDA核心独立地对第二临时结果依次执行基于第三卷积核的卷积和批量归一化,获得卷积残差;
由CUDA核心将卷积残差叠加到输入矩阵以形成输出矩阵,并从共享内存或寄存器回传到全局内存。
在一些实施方式中,对输入矩阵执行基于第一卷积核的卷积包括:基于输入矩阵的长度和宽度将输入矩阵划分为具有重叠区域的多个第一分块;基于第一卷积核对多个第一分块分别执行卷积并叠加,获得第一数据矩阵;将第一数据矩阵与第一权重矩阵在输入通道上相乘;
对第一临时结果执行基于第二卷积核的卷积包括:基于第一数据矩阵的长度和宽度将第一数据矩阵划分为多个第二分块;基于第二卷积核对多个第二分块分别执行卷积并叠加,获得第二数据矩阵;将第二数据矩阵与第二权重矩阵在输入通道上相乘;
对第二临时结果执行基于第三卷积核的卷积包括:基于第二数据矩阵的长度和宽度将第二数据矩阵划分为多个第三分块;基于第三卷积核对多个第三分块分别执行卷积并叠加,获得第三数据矩阵;将第三数据矩阵与第三权重矩阵在输入通道上相乘。
在一些实施方式中,对多个第一分块、第二分块、和第三分块分别执行卷积包括:使用Tensorcore的矩阵乘加PTX指令来执行卷积,其中第一分块、第二分块、和第三分块的长度与宽度之积、输入通道数、输出通道数分别是8、8、16的整倍数。
本发明具有以下有益技术效果:本发明实施例提供的基于Tensorcore的卷积神经网络运转方法和装置,通过由图形处理器指定CUDA核心,并将进行卷积运算使用的输入矩阵从图形处理器的全局内存传输到CUDA核心的共享内存或寄存器;由CUDA核心独立地对输入矩阵依次执行基于第一卷积核的卷积、批量归一化、和线性修正,获得第一临时结果;由CUDA核心独立地对第一临时结果依次执行基于第二卷积核的卷积、批量归一化、和线性修正,获得第二临时结果;由CUDA核心独立地对第二临时结果依次执行基于第三卷积核的卷积和批量归一化,获得卷积残差;由CUDA核心将卷积残差叠加到输入矩阵以形成输出矩阵,并从共享内存或寄存器回传到全局内存的技术方案,能够减少数据计算时核心与全局内存的通信,提高网络计算性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提供的基于Tensorcore的卷积神经网络运转方法的流程示意图;
图2为本发明提供的基于Tensorcore的卷积神经网络运转方法的整体流程图;
图3a、3b和3c分别是本发明提供的基于Tensorcore的卷积神经网络运转方法的卷积计算中使用的输入矩阵、卷积核、以及输出矩阵;
图4a和4b分别是本发明提供的基于Tensorcore的卷积神经网络运转方法的第一个1*1卷积计算的输入矩阵和输出矩阵;
图5a和5b分别是本发明提供的基于Tensorcore的卷积神经网络运转方法的3*3卷积计算的输入矩阵和输出矩阵;
图6a和6b分别是本发明提供的基于Tensorcore的卷积神经网络运转方法的最后一个1*1卷积计算的输入矩阵和输出矩阵;
图7是本发明提供的基于Tensorcore的卷积神经网络运转方法的Tensorcore的计算流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。
需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。
基于上述目的,本发明实施例的第一个方面,提出了一种减少数据计算时核心与全局内存的通信,提高网络计算性能的基于Tensorcore的卷积神经网络运转方法的一个实施例。图1示出的是本发明提供的基于Tensorcore的卷积神经网络运转方法的流程示意图。
所述的基于Tensorcore的卷积神经网络运转方法,如图1所示,包括执行以下步骤:
步骤S101:由图形处理器指定CUDA核心,并将进行卷积运算使用的输入矩阵从图形处理器的全局内存传输到CUDA核心的共享内存或寄存器;
步骤S103:由CUDA核心独立地对输入矩阵依次执行基于第一卷积核的卷积、批量归一化、和线性修正,获得第一临时结果;
步骤S105:由CUDA核心独立地对第一临时结果依次执行基于第二卷积核的卷积、批量归一化、和线性修正,获得第二临时结果;
步骤S107:由CUDA核心独立地对第二临时结果依次执行基于第三卷积核的卷积和批量归一化,获得卷积残差;
步骤S109:由CUDA核心将卷积残差叠加到输入矩阵以形成输出矩阵,并从共享内存或寄存器回传到全局内存。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,计算机的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,计算机的存储介质可为磁碟、光盘、只读存储记忆体(ROM)或随机存储记忆体(RAM)等。计算机程序的实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。
在一些实施方式中,对输入矩阵执行基于第一卷积核的卷积包括:
基于输入矩阵的长度和宽度将输入矩阵划分为具有重叠区域的多个第一分块;
基于第一卷积核对多个第一分块分别执行卷积并叠加,获得第一数据矩阵;
将第一数据矩阵与第一权重矩阵在输入通道上相乘。
在一些实施方式中,对输入矩阵执行基于第一卷积核的卷积还包括:
在第一数据矩阵的外围增加一圈零像素点。
在一些实施方式中,对第一临时结果执行基于第二卷积核的卷积包括:
基于第一数据矩阵的长度和宽度将第一数据矩阵划分为多个第二分块;
基于第二卷积核对多个第二分块分别执行卷积并叠加,获得第二数据矩阵;
将第二数据矩阵与第二权重矩阵在输入通道上相乘。
在一些实施方式中,对第二临时结果执行基于第三卷积核的卷积包括:
基于第二数据矩阵的长度和宽度将第二数据矩阵划分为多个第三分块;
基于第三卷积核对多个第三分块分别执行卷积并叠加,获得第三数据矩阵;
将第三数据矩阵与第三权重矩阵在输入通道上相乘。
在一些实施方式中,第一卷积核为1*1;第二卷积核为3*3;第三卷积核为1*1。
在一些实施方式中,对多个第一分块、第二分块、和第三分块分别执行卷积包括:使用Tensorcore的矩阵乘加PTX指令来执行卷积,其中第一分块、第二分块、和第三分块的长度与宽度之积、输入通道数、输出通道数分别是8、8、16的整倍数。
下面根据图2所示的具体实施例进一步阐述本发明的具体实施方式。
在图2中,左边的残差结构是Resnet50原本计算流程,右边表示进行卷积合并后的计算流程。可以看到在残差结构中,输入是Res4.1经过Sun以及Relu之后的上层卷积的输出,这部分数据首先会传入右边Res4.2进行卷积conv1的计算,然后经过Bn以及Relu之后数据传入conv2进行卷积的计算,随后conv2经过Bn以及Relu的输出会传入conv3进行卷积运算,经过Bn操作后数据会与最开始Res4.1的数据进行一个对应求和以及Relu的过程,这样便进行了一个完整的卷积残差结构的运算,这样的类似残差结构在Resnet50网络中共有16组,不同的是残差结构中的卷积计算形状会有差异。具体的Resnet50计算流程如下表1所示:
其中,第一层为卷积核7*7的卷积运算,其他卷积为4组共16个3层卷积的残差单元结构堆积而成,所以在Resnet50网络模型中一共49层卷积运算。Conv为卷积层,50-layer为该层卷积核的长度、宽度、和通道数。
本发明实施例用图2的右边虚线框中的一个合并计算的Kernel来替换掉原本残差结构中的三个卷积,分别是1*1,3*3,1*1卷积,同时会合并与初始输入的sum以及relu过程,通过这样的合并,可以将三个卷积的计算以及计算完之后的sum和relu过程在一个kernel中完成计算,从而减少kernel的调用次数避免数据与全局内存的不必要交换,在增大kernel中计算密度以及减少数据与全局内存的通信后,通过合理的设计算法,可以提高网络在图像识别方面的性能表现。
在计算机视觉领域中,数字图像是一个二维的离散信号,对数字图像做卷积操作其实就是利用卷积核(卷积模板)在图像上滑动,将图像点上的像素灰度值与对应的卷积核上的数值相乘,然后将所有相乘后的值相加作为卷积核中间像素对应的图像上像素的灰度值,并最终滑动完所有图像的过程,具体计算过程参见图3 a、3b、3c。
图3a表示原始图像,图像尺寸H x W为4x4,每一个数字表示像素点值,图3b表示卷积核,主要作用是对图片的特征进行提取,卷积核尺寸为3x3,卷积的过程就是图3b的3x3的卷积核逐次在原始图片上进行滑动,并与覆盖的原始图片的3x3区域进行对应像素点相乘然后将得到的9个值相加得到处理后图片的像素点,例如图3a中浅灰色背景区域经过卷积后得到一个新像素点,如图3c中灰色区域像素点所示,最终原始图片经过卷积操作后得到图3c所示的新图片,这就是一个简单的卷积具体操作。通过卷积可以突出图片的特征,将图片中隐藏的数字信息进行提取从而达到图像分类的目的,同时在卷积神经网络中卷积操作是主要的计算过程,因此有必要加速卷积的运算以提高整个网络的计算速度。
本发明实施例以第三个残差结构为例详细说明算法实现方法,第三个残差结构的具体形状如下表2所示:
data:H*W*Ic | weight:kh*kw*Ic*Oc | pad | stride | |||
1*1 | 14*14*1024 | 1*1*1024*256 | bn | relu | 0 | 1 |
3*3 | 14*14*256 | 3*3*256*256 | bn | relu | 1 | 1 |
1*1 | 14*14*256 | 1*1256*1024 | bn | 0 | 1 |
合并的三个卷积的数据(data)形状的长(H)乘宽(W)都为14*14,在第一个卷积中data输入通道数(Ic)为1024,权重(weight)的长(kh)乘宽(kw)为1*1,输入通道数(Ic)为1024,输出通道数(Oc)为256,在卷积后需要进行bn以及relu操作,同时在卷积过程中pad值为0,stride为1,关于3*3卷积以及最后一个1*1卷积详细数据可以从上表中获得。
第一个1*1卷积计算过程如图4a、4b所示。图4a中1*1卷积的输入,通过上表可以知道图片长乘宽为14*14,图中每一个点都表示输入通道为1024,针对一个图片,本专利将14*14的区域划分为4个8*8区域,并将4个8*8区域分别划分到4个block,其中在这4个block所负责的区域中,会与彼此相邻的block产生两行或者两列的重合区域,每一个8*8区域的起始位置可以见图4a中的颜色较深的四个点。这样在一个block中图4a的数据计算完成后便得到图4b中浅色的区域,这部分区域是1*1卷积的输出,也是3*3卷积的输入,因为3*3卷积需要做pad,所以需要在14*14区域的最外层pad一圈0,形成16*16的区域。
在图4a中一个block中计算的8*8区域中会形成64行1024列的二维矩阵,也就是data矩阵m*k为64(H*W)*1024(Ic),与之对应的weight的形成的矩阵n*k为256(Oc)*1024(Ic),这样通过data以及weight的两个矩阵相乘便得到该卷积的output矩阵m*n为64(H*W)*256(Oc),最后完成卷积的计算。
3*3卷积计算的过程如图5a、5b所示。可以看到图5a中1*1卷积的输入,通过表2可以知道图片长乘宽为16*16,图中每一个点都表示输入通道为256,针对一个图片,本专利将16*16的区域划分为4个9*9区域,并将4个9*9区域分别划分到4个block,其中在这4个block所负责的区域中,会与彼此相邻的block产生两行或者两列的重合区域。这样在一个block中图5a的数据计算完成后便得到图5b中浅色的区域,这部分区域是3*3卷积的输出,也是最后一个1*1卷积的输入。
与1*1卷积不同的是,3*3卷积进行的运算为3*3共九个点区域的滑窗运算,这样每次在计算的时候需要在9*9区域中填充为10*10区域,然后在10*10的区域进行滑窗运算,每次运算取8*8的区域进行卷积运算,每次滑窗运算的结果都将累加到相同的区域,经过9次滑窗运算后,便得到3*3卷积的运算输出。
每次滑窗运算data矩阵m*k为64(H*W)*256(Ic),与之对应的weight的形成的矩阵n*k为256(Oc)*256(Ic),这样通过data以及weight的两个矩阵相乘便得到该卷积的output矩阵m*n为64(H*W)*256(Oc),最后完成卷积的计算。
最后一个1*1卷积计算过程如图6a、6b所示。可以看到图6a中1*1卷积的输入,通过表2可以知道图片长乘宽为14*14,图中每一个点都表示输入通道为256,针对一个图片,本专利将14*14的区域划分为4个7*7区域,并将4个7*7区域分别划分到4个block,这样在一个block中图6a的深色数据计算完成后便得到图6b中深色的区域,这部分区域是1*1卷积的输出。
在进行最后一个1*1卷积的计算的时候,为了适配mma矩阵乘的计算,每一个7*7区域需要在共享内存中填充为8*8区域,这样在图6a中一个block中计算的8*8区域中会形成64行256列的二维矩阵,也就是data矩阵m*k为64(H*W)*256(Ic),与之对应的weight的形成的矩阵n*k为1024(Oc)*256(Ic),这样通过data以及weight的两个矩阵相乘便得到该卷积的output矩阵m*n为64(H*W)*1024(Oc),最后完成卷积的计算,在卷积运算完成后,将需要的7*7区域摘取出来与第一个1*1卷积的输入data进行sum以及relu后将数据写回全局内存完成整个卷积合并的运算。
在上述几个卷积的计算过程中,可以看到每一个过程都需要进行矩阵乘,为了在CUDA中实现高效的矩阵乘算法,本专利采取直接通过Tensorcore中mma的ptx指令实现矩阵乘,每一个mma进行的运算为m8n8k16的矩阵乘。
Tensorcore计算流程参见图7。整个Tensorcore计算矩阵乘的具体过程,在最左边的输入表示进行矩阵乘的两个输入矩阵,矩阵的数据精度为int8,关于矩阵的形状m*n*k为8*8*16,在每组两个输入矩阵相乘后在中间的累加器(Accumulator)中进行不断地累加,在累加器中计算精度为int32,最后在所有矩阵相乘并累加后得到输出矩阵,输出矩阵的计算精度也为int32,值得一提的是所有的计算过程都是在32个线程之内完成的,通过32个线程的一次协作完成一次特定形状下的矩阵乘操作,相比较不使用Tensorcore的矩阵乘操作,使用Tensorcore的计算性能可以提高3倍左右,具体实现通过mma的ptx指令完成。
本发明实施例为了适配共享内存而将block中矩阵乘形状m*n*k规定为64*128*64,这样每次矩阵乘的时候,通过k方向以及n的循环便可以完成整个卷积的运算。通过block中矩阵乘形状与mma矩阵乘形状进行比较便可以得出每一个block需要进行8*32次mma的运算,其中每一次计算需要k方向循环4次,在每一个block中设置线程数为256,即8个warp,将8*32次mma指令运算划分为8个warp,每一个warp计算8*4个mma矩阵乘,通过对mma进行划分到多个线程进行计算从而实现高效的矩阵乘运算。
从上述实施例可以看出,本发明实施例提供的基于Tensorcore的卷积神经网络运转方法,通过由图形处理器指定CUDA核心,并将进行卷积运算使用的输入矩阵从图形处理器的全局内存传输到CUDA核心的共享内存或寄存器;由CUDA核心独立地对输入矩阵依次执行基于第一卷积核的卷积、批量归一化、和线性修正,获得第一临时结果;由CUDA核心独立地对第一临时结果依次执行基于第二卷积核的卷积、批量归一化、和线性修正,获得第二临时结果;由CUDA核心独立地对第二临时结果依次执行基于第三卷积核的卷积和批量归一化,获得卷积残差;由CUDA核心将卷积残差叠加到输入矩阵以形成输出矩阵,并从共享内存或寄存器回传到全局内存的技术方案,能够减少数据计算时核心与全局内存的通信,提高网络计算性能。
需要特别指出的是,上述基于Tensorcore的卷积神经网络运转方法的各个实施例中的各个步骤均可以相互交叉、替换、增加、删减,因此,这些合理的排列组合变换之于基于Tensorcore的卷积神经网络运转方法也应当属于本发明的保护范围,并且不应将本发明的保护范围局限在所述实施例之上。
基于上述目的,本发明实施例的第二个方面,提出了一种减少数据计算时核心与全局内存的通信,提高网络计算性能的基于Tensorcore的卷积神经网络运转装置的一个实施例。基于Tensorcore的卷积神经网络运转装置包括:
处理器;和
存储器,存储有处理器可运行的程序代码,程序代码在被运行时执行以下步骤:
由图形处理器指定CUDA核心,并将进行卷积运算使用的输入矩阵从图形处理器的全局内存传输到CUDA核心的共享内存或寄存器;
由CUDA核心独立地对输入矩阵依次执行基于第一卷积核的卷积、批量归一化、和线性修正,获得第一临时结果;
由CUDA核心独立地对第一临时结果依次执行基于第二卷积核的卷积、批量归一化、和线性修正,获得第二临时结果;
由CUDA核心独立地对第二临时结果依次执行基于第三卷积核的卷积和批量归一化,获得卷积残差;
由CUDA核心将卷积残差叠加到输入矩阵以形成输出矩阵,并从共享内存或寄存器回传到全局内存。
在一些实施方式中,对输入矩阵执行基于第一卷积核的卷积包括:基于输入矩阵的长度和宽度将输入矩阵划分为具有重叠区域的多个第一分块;基于第一卷积核对多个第一分块分别执行卷积并叠加,获得第一数据矩阵;将第一数据矩阵与第一权重矩阵在输入通道上相乘;
对第一临时结果执行基于第二卷积核的卷积包括:基于第一数据矩阵的长度和宽度将第一数据矩阵划分为多个第二分块;基于第二卷积核对多个第二分块分别执行卷积并叠加,获得第二数据矩阵;将第二数据矩阵与第二权重矩阵在输入通道上相乘;
对第二临时结果执行基于第三卷积核的卷积包括:基于第二数据矩阵的长度和宽度将第二数据矩阵划分为多个第三分块;基于第三卷积核对多个第三分块分别执行卷积并叠加,获得第三数据矩阵;将第三数据矩阵与第三权重矩阵在输入通道上相乘。
在一些实施方式中,对多个第一分块、第二分块、和第三分块分别执行卷积包括:使用Tensorcore的矩阵乘加PTX指令来执行卷积,其中第一分块、第二分块、和第三分块的长度与宽度之积、输入通道数、输出通道数分别是8、8、16的整倍数。
从上述实施例可以看出,本发明实施例提供的基于Tensorcore的卷积神经网络运转装置,通过由图形处理器指定CUDA核心,并将进行卷积运算使用的输入矩阵从图形处理器的全局内存传输到CUDA核心的共享内存或寄存器;由CUDA核心独立地对输入矩阵依次执行基于第一卷积核的卷积、批量归一化、和线性修正,获得第一临时结果;由CUDA核心独立地对第一临时结果依次执行基于第二卷积核的卷积、批量归一化、和线性修正,获得第二临时结果;由CUDA核心独立地对第二临时结果依次执行基于第三卷积核的卷积和批量归一化,获得卷积残差;由CUDA核心将卷积残差叠加到输入矩阵以形成输出矩阵,并从共享内存或寄存器回传到全局内存的技术方案,能够减少数据计算时核心与全局内存的通信,提高网络计算性能。
需要特别指出的是,上述基于Tensorcore的卷积神经网络运转装置的实施例采用了所述基于Tensorcore的卷积神经网络运转方法的实施例来具体说明各模块的工作过程,本领域技术人员能够很容易想到,将这些模块应用到所述基于Tensorcore的卷积神经网络运转方法的其他实施例中。当然,由于所述基于Tensorcore的卷积神经网络运转方法实施例中的各个步骤均可以相互交叉、替换、增加、删减,因此,这些合理的排列组合变换之于所述基于Tensorcore的卷积神经网络运转装置也应当属于本发明的保护范围,并且不应将本发明的保护范围局限在所述实施例之上。
以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上所述的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。
Claims (8)
1.一种基于Tensorcore的卷积神经网络运转方法,其特征在于,包括在多个卷积层中依次执行以下步骤:
由图形处理器指定CUDA核心,并将进行卷积运算使用的输入矩阵从所述图形处理器的全局内存传输到所述CUDA核心的共享内存或寄存器;
由所述CUDA核心独立地对所述输入矩阵依次执行基于第一卷积核的卷积、批量归一化、和线性修正,获得第一临时结果;
由所述CUDA核心独立地对所述第一临时结果依次执行基于第二卷积核的卷积、批量归一化、和线性修正,获得第二临时结果;
由所述CUDA核心独立地对所述第二临时结果依次执行基于第三卷积核的卷积和批量归一化,获得卷积残差;
由所述CUDA核心将所述卷积残差叠加到所述输入矩阵以形成输出矩阵,并从所述共享内存或寄存器回传到所述全局内存;
其中,对所述输入矩阵执行基于第一卷积核的卷积包括:
基于所述输入矩阵的长度和宽度将所述输入矩阵划分为具有重叠区域的多个第一分块;
基于所述第一卷积核对多个所述第一分块分别执行卷积并叠加,获得第一数据矩阵;
将所述第一数据矩阵与第一权重矩阵在输入通道上相乘;以及
在所述第一数据矩阵的外围增加一圈零像素点。
2.根据权利要求1所述的方法,其特征在于,对所述第一临时结果执行基于第二卷积核的卷积包括:
基于所述第一数据矩阵的长度和宽度将所述第一数据矩阵划分为多个第二分块;
基于所述第二卷积核对多个所述第二分块分别执行卷积并叠加,获得第二数据矩阵;
将所述第二数据矩阵与第二权重矩阵在输入通道上相乘。
3.根据权利要求2所述的方法,其特征在于,对所述第二临时结果执行基于第三卷积核的卷积包括:
基于所述第二数据矩阵的长度和宽度将所述第二数据矩阵划分为多个第三分块;
基于所述第三卷积核对多个所述第三分块分别执行卷积并叠加,获得第三数据矩阵;
将所述第三数据矩阵与第三权重矩阵在输入通道上相乘。
4.根据权利要求1、2、或3所述的方法,其特征在于,所述第一卷积核为1*1;所述第二卷积核为3*3;所述第三卷积核为1*1。
5.根据权利要求3所述的方法,其特征在于,对多个所述第一分块、所述第二分块、和所述第三分块分别执行卷积包括:
使用Tensorcore的矩阵乘加PTX指令来执行卷积,其中所述第一分块、所述第二分块、和所述第三分块的长度与宽度之积、输入通道数、输出通道数分别是8、8、16的整倍数。
6.一种基于Tensorcore的卷积神经网络运转装置,其特征在于,包括:
处理器;和
存储器,存储有处理器可运行的程序代码,所述程序代码在被运行时在多个卷积层中依次执行以下步骤:
由图形处理器指定CUDA核心,并将进行卷积运算使用的输入矩阵从所述图形处理器的全局内存传输到所述CUDA核心的共享内存或寄存器;
由所述CUDA核心独立地对所述输入矩阵依次执行基于第一卷积核的卷积、批量归一化、和线性修正,获得第一临时结果;
由所述CUDA核心独立地对所述第一临时结果依次执行基于第二卷积核的卷积、批量归一化、和线性修正,获得第二临时结果;
由所述CUDA核心独立地对所述第二临时结果依次执行基于第三卷积核的卷积和批量归一化,获得卷积残差;
由所述CUDA核心将所述卷积残差叠加到所述输入矩阵以形成输出矩阵,并从所述共享内存或寄存器回传到所述全局内存;
其中,对所述输入矩阵执行基于第一卷积核的卷积包括:
基于所述输入矩阵的长度和宽度将所述输入矩阵划分为具有重叠区域的多个第一分块;
基于所述第一卷积核对多个所述第一分块分别执行卷积并叠加,获得第一数据矩阵;
将所述第一数据矩阵与第一权重矩阵在输入通道上相乘;以及
在所述第一数据矩阵的外围增加一圈零像素点。
7.根据权利要求6所述的装置,其特征在于,
对所述第一临时结果执行基于第二卷积核的卷积包括:基于所述第一数据矩阵的长度和宽度将所述第一数据矩阵划分为多个第二分块;基于所述第二卷积核对多个所述第二分块分别执行卷积并叠加,获得第二数据矩阵;将所述第二数据矩阵与第二权重矩阵在输入通道上相乘;
对所述第二临时结果执行基于第三卷积核的卷积包括:基于所述第二数据矩阵的长度和宽度将所述第二数据矩阵划分为多个第三分块;基于所述第三卷积核对多个所述第三分块分别执行卷积并叠加,获得第三数据矩阵;将所述第三数据矩阵与第三权重矩阵在输入通道上相乘。
8.根据权利要求7所述的装置,其特征在于,对多个所述第一分块、所述第二分块、和所述第三分块分别执行卷积包括:
使用Tensorcore的矩阵乘加PTX指令来执行卷积,其中所述第一分块、所述第二分块、和所述第三分块的长度与宽度之积、输入通道数、输出通道数分别是8、8、16的整倍数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011104681.8A CN112215345B (zh) | 2020-10-15 | 2020-10-15 | 一种基于Tensorcore的卷积神经网络运转方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011104681.8A CN112215345B (zh) | 2020-10-15 | 2020-10-15 | 一种基于Tensorcore的卷积神经网络运转方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112215345A CN112215345A (zh) | 2021-01-12 |
CN112215345B true CN112215345B (zh) | 2022-12-20 |
Family
ID=74054695
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011104681.8A Active CN112215345B (zh) | 2020-10-15 | 2020-10-15 | 一种基于Tensorcore的卷积神经网络运转方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112215345B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113222113B (zh) * | 2021-04-19 | 2023-10-31 | 西北大学 | 一种基于反缩放卷积层的信号生成方法及装置 |
CN113869495B (zh) * | 2021-09-30 | 2024-02-06 | 苏州浪潮智能科技有限公司 | 神经网络卷积权重layout优化的方法、装置、设备及可读介质 |
CN114445687B (zh) * | 2021-12-31 | 2024-01-19 | 苏州浪潮智能科技有限公司 | 一种图像识别推理方法、系统、存储介质及设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109325589A (zh) * | 2017-07-31 | 2019-02-12 | 华为技术有限公司 | 卷积计算方法及装置 |
CN110222559A (zh) * | 2019-04-24 | 2019-09-10 | 深圳市微纳集成电路与系统应用研究院 | 基于卷积神经网络的烟雾图像检测方法及装置 |
CN111461311A (zh) * | 2020-03-26 | 2020-07-28 | 中国科学技术大学 | 基于众核处理器的卷积神经网络运算加速方法及装置 |
CN111539526A (zh) * | 2020-04-24 | 2020-08-14 | 苏州浪潮智能科技有限公司 | 一种神经网络卷积的方法和设备 |
-
2020
- 2020-10-15 CN CN202011104681.8A patent/CN112215345B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109325589A (zh) * | 2017-07-31 | 2019-02-12 | 华为技术有限公司 | 卷积计算方法及装置 |
CN110222559A (zh) * | 2019-04-24 | 2019-09-10 | 深圳市微纳集成电路与系统应用研究院 | 基于卷积神经网络的烟雾图像检测方法及装置 |
CN111461311A (zh) * | 2020-03-26 | 2020-07-28 | 中国科学技术大学 | 基于众核处理器的卷积神经网络运算加速方法及装置 |
CN111539526A (zh) * | 2020-04-24 | 2020-08-14 | 苏州浪潮智能科技有限公司 | 一种神经网络卷积的方法和设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112215345A (zh) | 2021-01-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112215345B (zh) | 一种基于Tensorcore的卷积神经网络运转方法和装置 | |
CN110073359B (zh) | 用于卷积神经网络的有效数据布局 | |
CN111667051B (zh) | 适用边缘设备的神经网络加速器及神经网络加速计算方法 | |
US11468301B2 (en) | Method and apparatus for performing operation of convolutional layer in convolutional neural network | |
CN108416434B (zh) | 针对神经网络的卷积层与全连接层进行加速的电路结构 | |
KR101788829B1 (ko) | 콘볼루션 신경망 컴퓨팅 장치 | |
CN112633470B (zh) | 优化神经网络卷积残差结构的方法、系统、设备及介质 | |
US11580369B2 (en) | Inference apparatus, convolution operation execution method, and program | |
CN112840356A (zh) | 运算加速器、处理方法及相关设备 | |
CN108763612A (zh) | 一种神经网络的池化层加速运算的方法与电路 | |
EP4227886A1 (en) | Matrix operation method and apparatus for image data, device, and storage medium | |
CN109858609B (zh) | 一种分区块池化的方法和系统 | |
Colleman et al. | High-utilization, high-flexibility depth-first CNN coprocessor for image pixel processing on FPGA | |
CN112306555A (zh) | 并行提取多个卷积窗中的图像数据的方法、装置、设备以及计算机可读存储介质 | |
CN109993293B (zh) | 一种适用于堆叠式沙漏网络的深度学习加速器 | |
JP2023541350A (ja) | 表畳み込みおよびアクセラレーション | |
CN111859270B (zh) | 一种神经网络的卷积方法和装置 | |
CN111639701B (zh) | 一种图像特征提取的方法、系统、设备及可读存储介质 | |
CN112967211B (zh) | 一种图像处理方法、装置、计算机设备及存储介质 | |
CN110163793B (zh) | 卷积计算加速方法和装置 | |
CN116152037A (zh) | 图像反卷积方法和设备、存储介质 | |
CN113887491A (zh) | 基于跨时空图卷积网络的人体骨架行为识别系统及方法 | |
CN114662647A (zh) | 处理用于神经网络的层的数据 | |
CN113628093A (zh) | 一种加速图像处理的方法、系统、设备及存储介质 | |
CN113536216A (zh) | 用分布流水线可分离卷积运算将卷积映射到相连处理元件 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |