一种验证方法及验证装置与流程

文档序号:17262816发布日期:2019-03-30 09:47阅读:233来源:国知局
一种验证方法及验证装置与流程
本申请涉及神经网络硬件加速
技术领域
,尤其涉及一种验证方法及验证装置。
背景技术
:随着人工智能的迅猛发展,神经网络也越来越受到人们的关注。目前神经网络大部分通过软件实现,数据量大,对硬件的计算能力要求高,依赖于云端的高计算能力,功耗大。针对上述问题,利用现场可编程门阵列(field-programmablegatearray,fpga)加速器实现卷积神经网络(convolutionalneuralnetwork,cnn)也逐渐被提出来。实现过程是利用计算机软件设计仿真后,利用fpga实现对卷积神经网络进行加速,而在利用fpga设计cnn时,不可避免的会出现各种各样的问题,因此利用计算机软件仿真的仿真结果对fpga设计的运行结果进行验证,也就是将fpga设计的运行结果与仿真结果进行比对。目前,将fpga设计的运行结果与仿真结果进行比对是通过人工进行的,花费的时间较长,比对效率低,尤其是在神经网络有很多层,每层神经网络都有计算的数据的情况下,而会影响基于fpga的cnn设计的效率。技术实现要素:本申请实施例提供一种验证方法及验证装置,用于提高对fpga设计的运行结果的验证效率。第一方面,提供一种验证方法,该方法可由上位机执行,上位机例如个人计算机(personalcomputer,pc)、主机。该方法包括:从fpga板卡获取卷积神经网络的当前运行的神经网络层的运行结果;根据所述当前运行的神经网络层对应的计算机软件仿真的仿真结果,对所述运行结果进行验证,获得验证结果。在本申请实施例中,主机端从fpga板卡获取卷积神经网络的当前运行的神经网络层的运行结果后,根据当前运行的神经网络层对应的计算机软件仿真的仿真结果,对运行结果进行验证,实现了运行结果与仿真结果的自动比对,避免通过人工进行一层层对比,从而可以提高对运行结果的验证效率。在本申请实施例中,主机端与fpga板卡之间可以通过高速串行计算机扩展总线(peripheralcomponentinterconnectexpress,pci-e)传输数据,也可以通过集成电路总线(inter-intergratedcircuit,iic)传输数据,也可以通过其它方式传输数据,在此不再一一列举。其中,主机端与fpga板卡之间通过pci-e总线传输数据时,也就是主机端可以通过pcie接口与fpga板卡之间进行数据交换。在一个可能的设计中,在从fpga板卡获取卷积神经网络的当前运行的神经网络层的运行结果之前,所述方法还包括:将fpga板卡的第一寄存器中对应所述当前运行的神经网络层的使能值设置为1,除所述当前运行的神经网络层外的其它神经网络层的使能值设置为零;其中,所述第一寄存器用于存储所述卷积神经网络的所有神经网络层中每层神经网络层的使能值。在本申请实施例中,主机端需要将fpga板卡的第一寄存器中对应当前运行的神经网络层的使能值设置为1,以使得fpga板卡能够运行使能值为1的神经网络层。在此需要说明的是,当前运行的神经网络层可以是卷积神经网络的首层,也可以是卷积神经网络除首层外的任意一层,在当前运行的神经网络层是除首层外的任意一层时,需要预先获取当前运行的神经网络层的上一层的运行结果,例如将当前运行的神经网络层的上一层的运行结果导入fpga板卡的双倍速率同步动态随机存储器(doubledataratesdram,ddr)中,以保证当前运行的神经网络层能够正常运行,并获得运行结果。在一个可能的设计中,从fpga板卡获取卷积神经网络的当前运行的神经网络层的运行结果,包括:检测获得所述fpga板卡的第二寄存器存储的数据;其中,所述第二寄存器存储的数据用于表征所述当前运行的神经网络层的运行是否结束;当所述第二寄存器存储的数据为1时,从所述fpga板卡获取所述当前运行的神经网络层的运行结果;或在接收到所述fpga板卡发送的中断指示时,从所述fpga板卡获取所述当前运行的神经网络层的运行结果;其中,所述中断指示用于表征所述当前运行的神经网络层运行结束。在本申请实施例中,主机端可以通过检测fpga板卡的第二寄存器中存储的数据,从fpga板卡获取当前运行的神经网络层的运行结果,也可以在接收到fpga板卡发送的中断指示时,从fpga板卡获取当前运行的神经网络层的运行结果,或者在满足其它条件时,从fpga板卡获取当前运行的神经网络层的运行结果,在此不做限制。在本申请实施例中,当主机端可以实时检测第二寄存器中的数据,也可以按照预设时间间隔检测第二寄存器中的数据,也可以通过其它方式检测第二寄存器中的数据,在此不再一一赘述。在本申请实施例中,主机在接收到fpga板卡发送的中断指示,才从fpga板卡获取当前运行的神经网络层的运行结果时,可以避免主机端对fpga板卡的第一寄存器不停的进行检测,而造成资源浪费。在一个可能的设计中,从fpga板卡获取卷积神经网络的当前运行的神经网络层的运行结果,包括:从所述fpga板卡的第三寄存器获取所述当前运行的神经网络层的层数;根据与所述层数对应的神经网络层的内存存储器的首地址以及存储长度,从所述内存存储器获取所述当前运行的神经网络层的运行结果。在一个可能的设计中,根据与所述层数对应的神经网络层的内存存储器的首地址以及存储长度,从所述内存存储器获取所述当前运行的神经网络层的运行结果,包括:从所述内存存储器读取所述当前运行的神经网络层的运行结果;对所述运行结果进行数据翻转,获得翻转后的运行结果;其中,所述数据翻转用于将所述运行结果的存储模式由第一模式转换为第二模式,所述第一模式和所述第二模式为小端模式和大端模式中的一种;将所述翻转后的运行结果存储到上位机的内存中。在本申请实施例中,由于fpga板卡存储的数据与主机端存储的数据可能存在大小端问题,为保证主机端能够获取正确的数据,主机端在从fpga的内存存储器读取运行数据后,对运行数据进行数据翻转,以降低fpga资源。在本申请实施例中,将运行结果的存储模式由第一模式转换为第二模式,可以是由小端模式转换为大端模式,也可以是由大端模式转换为小端模式。在一个可能的设计中,所述方法还包括:当所述验证结果一致,使能当前运行的神经网络层的下一神经网络层;其中,在所述所有神经网络层均运行结束时,将所述第一寄存器置零;或当所述对比结果非一致时,计算出所述运行结果与所述仿真结果存在差别的位置的宽度、高度及深度。在本申请实施例中,当验证结果一致,且卷积神经网络的所有神经网络层运行结束时,则将fpga板卡的第三寄存器置零,也就是说对所有神经网络层的验证结束。当验证结果不一致时,则计算运行结果与仿真结果存在差别位置的宽度、高度及深度,也就是存在差别位置的图像的宽度、高度以及深度,进而根据存在差别位置图像的宽度、高度、深度计算出对应的输入图像的宽度、高度以及深度,以方便fpga板卡端的问题定位。第二方面,提供一种验证装置,该验证装置具有实现上述方法设计中的功能。这些功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的单元。在一个可能的设计中,验证装置的具体结构可包括获取单元和验证单元。获取单元和验证单元可执行上述第一方面或第一方面的任意一种可能的设计所提供的方法中的相应功能第三方面,提供一种验证装置,包括:存储器,用于存储计算机可执行程序代码,以及处理器,存储器可以设置在处理器中,存储器和处理器可以通过芯片实现。其中,存储器所存储的程序代码包括指令,当处理器执行所述指令时,所述指令使验证装置执行上述第一方面或第一方面的任意一种可能的设计所涉及的方法。第四方面,提供一种计算机存储介质,用于存储为上述第二方面所描述的验证装置或第三方面所描述的验证装置所用的计算机软件指令,并包含用于执行上述第一方面、第一方面的任意一种设计的方法所涉及的程序。第五方面,提供一种计算机程序产品,该程序产品在被计算机调用执行时,可以使得计算机执行上述第一方面、第一方面的任意一种设计的方法。在本申请实施例中,主机端从fpga板卡获取卷积神经网络的当前运行的神经网络层的运行结果后,根据当前运行的神经网络层对应的计算机软件仿真的仿真结果,对运行结果进行验证,实现了运行结果与仿真结果的自动比对,避免通过人工进行一层层对比,从而可以提高对运行结果的验证效率。附图说明为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所介绍的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本申请实施例提供的一种应用场景示意图;图2为本申请实施例提供的一种验证方式的流程图;图3为图像对应的数据表示的示意图;图4为本申请实施例提供的一种验证装置的示意图;图5为本申请实施例提供的另一种验证装置的示意图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。目前,将fpga设计的运行结果与仿真结果进行比对是通过人工进行的,花费的时间较长,比对效率低,尤其是在神经网络有很多层,每层神经网络都有计算的数据的情况下,而会影响基于fpga的cnn设计的效率。鉴于此,本申请实施例提供一种验证方法,主机端从fpga板卡获取当前运行的神经网络层的运行结果,根据当前运行的神经网络层对应的计算机软件仿真的仿真结果,对运行结果进行验证,实现了运行结果与仿真结果的自动比对,避免通过人工进行一层层对比,从而可以提高对运行结果的验证效率。请参见图1,为本申请实施例的一种应用场景。图1中包括上位机、fpga板卡,以及ddr。其中,上位机和fpga板卡之间通过数据总线(图1中未示出),例如,pci-e进行数据交换,在fpga板卡中,对于数据量较小的则存储于fpga板卡的寄存器中,对于数据量较大的数据则存储于ddr中,通过直接内存存取(directmemoryaccess,dma)方式读写。此处,上位机和fpga板卡之间也可以通过pci总线、iic总线进行数据交换,在此不做限制。其中,上位机可以是主机,也可以是pc或者为其它终端设备。下面结合附图介绍本申请实施例提供的技术方案。在下面的介绍过程中,以将本申请提供的技术方案应用在图1所示的应用场景中为例,且以上位机是主机为例。请参见图2,本申请实施例提供一种验证方法,该方法的流程大致描述如下:s201:主机将fpga板卡的第一寄存器中对应当前运行的神经网络层的使能值设置为1,除当前运行的神经网络层外的其它神经网络层的使能值设置为零。在此需要说明的是,主机端还向fpga板卡的ddr中导入卷积神经网络的权重信息及偏置信息,卷积神经网络的权重也就是卷积神经网络的卷积核。另外,在本申请实施例中,当前运行的神经网络层可以是卷积神经网络的首层,也可以是卷积神经网络的除首层外的任意一层,在当前运行的神经网络层是除首层外的任意一层时,需要预先获取当前运行的神经网络层的上一层的运行结果,例如将当前运行的神经网络层的上一层的运行结果导入fpga板卡的ddr中,以保证当前运行的神经网络层能够正常运行,并获得运行结果。第一寄存器可以为32位使能寄存器(cnn_enable),该使能寄存器的偏移地址为0x00000000,用于存储卷积神经网络的所有神经网络层中每层神经网络层的使能值。例如,第一寄存器的第[0]位为高,表示第0层网络使能,第[1]位为高表示第一层网络使能。相应的,在fpga板卡检测到第一寄存器的使能值有1时,则开始运行与使能值为1对应的神经网络层,得到运行结果。在本申请实施例中,当前运行的神经网络层的运行结果也是图像,图像对应的数据在ddr中存储的顺序可以按照深度、宽度及高度的顺序存储,也可以按照宽度、深度及高度的顺序存储,或者按照高度、宽度、深度的顺序存储,或者按照其它顺序存储到ddr中,在此不做限制。下面将运行结果以宽度、深度及高度顺序存储为例,请参见图3,图3中左边的图片就可以当做是一个宽度为4、高度为4、深度为3的三维数据,按照深度、宽度、高度顺序存储,存储到ddr中为12、12、12、94、94、94、83、83、83、2、3、2、34……2。在fpga板卡将运行结果存储到ddr中之后,则将fpga板卡的第二寄存器设置位1。此处第二寄存器可以为1位的当前层结束寄存器(current_layer_finish),该寄存器的偏移地址为0x00000008,当第二寄存器为高位时,表示当前运行的神经网络层运行结束,当第二寄存器为低位时,表示当前运行的神经网络层运行未结束。在此,需要说明的是,当从第二寄存器读取一次之后,第二寄存器被设置为0。s202:从fpga板卡获取卷积神经网络的当前运行的神经网络层的运行结果。在本申请实施例中,运行结果可以以文件的形式存储到fpga板卡的ddr中,文件的命名方式可以是fpga+图片名称+网络层,其中,文件的命名方式在能够体现数据来源,例如是fpga板卡端的数据还是主机端的数据、具体图片以及神经网络层的层数的前提下,根据具体实际需要进行改变,在此不做具体限制。在本申请实施例中,与当前运行的神经网络层对应的计算机软件仿真的仿真结果也可以以文件的形式存储到fpga板卡的ddr中,文件的命名方式可以是主机+图片名称+网络层。对步骤s202的具体实现方式,包括但不限于以下两种,下面分别进行介绍。实现方式一检测获得fpga板卡的第二寄存器存储的数据;当所述第二寄存器存储的数据为1时,从所述fpga板卡获取所述当前运行的神经网络层的运行结果。在本申请实施例中,主机端可以实时检测第二寄存器中存储的数据,也可以按照预设时间间隔,例如2s(秒)、5s或其它预设时间间隔来检测第二寄存器中存储的数据。当第二寄存器存储的数据为1时,从fpga板卡获取当前运行的神经网络层的运行结果。实现方式二在接收到fpga板卡发送的中断指示时,从fpga板卡获取当前运行的神经网络层的运行结果;其中,中断指示用于表征当前运行的神经网络层运行结束。在本申请实施例中,为降低主机端的资源浪费,主机端可以在接收到fpga板卡发送的中断指示时,再从fpga板卡获取当前运行的神经网络层的运行结果。在本申请实施例中,主机端无论是按照上述哪种情况下,从fpga板卡获取当前运行的神经网络层的运行结果,均按照如下步骤获取:从fpga板卡的第三寄存器获取当前运行的神经网络层的层数;根据与层数对应的神经网络层的内存存储器的首地址以及存储长度,从内存存储器获取当前运行的神经网络层的运行结果。在具体实现过程中,主机端根据与层数对应的神经网络层的内存存储器的首地址以及存储长度,从内存存储器获取当前运行的神经网络层的运行结果。例如,内存存储器的首地址为000,存储长度为8×3bit(比特),则对应的结束地址为111,则主机端读取内存存储器中从000至111之间的数据。此处,第三寄存器可以为16位的卷积神经网络的当前层数寄存器(cnn_current_layer),该寄存器的偏移地址为0x00000008。第三寄存器中存储的数据用于表示当前运行的神经网络层的层数,从第0层依次累加。在本申请实施例中,由于内存存储器中存储的数据和主机端存储的数据可能存在大小端问题,因此,在内存存储器中存储数据模式与主机端存储数据的模式不同时,需要对从内存存储器中读取的数据进行数据翻转,在具体实现过程中,主机端从内存存储器读取所述当前运行的神经网络层的运行结果;对运行结果进行数据翻转,获得翻转后的运行结果;其中,数据翻转用于将运行结果的存储模式由第一模式转换为第二模式,第一模式和第二模式为小端模式和大端模式中的一种;将翻转后的运行结果存储到计算机的内存中。在本申请实施例中,小端模式是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中;大端模式是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。以一个unsignedint整型数据0x12345678为例,其按照大端模式存储内容和按照小端模式存储内容如下表一所示:表一大端模式小端模式0x010000000x120x780x010000010x340x560x010000020x560x340x010000030x780x12在具体实现过程中,若主机端存储数据的模式为大端模式,fpga板卡存储的数据为小端模式,那么主机端从内存存储器中读取运行结果之后,将运行结果转化为大端模式;若主机端存储数据的模式为小端模式,fpga板卡存储的数据为大端模式,那么逐字段从内存存储器中读取运行结果之后,将运行结果转化为小端模式。通过该实现方式,fpga板卡自身不需要在对存储数据进行格式转换,从而能够节约fpga资源。s203:根据所述当前运行的神经网络层对应的计算机软件仿真的仿真结果,对所述运行结果进行验证,获得验证结果。在主机端从fpga板卡获取当前运行的神经网络层的运行结果后,则根据当前运行的神经网络层对应的计算机软件仿真的仿真结果,对运行结果进行验证,也就是将运行结果与仿真结果进行比较。其中,当验证结果一致时,则从fpga板卡的第四寄存器读取数据,当读取数据为高位时,表示卷积神经网络的所有神经网络层运行结束,则将第一寄存器置零,以结束所有神经网络层的运行结果的验证。当读取数据为低位时,表示卷积神经网络的所有神经网络层中还有未运行的神经网络层,则将第一寄存器中对应当前运行的神经网络层的下一神经网络层的使能为1,重复上述步骤s202及步骤203,直至卷积神经网络的所有神经网络层运行结束。此处,第四寄存器可以为1位的卷积神经网络结束(cnn_finish)寄存器,该寄存器的偏移值地址为0x00000009。下面统一给出上述自定义的第一寄存器至第四寄存器的表格,具体请见表二:表二addressnamer/wbitdescription0x00000000cnn_layer_numrw15:0表示神经网络总层数0x00000002cnn_enablerw31:0各卷积层使能第[0]位为高表示第0层网络使能,第[1]位高表示第一层网络使能0x00000006cnn_current_layerro15:0表示当前运行的层数(从0层网络依次累加)0x00000008current_layer_finishrc0高表示当前层运行结束,当读了一次后自动清零0x00000009cnn_finishrc0高表示cnn所有层运行结束,当读了一次后自动清零上述表二中,address表示寄存器的偏移地址,name表示寄存器的名称,r/w表示读写方式,bit表示寄存器的位数,description表示对寄存器的描述。其中,自定义寄存器中还包括第五寄存器,也就是上述表二中神经网络的神经网络层总数寄存器(cnn_layer_num)。当验证结果不一致时,主机端计算除运行结果与仿真结果存在差别的位置的宽度、高度及深度。在本申请实施例中,主机端获取运行结果是一维数据,将该一维数据与仿真结果的一维数据进行比对,确定运行结果的一维数据与仿真结果的一维数据中存在差别的地方,也就是不一样的数据,然后根据事先约定的存储数据的顺序,也就是上述提到的运行结果的存储顺序,得到对应的三维数据,进而确定出存在差别的位置的宽度、高度及深度。例如,假如第1层输出结果总数w(2),h(3),d(4),则一维数据大小为2*3*4=24,fpga存储的顺序为w、h和d方向,则24个数据的第一个数据d=0,h=0,w=0,第二个数据d=0,h=0,w=1,第三个数据第一个数据d=0,h=1,w=0,第四个数d=0,h=1,w=1.....如果对比的一维数据的第10个数不一致,则不一致的d=2,h=1,w=1。在计算除存在差别的位置的宽度、高度及深度后,可以根据存在差别位置的宽度、高度及深度,计算出对应输入位置的宽度、高度及深度以及卷积核,从而方便fpga板卡端的问题定位。图4示出了一种验证装置400的结构示意图。该验证装置400可以实现上文中涉及的主机的功能。该验证装置400可以包括获取单元401和验证单元402。其中,获取单元401可以用于执行图2所示的实施例中的s202,和/或用于支持本文所描述的技术的其它过程。验证单元402可以用于执行图2所示的实施例中的s203,和/或用于支持本文所描述的技术的其它过程。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。在本申请实施例中,验证装置400对应各个功能划分各个功能模块的形式来呈现,或者,可以采用集成的方式划分各个功能模块的形式来呈现。这里的“模块”可以指特定应用集成电路(application-specificintegratedcircuit,asic),执行一个或多个软件或固件程序的处理器和存储器,集成逻辑电路,和/或其他可以提供上述功能的器件。在一个简单的实施例中,本领域的技术人员可以想到,还可以将验证装置400通过如图5所示的结构实现。如图5所示,验证装置500可以包括:存储器501、处理器502以及通信接口503。其中,存储器502、通信接口503与处理器502耦合。存储器501可以设置在处理器502中,存储器502以及通信接口503可以通过芯片实现。存储器502用于存储计算机执行指令,当验证装置500运行时,处理器502执行存储器501存储的计算机执行指令,以使验证装置500执行图2所示的实施例所示的实施例提供的验证方法中主机所执行的步骤。具体的验证方法可参考上文及附图中的相关描述,此处不再赘述。可选的,验证装置500可以是现场可编程门阵列(field-programmablegatearray,fpga),专用集成芯片(applicationspecificintegratedcircuit,asic),系统芯片(systemonchip,soc),中央处理器(centralprocessorunit,cpu),网络处理器(networkprocessor,np),数字信号处理电路(digitalsignalprocessor,dsp),微控制器(microcontrollerunit,mcu),还可以采用可编程控制器(programmablelogicdevice,pld)或其他集成芯片。本申请实施例提供一种计算机存储介质,该存储介质可以包括存储器,该存储器可存储由程序,该程序执行时包括如前的图2所示的方法实施例中记载的主机所执行的全部步骤。本领域内的技术人员应明白,本申请实施例可提供为方法、系统、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本申请实施例是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。以上所述,以上实施例仅用以对本申请的技术方案进行了详细介绍,但以上实施例的说明只是用于帮助理解本发明实施例的方法,不应理解为对本发明实施例的限制。本
技术领域
的技术人员可轻易想到的变化或替换,都应涵盖在本发明实施例的保护范围之内。以上所述,以上实施例仅用以对本申请的技术方案进行了详细介绍,但以上实施例的说明只是用于帮助理解本发明实施例的方法,不应理解为对本发明实施例的限制。本
技术领域
的技术人员可轻易想到的变化或替换,都应涵盖在本发明实施例的保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1