发明内容
本发明的主要目的在于提供一种基于TVM面向RISC-V设备的神经网络编译方法,旨在解决现有技术中无法直接通过模型转换的方法将神经网络模型转换为能直接部署在基于RISC-V架构的设备中的模型,不利于提高神经网络模型的适应性的问题。
为了实现上述目的,本发明第一方面提供一种基于TVM面向RISC-V设备的神经网络编译方法,其中,上述方法包括:
基于待部署神经网络模型,通过TVM编译器获取函数文件、模型计算图文件以及模型参数文件;
基于上述函数文件获取RISC-V版本的动态链接库文件,并基于上述动态链接库文件、上述模型计算图文件以及上述模型参数文件获取RISC-V版本的目标神经网络模型;
基于上述RISC-V版本的目标神经网络模型获取RISC-V版本的运行时库文件、RISC-V版本的模型计算代码以及RISC-V版本的可执行文件。
可选的,在上述基于上述RISC-V版本的目标神经网络模型获取RISC-V版本的运行时库文件、RISC-V版本的模型计算代码以及RISC-V版本的可执行文件之后,上述方法还包括:
基于上述RISC-V版本的目标神经网络模型、上述RISC-V版本的运行时库文件以及上述RISC-V版本的可执行文件对目标设备进行神经网络模型部署,其中,上述目标设备为基于RISC-V架构的设备。
可选的,上述目标设备为基于RISC-V架构的边缘计算设备。
可选的,上述基于待部署神经网络模型,通过TVM编译器获取函数文件、模型计算图文件以及模型参数文件,包括:
获取待部署神经网络模型;
基于TVM编译器对上述待部署神经网络模型进行编译,获取Relay中间代码;
基于上述Relay中间代码获取函数文件、模型计算图文件以及模型参数文件。
可选的,上述基于上述Relay中间代码获取函数文件、模型计算图文件以及模型参数文件包括:
基于预设的模型优化策略对上述Relay中间代码进行优化,获取优化后的Relay中间代码;
基于上述优化后的Relay中间代码获取函数文件、模型计算图文件以及模型参数文件。
可选的,上述基于上述优化后的Relay中间代码获取函数文件、模型计算图文件以及模型参数文件,包括:
基于上述优化后的Relay中间代码,编译获取与LLVM编译器对应的中间模型文件,其中,上述中间模型文件包括函数文件、模型计算图文件以及模型参数文件,上述函数文件是上述LLVM编译器的中间代码文件。
可选的,上述基于上述函数文件获取RISC-V版本的动态链接库文件,并基于上述动态链接库文件、上述模型计算图文件以及上述模型参数文件获取RISC-V版本的目标神经网络模型,包括:
基于上述LLVM编译器和底层库文件将上述函数文件编译为RISC-V版本的动态链接库文件,其中,上述底层库文件由RISC-V版本的GNU编译器提供;
基于上述动态链接库文件、上述模型计算图文件以及上述模型参数文件获取RISC-V版本的目标神经网络模型。
可选的,上述基于上述RISC-V版本的目标神经网络模型获取RISC-V版本的运行时库文件、RISC-V版本的模型计算代码以及RISC-V版本的可执行文件,包括:
基于TVM版本的运行时库文件和上述RISC-V版本的目标神经网络模型,获取RISC-V版本的运行时库文件和RISC-V版本的模型计算代码;
基于上述RISC-V版本的运行时库文件和上述RISC-V版本的模型计算代码编译获取RISC-V版本的可执行文件。
可选的,上述基于上述RISC-V版本的运行时库文件和上述RISC-V版本的模型计算代码编译获取RISC-V版本的可执行文件,包括:
将上述RISC-V版本的运行时库文件作为一个标准库文件,基于RISC-V版本的GNU编译器对上述RISC-V版本的模型计算代码进行编译,获取RISC-V版本的可执行文件。
可选的,上述基于上述RISC-V版本的目标神经网络模型、上述RISC-V版本的运行时库文件以及上述RISC-V版本的可执行文件对目标设备进行神经网络模型部署,包括:
将上述RISC-V版本的目标神经网络模型、上述RISC-V版本的运行时库文件以及上述RISC-V版本的可执行文件部署到上述目标设备中,并将RISC-V版本的GNU编译器提供的底层动态链接库文件部署到上述目标设备中。
由上可见,本发明方案中,基于待部署神经网络模型,通过TVM编译器获取函数文件、模型计算图文件以及模型参数文件;基于上述函数文件获取RISC-V版本的动态链接库文件,并基于上述动态链接库文件、上述模型计算图文件以及上述模型参数文件获取RISC-V版本的目标神经网络模型;基于上述RISC-V版本的目标神经网络模型获取RISC-V版本的运行时库文件、RISC-V版本的模型计算代码以及RISC-V版本的可执行文件。本发明方案可以对待部署神经网络模型本身进行转换与编译,基于待部署神经网络模型获取RISC-V版本的目标神经网络模型以及维持该目标神经网络模型正常运行所需要的RISC-V版本的运行时库文件和可执行文件。与现有技术相比,本发明方案可以直接通过模型转换的方法将神经网络模型转换为能直接部署在基于RISC-V架构的设备中的模型,有利于提高神经网络模型的适应性,从而使得神经网络模型可以在基于RISC-V架构的设备中进行部署和正常运行。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况下,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当…时”或“一旦”或“响应于确定”或“响应于检测到”。类似的,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述的条件或事件]”或“响应于检测到[所描述条件或事件]”。
下面结合本发明实施例的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其它不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。
目前,随着科学计算和机器学习等技术的高速发展与广泛应用,神经网络模型的应用也越来越广泛,用户希望能将神经网络模型部署到更多的设备中,以更好地利用神经网络模型进行数据处理。现有技术中,常见的神经网络前端框架(如PyTorch、TensorFlow、Caffe等)着重于使神经网络能够得到大型计算设备的支持,例如获得CPU、GPU等的支持,使其能够使用更强算力的硬件以便对神经网络的训练与推理进行加速。神经网络模型由于其庞大的计算开销和能耗,难以完全融入用户的日常生活中,而目前用户已经不满足于仅使用部分庞大的计算设备来进行神经网络的计算,开始着眼于使用其它设备(例如,基于RISC-V架构的计算设备)进行神经网络模型的部署与计算推理。其中,基于RISC-V架构的边缘计算设备中如果部署神经网络模型,则能实现信息采集的设备直接对神经网络的计算。
近些年,TensorFlow开发出了更适配手机的ARM架构的轻量级框架,即TensorFlowLite,使得企业界逐渐倾向于使用TensorFlow框架以方便模型在边缘设备的部署。然而,TensorFlow Lite也缺乏对RISC-V架构的有效支持,并且TensorFlow Lite也并不支持所有的TensorFlow算子。TVM(Tensor Virtual Machine)是一种神经网络端到端编译器,可以解决不同框架之间来回转换的问题,且TVM支持神经网络端到端的包括LLVM(Low LevelVirtual Machine),CUDA以及OpenCL等多个硬件后端的神经网络模型的编译部署,但TVM不支持RISC-V架构。TVM对常见架构的支持主要来源于LLVM对相应架构的支持,而LLVM虽然能部分支持RISC-V架构,但许多基础的RISC-V库文件依然不成型,需要配合RISC-V版本的GNU编译器套件(GCC,GNU Compiler Collection)进行手动定义与支持,无法通过LLVM完成TVM对RISC-V架构的支持。且LLVM作为一个大型的综合编译器,需要占用较多的内存资源,并且在交叉编译时需要依赖大量的第三方库,所以并不适合在边缘设备上部署。
对于基于RISC-V的设备,编译成型的第三方库资源很少,使得RISC-V对一些大型项目的编译非常困难。常见的从神经网络框架的底层进行交叉编译并部署的方法需要大量的准备工作,且在不同框架的转换上较麻烦,需要占用较大的储存空间,并不适用于将神经网络模型部署到基于RISC-V架构的设备中。现有技术的问题在于,现有的神经网络模型的前端框架对基于RISC-V架构的设备的支持不足,无法直接通过模型转换的方法将神经网络模型转换为能直接部署在基于RISC-V架构的设备中的模型,导致神经网络模型难以直接部署在基于RISC-V架构的设备中。只能通过对前端网络框架的底层代码进行交叉编译,编译出RISC-V版本的网络框架来实现基于RISC-V架构的设备对神经网络模型的支持,但工作量庞大,且可能由于某些RISC-V版本的依赖文件的缺失而无法编译,不利于在基于RISC-V架构的设备中进行神经网络模型的部署和维持模型的正常运行,从而不利于利用基于RISC-V架构的设备进行数据处理。
为了解决现有技术的问题,本发明方案中,基于待部署神经网络模型,通过TVM编译器获取函数文件、模型计算图文件以及模型参数文件;基于上述函数文件获取RISC-V版本的动态链接库文件,并基于上述动态链接库文件、上述模型计算图文件以及上述模型参数文件获取RISC-V版本的目标神经网络模型;基于上述RISC-V版本的目标神经网络模型获取RISC-V版本的运行时库文件、RISC-V版本的模型计算代码以及RISC-V版本的可执行文件。本发明方案可以对待部署神经网络模型本身进行转换与编译,基于待部署神经网络模型获取RISC-V版本的目标神经网络模型以及维持该目标神经网络模型正常运行所需要的RISC-V版本的运行时库文件和可执行文件。与现有技术相比,本发明方案可以直接通过模型转换的方法将神经网络模型转换为能直接部署在基于RISC-V架构的设备中的模型,有利于提高神经网络模型的适应性,从而使得神经网络模型可以在基于RISC-V架构的设备中进行部署和正常运行。如此,避免了对不同前端网络框架代码进行交叉编译的复杂过程,减少了大量的工作,为在基于RISC-V架构的设备中部署具有强大功能的神经网络模型提供了更便捷的方法,有利于利用基于RISC-V架构的设备进行数据处理。
示例性方法
如图1所示,本发明实施例提供一种基于TVM面向RISC-V设备的神经网络编译方法,具体的,上述方法包括如下步骤:
步骤S100,基于待部署神经网络模型,通过TVM编译器获取函数文件、模型计算图文件以及模型参数文件。
其中,上述待部署神经网络模型是需要部署在基于RISC-V架构的设备中的神经网络模型。上述函数文件是上述待部署神经网络模型计算所必须的函数文件,模型计算图文件是模型计算图所需的文件,模型参数文件包括上述神经网络模型计算时所需要的参数。具体的,基于本发明实施例提供的基于TVM面向RISC-V设备的神经网络编译方法既可以对一个神经网络模型进行编译,也可以对多个神经网络模型进行编译,本实施例中以对一个神经网络模型进行编译为例进行说明,当需要对多个神经网络模型进行编译时,可以依照本实施例中的具体流程分别对每一个神经网络模型进行并行处理或依次处理,在此不作具体限定。
步骤S200,基于上述函数文件获取RISC-V版本的动态链接库文件,并基于上述动态链接库文件、上述模型计算图文件以及上述模型参数文件获取RISC-V版本的目标神经网络模型。
具体的,上述RISC-V版本的动态链接库文件是基于上述函数文件编译获得的能被基于RISC-V架构的设备进行识别和处理的文件,将上述函数文件转换为RISC-V版本的动态链接库文件,以实现后续在基于RISC-V架构的设备中进行模型计算时调用所需的函数。上述RISC-V版本的目标神经网络模型是能被基于RISC-V架构的设备进行识别和处理的神经网络模型,且上述RISC-V版本的目标神经网络模型包括上述动态链接库文件、上述模型计算图文件以及上述模型参数文件。
步骤S300,基于上述RISC-V版本的目标神经网络模型获取RISC-V版本的运行时库文件、RISC-V版本的模型计算代码以及RISC-V版本的可执行文件。
虽然上述RISC-V版本的目标神经网络模型是能被基于RISC-V架构的设备进行识别和处理,但无法被直接进行处理,且可能由于缺乏模型运行时的必要文件而无法正常运行,因此本实施例中进一步基于RISC-V版本的目标神经网络模型获取RISC-V版本的运行时库文件、RISC-V版本的模型计算代码以及RISC-V版本的可执行文件,以便基于RISC-V架构的设备能够直接进行处理和计算。其中,运行时库是一种被编译器用来实现编程语言内置函数,以提供该语言程序运行时(执行)支持的一种特殊的计算机程序库。上述模型代码由C语言或C++语言编写,其中主要包括了目标神经网络模型的导入、模型输入的定义、模型的计算和输出结果的提取。
由上可见,本发明实施例提供的基于TVM面向RISC-V设备的神经网络编译方法中,基于待部署神经网络模型,通过TVM编译器获取函数文件、模型计算图文件以及模型参数文件;基于上述函数文件获取RISC-V版本的动态链接库文件,并基于上述动态链接库文件、上述模型计算图文件以及上述模型参数文件获取RISC-V版本的目标神经网络模型;基于上述RISC-V版本的目标神经网络模型获取RISC-V版本的运行时库文件、RISC-V版本的模型计算代码以及RISC-V版本的可执行文件。本发明方案可以对待部署神经网络模型本身进行转换与编译,基于待部署神经网络模型获取RISC-V版本的目标神经网络模型以及维持该目标神经网络模型正常运行所需要的RISC-V版本的运行时库文件和可执行文件。与现有技术相比,本发明方案可以直接通过模型转换的方法将神经网络模型转换为能直接部署在基于RISC-V架构的设备中的模型,有利于提高神经网络模型的适应性,从而使得神经网络模型可以在基于RISC-V架构的设备中进行部署和正常运行。
具体的,本实施例中,如图2所示,在上述步骤S300之后,上述方法还包括:
步骤S400,基于上述RISC-V版本的目标神经网络模型、上述RISC-V版本的运行时库文件以及上述RISC-V版本的可执行文件对目标设备进行神经网络模型部署,其中,上述目标设备为基于RISC-V架构的设备。
具体的,上述目标设备是基于RISC-V架构的计算设备,能够对RISC-V版本的目标神经网络模型、运行时库文件以及可执行文件进行处理。因此,将上述RISC-V版本的目标神经网络模型、上述RISC-V版本的运行时库文件以及上述RISC-V版本的可执行文件部署到目标设备中,以实现通过目标设备进行数据计算和处理,使得目标设备能实现与待部署神经网络模型相同的功能。如此,可以实现在基于RISC-V架构的设备中进行神经网络模型的部署并维持模型的正常运行,有利于利用基于RISC-V架构的设备进行数据处理。
本实施例中,上述目标设备具体为基于RISC-V架构的边缘计算设备。边缘计算设备是指支持边缘计算的设备,例如摄像头、手机等。与云端计算的大型计算设备不同,边缘计算设备主要指在靠近数据输入或用户的地方进行数据计算和处理的设备。而边缘计算设备大都基于RISC-V架构,因此,本实施例中将待部署神经网络模型部署至基于RISC-V架构的边缘计算设备中,可以在靠近数据输入或用户的地方直接提供神经网络模型的计算而不用先把数据上传到云端再进行计算,实现通过信息采集的设备直接进行神经网络的计算,提高数据处理效率。
具体的,本实施例中,如图3所示,上述步骤S100包括:
步骤S101,获取待部署神经网络模型。
步骤S102,基于TVM编译器对上述待部署神经网络模型进行编译,获取Relay中间代码。
步骤S103,基于上述Relay中间代码获取函数文件、模型计算图文件以及模型参数文件。
具体的,当对多个待部署神经网络模型进行处理时,各上述待部署神经网络模型可以是不同的神经网络模型。例如,各待部署神经网络模型的前端网络框架可以为Keras、Caffe、TensorFlow、PyTorch、MXNet等,还可以为其它前端网络框架,在此不做具体限定。对于待部署神经网络模型,通过Python编程语言调用相应的前端网络框架等来实现对待部署神经网络模型的读取,然后将读取的文件传入TVM编译器中,由TVM编译器进行下一步的模型编译和优化。
具体的,将读取的上述待部署神经网络模型传入TVM编译器,并且由TVM编译器编译为TVM的Relay中间代码。其中,Relay是一种功能多样的编程语言,可用于机器学习系统表达的中间表示。如此,可以将不同的前端框架下的模型文件编译为TVM编译器的中间Relay代码,实现对不同前端框架的统一,从而可以避免对不同前端网络框架代码进行交叉编译的复杂过程,减少工作量,提高模型部署效率。具体的,本实施例中采用TVM编译器统一不同的前端框架,实际使用过程中还可以采用其它支持不同前端框架的编译器,在此不做具体限定。获得上述Relay中间代码之后可以基于上述Relay中间代码获取函数文件、模型计算图文件以及模型参数文件。
具体的,本实施例中,如图4所示,上述步骤S103包括:
步骤S1031,基于预设的模型优化策略对上述Relay中间代码进行优化,获取优化后的Relay中间代码。
步骤S1032,基于上述优化后的Relay中间代码获取函数文件、模型计算图文件以及模型参数文件。
本实施例中,对上述Relay中间代码进行优化之后才获取函数文件、模型计算图文件以及模型参数文件,以达到更好的效果。具体的,基于预设的模型优化策略对上述Relay中间代码进行优化,上述预设的模型优化策略是预先设置的模型优化策略,可以根据实际需求进行设置,也可以在使用过程中进行调整,在此不作具体限定。具体的,还可以根据不同的待部署神经网络模型设置不同的模型优化策略,上述模型优化策略可以包括算子融合、折叠常数、合并并行算子中的一种或多种,还可以包括其它策略,在此不作具体限定。在进行模型优化的过程中需要依赖TVM编译器的libtvm.so动态链接库文件,但本实施例中在进行模型部署之前就已经完成了模型优化,因此上述TVM编译器的libtvm.so动态链接库文件不需部署到基于RISC-V架构的边缘计算设备中,可以节省边缘计算设备的空间。
本实施例中,上述步骤S1032具体包括:基于上述优化后的Relay中间代码,编译获取与LLVM编译器对应的中间模型文件,其中,上述中间模型文件包括函数文件、模型计算图文件以及模型参数文件,上述函数文件是上述LLVM编译器的中间代码文件。
由于TVM编译器无法直接生成RISC-V版本的模型文件,所以需要先编译为LLVM编译器支持的模型文件作为中介,后续再由LLVM编译器转换为RISC-V版本的模型文件。具体的,在TVM编译器进行优化完成后,将TVM编译器的输出后端目标设定为LLVM编译器,并根据上述优化后的Relay中间代码将模型编译输出为针对LLVM编译器的新的模型文件,即上述中间模型文件。其中,上述中间模型文件实际上包括三个具有独立功能的文件,即模型计算所必须的函数文件(.ll文件),模型计算图文件(.graph文件)以及模型参数文件(.params文件)。其中,上述模型计算所必须的函数文件(.ll文件)是上述LLVM编译器的中间代码文件,且其中包括实现卷积、矩阵相乘、激活函数在内的算法文件,以实现模型计算图中的每个节点的运算。
具体的,本实施例中,如图5所示,上述步骤S200包括:
步骤S201,基于上述LLVM编译器和底层库文件将上述函数文件编译为RISC-V版本的动态链接库文件,其中,上述底层库文件由RISC-V版本的GNU编译器提供。
步骤S202,基于上述动态链接库文件、上述模型计算图文件以及上述模型参数文件获取RISC-V版本的目标神经网络模型。
具体的,需要将模型计算所必须的函数文件(.ll文件,即LLVM编译器的中间代码文件)编译成RISC-V架构可识别的版本。因此,本实施例中,同时借助LLVM编译器和RISC-V版本的GNU编译器所提供的底层库文件将上述函数文件(.ll文件)编译为RISC-V版本的动态链接库文件(.so文件),以在后续模型计算时实现函数调用。其中,上述GNU编译器即GNU编译套件,LLVM编译器与GNU编译器是两款不同的编译器,但功能相同,且编译时所使用的标准库文件也相同。上述编译过程主要由LLVM编译器进行编译,但是LLVM编译器缺少RISC-V架构的标准库文件(即上述底层库文件),所以通过RISC-V架构的GNU编译器提供。具体的,可以通过路径索引将标准库文件所在的路径添加到LLVM编译器中,还可以有其它方法,例如将标准库文件复制进LLVM编译器的指定位置等,在此不作具体限定。RISC-V版本(基于RISC-V架构)的GNU编辑器是指只能编译为RISC-V架构的机器码的GNU编译器,本发明中的RISC-V版本的文件或模型指只能被RISC-V架构的处理器识别并处理的文件或模型。本实施例中,是基于RISC-V版本的GNU编辑器所提供的底层库文件,通过LLVM编译器将上述函数文件编译为RISC-V版本的动态链接库文件,实际使用过程中,还可以采用其它方法,例如采用其它编译器,在此不作具体限定。具体的,本实施例中,上述RISC-V版本的目标神经网络模型中包括上述动态链接库文件(.so文件)、上述模型计算图文件(.graph文件)以及上述模型参数文件(.params文件)。
具体的,本实施例中,如图6所示,上述步骤S300包括:
步骤S301,基于TVM版本的运行时库文件和上述RISC-V版本的目标神经网络模型,获取RISC-V版本的运行时库文件和RISC-V版本的模型计算代码。
步骤S302,基于上述RISC-V版本的运行时库文件和上述RISC-V版本的模型计算代码编译获取RISC-V版本的可执行文件。
具体的,上述步骤S302包括:将上述RISC-V版本的运行时库文件作为一个标准库文件,基于RISC-V版本的GNU编译器对上述RISC-V版本的模型计算代码进行编译,获取RISC-V版本的可执行文件。
其中,上述TVM版本的运行时库是TVM编译器的运行时库。具体的,根据获得的上述RISC-V版本的目标神经网络模型以及上述TVM版本的运行时库制作出RISC-V版本的运行时库文件(libtvm_runtime.so文件)和模型计算代码。其中,上述模型计算代码由C++语言(或C语言)编写,主要包括了输入模型、输入模型需要的数据、对数据进行计算(可以根据模型文件自动完成)、计算结果提取。
进一步的,将上述RISC-V版本的模型计算代码通过RISC-V版本的GNU编译器进行编译,并且与RISC-V版本的运行时库文件进行链接最终生成RISC-V版本的可执行文件。具体的,可以链接为C语言或C++语言后编译为可执行文件。RISC-V版本的可执行文件可以直接被基于RISC-V架构的边缘计算直接执行,进一步的,本实施例中的RISC-V版本的可执行文件是指由RISC-V架构的机器码组成的可执行文件,仅可以在RISC-V架构的机器上识别并运行。
具体的,本实施例中,上述步骤S400包括:将上述RISC-V版本的目标神经网络模型、上述RISC-V版本的运行时库文件以及上述RISC-V版本的可执行文件部署到上述目标设备中,并将RISC-V版本的GNU编译器提供的底层动态链接库文件部署到上述目标设备中。
具体的,将上述RISC-V版本的目标神经网络模型、上述RISC-V版本的运行时库文件(libtvm_runtime.so文件)、上述RISC-V版本的可执行文件以及RISC-V版本的GNU编译器提供的底层动态链接库文件一起复制到以RISC-V为架构的边缘计算设备中,以实现对待部署神经网络模型的最小化的部署。最终通过运行此RISC-V版本的可执行文件可以实现待部署神经网络模型在RISC-V架构的边缘计算设备上的计算。如此,输入或采集的数据可以直接在RISC-V架构的边缘计算设备上进行计算和处理。
本发明实施例中,还基于一种应用场景对上述基于TVM面向RISC-V设备的神经网络编译方法进行具体说明,图7是本发明实施例提供的一种进行神经网络模型编译部署和计算的原理流程示意图,图8是本发明实施例提供的一种具体的模型编译部署流程示意图。图7中主要展示的是从原理角度的完整的模型转换、编译以及整个项目的流程,在实际操作与代码编写过程中,图7中的部分模块或步骤可以合并自动完成,在此不作具体限定。图8是开发角度或操作角度的模型处理和部署流程。如图7和图8所示,本实施例中,基于TVM神经网络端到端编译器,配合LLVM编译器和RISC-V架构的GNU编译器,实现了不同前端网络框架(如Keras、Caffe、TensorFlow、PyTorch、MXNet)的神经网络模型在RISC-V架构设备上的优化、部署和计算,通过Python编程语言实现模型的编译,通过C++编程语言实现模型的输入、计算和输出。具体的,通过Python导入不同前端框架的待部署神经网络模型,对于每一个神经网络模型,分别输入TVM编译器中,进行第一次编译获得Relay中间代码,并进行优化。根据优化后的Relay中间代码进行第二次编译,获得针对LLVM编译器的新的模型文件,包括模型计算所必须的函数文件(.ll文件),模型计算图文件(.graph文件)以及模型参数文件(.params文件)。根据LLVM编译器进行第三次编译,将模型计算所必须的函数文件(.ll文件)编译为RISC-V版本的动态链接库文件(.so文件),以实现后续模型计算中的函数调用。然后基于TVM编译器的Runtime库以及目标神经网络模型制作RISC-V版本的Runtime库文件(libtvm_runtime.so文件)和模型计算代码,将模型计算代码通过RISC-V版本的GNU编译器进行编译并且与RISC-V版本的Runtime库文件进行连接,最终生成RISC-V版本的可执行文件。从而将上述RISC-V版本的目标神经网络模型、上述RISC-V版本的运行时库文件(libtvm_runtime.so文件)、上述RISC-V版本的可执行文件以及RISC-V版本的GNU编译器提供的底层动态链接库文件一起复制到以RISC-V为架构的边缘计算设备中,以实现对待部署神经网络模型的最小化的部署。对于输入数据,进行数据预处理以后转化为二进制数据文件并输入部署后的目标神经网络模型中,进行对应的计算。其中,上述输入数据是需要神经网络模型进行计算的图片数据。
本实施例中基于TVM编译器,提供了一种前端网络框架对RISC-V架构的支持方法。目前主流的前端神经网络框架主要针对的是以CPU、GPU为主的大型计算设备,而对RISC-V架构的边缘计算设备的支持不够。利用本实施例方案可以以较小的储存空间和简便的编译方法,使得神经网络模型可以最小化的部署到RISC-V架构的边缘计算设备上,并且在此过程中可以根据不同的模型优化策略进行网络模型的计算图优化。现有技术中需要将前端网络框架转换为RISC-V版本的网络框架,计算量大且复杂,而本实施例中直接对神经网络模型进行转换和编译,将不同前端网络框架(例如PyTorch、TensorFlow、ONNX等)获得的神经网络模型转换为RISC-V可以编译的版本的模型,并且直接部署在RISC-V边缘计算设备上,从而实现对数据进行计算和处理,而不需要对不同前端网络框架的底层代码进行交叉编译,可以减小工作量,更加快速便捷,提升计算效率。相较于传统的部署方法,本实施例的方法能够同时支持常见的前端网络框架,并且模型的编译过程更加方便和灵活。本实施例的方法中的底层依赖的库文件都为基础的标准库文件,容易移植到不同的设备上,对于不同边缘计算设备的模型部署提供了便利。
示例性设备
如图9中所示,对应于上述基于TVM面向RISC-V设备的神经网络编译方法,本发明实施例还提供一种基于TVM面向RISC-V设备的神经网络编译装置,上述基于TVM面向RISC-V设备的神经网络编译装置包括:
待部署神经网络模型处理模块510,用于基于待部署神经网络模型,通过TVM编译器获取函数文件、模型计算图文件以及模型参数文件。
其中,上述待部署神经网络模型是需要部署在基于RISC-V架构的设备中的神经网络模型。上述函数文件是上述待部署神经网络模型计算所必须的函数文件,模型计算图文件是模型计算图所需的文件,模型参数文件包括上述神经网络模型计算时所需要的参数。具体的,基于本发明实施例提供的基于TVM面向RISC-V设备的神经网络编译装置既可以对一个神经网络模型进行编译,也可以对多个神经网络模型进行编译,本实施例中以对一个神经网络模型进行编译为例进行说明,当需要对多个神经网络模型进行编译时,可以依照本实施例分别对每一个神经网络模型进行并行处理或依次处理,在此不作具体限定。
目标神经网络模型获取模块520,用于基于上述函数文件获取RISC-V版本的动态链接库文件,并基于上述动态链接库文件、上述模型计算图文件以及上述模型参数文件获取RISC-V版本的目标神经网络模型。
具体的,上述RISC-V版本的动态链接库文件是基于上述函数文件编译获得的能被基于RISC-V架构的设备进行识别和处理的文件,将上述函数文件转换为RISC-V版本的动态链接库文件,以实现后续在基于RISC-V架构的设备中进行模型计算时调用所需的函数。上述RISC-V版本的目标神经网络模型是能被基于RISC-V架构的设备进行识别和处理的神经网络模型,且上述RISC-V版本的目标神经网络模型包括上述动态链接库文件、上述模型计算图文件以及上述模型参数文件。
目标神经网络模型处理模块530,用于基于上述RISC-V版本的目标神经网络模型获取RISC-V版本的运行时库文件、RISC-V版本的模型计算代码以及RISC-V版本的可执行文件。
虽然上述RISC-V版本的目标神经网络模型是能被基于RISC-V架构的设备进行识别和处理,但无法被直接进行处理,且可能由于缺乏模型运行时的必要文件而无法正常运行,因此本实施例中进一步基于RISC-V版本的目标神经网络模型获取RISC-V版本的运行时库文件、RISC-V版本的模型计算代码以及RISC-V版本的可执行文件,以便基于RISC-V架构的设备能够直接进行处理和计算。其中,运行时库是一种被编译器用来实现编程语言内置函数,以提供该语言程序运行时(执行)支持的一种特殊的计算机程序库。上述模型代码由C语言或C++语言编写,其中主要包括了目标神经网络模型的导入、模型输入的定义、模型的计算和输出结果的提取。
模型部署模块540,用于基于上述RISC-V版本的目标神经网络模型、上述RISC-V版本的运行时库文件以及上述RISC-V版本的可执行文件对目标设备进行神经网络模型部署,其中,上述目标设备为基于RISC-V架构的设备。
具体的,上述目标设备是基于RISC-V架构的计算设备,能够对RISC-V版本的目标神经网络模型、运行时库文件以及可执行文件进行处理。因此,将上述RISC-V版本的目标神经网络模型、上述RISC-V版本的运行时库文件以及上述RISC-V版本的可执行文件部署到目标设备中,以实现通过目标设备进行数据计算和处理,使得目标设备能实现与待部署神经网络模型相同的功能。
由上可见,本发明实施例提供的基于TVM面向RISC-V设备的神经网络编译装置中,通过待部署神经网络模型处理模块510基于待部署神经网络模型,通过TVM编译器获取函数文件、模型计算图文件以及模型参数文件;通过目标神经网络模型获取模块520基于上述函数文件获取RISC-V版本的动态链接库文件,并基于上述动态链接库文件、上述模型计算图文件以及上述模型参数文件获取RISC-V版本的目标神经网络模型;通过目标神经网络模型处理模块530基于上述RISC-V版本的目标神经网络模型获取RISC-V版本的运行时库文件、RISC-V版本的模型计算代码以及RISC-V版本的可执行文件;通过模型部署模块540基于上述RISC-V版本的目标神经网络模型、上述RISC-V版本的运行时库文件以及上述RISC-V版本的可执行文件对目标设备进行神经网络模型部署,其中,上述目标设备为基于RISC-V架构的设备。本发明方案可以对待部署神经网络模型本身进行转换与编译,基于待部署神经网络模型获取RISC-V版本的目标神经网络模型以及维持该目标神经网络模型正常运行所需要的RISC-V版本的运行时库文件、可执行文件并部署至基于RISC-V架构的目标设备。与现有技术相比,本发明方案可以实现在基于RISC-V架构的设备中进行神经网络模型的部署并维持模型的正常运行,有利于利用基于RISC-V架构的设备进行数据处理。
本实施例中,上述目标设备具体为基于RISC-V架构的边缘计算设备。边缘计算设备是指支持边缘计算的设备,例如摄像头、手机等。与云端计算的大型计算设备不同,边缘计算设备主要指在靠近数据输入或用户的地方进行数据计算和处理的设备。而边缘计算设备大都基于RISC-V架构,因此,本实施例中将待部署神经网络模型部署至基于RISC-V架构的边缘计算设备中,可以在靠近数据输入或用户的地方直接提供神经网络模型的计算而不用先把数据上传到云端再进行计算,实现通过信息采集的设备直接进行神经网络的计算,提高数据处理效率。
具体的,本实施例中,上述基于TVM面向RISC-V设备的神经网络编译装置及其各模块的具体功能可以参照上述基于TVM面向RISC-V设备的神经网络编译方法中的对应描述,在此不再赘述。
应理解,上述实施例中各步骤的序号大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将上述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各实例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟是以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本发明所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,上述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以由另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
上述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,上述计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,上述计算机程序包括计算机程序代码,上述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。上述计算机可读介质可以包括:能够携带上述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,上述计算机可读存储介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解;其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不是相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。