CN111858036A - 基于FPGA设备的TensorFlow系统加速方法、装置、设备及存储介质 - Google Patents
基于FPGA设备的TensorFlow系统加速方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111858036A CN111858036A CN202010605043.8A CN202010605043A CN111858036A CN 111858036 A CN111858036 A CN 111858036A CN 202010605043 A CN202010605043 A CN 202010605043A CN 111858036 A CN111858036 A CN 111858036A
- Authority
- CN
- China
- Prior art keywords
- fpga
- equipment
- input data
- data
- convolution
- 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.)
- Granted
Links
Images
Classifications
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- 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/15—Correlation function computation including computation of convolution operations
- G06F17/153—Multidimensional correlation or convolution
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Logic Circuits (AREA)
Abstract
本发明公开了一种基于FPGA设备的TensorFlow系统加速方法、装置、设备及存储介质;在本方案中,为二维卷积前向算子分配FPGA设备后,为了确保二维卷积反向梯度算子的设备同样是该FPGA设备,可在二维卷积反向梯度算子指定的设备为空时,将二维卷积反向梯度算子的设备指定为与二维卷积前向算子相同的FPGA设备,从而提高了FPGA设备在TensorFlow系统的兼容性。
Description
技术领域
本发明涉及数据处理技术领域,更具体地说,涉及一种基于FPGA设备的TensorFlow系统加速方法、装置、设备及存储介质。
背景技术
随着摩尔定律逐渐达到瓶颈,以CPU(central processing unit,中央处理器)为代表的x86架构在计算性能和能效方面逐渐无法适应满足日益庞大和多样化的数据处理需求。此外,当前深度学习等新型计算方式对数据中心服务器的能耗和计算性能提出了更大的挑战,使得数据中心通过增大集群节点规模实现性能的提升。然而,由此导致了超高的能耗问题。FPGA(Field Programmable Gate Array,现场可编程门阵列)具有高性能和低功耗等优点。与CPU相比,FPGA可以提高许多计算密集型任务的性能,如矩阵计算、加密和信号处理等。与GPU(Graphics Processing Unit,图形处理器)相比,FPGA的计算成本和能耗比更低。
当前,机器学习和深度学习快速兴起,谷歌和微软等公司纷纷推出相应的AI框架。其中,TensorFlow是一个基于数据流编程的符号数学系统,被广泛应用于各类机器学习算法的编程实现,其前身是谷歌的神经网络算法库DistBelief。当前,Tensorflow拥有多层级结构,可部署于各类服务器、PC终端和网页并支持GPU和TPU(Tensor Processing Unit,张量处理器)高性能数值计算,被广泛应用于谷歌内部的产品开发和各领域的科学研究。然而,当前TensorFlow架构并未如支持CPU和GPU一样,对FPGA形成统一的规范。如:当前关于TensorFlow对FPGA设备的支持普遍采用添加新加设备工厂类的方法来进行支持,类似的方法同样可以支持TPU等设备。以二维卷积算子为例,在TensorFlow中通过添加FPGA设备工厂类的方法完成FPGA设备的支持后,FPGA设备仅支持训练阶段的二维卷积前向算子的使用,而二维卷积反向梯度算子的计算过程只能交由CPU相应的算子实现,使得二维卷积前向算子和二维卷积反向梯度算子的节点设备分配不兼容TensorFlow系统的节点分配规则,导致TensorFlow系统在节点设备分配时不能完全兼容FPGA设备。
发明内容
本发明的目的在于提供一种基于FPGA设备的TensorFlow系统加速方法、装置、设备及存储介质,以提高FPGA设备在TensorFlow系统的兼容性。
为实现上述目的,本发明提供一种基于FPGA设备的TensorFlow系统加速方法,包括:
记录二维卷积前向算子已分配的目标运算节点和目标设备;
若所述目标设备为FPGA设备,则向二维卷积反向梯度算子分配设备时,判断所述二维卷积反向梯度算子是否已指定设备;
若否,则将所述二维卷积反向梯度算子的设备指定为所述FPGA设备,以使所述TensorFlow系统支持所述FPGA设备进行系统加速。
其中,所述将所述二维卷积反向梯度算子的设备指定为所述FPGA设备之后,还包括:
确定通过所述FPGA设备进行卷积运算的输入数据;
为所述输入数据分配至少一个FPGA设备,以通过分配的FPGA设备对输入数据进行卷积运算。
其中,为所述输入数据分配至少一个FPGA设备,包括:
判断输入数据的第一数量和FPGA设备的第二数量是否均大于1;
若是,则在所述第一数量大于所述第二数量时,将第一数量个输入数据循环分配至第二数量个FPGA设备;在所述第一数量等于所述第二数量时,为每个输入数据分配一个对应的FPGA设备,其中,每个输入数据分配的FPGA设备不同;在所述第一数量小于所述第二数量时,依次为每个数据分配不同的FPGA设备。
其中,为所述输入数据分配至少一个FPGA设备之后,还包括:
设置每个输入数据的全局工作项的维度,所述维度包括与每个输入数据的输出值的高、输出值的宽、卷积核的输出通道;
将每个输入数据对应的全局工作项的维度及对应的运行数据发送至对应的FPGA设备,以通过每个FPGA设备根据所述维度确定执行卷积运算的线程的数量,并通过所述线程利用所述运行数据并行对输入数据进行卷积运算,得到与输入数据对应的输出数据;其中,所述线程的数量为:输入数据的输出值的高*输出值的宽*卷积核的输出通道;
接收每个FPGA设备发送的输出数据,将所有FPGA设备的输出数据执行矩阵加操作后生成最终的输出数据。
为实现上述目的,本发明进一步提供一种基于FPGA设备的TensorFlow系统加速装置,包括:
记录模块,用于记录二维卷积前向算子已分配的目标运算节点和目标设备;
判断模块,用于在所述目标设备为FPGA设备,向二维卷积反向梯度算子分配设备时,判断所述二维卷积反向梯度算子是否已指定设备;
设备指定模块,用于在所述二维卷积反向梯度算子未指定设备时,将所述二维卷积反向梯度算子的设备指定为所述FPGA设备,以使所述TensorFlow系统支持所述FPGA设备进行系统加速。
其中,本方案还包括:
输入数据确定模块,用于确定通过所述FPGA设备进行卷积运算的输入数据;
分配模块,用于为所述输入数据分配至少一个FPGA设备,以通过分配的FPGA设备对输入数据进行卷积运算。
其中,所述分配模块,包括:
判断单元,用于判断输入数据的第一数量和FPGA设备的第二数量是否均大于1;
分配单元,用于在第一数量和第二数量均大于1时,且所述第一数量大于所述第二数量时,将第一数量个输入数据循环分配至第二数量个FPGA设备;在所述第一数量等于所述第二数量时,为每个输入数据分配一个对应的FPGA设备,其中,每个输入数据分配的FPGA设备不同;在所述第一数量小于所述第二数量时,依次为每个数据分配不同的FPGA设备。
其中,本方案还包括:
维度设置模块,用于设置每个输入数据的全局工作项的维度,所述维度包括与每个输入数据的输出值的高、输出值的宽、卷积核的输出通道;
发送模块,用于将每个输入数据对应的全局工作项的维度及对应的运行数据发送至对应的FPGA设备,以通过每个FPGA设备根据所述维度确定执行卷积运算的线程的数量,并通过所述线程利用所述运行数据并行对输入数据进行卷积运算,得到与输入数据对应的输出数据;其中,所述线程的数量为:输入数据的输出值的高*输出值的宽*卷积核的输出通道;
接收模块,用于接收每个FPGA设备发送的输出数据,将所有FPGA设备的输出数据执行矩阵加操作后生成最终的输出数据。
为实现上述目的,本发明进一步提供一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现上述的基于FPGA设备的TensorFlow系统加速方法的步骤。
为实现上述目的,本发明进一步提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述的基于FPGA设备的TensorFlow系统加速方法的步骤。
通过以上方案可知,本发明实施例提供的一种基于FPGA设备的TensorFlow系统加速方法,该方法包括:记录二维卷积前向算子已分配的目标运算节点和目标设备;若所述目标设备为FPGA设备,则向二维卷积反向梯度算子分配设备时,判断所述二维卷积反向梯度算子是否已指定设备;若否,则将所述二维卷积反向梯度算子的设备指定为所述FPGA设备,以使所述TensorFlow系统支持所述FPGA设备进行系统加速。
可以看出,本申请为二维卷积前向算子分配FPGA设备后,为了确保二维卷积反向梯度算子的设备同样是FPGA设备,可在二维卷积反向梯度算子未指定设备时,将二维卷积反向梯度算子的设备指定为二维卷积前向算子相同的FPGA设备,从而提高了FPGA设备在TensorFlow系统的兼容性。本发明还公开了一种基于FPGA设备的TensorFlow系统加速装置、设备及存储介质,同样能实现上述技术效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例公开的一种基于FPGA设备的TensorFlow系统加速方法流程示意图;
图2为本发明实施例公开的一种支持多FPGA加速卡并行运算的流程图;
图3为本发明实施例公开的一种基于FPGA设备的TensorFlow系统加速装置结构示意图;
图4为本发明实施例公开的一种电子设备结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,二维卷积算子作为卷积神经网络常用的特征提取算子,在TensorFlow中现已支持CPU和GPU的相应实现。而在FPGA中,大多通过添加新算子的方式来实现,导致用户使用不方便,及不支持多FPGA加速卡实现等问题。具体来说,在TensorFlow进行训练阶段时,所有算子的CPU和GPU实现,均指定二维卷积前向算子和二维卷积反向梯度算子默认指定使用同一算子。但是现有方案在TensorFlow中通过添加FPGA设备工厂类的方法完成FPGA设备的支持后,二维卷积算子的使用仅支持训练阶段的二维卷积前向算子的使用,将二维卷积反向梯度算子的计算过程交由CPU相应的算子实现,使FPGA设备不能完全兼容TensorFlow。
为解决以上问题,现有的方案有两种:第一种,通过创建新算子的方法来实现FPGA对二维卷积逻辑的支持。但是需要同时实现前向和反向算子,并且对Python端添加新的FPGA前向和反向算子内实现对FPGA算子的支持;第二种,在原有算子中添加相应的基于FPGA架构的二维卷积算子实现,但由于只支持前向计算,需要在Python端指定反向梯度计算需要在CPU端执行。即使实现了相应的二维卷积反向梯度算子,由于卷积操作除前向算子和反向算子外,还包括与池化层梯度计算等多个算子的工作。因此在训练阶段,相应的反向梯度计算仍会直接转入基于CPU的反向算子进行计算。
可以看出,现有的解决方案中,一方面,通过添加新算子的方式来实现FPGA的二维卷积操作,需要用户前端(即Python端)和后端C++逻辑端均需实现新的接口定义,并且由于新算子仅实现了对FPGA设备的支持,按照TensorFlow架构计算原理需要同时实现前向和反向算子。与现有的支持CPU和GPU的二维卷积算子接口相比,由于需要使用新的计算接口,导致用户使用不友好;此外,由于在训练的过程中,需要同时指定前向和反向算子,导致需要完整实现相应的反向梯度算子等相关算子,无法直接使用现有的卷积反向梯度算子,使用难度进一步提升。另外一方面,在现有的算子中实现FPGA的二维卷积算子时,根据训练过程中由于交叉熵等算子自动隐式的调用反向梯度算子计算过程,TensorFlow将根据设备的计算优先级,将优先调用CPU等高优先级设备。而在实现了基于FPGA的反向梯度算子后,此种情况仍然存在。而根据默认的设备算子调用方法,当实现了FPGA的二维卷积算子后,应当在训练过程中调用基于FPGA的反向梯度计算方法。
然而,由于在卷积反向梯度计算过程中还存在与其他算子(如池化层)的反向梯度的参数传播相关的一系列算子,并且这些目前是基于CPU实现的。因此导致FPGA的二维卷积反向梯度算子在训练过程中,无法被交叉熵等算子自动调度使用,仅能同前向算子在构造相应计算后显示调用。因此,增加了相应的调用计算难度,并且使用方法过于单一。并且不符合TensorFlow架构节点分配原则中,当隐式调用反向梯度算子时,前向卷积算子和反向梯度算子自动调用同一设备的计算原则。
因此,本发明为了解决上述问题,提出了一种基于FPGA设备的TensorFlow系统加速方法、装置、设备及存储介质,在本方案中,首先在现有的通过添加FPGA设备类支持FPGA加速卡设备方法的基础上,通过改进的节点设备补充分配方法,实现在存在基于FPGA加速卡的反向卷积梯度算子时,符合TensorFlow现有节点设备分配方法中关于在隐式调用中前向卷积算子和反向梯度算子自动调用同一设备的原则。并且也支持显示指定调用基于FPGA加速卡的二维卷积算子,成功的兼容于现有的TensorFlow节点设备分配规则。其次,本发明针对输入值的数量(num)过大的情况,支持通过多FPGA加速卡进行相应的计算。而针对输入值的高(height)、宽(width)及通道(channel)过大的情况,通过合理划分工作项等方法实现基于FPGA计算卡的卷积计算;最后,结合以上两种设计方法,不仅在现有算子中扩充了FPGA设备的二维卷积算子使用方法,还使得FPGA加速卡基础上开发的算子和节点符合相应的节点设备分配规则。下面对本方案进行具体说明:
参见图1,本发明实施例提供的一种基于FPGA设备的TensorFlow系统加速方法,包括:
S101、记录二维卷积前向算子已分配的目标运算节点和目标设备;
需要说明的是,TensorFlow是一个基于数据流图的深度学习框架。当用户在采用TensorFlow进行深度学习的训练和测试时,需要首先将用户的相应操作构建为数据流图。然后,需要将相应的操作分配到图中不同的运算节点上进行运算。因此,当FPGA加速卡在C++后端完成卷积等一系列新添加的算子后,TensorFlow在使用这些算子进行计算时,需要将构建图中的相应运算节点分配到对应的设备上。
TensorFlow目前采用的是Placement启发式算法模块。该算法的基本思想可总结如下:
1.尽可能满足用户要求(User Requirement First):每个Node的placement会尽量满足用户的要求。即当用户在Python端指定了某个算子对应的运算(如本发明的二维卷积运算)在FPGA上运行后,对应的运算逻辑为基于FPGA加速卡的算子。并且,在训练的过程中采用交叉熵算子计算相应的损失时,会自动调用相应的FPGA反向梯度算子。
2.尽可能使用计算更快的设备(High Performance Device):若某个Node的Placement没有被用户指定,则优先分配计算更快的设备。如CPU等计算力处于高优先级的设备。
3.保证程序可运行(Runable):若某个Node不存在用户要求的Placement相关实现版本,会退而求其次选择其它实现版本,保障程序可以用。
4.尽可能考虑近邻特性(Near When Possible):在做Placement的微调时考虑节点的近邻特性,尽可能减少无意义的拷贝
在本方案中,针对神经网络的训练过程中,当实现相应的二维卷积算子及对应的反向算子后,由于数据流图中其他操作的反向梯度算子与二维卷积反向梯度算子存在相应的算子。因此,导致无法按照如TensorFlow节点设备方法第一条提出的尽可能满足用户要求(User Requirement First)将相应的反向梯度计算隐式自动在基于FPGA加速卡的反向梯度算子上进行计算。因此,为使得基于FPGA加速卡设计的算子对应的操作节点能够符合TensorFlow的Placement启发式方法,在其基础上提出了一种改进的节点设备补充分配方法来对Placement算法中启发式算法b的默认分配设备逻辑部分进行补充。
具体来说,本方案在训练的前向过程中,针对在新添加的FPGA设备等完成的算子,若用户已经在神经网络中训练部分的前端Python端指定使用此类设备的算子,由于数据流图首先分配前向算子对应的节点和设备,则事先将相应的目标运算节点的名称和目标设备用哈希表进行存储,用于后续进行节点分配使用。
S102、若目标设备为FPGA设备,则向二维卷积反向梯度算子分配设备时,判断二维卷积反向梯度算子是否已指定设备;若否,则执行S103。
S103、将二维卷积反向梯度算子的设备指定为FPGA设备,以使TensorFlow系统支持FPGA设备进行系统加速。
具体来说,由于新添加的FPGA设备等基础上完成的反向梯度算子等缺少与其他梯度算子进行计算的部分算子,所以TensorFlow数据流图中关于反向梯度计算的算子默认指定设备为空。因此,如果二维卷积前向算子已分配的目标设备为FPGA设备时,需要判断二维卷积反向梯度算子是否已指定设备,如果未指定设备,则将二维卷积反向梯度算子的设备指定为二维卷积前向算子的FPGA设备。需要说明的是,二维卷积反向梯度算子的运算节点名称必然包括二维卷积前向算子运算节点的名称。最后按照Placement在启发式算法b之后的逻辑进行其他节点的设备分配。
其中,上述过程具体的伪代码如下:
输入值:前向计算节点node1,node2,node3,反向计算节点node1_backprop,node2_backprop用户指定的计算节点node1及其指定设备。
输出值:计算节点及分配的设备
1.将用户指定了设备的节点用HashMap<节点名,设备名>map来进行存储;
2.针对所有节点,依次遍历进行以下操作:
3.运行placement算法在启发式算法b部分之后的逻辑代码。
综上可以看出,在本方案中,首先在现有TensorFlow架构对新设备添加方法的基础上完成对FPGA加速卡的编码功能支持。由于在FPGA加速卡基础上完成的算子(如本发明所要支持的二维卷积算子)在神经网络训练的过程中采用交叉熵等算子时,相应的反向梯度算子会隐式自动调用,而且TensorFlow节点设备分配规则要求反向梯度算子与前向算子的设备相同,仅当不存在基于此设备的反向算子时才调用CPU等设备的相应算子。因此,本发明在现有的Placement节点分配算法的基础上,首先提出了一种改进的节点设备补充分配方法,即:本申请为二维卷积前向算子分配FPGA设备后,为了确保二维卷积反向梯度算子的设备同样是FPGA设备,可在二维卷积前向算子和二维卷积反向梯度算子的运算节点为同一节点时,将二维卷积反向梯度算子的设备指定为二维卷积前向算子相同的FPGA设备,从而提高了FPGA设备在TensorFlow系统的兼容性,实现兼容于TensorFlow架构现有的节点设备支持方法。
基于上述实施例,在本实施例中,将所述二维卷积反向梯度算子的设备指定为所述FPGA设备之后,还包括:确定通过所述FPGA设备进行卷积运算的输入数据;为所述输入数据分配至少一个FPGA设备,以通过分配的FPGA设备对输入数据进行卷积运算。
具体来说,本申请将基于FPGA加速卡的算子对应的节点设备分配兼容于TensorFlow的设备分配原则外,针对大规模二维卷积计算,本发明还提出了一种基于计算量感知的支持多FPGA加速卡并行编程的优化方法,也即:对于输入数据的输入值数量(num)过大的情况,可支持通过多FPGA加速卡进行相应的计算;其中,本申请中的输入数据可以为图片数据,也可以为声音数据,在此并不具体限定。需要说明的是,本申请为所述输入数据分配至少一个FPGA设备的过程,具体包括如下:判断输入数据的第一数量和FPGA设备的第二数量是否均大于1;若是,则在所述第一数量大于所述第二数量时,将第一数量个输入数据循环分配至第二数量个FPGA设备;在所述第一数量等于所述第二数量时,为每个输入数据分配一个对应的FPGA设备,其中,每个输入数据分配的FPGA设备不同;在所述第一数量小于所述第二数量时,依次为每个数据分配不同的FPGA设备。
具体来说,为了方便对本申请进行说明,将本申请中的输入数据为图片为例对本方案进行说明。相应的,本申请中的输入数据的第一数量为输入图片的数量,正常来说,如果输入数据的第一数量为1,则代表只有一张图片需要进行卷积运算,这时可直接将该输入数据分配给任意一个FPGA设备,如果FPGA设备的第二数量也为1,则代表无论有多少个输入数据要进行卷积运算,由于只有一个FPGA设备,所以只能将该输入数据输入唯一存在的FPGA设备,因此对于上述两种情况,可不不使用FPGA设备进行并行运算。
在输入数据的第一数量和FPGA设备的第二数量均大于1时,在分配FPGA设备时,本申请分三种情况进行说明:在第一数量大于第二数量时,将第一数量个输入数据循环分配至第二数量个FPGA设备;如:第一数据为5,则代表存在5个输入数据,分别为输入数据1~输入数据5,第二数据为3,则代表存在3个FPGA设备,分别为FPGA设备1~FPGA设备3,则根据循环分配方法,将输入数据1分配给FPGA设备1,将输入数据2分配给FPGA设备2,将输入数据3分配给FPGA设备3,将输入数据4分配给FPGA设备1,将输入数据5分配给FPGA设备2。
在第一数量等于第二数量时,为每个输入数据分配一个对应的FPGA设备,其中,每个输入数据分配的FPGA设备不同;如:第一数据为3,则代表存在3个输入数据,分别为输入数据1~输入数据3,第二数据为3,则代表存在3个FPGA设备,分别为FPGA设备1~FPGA设备3,则为每个输入数据分配一个对应的FPGA设备,即:将输入数据1分配给FPGA设备1,将输入数据2分配给FPGA设备2,将输入数据3分配给FPGA设备3。在第一数量小于第二数量时,依次为每个数据分配不同的FPGA设备。如:第一数据为2,则代表存在2个输入数据,分别为输入数据1、输入数据2,第二数据为3,则代表存在3个FPGA设备,分别为FPGA设备1~FPGA设备3,则依次为每个数据分配不同的FPGA设备,即:将输入数据1分配给FPGA设备1,将输入数据2分配给FPGA设备2。通过上述分配方式,便可以将输入数据尽量均匀的分配给每个FPGA设备,让多FPGA设备进行并行运算。
进一步的,在本实施例中,对于输入值的高(height)、宽(width)及通道(channel)过大的情况,还可以通过合理划分工作项等方法实现基于FPGA设备的并行卷积计算。具体来说,本申请为输入数据分配至少一个FPGA设备之后,还可以包括如下步骤:
设置每个输入数据的全局工作项的维度,所述维度包括与每个输入数据的输出值的高、输出值的宽、卷积核的输出通道;将每个输入数据对应的全局工作项的维度及对应的运行数据发送至对应的FPGA设备,以通过每个FPGA设备根据所述维度确定执行卷积运算的线程的数量,并通过所述线程利用所述运行数据并行对输入数据进行卷积运算,得到与输入数据对应的输出数据;其中,所述线程的数量为:输入数据的输出值的高*输出值的宽*卷积核的输出通道;接收每个FPGA设备发送的输出数据,将所有FPGA设备的输出数据执行矩阵加操作后生成最终的输出数据。
具体来说,为了对上述过程进行具体说明,在此通过算法实现的伪代码为例对该过程进行具体说明:
输入值:二维卷积输入值input,卷积核filter,输入值的数量input_num,该输入值的数量即为输入数据的第一数量;输入值的高input_height,输入值的宽input_width,输入值的通道数input_channel,卷积核的高filter_height,卷积核的宽filter_width,卷积核的输入通道filter_indep,卷积核的输出通道filter_outdep,padding方式(取值为valid或same)。
输出值:二维卷积的输出量output。
说明:以下1-5步和第7步均为TensorFlow后端C++host程序。第6步对应FPGA的kernel端程序。
1.将二维卷积的输入值按照NHWC的数组排序方式转化为NCHW的方式排序;
2.根据padding方式和stride方式,计算出需要在二维卷积每个数量对应的每个通道对应的输入值矩阵填充在上下左右分别填充的行数和列数。计算值记为pad_top,pad_bottom,pad_left,pad_right。进而根据得到的填充值,求得padding后的高(input_new_height)和宽(input_new_height),即input_new_height=input_height+pad_top+pad_bottom,Input_new_width=input_width+pad_left+pad_right。并进一步将填充部分的值填充为0,其他部分和原输入值相同,得到新的填充后的输入值input_new_val。填充后输入值的数量input_num和通道数input_channel均未改变;
3.调用CPU部分计算输出值尺寸的api,获得输出值的高(output_height)和宽(output_width);
4.当填充后的输入值的input_num>1时,在input_num取值范围内的每个数量取值编号下的输入值子矩阵,均按照[input_channel,input_new_height,input_new_width]的矩阵组成形式与卷积核filter进行矩阵卷积计算(即每个填充后输入值子矩阵对应的卷积运算是相互独立的);因此,根据现有TensorFlow架构可支持的FPGA加速卡数量num,该FPGA加速卡数量num即为FPGA设备的第二数量。在输入值input_num>num时,将填充后的输入值矩阵进行二次均等划分。每个FPGA加速卡计算的输入值的大小均为input_num/num,无法整除时,按照FPGA加速卡依次多分配一个填充后输入值子矩阵。
举例如下:填充后的输入值矩阵:
[input_num,input_new_height,input_new_width,input_channel]取值为[5,10,10,3]时,input_num取值编号为0,1,2,3,4的填充后输入值矩阵组成形式为:[input_new_height,input_new_width,input_channel]。即均为10*10*3的填充输入值子矩阵;而当FPGA加速卡数量为3时,则按照以上分配规则,input_num取值为0,3的填充后输入值子矩阵被分配到0#FPGA加速卡进行卷积计算,同理,1#FPGA加速卡负责取值1.4的填充后输入值子矩阵的卷积计算,2#FPGA加速卡负责取值2的填充后输入值子矩阵的卷积运算;
5.完成以上FPGA加速卡的输入值子矩阵分配后,需要进一步判断填充后的输入值子矩阵尺寸的大小,即input_channel,input_new_height和input_new_width。按照FPGA的并行编程思想,将全局工作项global_item_size的工作尺寸设置为3。具体代码如下:
work_dim=3;
global_item_size[0]={output_width};
global_item_size[1]={output_height};
global_item_size[2]={filter_outdep};
通过以上方法使得每个线程的卷积计算大小为filter_height*filter_width*filter_indep,表示每个线程要进行的一个输出矩阵中的坐标点对应的计算量。完成以上操作后,将输入值子矩阵对应的input_num编号input_num_id,填充后输入值input_new_val,卷积核矩阵filter,输入值stride参数以及取值为0的输出矩阵output传入FPGA端的conv2d kernel程序。由于通过合理划分全局工作项,因此并发执行的conv2d kernel程序的线程数量为:input_num*filter_outdep*output_width*output_height。具体的kernel程序逻辑如步骤6所示;
6.获得由TensorFlow后端传入的参数后,FPGA的kernel端程序会计算得到相应的输出矩阵的坐标,并与卷积核矩阵进行卷积乘加运算。具体的伪代码如下:
首先,获取到FPGA加速卡被分配的图片编号n,及相应的通道坐标信息z,特征矩阵高的坐标信息y,特征矩阵宽的坐标信息x。
int x=get_global_id(0);//获取output_width上的坐标
int y=get_global_id(1);//获取output_height上的坐标
int z=get_global_id(2);//获取filter_outdep上的坐标
其次,输出矩阵对应的待计算坐标值out_index可由n,x,y,z及传入的参数计算;
在执行二维卷积运算之前,初始化output[out_dex]的值,output[out_dex]=0.0;
最后,以下为n号图片具体的输入矩阵和卷积核的二维卷积运算过程。
for(c in filter_indep){//c代表在卷积核通道上的坐标信息
for(h in filter_height){//h代表在卷积核高方向上的坐标信息
for(w in filter_width){//w代表在卷积宽方向上的坐标信息
二维卷积运算内,输入值矩阵的待计算点坐标input_index可按照x,y,z,n,c,h,w及传输的参数计算得到;同理,相应的卷积核坐标filtet_index也可计算求得。最后,执行相应的坐标点乘加运算,得到输出矩阵output在out_dex处的值。
完成以上操作后,将相应的坐标为out_dex的output矩阵传出到TensorFlow的后端程序处。
7.TensorFlow的后端程序从对应编号的FPGA加速卡处接收到kernel计算出的output矩阵后,将所有编号FPGA加速卡的output矩阵执行矩阵加操作,即可得到最后的二维卷积操作的最终输出值output。
参见图2,为本申请公开的一种支持多FPGA加速卡并行运算的流程图,可以看出,该过程可以简要描述为图2中所述的三步,即:第一步根据输入值参数中的输入数据的子矩阵数量和FPGA加速卡的数量进行子矩阵卷积运算任务划分;第二步,则针对由于输出值的宽、高和通道过大引起的卷积串行计算量过大问题,采用将输出值的宽、高和通道数等作为全局工作项进行并行计算,从而节省了并行计算的时间;第三步,将各加速卡计算的output输出值矩阵的各坐标值进行加和操作,得到最终二维卷积的输出值output。
下面对本发明实施例提供的加速装置进行介绍,下文描述的加速装置与上文描述的加速方法可以相互参照。
参见图3,本发明实施例提供的一种基于FPGA设备的TensorFlow系统加速装置,包括:
记录模块100,用于记录二维卷积前向算子已分配的目标运算节点和目标设备;
判断模块200,用于在所述目标设备为FPGA设备,向二维卷积反向梯度算子分配设备时,判断所述二维卷积反向梯度算子是否已指定设备;
设备指定模块300,用于在所述二维卷积反向梯度算子未指定设备时,将所述二维卷积反向梯度算子的设备指定为所述FPGA设备,以使所述TensorFlow系统支持所述FPGA设备进行系统加速。
其中,本方案还包括:
输入数据确定模块,用于确定通过所述FPGA设备进行卷积运算的输入数据;
分配模块,用于为所述输入数据分配至少一个FPGA设备,以通过分配的FPGA设备对输入数据进行卷积运算。
其中,所述分配模块,包括:
判断单元,用于判断输入数据的第一数量和FPGA设备的第二数量是否均大于1;
分配单元,用于在第一数量和第二数量均大于1时,且所述第一数量大于所述第二数量时,将第一数量个输入数据循环分配至第二数量个FPGA设备;在所述第一数量等于所述第二数量时,为每个输入数据分配一个对应的FPGA设备,其中,每个输入数据分配的FPGA设备不同;在所述第一数量小于所述第二数量时,依次为每个数据分配不同的FPGA设备。
其中,本方案还包括:
维度设置模块,用于设置每个输入数据的全局工作项的维度,所述维度包括与每个输入数据的输出值的高、输出值的宽、卷积核的输出通道;
发送模块,用于将每个输入数据对应的全局工作项的维度及对应的运行数据发送至对应的FPGA设备,以通过每个FPGA设备根据所述维度确定执行卷积运算的线程的数量,并通过所述线程利用所述运行数据并行对输入数据进行卷积运算,得到与输入数据对应的输出数据;其中,所述线程的数量为:输入数据的输出值的高*输出值的宽*卷积核的输出通道;
接收模块,用于接收每个FPGA设备发送的输出数据,将所有FPGA设备的输出数据执行矩阵加操作后生成最终的输出数据。
参见图4,本发明实施例还公开了一种电子设备,包括:
存储器11,用于存储计算机程序;
处理器12,用于执行所述计算机程序时实现上述任意方法实施例所述的基于FPGA设备的TensorFlow系统加速方法的步骤。
在本实施例中,设备可以是PC(Personal Computer,个人电脑),也可以是智能手机、平板电脑、掌上电脑、便携计算机等终端设备。
该设备可以包括存储器11、处理器12和总线13。
其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器11在一些实施例中可以是设备的内部存储单元,例如该设备的硬盘。存储器11在另一些实施例中也可以是设备的外部存储设备,例如设备上配备的插接式硬盘,智能存储卡(SmartMedia Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器11还可以既包括设备的内部存储单元也包括外部存储设备。存储器11不仅可以用于存储安装于设备的应用软件及各类数据,例如执行加速方法的程序代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器12在一些实施例中可以是一中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行加速方法的程序代码等。
该总线13可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
进一步地,设备还可以包括网络接口14,网络接口14可选的可以包括有线接口和/或无线接口(如WI-FI接口、蓝牙接口等),通常用于在该设备与其他电子设备之间建立通信连接。
可选地,该设备还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在设备中处理的信息以及用于显示可视化的用户界面。
图4仅示出了具有组件11-14的设备,本领域技术人员可以理解的是,图4示出的结构并不构成对设备的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
本发明实施例还公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意方法实施例所述的基于FPGA设备的TensorFlow系统加速方法的步骤。
其中,该存储介质可以包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
综上可以看出,本发明首先在现有的通过添加FPGA设备类支持FPGA加速卡的基础上,提出了一种改进的节点设备补充分配方法,使得在新设备(如本发明中的FPGA加速卡)基础上的相关算子节点符合TensorFlow的节点设备分配规则;其次,本发明提出了一种基于计算量感知的支持多FPGA加速卡并行编程的优化方法。针对输入值的数量(num)过大的情况,支持通过多FPGA加速卡进行相应的计算。而针对输入值的高(height)、宽(width)及通道(channel)过大的情况,通过合理划分工作项等方法实现基于FPGA计算卡的卷积计算;最后,结合以上两种设计方法,不仅在现有算子中扩充了FPGA设备的二维卷积算子使用方法,还支持无论是否实现了基于FPGA加速卡的卷积反向梯度算子和相应节点,均满足TensorFlow的节点设备分配方法。
以上两种方法分别从TensorFlow的节点设备分配层面和二维卷积算子对FPGA加速卡等新设备的支持等,实现了基于FPGA加速卡设备的TensorFlow架构二维卷积算子成功融合于现有的架构中,并使其作为第三种设备为用户使用二维卷积运算提供了一种额外的计算设备。而对于用户而言,基于CPU、GPU和FPGA的二维卷积算子在Python端的代码示例:
以上伪代码中,通过with tf.device("/fpga:0")指定设备为fpga后,即可执行基于FPGA的二维卷积算子操作,即tf.nn.conv2d。同样的,当用户使用cpu或gpu时,将fpga:0指定为cpu:0或者gpu:0均可。
在此,本发明分别测试了二维卷积算子在输入值矩阵的宽和高为方阵,且量级不断增大的情况下,CPU、单块FPGA加速卡和三块FPGA加速卡的运行时间。其中,输入值尺寸的第一个参数100为输入值的子矩阵数量,最后一个参数10为输入值矩阵的通道数。具体的时间测试结果如表1所示:
表1
输入值尺寸 | 100*10*10*10 | 100*100*100*10 | 100*1024*1024*10 |
卷积核尺寸 | 5*5*10*10 | 5*5*10*10 | 5*5*10*10 |
CPU | 0.01s | 0.1s | 10s |
1块FPGA加速卡 | 0.8s | 20s | 7000s |
3块FPGA加速卡 | 0.3s | 9s | 600s |
由实验结果分析可知,随着FPGA加速卡数量的增多,本发明所提出的两种优化方法使得二维卷积的计算速度相较于单FPGA加速卡进一步提升。虽然相较于CPU而言计算速度还存在一定的误差,但是当加速卡的数量增加后,相应的计算速度还会进一步提升。
由此可知,本发明所提出的一种基于FPGA加速卡设备的TensorFlow架构二维卷积算子设计方法成功实现了TensorFlow对FPGA设备的支持,并像CPU和GPU一样,在Python端使用相同的接口给用户使用,相较于使用新接口的二维卷积算子接口而言用户体验更良好。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种基于FPGA设备的TensorFlow系统加速方法,其特征在于,包括:
记录二维卷积前向算子已分配的目标运算节点和目标设备;
若所述目标设备为FPGA设备,则向二维卷积反向梯度算子分配设备时,判断所述二维卷积反向梯度算子是否已指定设备;
若否,则将所述二维卷积反向梯度算子的设备指定为所述FPGA设备,以使所述TensorFlow系统支持所述FPGA设备进行系统加速。
2.根据权利要求1所述的TensorFlow系统加速方法,其特征在于,所述将所述二维卷积反向梯度算子的设备指定为所述FPGA设备之后,还包括:
确定通过所述FPGA设备进行卷积运算的输入数据;
为所述输入数据分配至少一个FPGA设备,以通过分配的FPGA设备对输入数据进行卷积运算。
3.根据权利要求2所述的TensorFlow系统加速方法,其特征在于,为所述输入数据分配至少一个FPGA设备,包括:
判断输入数据的第一数量和FPGA设备的第二数量是否均大于1;
若是,则在所述第一数量大于所述第二数量时,将第一数量个输入数据循环分配至第二数量个FPGA设备;在所述第一数量等于所述第二数量时,为每个输入数据分配一个对应的FPGA设备,其中,每个输入数据分配的FPGA设备不同;在所述第一数量小于所述第二数量时,依次为每个数据分配不同的FPGA设备。
4.根据权利要求2所述的TensorFlow系统加速方法,其特征在于,为所述输入数据分配至少一个FPGA设备之后,还包括:
设置每个输入数据的全局工作项的维度,所述维度包括与每个输入数据的输出值的高、输出值的宽、卷积核的输出通道;
将每个输入数据对应的全局工作项的维度及对应的运行数据发送至对应的FPGA设备,以通过每个FPGA设备根据所述维度确定执行卷积运算的线程的数量,并通过所述线程利用所述运行数据并行对输入数据进行卷积运算,得到与输入数据对应的输出数据;其中,所述线程的数量为:输入数据的输出值的高*输出值的宽*卷积核的输出通道;
接收每个FPGA设备发送的输出数据,将所有FPGA设备的输出数据执行矩阵加操作后生成最终的输出数据。
5.一种基于FPGA设备的TensorFlow系统加速装置,其特征在于,包括:
记录模块,用于记录二维卷积前向算子已分配的目标运算节点和目标设备;
判断模块,用于在所述目标设备为FPGA设备,向二维卷积反向梯度算子分配设备时,判断所述二维卷积反向梯度算子是否已指定设备;
设备指定模块,用于在所述二维卷积反向梯度算子未指定设备时,将所述二维卷积反向梯度算子的设备指定为所述FPGA设备,以使所述TensorFlow系统支持所述FPGA设备进行系统加速。
6.根据权利要求5所述的TensorFlow系统加速装置,其特征在于,还包括:
输入数据确定模块,用于确定通过所述FPGA设备进行卷积运算的输入数据;
分配模块,用于为所述输入数据分配至少一个FPGA设备,以通过分配的FPGA设备对输入数据进行卷积运算。
7.根据权利要求6所述的TensorFlow系统加速装置,其特征在于,所述分配模块,包括:
判断单元,用于判断输入数据的第一数量和FPGA设备的第二数量是否均大于1;
分配单元,用于在第一数量和第二数量均大于1时,且所述第一数量大于所述第二数量时,将第一数量个输入数据循环分配至第二数量个FPGA设备;在所述第一数量等于所述第二数量时,为每个输入数据分配一个对应的FPGA设备,其中,每个输入数据分配的FPGA设备不同;在所述第一数量小于所述第二数量时,依次为每个数据分配不同的FPGA设备。
8.根据权利要求7所述的TensorFlow系统加速装置,其特征在于,还包括:
维度设置模块,用于设置每个输入数据的全局工作项的维度,所述维度包括与每个输入数据的输出值的高、输出值的宽、卷积核的输出通道;
发送模块,用于将每个输入数据对应的全局工作项的维度及对应的运行数据发送至对应的FPGA设备,以通过每个FPGA设备根据所述维度确定执行卷积运算的线程的数量,并通过所述线程利用所述运行数据并行对输入数据进行卷积运算,得到与输入数据对应的输出数据;其中,所述线程的数量为:输入数据的输出值的高*输出值的宽*卷积核的输出通道;
接收模块,用于接收每个FPGA设备发送的输出数据,将所有FPGA设备的输出数据执行矩阵加操作后生成最终的输出数据。
9.一种电子设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至4任一项所述的基于FPGA设备的TensorFlow系统加速方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至4任一项所述的基于FPGA设备的TensorFlow系统加速方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010605043.8A CN111858036B (zh) | 2020-06-29 | 2020-06-29 | 基于FPGA设备的TensorFlow系统加速方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010605043.8A CN111858036B (zh) | 2020-06-29 | 2020-06-29 | 基于FPGA设备的TensorFlow系统加速方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111858036A true CN111858036A (zh) | 2020-10-30 |
CN111858036B CN111858036B (zh) | 2022-06-10 |
Family
ID=72989158
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010605043.8A Active CN111858036B (zh) | 2020-06-29 | 2020-06-29 | 基于FPGA设备的TensorFlow系统加速方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111858036B (zh) |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103761215A (zh) * | 2014-01-15 | 2014-04-30 | 北京新松佳和电子系统股份有限公司 | 基于图形处理器的矩阵转置优化方法 |
CN109032781A (zh) * | 2018-07-13 | 2018-12-18 | 重庆邮电大学 | 一种卷积神经网络算法的fpga并行系统 |
US20190050715A1 (en) * | 2018-09-28 | 2019-02-14 | Intel Corporation | Methods and apparatus to improve data training of a machine learning model using a field programmable gate array |
CN109447256A (zh) * | 2018-09-12 | 2019-03-08 | 上海交通大学 | 基于FPGA的Tensorflow系统加速的设计方法 |
CN109871510A (zh) * | 2019-01-08 | 2019-06-11 | 广东浪潮大数据研究有限公司 | 二维卷积运算处理方法、系统、设备及计算机存储介质 |
CN110490308A (zh) * | 2019-09-16 | 2019-11-22 | 普联技术有限公司 | 加速库的设计方法、终端设备及存储介质 |
CN110728351A (zh) * | 2018-07-17 | 2020-01-24 | 华为技术有限公司 | 数据处理方法、相关设备及计算机存储介质 |
CN110781126A (zh) * | 2019-09-20 | 2020-02-11 | 苏州浪潮智能科技有限公司 | 一种TensorFlow的FPGA异构加速实现方法、系统、终端及存储介质 |
CN110866610A (zh) * | 2019-11-20 | 2020-03-06 | 苏州浪潮智能科技有限公司 | 一种深度学习模型分布式运算的方法及装置 |
CN110929883A (zh) * | 2019-11-22 | 2020-03-27 | 苏州浪潮智能科技有限公司 | 一种在TensorFlow中支持FPGA训练的方法和装置 |
CN111027696A (zh) * | 2019-12-25 | 2020-04-17 | 中科寒武纪科技股份有限公司 | 计算输入数据的梯度的方法、装置、计算机可读存储介质 |
CN111090438A (zh) * | 2019-11-07 | 2020-05-01 | 苏州浪潮智能科技有限公司 | 一种基于kubernetes的FPGA虚拟化训练的方法、设备及介质 |
US20200160181A1 (en) * | 2018-05-31 | 2020-05-21 | Neuralmagic Inc. | Systems and methods for generation of sparse code for convolutional neural networks |
-
2020
- 2020-06-29 CN CN202010605043.8A patent/CN111858036B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103761215A (zh) * | 2014-01-15 | 2014-04-30 | 北京新松佳和电子系统股份有限公司 | 基于图形处理器的矩阵转置优化方法 |
US20200160181A1 (en) * | 2018-05-31 | 2020-05-21 | Neuralmagic Inc. | Systems and methods for generation of sparse code for convolutional neural networks |
CN109032781A (zh) * | 2018-07-13 | 2018-12-18 | 重庆邮电大学 | 一种卷积神经网络算法的fpga并行系统 |
CN110728351A (zh) * | 2018-07-17 | 2020-01-24 | 华为技术有限公司 | 数据处理方法、相关设备及计算机存储介质 |
CN109447256A (zh) * | 2018-09-12 | 2019-03-08 | 上海交通大学 | 基于FPGA的Tensorflow系统加速的设计方法 |
US20190050715A1 (en) * | 2018-09-28 | 2019-02-14 | Intel Corporation | Methods and apparatus to improve data training of a machine learning model using a field programmable gate array |
CN109871510A (zh) * | 2019-01-08 | 2019-06-11 | 广东浪潮大数据研究有限公司 | 二维卷积运算处理方法、系统、设备及计算机存储介质 |
CN110490308A (zh) * | 2019-09-16 | 2019-11-22 | 普联技术有限公司 | 加速库的设计方法、终端设备及存储介质 |
CN110781126A (zh) * | 2019-09-20 | 2020-02-11 | 苏州浪潮智能科技有限公司 | 一种TensorFlow的FPGA异构加速实现方法、系统、终端及存储介质 |
CN111090438A (zh) * | 2019-11-07 | 2020-05-01 | 苏州浪潮智能科技有限公司 | 一种基于kubernetes的FPGA虚拟化训练的方法、设备及介质 |
CN110866610A (zh) * | 2019-11-20 | 2020-03-06 | 苏州浪潮智能科技有限公司 | 一种深度学习模型分布式运算的方法及装置 |
CN110929883A (zh) * | 2019-11-22 | 2020-03-27 | 苏州浪潮智能科技有限公司 | 一种在TensorFlow中支持FPGA训练的方法和装置 |
CN111027696A (zh) * | 2019-12-25 | 2020-04-17 | 中科寒武纪科技股份有限公司 | 计算输入数据的梯度的方法、装置、计算机可读存储介质 |
Non-Patent Citations (5)
Title |
---|
DANIEL H. NORONHA 等: "LeFlow: Enabling Flexible FPGA High-Level Synthesis of Tensorflow Deep Neural Networks", 《FSP WORKSHOP 2018; FIFTH INTERNATIONAL WORKSHOP ON FPGAS FOR SOFTWARE PROGRAMMERS》 * |
SPYRIDON MOUSELINOS 等: "TF2FPGA: A Framework for Projecting and Accelerating Tensorflow CNNs on FPGA Platforms", 《 2019 8TH INTERNATIONAL CONFERENCE ON MODERN CIRCUITS AND SYSTEMS TECHNOLOGIES (MOCAST)》 * |
方睿等: "卷积神经网络的FPGA并行加速方案设计", 《计算机工程与应用》 * |
赵烁等: "基于FPGA的CNN加速SoC系统设计", 《计算机工程与设计》 * |
郑攀海等: "基于TensorFlow的卷积神经网络的研究与实现", 《电子技术与软件工程》 * |
Also Published As
Publication number | Publication date |
---|---|
CN111858036B (zh) | 2022-06-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102606825B1 (ko) | 뉴럴 네트워크 모델을 변형하는 뉴럴 네트워크 시스템, 이를 포함하는 어플리케이션 프로세서 및 뉴럴 네트워크 시스템의 동작방법 | |
CN109919311B (zh) | 生成指令序列的方法、执行神经网络运算的方法和装置 | |
CN106056529B (zh) | 一种对用于图片识别的卷积神经网络训练的方法与设备 | |
US9152462B2 (en) | Parallel processing device, parallel processing method, optimization device, optimization method and computer program | |
CN111488205B (zh) | 面向异构硬件架构的调度方法和调度系统 | |
CN1036877C (zh) | 一条多处理器流水线的动态工作量平衡 | |
JP2013050953A (ja) | システムオンチップ及びその動作方法並びに携帯用装置 | |
KR20180046363A (ko) | Dram 기반 프로세싱 장치를 위한 확장 아키텍처 | |
CN110941614A (zh) | 表单生成方法、装置、电子设备及计算机可读存储介质 | |
CN111158874A (zh) | 数据处理方法和装置、电子设备及存储介质 | |
CN110333827B (zh) | 一种数据加载装置和数据加载方法 | |
CN113469350A (zh) | 一种适于npu的深度卷积神经网络加速方法和系统 | |
US9128791B1 (en) | Generation of distinct pseudorandom number streams based on program context | |
US20210158131A1 (en) | Hierarchical partitioning of operators | |
CN114580606A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN113032007A (zh) | 一种数据处理方法及装置 | |
CN115315688A (zh) | 处理数据流修改以减少并行处理期间的功率效应 | |
CN106371808B (zh) | 一种并行计算的方法及终端 | |
CN111858036B (zh) | 基于FPGA设备的TensorFlow系统加速方法、装置、设备及存储介质 | |
CN116431315B (zh) | 批处理任务的处理方法、装置、电子设备及存储介质 | |
CN117271136A (zh) | 数据处理方法、装置、设备和存储介质 | |
JP2022538759A (ja) | 構成可能なニューラルネットワークカーネル | |
CN109086137B (zh) | Gpu并行计算资源配置方法及装置 | |
CN116010093A (zh) | 数据处理方法、装置、计算机设备和可读存储介质 | |
CN115775199A (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 |