芯片验证方法及装置、存储介质
技术领域
本公开涉及深度学习领域,尤其涉及一种芯片验证方法及装置、存储介质。
背景技术
目前,芯片验证过程可以分为单元测试(Unit Test,UT),集成测试(Integrationtest,IT)和系统测试(System test,ST)几个阶段。其中UT验证阶段着重于模块级别的验证,IT验证阶段着重于子系统级别的验证,ST验证阶段着重于全系统级别的验证。在UT验证阶段和IT验证阶段中,由于模块设计的规模有限,在边界定义清楚的情况下,对全局验证结果的确定相对不敏感。而且也正因为设计规模有限,所以算法可以比较容易地做到和设计成针对比特位的匹配(bit by bit match),传统的以定点化算法作为参考模型(ReferenceModel,RM)的方式是适用的。
发明内容
本公开提供了一种芯片验证方法及装置、存储介质。
根据本公开实施例的第一方面,提供一种芯片验证方法,所述方法包括:通过工具链对软件开发工具包SDK插件对应的神经网络模型进行编译,得到第一可执行文件;运行所述SDK插件对应的环境模型,得到第一金数据;通过所述SDK插件对应的参考模型运行所述第一可执行文件,得到第一执行结果,所述参考模型用于模拟所述待测芯片对应的仿真模拟器的硬件可执行程序;基于所述第一金数据和所述第一执行结果,对所述SDK插件对应的所述参考模型进行验证。
在一些可选实施例中,还包括:所述参考模型基于所述环境模型提供的所述第一金数据和所述第一可执行文件,对所述待测芯片对应的仿真模拟器进行验证。
在一些可选实施例中,所述SDK插件的数目为一个或多个,每个SDK插件对应的神经网络模型包括以下至少一项:用于实现SDK插件功能的神经网络、对所述神经网络的输入进行预处理的第一处理模块、对所述神经网络的输出进行后处理的第二处理模块。
在一些可选实施例中,所述SDK插件的数目为多个,还包括:响应于对每个SDK插件对应的参考模型验证正确,将多个SDK插件进行顺序连接,其中,连接顺序在前的SDK插件对应的所述参考模型的输出作为顺序连接的后一个SDK插件对应的所述参考模型的输入;将预先提取的目标特征信息作为第一SDK插件对应的所述参考模型的输入,得到第二SDK插件对应的所述参考模型输出的第二执行结果;其中,所述第一SDK插件是顺序连接的所述多个SDK插件中的首个SDK插件,所述第二SDK插件是顺序连接的所述多个插件中的最后一个SDK插件;基于所述第二执行结果和目标执行结果,对所述每个SDK插件对应的所述参考模型进行再次验证。
在一些可选实施例中,还包括:将所述目标特征信息作为目标神经网络模型的输入,在中央处理器上运行所述目标神经网络模型,得到所述目标执行结果,所述目标神经网络是所述多个SDK插件分别对应的所述神经网络模型顺序连接后得到的神经网络模型。
在一些可选实施例中,所述目标特征信息包括视觉任务处理的场景图像所包括的人脸特征信息、人体特征信息中的至少一项。
在一些可选实施例中,还包括:对每个SDK插件对应的所述参考模型再次验证正确后,获得与顺序相连的所述多个SDK插件对应的第二金数据;基于所述第二金数据,对所述待测芯片对应的仿真模拟器进行验证。
在一些可选实施例中,所述SDK插件对应的神经网络模型与所述SDK插件对应的所述参考模型基于共享目标内存和套接字方式进行信息交互。
在一些可选实施例中,还包括:所述SDK插件对应的神经网络模型发送所述第一可执行文件给与所述SDK插件对应的所述参考模型;所述SDK插件对应的所述参考模型通过对应的预设虚拟微控制单元MCU接收所述第一可执行文件。
在一些可选实施例中,所述SDK插件对应的神经网络模型的进程在共享的动态随机存储器中存在随机映射的第一映射地址,所述SDK插件对应的所述参考模型对应的所述预设虚拟MCU进程从所述共享动态随机存储器中的第二映射地址读取数据;其中,所述第一映射地址与所述第二映射地址不同。
根据本公开实施例的第二方面,提供一种芯片验证装置,包括:编译模块,用于通过工具链对软件开发工具包SDK插件对应的神经网络模型进行编译,得到第一可执行文件;第一运行模块,用于运行所述SDK插件对应的环境模型,得到第一金数据;第二运行模块,用于通过所述SDK插件对应的参考模型运行所述第一可执行文件,得到第一执行结果,所述参考模型用于模拟所述待测芯片对应的仿真模拟器的硬件可执行程序;第一验证模块,用于基于所述第一金数据和所述第一执行结果,对所述SDK插件对应的所述参考模型进行验证。
在一些可选实施例中,还包括:第二验证模块,用于所述参考模型基于所述环境模型提供的所述第一金数据和所述第一可执行文件,对所述待测芯片对应的仿真模拟器进行验证。
在一些可选实施例中,所述SDK插件的数目为一个或多个,每个SDK插件对应的神经网络模型包括以下至少一项:用于实现SDK插件功能的神经网络、对所述神经网络的输入进行预处理的第一处理模块、对所述神经网络的输出进行后处理的第二处理模块。
在一些可选实施例中,所述装置还包括:连接模块,用于响应于对每个SDK插件对应的参考模型验证正确,将多个SDK插件进行顺序连接,其中,连接顺序在前的SDK插件对应的所述参考模型的输出作为顺序连接的后一个SDK插件对应的所述参考模型的输入;第三运行模块,用于将预先提取的目标特征信息作为第一SDK插件对应的所述参考模型的输入,得到第二SDK插件对应的所述参考模型输出的第二执行结果;其中,所述第一SDK插件是顺序连接的所述多个SDK插件中的首个SDK插件,所述第二SDK插件是顺序连接的所述多个插件中的最后一个SDK插件;第三验证模块,用于基于所述第二执行结果和目标执行结果,对所述每个SDK插件对应的所述参考模型进行再次验证。
在一些可选实施例中,所述装置还包括:第四运行模块,用于将所述目标特征信息作为目标神经网络模型的输入,在中央处理器上运行所述目标神经网络模型,得到所述目标执行结果,所述目标神经网络是所述多个SDK插件分别对应的所述神经网络模型顺序连接后得到的神经网络模型。
在一些可选实施例中,所述目标特征信息包括视觉任务处理的场景图像所包括的人脸特征信息、人体特征信息中的至少一项。
在一些可选实施例中,所述装置还包括:获取模块,用于对每个SDK插件对应的所述参考模型再次验证正确后,获得与顺序相连的所述多个SDK插件对应的第二金数据;第四验证模块,用于基于所述第二金数据,对所述待测芯片对应的仿真模拟器进行验证。
在一些可选实施例中,所述SDK插件对应的神经网络模型与所述SDK插件对应的所述参考模型基于共享目标内存和套接字方式进行信息交互。
在一些可选实施例中,所述装置还包括:发送模块,用于所述SDK插件对应的神经网络模型发送所述第一可执行文件给与所述SDK插件对应的所述参考模型;接收模块,用于所述SDK插件对应的所述参考模型通过对应的预设虚拟微控制单元MCU接收所述第一可执行文件。
在一些可选实施例中,所述SDK插件对应的神经网络模型的进程在共享的动态随机存储器中存在随机映射的第一映射地址,所述SDK插件对应的所述参考模型对应的所述预设虚拟MCU进程从所述共享动态随机存储器中的第二映射地址读取数据;其中,所述第一映射地址与所述第二映射地址不同。
根据本公开实施例的第三方面,提供一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行上述第一方面任一所述的芯片验证方法。
根据本公开实施例的第四方面,提供一种芯片验证装置,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为调用所述存储器中存储的可执行指令,实现第一方面任一项所述的芯片验证方法。
本公开的实施例提供的技术方案可以包括以下有益效果:
本公开实施例中,可以通过工具链对SDK插件对应的神经网络模型进行编译,得到第一可执行文件,然后通过该SDK插件对应的环境模型运行该第一可执行文件,得到第一金数据,通过SDK插件对应的参考模型运行第一可执行文件,得到第一执行结果。从而基于第一金数据和第一执行结果,对与该SDK插件对应的参考模型进行验证。本公开在金数据的产生过程中引入工具链的编程能力,结合验证过程提高了金数据产生的速度,从而匹配芯片验证的验证速度。同时,引入了与场景关联性较大的SDK插件,可以减少对人工智能AI芯片验证过程中的漏验证,确保芯片验证的正确性,可用性更高。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1是本公开根据一示例性实施例示出的一种芯片验证方法流程图;
图2是本公开根据一示例性实施例示出的一种芯片验证方法流程图;
图3是本公开根据一示例性实施例示出的一种芯片验证场景示意图;
图4是本公开根据一示例性实施例示出的另一种芯片验证场景示意图;
图5是本公开根据一示例性实施例示出的另一种芯片验证方法流程图;
图6是本公开根据一示例性实施例示出的另一种芯片验证方法流程图;
图7是本公开根据一示例性实施例示出的一种芯片验证场景示意图;
图8是本公开根据一示例性实施例示出的另一种芯片验证方法流程图;
图9是本公开根据一示例性实施例示出的一种芯片验证装置框图;
图10是本公开根据一示例性实施例示出的一种芯片验证装置的一结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在本公开运行的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所运行的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中运行的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所运行的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
本公开实施例提供了一种芯片验证方案,可以用于人工智能芯片,该芯片通过神经网络进行深度学习,从而可以适用于各种需要进行视觉任务处理的场景,比如智慧城市中的人脸比对场景、公交站或火车站的安检口等的智能逃跑行为检测的场景,可以结合采集到的场景图像,进行推理,从而得到与视觉分析任务对应的处理结果。
目前对人工智能芯片的验证过程中,一般不涉及结合软件开发工具包(SoftwareDevelopment Kit,SDK)进行验证,由于SDK承担了上层服务和底层硬件的衔接,包含丰富的场景信息,因此,目前人工智能芯片的验证与场景关联性较小,造成验证环节容易出现漏验证,且验证过程中金(Golden)数据的产生速度跟不上芯片验证速度。其中,Golden数据是芯片验证过程的关键节点所输出的数据,根据该数据可以确定待测芯片对应的仿真模拟器,例如寄存器传输级(Register Transfer Level,RTL)的设计是否正确,或在哪个节点出现问题,以便提高芯片验证的准确性和效率。
为了解决上述问题,本公开实施例提供了一种芯片验证方案,可以提高金数据生成的速度,并将芯片验证过程与场景结合起来,减少甚至避免漏验证的情况。
例如图1所示,图1是根据一示例性实施例示出的一种芯片验证方法,该方法可以用于芯片验证平台,包括以下步骤:
在步骤101中,通过工具链对软件开发工具包SDK插件对应的神经网络模型进行编译,得到第一可执行文件。
在本公开实施例中,待验证的芯片可以是AI芯片。SDK包括但不限于软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。其中,SDK承担了上层的应用服务和底层硬件的衔接,包括大量应用场景信息。SDK可以提供不同的插件,插件是指应用程序接口编写出来的程序。本公开中的SDK插件是SDK提供的可以实现不同场景功能的程序。
在本公开实施例中,为了在芯片验证环节引入SDK插件,可以对SDK插件对应的神经网络模型进行编译,得到第一可执行文件。其中,通过深度学习的神经网络模型可以实现对应的SDK插件所需要的功能。在一个示例中,可以通过工具链(toolchain)对SDK插件对应的神经网络模型进行编译,toolchain包括但不限于整个流程里面用到的工具和相关的库组成的集合,例如汇编工具、编译器和标准编程函数库,toolchain可以把神经网络模型编译链接生成可执行文件,可执行文件是可以由操作系统直接进行加载并运行的文件。
在本公开实施例中,通过工具链对SDK插件对应的神经网络模型进行编译可以得到第一可执行文件,第一可执行文件中包括但不限于可执行的指令流,以及神经网络模型的网络参数等。
在步骤102中,运行所述SDK插件对应的环境模型,得到第一金数据。
在本公开实施例中,环境模型是用于模拟SDK插件对应的神经网络模型的算法环境的模型。其中,算法环境是指用于实现神经网络模型的算法所对应的计算机程序,可以通过部署相应的计算机程序的算法芯片(algo_IC)实现该算法环境。通过运行环境模型,可以得到第一金数据,其中,第一金数据包括运行该SDK插件对应的神经网络模型后得到的实际结果数据。
例如,SDK场景为地铁逃票检测场景,其中一个SDK插件对应的神经网络模型用于进行人体关键部位与人脸关键部位的匹配,则该场景下,环境模型可以是用于模拟上述人体关键部位与人脸关键部位的匹配过程的神经网络模型的算法环境的模型,通过运行上述环境模型,得到的第一金数据包括了人体关键部位与人脸关键部位的实际匹配结果,其中,实际属于同一人体的人体框和人脸框对应的人物标识相同。
在步骤103中,通过所述SDK插件对应的参考模型运行所述第一可执行文件,得到第一执行结果。
在本公开实施例中,与该SDK插件对应的参考模型(Reference Model,RM)是用于模拟所述待测芯片对应的仿真模拟器硬件的可执行程序,可以预先通过计算机语言编写得到。将第一可执行文件包括的指令流作为参考模型的输入,运行参考模型后,得到第一执行结果。其中,第一执行结果中包括了基于RTL硬件可执行程序运行第一可执行文件包括的指令流时得到的待验证的结果数据。例如,同样是地铁逃票检测场景,第一执行结果中包括了人体关键部位与人脸关键部位的待验证的匹配结果。
在步骤104中,基于所述第一金数据和所述第一执行结果,对所述SDK插件对应的所述参考模型进行验证。
在本公开实施例中,通过环境模型得到的第一金数据是运行该SDK插件对应的神经网络模型所得到的实际的结果数据,通过第一金数据可以对上述运行参考模型得到的第一执行结果进行验证。如果第一金数据与第一执行结果包括的待验证的结果数据匹配,可以确定对SDK插件对应的参考模型验证成功。
上述实施例中,可以分别对不同SDK插件对应的参考模型分别进行验证,由于引入了与场景关联性较大的SDK插件,可以减少芯片验证过程中的漏验证,确保芯片验证的正确性,可用性更高。
在一些可选实施例中,例如图2所示,该方法还可以包括:
在步骤105中,所述参考模型基于所述环境模型提供的所述第一金数据和所述第一可执行文件,对所述待测芯片对应的仿真模拟器进行验证。
在本公开实施例中,芯片验证的最终目的是为了对待测芯片对应的仿真模拟器进行验证,其中,仿真模拟器是指基于高速处理器或现场可编程门阵列的仿真装置。可仿真以寄存器传输级描述的芯片的功能和时序,并插入到系统中以代替开发中的芯片,帮助芯片和系统的调试和验证。在本公开实施例中,参考模型可以基于环境模型提供的第一金数据以及第一可执行文件,对仿真模拟器,例如RTL进行验证。其中,参考模型可以将第一可执行文件包括的指令流输入仿真模拟器,如果仿真模拟器运行结果中包括的结果数据与第一金数据匹配,可以确定对仿真模拟器验证正确。
上述实施例中,参考模型可以进一步基于环境模型提供的第一金数据和第一可执行文件,对上述仿真模拟器进行验证,由于参考模型的验证过程引入了与场景关联的SDK插件,提高了对仿真模拟器验证的可靠性。
在一些可选实施例中,没有引入toolchain对插件对应的程序代码进行编译的情况下,其验证方式例如图3所示。
通过比较环境模型输出的金数据和RTL仿真器输出结果中包括的数据进行比对,如果一致,确定RLT仿真器设计正确。在整个验证过程中,还可以比较环境模型输出的金数据和参考模型输出结果中包括的待验证数据是否一致,来对参考模型进行验证。上述验证过程中,在对RTL进行验证的过程中,与参考模型的关联性较少,使得参考模型在整个芯片验证过程中的重要性相对较低。
在本公开实施例中,其验证过程例如图4所示,通过工具链对SDK插件对应的神经网络模型进行编译后,得到第一可执行文件,将第一可执行文件包括的指令流作为参考模型的输入,运行参考模型得到第一执行结果。运行SDK插件对应的环境模型,得到第一金数据。基于第一金数据与第一执行结果包括的待验证的数据进行比对,从而对参考模型进行验证。此外,通过调整参考模型的模型参数也可以生成更为准确的金数据。
通过工具链对SDK插件对应的神经网络模型进行编译,会得到第一可执行文件,该第一可执行文件包括可执行的指令和神经网络模型的网络参数等信息,第一可执行文件可以作为参考模型以及仿真模拟器,例如RTL模拟器的输入,此外,通过上述工具链也可以将环境模型生成的第一金数据传递给参考模型,或者通过环境模型将工具链编译得到的第一可执行文件传递给参考模型。此外,参考模型在与仿真模拟器进行验证过程中也可以将仿真模拟器运行时得到的结果数据提供给环境模型、工具链。由于环境模型、工具链、参考模型之间可以形成闭环通道,使得第一金数据的产生过程形成闭环。
另外,参考模型可以基于环境模型提供的第一金数据和上述的第一可执行文件对RTL进行验证,RTL基于第一金数据进行调整后,重新为参考模型提供需要的环境参数。参考模型基于重新确定的环境参数再次对RTL进行验证,从而实现了对RTL的闭环验证。
上述实施例中,形成了生成金数据的闭环,以及对RTL进行验证的闭环,突出了参考模型在RLT验证过程中的重要性,使得最终得到的金数据的准确性更高,且提高了对RTL设计的准确性。
在一些可选实施例中,SDK插件的数目为一个或多个,每个SDK对应的神经网络模型可以包括但不限于以下至少一项:用于实现SDK插件功能的神经网络、对所述神经网络的输入进行预处理的第一处理模块、对所述神经网络的输出进行后处理的第二处理模块。
每个SDK插件可以由至少一个独立的神经网络组成,该神经网络可以采用但不限于谷歌网络(GoogLeNet)、视觉几何组(Visual Geometry Group Network,VGG)网络或残差网络(Resnet)作为骨干网。
每个SDK插件还可以包括对至少一个神经网络的输入进行预处理的第一处理模块,其中,预处理包括但不限于对图像的裁剪、尺寸调整(resize)等。
每个插件还可以包括对至少一个神经网络的输出进行后处理的第二处理模块,其中,后处理包括但不限于对输出结果的过滤,以便得到所需要的任务处理结果等。
上述实施例中,通过对神经网络进行预处理和/或后处理,避免出现漏验证,提高了芯片验证的准确性。
在一些可选实施例中,如果SDK的包括插件的数目为多个,相应地,例如图5所示,该方法还可以包括:
在步骤106中,响应于对每个SDK插件对应的所述参考模型验证正确,将多个SDK插件进行顺序连接。
在本公开实施例中,可以按照之前的步骤101至104的方式,分别验证每个插件对应的参考模型是否正确,在每个SDK插件对应的所述参考模型验证正确的情况下,可以将多个SDK插件顺序连接。
在一个示例中,顺序连接的多个插件构成管道(pipeline)。其中,连接顺序在前的SDK插件对应的所述参考模型的输出作为顺序连接的后一个SDK插件对应的所述参考模型的输入。
在步骤107中,将预先提取的目标特征信息作为第一SDK插件对应的所述参考模型的输入,得到第二SDK插件对应的所述参考模型输出的第二执行结果。
在本公开实施例中,第一SDK插件就是顺序连接的多个SDK插件中的首个SDK插件,所述第二插件是顺序连接的所述多个SDK插件中的最后一个SDK插件。将目标特征信息作为第一SDK插件对应的所述参考模型的输入,第一插件对应的参考模型输出的运行结果,可以作为与第一插件顺序连接的SDK插件对应的参考模型的输入,以此类推,最终通过pipeline可以得到最后一个第二SDK插件对应的参考模型输出的第二执行结果。
其中,目标特征信息基于SDK对应的应用场景来确定,包括但不限于至少一个视觉处理任务对应的场景图像所包括的人脸特征信息、人体特征信息中的至少一项。例如,在地铁逃票检测场景中,目标特征信息包括了人脸特征信息和人体关键点特征信息。
在步骤108中,基于所述第二执行结果和目标执行结果,对所述每个SDK插件对应的所述参考模型进行再次验证。
在本公开实施例中,目标执行结果是顺序连接的多个SDK插件执行视觉处理任务时希望得到的最终执行结果。如果第二SDK插件对应的参考模型输出的第二执行结果与目标执行结果匹配,那么可以再次确定对与每个SDK插件对应的所述参考模型进行验证的验证结果为正确。
上述实施例中,可以将多个SDK插件顺序连接,任何基于顺序连接的多个SDK插件中最后一个第二SDK插件对应的参考模型输出的第二执行结果和目标执行结果,对于每个SDK插件对应的所述参考模型进行再次验证,进一步避免出现漏验证,实现了系统级别的芯片验证。
在一些可选实施例中,例如图6所示,上述方法还可以包括:
在步骤100中,将所述目标特征信息作为目标神经网络模型的输入,在中央处理器上运行所述目标神经网络模型,得到所述目标执行结果。
在本公开实施例中,可以将所述目标特征信息作为目标神经网络模型的输入,在中央处理器(Central Processing Unit,CPU)上运行目标神经网络模型,从而得到该目标神经网络模型输出的目标执行结果。其中,CPU为硬件设备,可以是该芯片验证平台的CPU,也可以其他设备的CPU,本公开对此不作限定。目标神经网络模型是将多个SDK插件分别对应的所述神经网络模型顺序连接后得到的神经网络模型。目标执行结果是运行顺序连接的多个SDK插件,从而执行视觉处理任务时希望得到的最终执行结果。
在一个示例中,得到目标执行结果的过程中还包括对每个SDK插件对应的神经网络的输入进行预处理,和/或对每个SDK插件所包括的神经网络的输出进行后处理。其中,预处理包括但不限于对图像的裁剪、resize等,后处理包括但不限于对输出结果的过滤,得到所需要的任务处理结果等。
上述实施例中,可以在中央处理器上运行目标神经网络模型,得到所述目标执行结果,以便后续对每个SDK插件对应的参考模型进行再次验证,可靠性高。在芯片的硬件环境发生改变时,无需改变实际的硬件环境,可以通过调整参考模型来快速完成芯片验证,降低了芯片验证的成本,提高了芯片验证的效率。
在一个示例中,可以在对每个SDK插件对应的所述参考模型进行再次验证,且验证结果为正确的情况下,获得与顺序相连的所述多个SDK插件对应的第二金数据,第二金数据是全场景下的Golden数据。在本公开实施例中,第二金数据是在基于第二执行结果和目标执行结果,对每个SDK插件对应的参考模型进行再次验证后,从全场景的关键点所获得数据,可以包括运行顺序连接的多个SDK插件对应的参考模型时,参考模型中指定的部分计算机程序所得到的中间结果数据,还可以包括顺序连接的最后一个SDK插件对应的参考模型输出的最终结果数据,其中,最后一个SDK插件对应的参考模型输出的最终结果数据应当与上述的目标执行结果中包括的结果数据匹配。
进一步地,可以基于全场景的第二金数据,对RTL的设计进行再次验证。
上述实施例中,可以得到整个场景所需要的Golden数据,基于全场景的Golden数据对RTL的设计进行再次验证,提高了RTL设计的准确性。
在一些可选实施例中,对上述方案介绍的芯片验证过程再次说明如下:
例如图7所示,图7中仅以6个SDK插件进行举例,实际应用中SDK插件数目可以根据需要进行设置。本公开提供的芯片验证过程可以包括以下几个阶段:
第一个阶段,将目标特征信息作为目标神经网络模型的输入,在中央处理器上运行所述目标神经网络模型,得到目标执行结果。
其中,CPU为硬件设备,包括但不限于该芯片验证平台的CPU。可以将目标特征信息作为目标神经网络模型的输入,目标神经网络是所述多个SDK插件分别对应的所述神经网络模型顺序连接后得到的神经网络模型。
例如以视觉任务处理的场景图像包括的人脸特征信息作为输入,得到目标执行结果。其中,每个SDK插件对应的神经网络模型包括以下至少一项:用于实现SDK插件功能的神经网络、对所述神经网络的输入进行预处理的第一处理模块、对所述神经网络的输出进行后处理的第二处理模块。
以地铁站的智能逃跑行为检测场景为例,目标特征信息是地铁站中至少一个摄像头采集到的视频流所包括的地铁站场景图像,在CPU上运行目标神经网络模型,可以得到目标执行结果,根据目标执行结果,可以确定SDK插件设计是否达到设计要求。在一个示例中,可以在目标执行结果的准确率超过预设值的情况下,确定SDK插件达到设计要求。例如,SDK场景为地铁逃票检测场景,多个SDK插件的设计目的分别为进行人脸关键点检测、人体关键点检测、人脸关键点和人体关键点匹配、任意两个活体之间的距离检测、逃票动作检测、逃票结果验证等。在逃票结果验证成功率超过预设值的情况下,可以确定SDK插件达到设计要求。
第二个阶段,可以用环境模型、参考模型和toolchain替换第一阶段中的CPU运算过程,对每个SDK插件对应的参考模型进行验证,以及由参考模型基于环境模型提供的第一金数据和第一可执行文件,对所述待测芯片对应的仿真模拟器进行验证。
其中,toolchain对每个SDK插件对应的神经网络模型进行编译,得到第一可执行文件。将该第一可执行文件所包括的指令流输入该SDK插件对应的参考模型,得到第一执行结果,运行SDK插件对应的环境模型,可以得到第一金数据。
如果第一金数据和第一执行结果包括的数据匹配,确定单个SDK插件对应的参考模型进行验证的验证结果为正确。
在该阶段,还可以由参考模型基于环境模型提供的第一金数据以及上述的第一可执行文件,对仿真模拟器的设计进行验证。验证过程与上述实施例提供的验证过程一致,在此不再赘述。
第三个阶段,将多个SDK插件进行顺序连接后,对每个SDK插件对应的所述参考模型进行再次验证。
在本公开实施例中,顺序连接的多个SDK插件构成pipeline,目标特征信息作为多个SDK插件中首个SDK插件,即第一SDK插件对应的参考模型的输入,最终得到多个SDK插件中最后一个SDK插件,即第二SDK插件对应的参考模型输出的第二执行结果。
如果第二SDK插件输出的第二执行结果与第一阶段得到的目标执行结果匹配,例如第二执行结果同样实现对逃票行为的检测,且检测结果与目标执行结果的内容一致,那么对每个SDK插件对应的所述参考模型进行再次验证的验证结果为正确。
在此阶段,也可以增加时间监控,例如在至少一个SDK插件对应的参考模型中设置时钟,最终得到的第二执行结果可以提供在至少一个SDK插件中运行时相应的时间信息,以便更好的进行芯片验证。
第四个阶段,获取第二金数据,并基于所述第二金数据,对所述仿真模拟器进行再次验证。
在本公开实施例中,可以打印出第二金数据,第二金数据是基于对每个SDK插件对应的参考模型再次验证正确后,基于顺序连接的多个SDK插件的关键位置提取出来的金数据,即第二金数据是全场景的Golden数据。其中,关键位置可以根据具体场景确定,包括但不限于目标神经网络模型对应的可执行文件的指定文件位置。
参考模型可以基于第二金数据,对仿真模拟器再次进行验证。如果仿真模拟器运行结果中包括的结果数据与第二金数据匹配,可以确定对仿真模拟器验证正确。
上述实施例中,提高了芯片验证过程中Golden数据的产生速度,可以得到基于比特位匹配的Golden数据,且芯片验证环节可以与场景结合,避免出现漏验证,提高了芯片验证的准确性。
在一些可选实施例中,目前的AI芯片验证过程,由于不涉及与SDK相关的验证,也就不存在SDK与参考模型的交互。而在本公开实施例中,由于在AI芯片验证过程中引入了SDK,因此,还涉及到了SDK插件对应的神经网络模型与参考模型之间的交互。
在本公开实施例中,由于SDK插件对应的神经网络模型需要将第一可执行文件发送给与SDK插件对应的参考模型,神经网络模型与参考模型之间可以采用共享内存和/或套接字的方式进行交互,该共享内存就是目标内存,发送的第一可执行文件包括但不限于SDK插件对应的神经网络模型中的网络参数、以及可执行的指令流等,其中该指令流中包括至少一个控制指令,可以控制参考模型执行相应操作。在一个示例中,SDK插件可以通过内存管理机制对共享的目标内存进行内存分配。
上述实施例中,可以让SDK插件对应的神经网络模型与所述SDK插件对应的所述参考模型可以采用共享内存和Socket套接字的方式进行信息交互,可用性高。
在一些可选实施例中,例如图8所示,该方法还可以包括:
在步骤109中,所述SDK插件对应的神经网络模型发送第一可执行文件给与所述SDK插件对应的所述参考模型。
通过工具链对SDK插件对应的神经网络模型进行编译得到第一可执行文件之后,可以由所述SDK插件对应的神经网络模型将得到的第一可执行文件发送给SDK插件对应的参考模型。其中,第一可执行文件中包括但不限于以下至少一项:神经网络模型的网络参数、可执行的指令流。其中,至少一个网络参数包括但不限于该神经网络模型中的字符查找(instr)字段、instr字段指令长度、参数张量等参数。可执行的指令流中包括至少一个控制指令,控制指令中至少包括退出控制指令,即SDK插件对应的神经网络模型可以在参考模型执行结束得到对应的执行结果后,向参考模型发送退出控制指令。在一个示例中,SDK插件对应的神经网络模型可以通过Socket套接字和共享内存,向参考模型发送第一可执行文件。
在步骤110中,所述参考模型通过对应的预设虚拟微控制单元MCU接收所述第一可执行文件。
在本公开实施例中,可以为参考模型配置对应的预设虚拟微控制单元(Microcontroller Unit,MCU),该参考模型通过该预设虚拟MCU进行指令分发和/或接收。其中,该预设虚拟MCU可以是通过软件的计算机程序编写的用于实现硬件MCU功能的一个微控制单元。参考模型通过该预设虚拟MCU来接收第一可执行文件。
在一个示例中,可以通过该预先虚拟MCU调用共享的目标内存,接收SDK插件对应的神经网络模型发送的第一可执行文件。
在控制指令包括退出控制指令的情况下,参考模型可以执行退出操作。
上述实施例中,SDK插件对应的神经网络模型可以将第一可执行文件发送给参考模型,参考模型通过预设的虚拟MCU进行接收,可用性高。
在一些可选实施例中,SDK插件对应的神经网络模型与对应的参考模型之间可以采用套接字(socket)的方式进行进程间通信,该套接字包括但不限于unix socket。具体的数据结构可以将SDK插件对应的神经网络模型所包括的至少一个神经网络中的每个神经网络作为单独的任务,将每个任务按照神经网络的执行顺序划分为多个步骤,从而由预设虚拟MCU对多个步骤顺序执行。
在一些可选实施例中,SDK插件对应的神经网络模型与SDK插件对应的参考模型可以采用共享动态随机存储器(Double Data Rate,DDR)的方式进行信息交互,其中动态随机存储器包括但不限于双倍速率同步动态随机存储器(Double Data Rate,DDR)。
考虑到SDK插件对应的神经网络模型的进程和参考模型对应的预设虚拟MCU的进程同时将共享内存映射到相同的虚拟地址容易失败,因此,本公开实施例中,可以采用随机映射的方式,将SDK对应的神经网络模型的进程和参考模型对应的预设虚拟MCU的进程映射到本地进程地址空间。例如,SDK插件对应的神经网络模型的进程将共享的内存地址映射到本地进程的第一映射地址,参考模型对应的预设虚拟MCU的进程将共享的内存地址映射到本地进程的第二映射地址,第一映射地址可以与第二映射地址不同,SDK插件对应的神经网络模型的进程和预设虚拟MCU的进程在传递共享的内存地址的情况下,需要传递各自相对于共享内存的起始地址的偏移量(offset)相应地,SDK插件对应的参考模型的进程无法提供生成好的直接存储器访问(Direct Memory Access,DMA)映射指令,需要预设虚拟的MCU进程根据SDK插件对应的偏移量和相关信息为SDK插件对应的参考模型生成映射指令,使得参考模型可以从第二映射地址读取数据。
在上述实施例中,SDK插件与对应的参考模型采用共享内存的方式进行信息交互时,所述SDK插件对应神经网络模型的进程在目标内存中存在随机映射的第一映射地址,所述参考模型对应的所述预设虚拟MCU的进程从所述目标内存中的第二映射地址读取数据,所述第一映射地址与所述第二映射地址不同,可以由预设MCU的进程生成映射指令,从而避免因无法映射到相同映射地址导致SDK插件与参考模型无法进行交互的问题。
与前述方法实施例相对应,本公开还提供了装置的实施例。
如图9所示,图9是本公开根据一示例性实施例示出的一种芯片验证装置框图,装置包括:
编译模块210,用于通过工具链对软件开发工具包SDK插件对应的神经网络模型进行编译,得到第一可执行文件;
第一运行模块220,用于运行所述SDK插件对应的环境模型,得到第一金数据;
第二运行模块230,用于通过所述SDK插件对应的参考模型运行所述第一可执行文件,得到第一执行结果,所述参考模型用于模拟所述待测芯片对应的仿真模拟器的硬件可执行程序;
第一验证模块240,用于基于所述第一金数据和所述第一执行结果,对所述SDK插件对应的所述参考模型进行验证。
在一些可选实施例中,还包括:第二验证模块,用于所述参考模型基于所述环境模型提供的所述第一金数据和所述第一可执行文件,对所述待测芯片对应的仿真模拟器进行验证。
在一些可选实施例中,所述SDK插件的数目为一个或多个,每个SDK插件对应的神经网络模型包括以下至少一项:用于实现SDK插件功能的神经网络、对所述神经网络的输入进行预处理的第一处理模块、对所述神经网络的输出进行后处理的第二处理模块。
在一些可选实施例中,所述装置还包括:连接模块,用于响应于对每个SDK插件对应的参考模型验证正确,将多个SDK插件进行顺序连接,其中,连接顺序在前的SDK插件对应的所述参考模型的输出作为顺序连接的后一个SDK插件对应的所述参考模型的输入;第三运行模块,用于将预先提取的目标特征信息作为第一SDK插件对应的所述参考模型的输入,得到第二SDK插件对应的所述参考模型输出的第二执行结果;其中,所述第一SDK插件是顺序连接的所述多个SDK插件中的首个SDK插件,所述第二SDK插件是顺序连接的所述多个插件中的最后一个SDK插件;第三验证模块,用于基于所述第二执行结果和目标执行结果,对所述每个SDK插件对应的所述参考模型进行再次验证。
在一些可选实施例中,所述装置还包括:第四运行模块,用于将所述目标特征信息作为目标神经网络模型的输入,在中央处理器上运行所述目标神经网络模型,得到所述目标执行结果,所述目标神经网络是所述多个SDK插件分别对应的所述神经网络模型顺序连接后得到的神经网络模型。
在一些可选实施例中,所述目标特征信息包括视觉任务处理的场景图像所包括的人脸特征信息、人体特征信息中的至少一项。
在一些可选实施例中,所述装置还包括:获取模块,用于对每个SDK插件对应的所述参考模型再次验证正确后,获得与顺序相连的所述多个SDK插件对应的第二金数据;第四验证模块,用于基于所述第二金数据,对所述待测芯片对应的仿真模拟器进行验证。
在一些可选实施例中,所述SDK插件对应的神经网络模型与所述SDK插件对应的所述参考模型基于共享目标内存和套接字方式进行信息交互。
在一些可选实施例中,所述装置还包括:发送模块,用于所述SDK插件对应的神经网络模型发送所述第一可执行文件给与所述SDK插件对应的所述参考模型;接收模块,用于所述SDK插件对应的所述参考模型通过对应的预设虚拟微控制单元MCU接收所述第一可执行文件。
在一些可选实施例中,所述SDK插件对应的神经网络模型的进程在共享的动态随机存储器中存在随机映射的第一映射地址,所述SDK插件对应的所述参考模型对应的所述预设虚拟MCU进程从所述共享动态随机存储器中的第二映射地址读取数据;其中,所述第一映射地址与所述第二映射地址不同。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本公开方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本公开实施例还提供了一种计算机可读存储介质,存储介质存储有计算机程序,计算机程序用于执行上述任一所述的芯片验证方法。
在一些可选实施例中,本公开实施例提供了一种计算机程序产品,包括计算机可读代码,当计算机可读代码在设备上运行时,设备中的处理器执行用于实现如上任一实施例提供的芯片验证方法的指令。
在一些可选实施例中,本公开实施例还提供了另一种计算机程序产品,用于存储计算机可读指令,指令被执行时使得计算机执行上述任一实施例提供的芯片验证方法。
该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
本公开实施例还提供了一种芯片验证装置,包括:处理器;用于存储处理器可执行指令的存储器;其中,处理器被配置为调用所述存储器中存储的可执行指令,实现上述任一项所述的芯片验证方法。
图10为本公开实施例提供的一种芯片验证装置的硬件结构示意图。该目标检测装置310包括处理器311,还可以包括输入装置312、输出装置313和存储器314。该输入装置312、输出装置313、存储器314和处理器311之间通过总线相互连接。
存储器包括但不限于是随机存储记忆体(random access memory,RAM)、只读存储器(read-only memory,ROM)、可擦除可编程只读存储器(erasable programmable readonly memory,EPROM)、或便携式只读存储器(compact disc read-only memory,CD-ROM),该存储器用于相关指令及数据。
输入装置用于输入数据和/或信号,以及输出装置用于输出数据和/或信号。输出装置和输入装置可以是独立的器件,也可以是一个整体的器件。
处理器可以包括是一个或多个处理器,例如包括一个或多个中央处理器(centralprocessing unit,CPU),在处理器是一个CPU的情况下,该CPU可以是单核CPU,也可以是多核CPU。
存储器用于存储网络设备的程序代码和数据。
处理器用于调用该存储器中的程序代码和数据,执行上述方法实施例中的步骤。具体可参见方法实施例中的描述,在此不再赘述。
可以理解的是,图10仅仅示出了一种芯片验证装置的简化设计。在实际应用中,芯片验证装置还可以分别包含必要的其他元件,包含但不限于任意数量的输入/输出装置、处理器、控制器、存储器等,而所有可以实现本公开实施例的芯片验证装置都在本公开的保护范围之内。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或者惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
以上所述仅为本公开的较佳实施例而已,并不用以限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开保护的范围之内。