一种基于FPGA的神经网络运算方法、装置及设备与流程

文档序号:22739472发布日期:2020-10-31 09:21阅读:130来源:国知局
一种基于FPGA的神经网络运算方法、装置及设备与流程

本申请涉及人工智能领域,特别是涉及一种基于fpga的神经网络运算方法、装置及设备。



背景技术:

由于fpga(fieldprogrammablegatearray,现场可编程逻辑门阵列),具有并行执行数据运算的能力,并且结构灵活,能够实现数据运算的流水线设计,因此当前往往使用fpga对训练得到的神经网络模型进行推理运算。

fpga的片上内存是设置于fpga芯片上的内存介质,具有较高的数据读写效率,进而在通过fpga进行神经网络模型的推理运算时,均会使用fpga的片上内存为计算逻辑提供数据,但由于fpga的片上内存的额定资源有限,因此在对神经网络模型进行推理运算时,可能无法将神经网络模型完整写入单个fpga的片上内存,进而难以确保基于fpga执行神经网络模型的推理运算的整体效率。

由此可见,提供一种基于fpga的神经网络运算方法,以相对确保基于fpga执行神经网络模型的推理运算的整体效率,是本领域技术人员需要解决的问题。



技术实现要素:

本申请的目的是提供一种基于fpga的神经网络运算方法,以相对确保基于fpga执行神经网络模型的推理运算的整体效率。

为解决上述技术问题,本申请提供一种基于fpga的神经网络运算方法,包括:

获取神经网络模型;

统计多个fpga对应的片上内存容量;

根据各fpga的片上内存容量,将神经网络模型拆分为具有相应数据量的子模型;其中,各子模型的数据量不大于所对应的fpga的片上内存容量;

将子模型分配至对应fpga的片上内存;

根据各子模型之间的执行顺序设定相应各fpga之间的数据流向,并根据执行顺序依次控制各fpga基于相应的子模型执行神经网络运算。

优选地,根据各fpga的片上内存容量,将神经网络模型拆分为具有相应数据量的子模型,包括:

统计神经网络模型中各网络层的层数据量;

基于各网络层的层数据量以及各fpga的片上内存容量,依次计算各fpga对应的目标网络层;

在神经网络模型中拆分得到各目标网络层对应的子模型。

优选地,层数据量包括参数量以及过程数据量;其中,过程数据量为相应网络层执行神经网络运算过程中产生数据的数据量。

优选地,统计神经网络模型中各网络层的参数量以及过程数据量,包括:

基于神经网络模型中各网络层的过滤器数量、通道数量以及卷积核尺寸统计得到相应的参数量,以及基于各网络层中过滤器数量以及中间数据的尺寸统计得到相应的过程数据量。

优选地,在统计多个fpga对应的片上内存容量之前,方法还包括:

判断神经网络模型的数据量是否大于一个fpga的片上内存容量;

如果神经网络模型的数据量大于一个fpga的片上内存容量,则执行统计多个fpga对应的片上内存容量的步骤。

优选地,当神经网络模型中参数的数据类型为浮点型时,在将神经网络模型拆分为具有相应数据量的子模型之前,方法还包括:

将神经网络模型中参数的数据类型由浮点型转化为定点型;

将神经网络模型拆分为具有相应数据量的子模型,包括:

将参数的数据类型转化后的神经网络模型拆分为具有相应数据量的子模型。

优选地,将神经网络模型中参数的数据类型由浮点型转化为定点型,包括:

获取神经网络模型中各通道的最大参数值;

根据各最大参数值计算相应各通道的量化系数;

基于各量化系数将神经网络模型中相应通道内参数的数据类型由浮点型转化为定点型。

此外,本申请还提供一种基于fpga的神经网络运算装置,包括:

模型获取模块,用于获取神经网络模型;

内存统计模块,用于统计多个fpga对应的片上内存容量;

模型拆分模块,用于根据各fpga的片上内存容量,将神经网络模型拆分为具有相应数据量的子模型;其中,各子模型的数据量不大于所对应的fpga的片上内存容量;

模型分配模块,用于将子模型分配至对应fpga的片上内存;

模型执行模块,用于根据各子模型之间的执行顺序设定相应各fpga之间的数据流向,并根据执行顺序依次控制各fpga基于相应的子模型执行神经网络运算。

此外,本申请还提供一种基于fpga的神经网络运算设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行计算机程序时实现如上述的基于fpga的神经网络运算方法的步骤。

此外,本申请还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述的基于fpga的神经网络运算方法的步骤。

本申请所提供的基于fpga的神经网络运算方法,获取神经网络模型并统计多个fpga对应的片上内存容量,进而根据各fpga的片上内存容量,将神经网络模型拆分为具有相应数据量的子模型,其中,各子模型的数据量不大于所对应的fpga的片上内存容量,以此进一步将子模型分配至对应fpga的片上内存,根据各子模型之间的执行顺序设定相应各fpga之间的数据流向,进而根据执行顺序依次控制各fpga基于相应的子模型执行神经网络运算。本方法采用多个fpga共同提供片上内存的资源的方式,通过将完整的神经网络模型划分为多个子模型,并将子模型分配至多个fpga的片上内存的方式,进一步避免了单个fpga片上内存的额定资源相对有限的问题,进一步确保了基于fpga执行神经网络模型的推理运算的整体效率。此外,本申请还提供一种基于fpga的神经网络运算装置、设备及存储介质,有益效果同上所述。

附图说明

为了更清楚地说明本申请实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例公开的一种基于fpga的神经网络运算方法的流程图;

图2为本申请实施例公开的一种基于fpga的神经网络运算方法的流程图;

图3为本申请实施例公开的一种基于fpga的神经网络运算装置的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本申请保护范围。

fpga的片上内存是设置于fpga芯片上的内存介质,具有较高的数据读写效率,进而在通过fpga进行神经网络模型的推理运算时,均会使用fpga的片上内存为计算逻辑提供数据,但由于fpga的片上内存的额定资源有限,因此在对神经网络模型进行推理运算时,可能无法将神经网络模型完整写入单个fpga的片上内存,进而难以确保基于fpga执行神经网络模型的推理运算的整体效率。

为此,本申请的核心是提供一种基于fpga的神经网络运算方法,以相对确保基于fpga执行神经网络模型的推理运算的整体效率。

为了使本技术领域的人员更好地理解本申请方案,下面结合附图和具体实施方式对本申请作进一步的详细说明。

请参见图1所示,本申请实施例公开了一种基于fpga的神经网络运算方法,包括:

步骤s10:获取神经网络模型。

需要说明的是,本步骤中获取的神经网络模型指的是用于执行推理运算的神经网络模型,也就是说,本步骤中获取的神经网络模型是通过卷积神经网络训练后,用于对实际场景下的数据进行分析的模型。

步骤s11:统计多个fpga对应的片上内存容量。

需要说明的是,本步骤的重点在于统计多个fpga各自的片上内存容量,也就是说,本实施例中,用于执行神经网络运算的fpga的数量应大于1,在此基础上,每一个fpga均提供各自的片上内存资源以用于对神经网络模型进行协同运算。本步骤统计多个fpga对应的片上内存容量的目的是在后续步骤中,根据不同fpga的片上内存容量对该fpga的片上内存分配相应数据量的子模型。

另外,需要说明的是,由于获取神经网络模型的步骤以及统计多个fpga对应的片上内存容量的步骤之间没有执行顺序上的关联,因此本实施例中的步骤s10与步骤s11之间的执行顺序不固定,也可同时执行,应根据实际情况而定,在此不做具体限定。

步骤s12:根据各fpga的片上内存容量,将神经网络模型拆分为具有相应数据量的子模型。

其中,各子模型的数据量不大于所对应的fpga的片上内存容量。

在统计多个fpga对应的片上内存容量之后,本步骤进一步根据各fpga的片上内存容量将神经网络模型拆分为具有相应数据量的子模型,也就是说,本步骤中,依照各fpga的片上内存容量,将完整的神经网络模型拆分为与各fpga的片上内存容量匹配的子模型,各个子模型能够组合为完整的神经网络模型。需要强调的是,各子模型的数据量均不大于其所对应的fpga的片上内存容量,也就是说,针对fpga的片上内存容量拆分得到的子模型的数据量应小于或等于该fpga的片上内存容量,以此确保fpga能够正常执行对子模型的运算。

步骤s13:将子模型分配至对应fpga的片上内存。

在根据各fpga的片上内存容量,将神经网络模型拆分为具有相应数据量的子模型之后,本步骤进一步将子模型分配至对应fpga的片上内存,以此在后续步骤中,通过各fpga分别执行片上内存的子模型。

步骤s14:根据各子模型之间的执行顺序设定相应各fpga之间的数据流向,并根据执行顺序依次控制各fpga基于相应的子模型执行神经网络运算。

在将子模型分配至对应fpga的片上内存之后,本步骤进一步根据各子模型之间的执行顺序设定相应各fpga之间的数据流向,并根据执行顺序依次控制各fpga基于相应的子模型执行神经网络运算,目的是确保fpga之间具有数据的流动,并且fpga之间的数据流向与相应各fpga中子模型的执行顺序一致,目的是确保依次执行各个子模型运算的效果与执行完整的神经网络模型的效果一致,从而确保fpga的神经网络运算的可靠性。

本申请所提供的基于fpga的神经网络运算方法,获取神经网络模型并统计多个fpga对应的片上内存容量,进而根据各fpga的片上内存容量,将神经网络模型拆分为具有相应数据量的子模型,其中,各子模型的数据量不大于所对应的fpga的片上内存容量,以此进一步将子模型分配至对应fpga的片上内存,根据各子模型之间的执行顺序设定相应各fpga之间的数据流向,进而根据执行顺序依次控制各fpga基于相应的子模型执行神经网络运算。本方法采用多个fpga共同提供片上内存的资源的方式,通过将完整的神经网络模型划分为多个子模型,并将子模型分配至多个fpga的片上内存的方式,进一步避免了单个fpga片上内存的额定资源相对有限的问题,进一步确保了基于fpga执行神经网络模型的推理运算的整体效率。

在上述实施例的基础上,作为一种优选的实施方式,在统计多个fpga对应的片上内存容量之前,方法还包括:

判断神经网络模型的数据量是否大于一个fpga的片上内存容量;

如果神经网络模型的数据量大于一个fpga的片上内存容量,则执行统计多个fpga对应的片上内存容量的步骤。

本实施方式的重点在于,在获取到神经网络模型之后,进一步判断神经网络模型的数据量是否大于一个fpga的片上内存容量,进而只有当神经网络模型的数据量大于一个fpga的片上内存容量,执行统计多个fpga对应的片上内存容量的步骤,而当神经网络模型的数据量小于或等于一个fpga的片上内存容量时,仅需要将该审计网络模型完整分配至一个fpga的片上内存即可。本实施方式进一步确保了基于fpga实现神经网络运算过程的灵活性。

请参见图2所示,本申请实施例公开了一种基于fpga的神经网络运算方法,包括:

步骤s20:获取神经网络模型。

步骤s21:统计多个fpga对应的片上内存容量。

步骤s22:统计神经网络模型中各网络层的层数据量。

需要说明的是,本实施例的重点是以神经网络模型中的网络层为单位对神经网络模型进行子模型的拆分。

本步骤中,首先统计神经网络模型中各网络层的层数据量,目的是在后续步骤中,根据fpga片上内存容量向fpga划分由相应数量的网络层构成的子模型。

步骤s23:基于各网络层的层数据量以及各fpga的片上内存容量,依次计算各fpga对应的目标网络层。

在统计神经网络模型中各网络层的层数据量之后,本步骤进一步基于各网络层中数据的数据量,即层数据量以及各fpga的片上内存容量,依次计算各fpga对应的目标网络层,此处各fpga对应的目标网络层的数量根据相应fpga的片上内存容量而定。

步骤s24:在神经网络模型中拆分得到各目标网络层对应的子模型。

其中,各子模型的数据量不大于所对应的fpga的片上内存容量。

需要说明的是,在依次计算各fpga对应的目标网络层之后,本步骤进一步在神经网络模型中划分具有目标网络层的子模型。

作为一种优选的实施方式,当fpga对应的目标网络层的数量大于1并且目标网络层相邻时,在神经网络模型中拆分得到各目标网络层对应的子模型,可以具体是,在神经网络模型中拆分得到均包含各目标网络层的子模型,以此相对减少子模型的数量,进而在控制各fpga基于相应的子模型执行神经网络运算时对子模型的调用次数,提高执行神经网络运算的效率。

步骤s25:将子模型分配至对应fpga的片上内存。

步骤s26:根据各子模型之间的执行顺序设定相应各fpga之间的数据流向,并根据执行顺序依次控制各fpga基于相应的子模型执行神经网络运算。

本实施例进一步确保了子模型中所包含的神经网络模型片段的网络完整性,相对提高了控制各fpga基于相应的子模型执行神经网络运算时的可靠性。

下面通过具体场景对本实施方式进行说明。

基于fpga执行神经网络运算之前,需要得到可使用fpga设备数和各个fpga设备的片上内存容量,以方便模型拆分。假设fpga设备有n(n>1)个可用,内存大小分别为m[1]…m[n],神经网络模型的层数为len,各层的参数为w[1]…w[len],各层的中间数据量为a[1]…a[len],那么可以用循环累加对比,当累加到第i层时,数据量大于第一个fpga设备的内存,那么将神经网络模型中包含1~i-1层的子模型赋值给第一个fpga设备,然后从i开始再次循环累加对比,直到第j层大于第二个fpga设备,将神经网络模型中包含i~j-1层的子模型赋值给第二个fpga设备,然后依次类推,直到将所有的参数均分配到fpga设备中。若fpga设备不足,那么按照循环次续,循环对各个设备分配子模型,先放在片外内存,当该设备计算完毕后,将待执行运算的子模型读入fpga设备的片上内存,以此根据执行顺序依次控制各fpga基于相应的子模型执行神经网络运算。

在上述实施例的基础上,作为一种优选的实施方式,层数据量包括参数量以及过程数据量;其中,过程数据量为相应网络层执行神经网络运算过程中产生数据的数据量。

需要说明的是,本实施例的重点在于神经网络模型中各网络层的层数据量进一步包含各网络层的参数量以及过程数据量,其中,参数量指的是网络层执行神经网络运算时所依照参数的数据量,过程数据量指的是网络层执行神经网络运算过程所产生数据的数据量。本实施方式通过进一步对层数据量进行细化,进一步确保了基于各网络层的层数据量以及各fpga的片上内存容量,依次计算各fpga对应的目标网络层过程的整体准确性,进而确保基于fpga的神经网络运算的可靠性。

更进一步的,作为一种优选的实施方式,统计神经网络模型中各网络层的参数量以及过程数据量,包括:

基于神经网络模型中各网络层的过滤器数量、通道数量以及卷积核尺寸统计得到相应的参数量,以及基于各网络层中过滤器数量以及中间数据的尺寸统计得到相应的过程数据量。

需要说明的是,在本实施方式中,神经网络模型中各网络层的参数量基于相应网络层中的过滤器数量、通道数量以及卷积核尺寸统计得到,各网络层的过程数据量基于相应网络层中的过滤器数量以及中间数据的尺寸统计得到。本实施方式进一步确保了计算各fpga对应的目标网络层过程的整体准确性,进而确保基于fpga的神经网络运算的可靠性。

在本实施方式技术方案的基础上,具体的,当神经网络模型中某一网络层的通道数量为c,过滤器数量为n,卷积核的长和宽分别为k,即卷积核的尺寸为k*k时,则该网络层的参数量为c*k*k*n;当神经网络模型中某一网络层的过滤器数量为n,中间数据的长和宽分别为w、h,即中间数据的尺寸为w*h时,则该网络层的参数量为n*w*h。

在上述一系列实施方式的基础上,作为一种优选的实施方式,当神经网络模型中参数的数据类型为浮点型时,在将神经网络模型拆分为具有相应数据量的子模型之前,方法还包括:

将神经网络模型中参数的数据类型由浮点型转化为定点型;

将神经网络模型拆分为具有相应数据量的子模型,包括:

将参数的数据类型转化后的神经网络模型拆分为具有相应数据量的子模型。

需要说明的是,本实施例的重点是当神经网络模型中参数的数据类型为浮点型时,在将神经网络模型拆分为具有相应数据量的子模型之前,将该神经网络模型中参数的数据类型由浮点型转化为定点型,以此相对降低神经网络模型的整体数据量,进而能够相对减少基于fpga执行神经网络运算的整体数据量,相对提高神经网络运算的整体效率。

更进一步的,将神经网络模型中参数的数据类型由浮点型转化为定点型,包括:

获取神经网络模型中各通道的最大参数值;

根据各最大参数值计算相应各通道的量化系数;

基于各量化系数将神经网络模型中相应通道内参数的数据类型由浮点型转化为定点型。

需要说明的是,本实施方式在将神经网络模型中参数的数据类型由浮点型转化为定点型时,基于神经网络模型中各通道的最大参数值计算相应各通道的量化系数,进而将各量化系数作为数据类型之间的转化权值,即根据各量化系数将神经网络模型中相应通道内参数的数据类型由浮点型转化为定点型。本实施方式根据神经网络模型中各通道的最大参数值作为将通道内参数的数据类型由浮点型转化为定点型时,定点型数据的数据位数范围的限制因素,进一步确保了将神经网络模型中参数的数据类型由浮点型转化为定点型的准确性。

下面通过具体场景对本实施方式进行说明。

神经网络模型分为两部分,一部分为神经网络模型中的参数,在此称为权值;另一部分为神经网络模型内部处理的中间数据,在此称为激活值。对神经网络模型量化即为将模型数据从浮点转换为定点数据,首先需要将权值量化为2n,再进行激活值的量化。

对权值量化需要选取适合的权值阈值结合重新训练,将神经网络模型中的参数转换为定点(int)类型,因直接全部量化会导致精度略有下降,需要逐步将模型量化,然后重新训练剩下的参数。步骤如下:

将权值量化为±2n,即±1,±0.5,±0.25…,因权值越大,作用越大,因此从最大值开始量化,首先量化前25%,将值量化为2的n次幂,剩下的值进行重新训练,使得精度不降,然后保持此数据不变,量化接下来的25%最大值,剩下数据重训练,使得精度不下降,依次循环,直到所有权值均为2的n次幂。此时的模型权值全部为int值,接下来处理激活值。

激活值的量化也需要确定其阈值范围,由于在不同任务中的阈值不同,因此需要结合数据集获得阈值范围,然后获得阈值范围。具体如下:

从数据集的类别中各挑选一张图片,使用量化后网络进行推理,得到所有通道中每个元素的最大值,此为激活值和类别信息表,据此为下一步的比较依据。

将上步中的数据按照通道作对比,得到各通道元素的最大值,使用该值乘以2的m次幂,保证乘积不超过2n-1,记录该m值。此为各通道的激活值的量化系数。至此得到各通道的量化系数,再次按照层计算m均值,对该层的所有大于均值m的取m,小于均值m的取原值。此量化算法高效可行,可大幅降低神经网络模型的数据量。

请参见图3所示,本申请实施例提供了一种基于fpga的神经网络运算装置,包括:

模型获取模块10,用于获取神经网络模型;

内存统计模块11,用于统计多个fpga对应的片上内存容量;

模型拆分模块12,用于根据各fpga的片上内存容量,将神经网络模型拆分为具有相应数据量的子模型;其中,各子模型的数据量不大于所对应的fpga的片上内存容量;

模型分配模块13,用于将子模型分配至对应fpga的片上内存;

模型执行模块14,用于根据各子模型之间的执行顺序设定相应各fpga之间的数据流向,并根据执行顺序依次控制各fpga基于相应的子模型执行神经网络运算。

本申请所提供的基于fpga的神经网络运算装置,获取神经网络模型并统计多个fpga对应的片上内存容量,进而根据各fpga的片上内存容量,将神经网络模型拆分为具有相应数据量的子模型,其中,各子模型的数据量不大于所对应的fpga的片上内存容量,以此进一步将子模型分配至对应fpga的片上内存,根据各子模型之间的执行顺序设定相应各fpga之间的数据流向,进而根据执行顺序依次控制各fpga基于相应的子模型执行神经网络运算。本装置采用多个fpga共同提供片上内存的资源的方式,通过将完整的神经网络模型划分为多个子模型,并将子模型分配至多个fpga的片上内存的方式,进一步避免了单个fpga片上内存的额定资源相对有限的问题,进一步确保了基于fpga执行神经网络模型的推理运算的整体效率。

此外,本申请实施例还提供一种基于fpga的神经网络运算设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行计算机程序时实现如上述的基于fpga的神经网络运算方法的步骤。

本申请所提供的基于fpga的神经网络运算设备,获取神经网络模型并统计多个fpga对应的片上内存容量,进而根据各fpga的片上内存容量,将神经网络模型拆分为具有相应数据量的子模型,其中,各子模型的数据量不大于所对应的fpga的片上内存容量,以此进一步将子模型分配至对应fpga的片上内存,根据各子模型之间的执行顺序设定相应各fpga之间的数据流向,进而根据执行顺序依次控制各fpga基于相应的子模型执行神经网络运算。本设备采用多个fpga共同提供片上内存的资源的方式,通过将完整的神经网络模型划分为多个子模型,并将子模型分配至多个fpga的片上内存的方式,进一步避免了单个fpga片上内存的额定资源相对有限的问题,进一步确保了基于fpga执行神经网络模型的推理运算的整体效率。

此外,本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述的基于fpga的神经网络运算方法的步骤。

本申请所提供的计算机可读存储介质,获取神经网络模型并统计多个fpga对应的片上内存容量,进而根据各fpga的片上内存容量,将神经网络模型拆分为具有相应数据量的子模型,其中,各子模型的数据量不大于所对应的fpga的片上内存容量,以此进一步将子模型分配至对应fpga的片上内存,根据各子模型之间的执行顺序设定相应各fpga之间的数据流向,进而根据执行顺序依次控制各fpga基于相应的子模型执行神经网络运算。本计算机可读存储介质采用多个fpga共同提供片上内存的资源的方式,通过将完整的神经网络模型划分为多个子模型,并将子模型分配至多个fpga的片上内存的方式,进一步避免了单个fpga片上内存的额定资源相对有限的问题,进一步确保了基于fpga执行神经网络模型的推理运算的整体效率。

以上对本申请所提供的一种基于fpga的神经网络运算方法、装置、设备及存储介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1