支持机器学习的硬件描述语言的生成方法及编译工具链
文献发布时间:2024-01-17 01:26:37
技术领域
本发明涉及代码生成技术领域,尤其涉及一种支持机器学习的硬件描述语言的生成方法及编译工具链。
背景技术
近年来神经网络模型获得了飞速的发展,并因其在图像语音识别和自然语言处理等领域卓越的表现,越来越被人们熟悉和接纳,并应用到各自的领域中。然而,随着模型构建技术的发展,神经网络由最初的只有几层的网络(LeNet),逐渐发展成为参数量巨大,网络连接关系复杂的深度卷积神经网络(VGG-Net)和残差网络(ResNet),神经网络模型的日益复杂给底层计算设备带来了很大的考验。
由于现场可编程逻辑门阵列(Field Programmable Gate Array,简称FPGA)布线资源丰富、可重复编程、集成度高以及编程灵活性高方面的优势,逐渐成为神经网络模型部署的较优选择。然而,FPGA神经网络模型部署也面临着很多挑战。
例如,细粒度可重构性带来的额外开销:FPGA的可重构性已经达到了比特级别,这意味着每次更换芯片上的神经网络模型都需要较长的时间进行重构,这大大延长了应用的开发周期。
又例如,编程的复杂度:对于FPGA上的神经网络模型部署来说,研究者需要接触到复杂的硬件编程,这会给使用者带来极高的学习成本,同时也延长了应用的开发周期。
因此,如何能够快速的完成神经网络的部署是目前业界亟需解决的重要课题。
发明内容
本发明提供一种支持机器学习的硬件描述语言的生成方法及编译工具链,用以解决现有技术中将神经网络模型部署在FPGA中耗时长的缺陷,实现快速的完成神经网络模型在FPGA中的部署。
本发明提供一种支持机器学习的硬件描述语言的生成方法,包括:
获取采用第一高级语言构建的神经网络模型;
生成用于描述所述神经网络模型的第一计算图;
基于所述第一计算图和预设的语言生成规则,生成第二高级语言,所述第一高级语言和所述第二高级语言不一致;
将所述第二高级语言输入智能调度模型,得到所述智能调度模型输出的硬件描述语言,所述智能调度模型通过第二高级语言样本和硬件描述语言样本训练得到。
根据本发明提供的一种支持机器学习的硬件描述语言的生成方法,所述基于所述第一计算图和预设的语言生成规则,生成第二高级语言,包括:
提取所述第一计算图中的各个第一算子节点,以及所述各个第一算子节点之间的关联关系;
对任一个所述第一算子节点执行以下处理过程:
确定所述第一算子节点对应的类型和规格信息;确定与所述类型对应的语言转换模板,基于所述规格信息修改所述语言转换模板中的模板规格信息,得到所述第一算子节点对应的子第二高级语言;
基于所述子第二高级语言、所述关联关系和所述预设的语言生成规则,得到所述第二高级语言。
根据本发明提供的一种支持机器学习的硬件描述语言的生成方法,所述基于所述子第二高级语言、所述关联关系和所述预设的语言生成规则,得到所述第二高级语言,包括:
基于所述关联关系,对所述各个第一算子节点进行拓扑排序,得到拓扑序列;
基于所述拓扑序列,对所述各个第一算子节点进行编号,得到目标拓扑序列,所述目标拓扑序列用于指示所述各个第一算子节点之间的运算顺序;
基于所述目标拓扑序列,确定各个所述子第二高级语言的执行顺序,并得到初始第二高级语言;
基于所述预设的语言生成规则,优化所述初始第二高级语言,得到所述第二高级语言。
根据本发明提供的一种支持机器学习的硬件描述语言的生成方法,所述将所述第二高级语言输入智能调度模型,得到所述智能调度模型输出的硬件描述语言,包括:
将所述第二高级语言输入所述智能调度模型,得到第二计算图;
提取所述第二计算图中的各个第二算子节点;
基于预设的调度策略对所述第二计算图中的各个第二算子节点进行调度,直至每个所述第二算子节点调度完成,得到调度结果;
基于所述调度结果,生成所述硬件描述语言。
根据本发明提供的一种支持机器学习的硬件描述语言的生成方法,所述第二计算图用于指示第i个第二算子节点调度到第j个时间片的相关信息,所述第i个第二算子节点的调度范围和所述第i个第二算子节点对应的调度时间差,所述i为大于或等于1的整数,所述j为大于或等于1的整数。
根据本发明提供的一种支持机器学习的硬件描述语言的生成方法,所述基于预设的调度策略对所述第二计算图中的各个第二算子节点进行调度,直至每个所述第二算子节点调度完成,得到调度结果之前,还包括:确定当前时间片对应的待调度第二算子节点和发生调度的调度第二算子节点;
当所述待调度第二算子节点和所述调度第二算子节点不匹配时,从所述调度第二算子节点中确定目标第二算子节点;
所述基于预设的调度策略对所述第二计算图中的各个第二算子节点进行调度,直至每个所述第二算子节点调度完成,得到调度结果,包括:
基于所述预设的调度策略、所述相关信息、所述调度范围和所述调度时间差,对所述目标第二算子节点进行调度,直至每个所述第二算子节点调度完成,得到调度结果。
本发明还提供一种编译工具链,包括:
获取模块,用于获取采用第一高级语言构建的神经网络模型;
生成模块,用于生成用于描述所述神经网络模型的第一计算图;
第一高层次综合模块,用于基于所述第一计算图和预设的语言生成规则,生成第二高级语言,所述第一高级语言和所述第二高级语言不一致;
第二高层次综合模块,用于将所述第二高级语言输入智能调度模型,得到所述智能调度模型输出的硬件描述语言,所述智能调度模型通过第二高级语言样本和硬件描述语言样本训练得到。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述支持机器学习的硬件描述语言的生成方法。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述支持机器学习的硬件描述语言的生成方法。
本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述支持机器学习的硬件描述语言的生成方法。
本发明提供的支持机器学习的硬件描述语言的生成方法及编译工具链,该方法应用于编译工具链,该编译工具链应用于FPGA芯片,方法通过编译工具链获取采用第一高级语言构建的神经网络模型;生成用于描述神经网络模型的第一计算图;基于第一计算图和预设的语言生成规则,生成第二高级语言,第一高级语言和第二高级语言不一致;将第二高级语言输入智能调度模型,得到智能调度模型输出的硬件描述语言,可见,本发明基于该编译工具链便可以直接得的神经网络模型对应的硬件描述语言,这个过程无需人为参与,无需人为研究硬件编程,节约了人工成本,提高了神经网络模型向硬件描述语言的转化速率,节约了转化时长,提高了用户体验,进而,将硬件描述语言部署在FPGA中即可,本发明通过将神经网络模型转化为硬件描述语言,为将神经网络模型部署在FPGA中提供了有效的转化基础,解决了神经网络模型部署在FPGA中耗时长的缺陷,实现了快速完成神经网络模型的部署操作。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的支持机器学习的硬件描述语言的生成方法的流程示意图之一;
图2是本发明提供的支持机器学习的硬件描述语言的生成方法的流程示意图之二;
图3是本发明提供的支持机器学习的硬件描述语言的生成方法的流程示意图之三;
图4是本发明提供的编译工具链的结构示意图之一;
图5是本发明提供的编译工具链的结构示意图之二;
图6是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合图1-图3描述本发明的支持机器学习的硬件描述语言的生成方法。该方法应用于编译工具链,编译工具链应用于FPGA,
下面,结合上述的编译工具链,对支持机器学习的硬件描述语言的生成方法的具体实现进行说明,如图1所示:
步骤101,获取采用第一高级语言构建的神经网络模型。
其中,第一高级语言包括Python语言。
具体的,本发明的编译工具链包括中间件(TVM)。其中,本发明可以获取外部已经训练好的神经网络模型,也可以是利用TVM扩展的Python前端来构建神经网络模型。
步骤102,生成用于描述神经网络模型的第一计算图。
具体的,在获取神经网络模型之后,会调用第三方库将神经网络模型转换为通用的神经网络交换格式,例如,开放神经网络交换格式(Open Neural Network Exchange,简称ONNX);进而,再将得到的ONNX格式的神经网络模型读取转换为Relay中间表示,并将Relay中间表示作为第一计算图。其中,Relay是一种功能多样的编程语言,用于机器学习系统表达的中间表示,另外,Relay中间表示是TVM自己定义的一套中间表达,使用方便简洁,支持子图作为函数被调用,并且TVM也在Relay基础上实现了一系列的计算图优化Pass,其中,Pass是一个基类,可以供用户选择使用,Relay的使用将神经网络模型和后端代码的生成隔离开来,方便开发者进行平台无关的优化和平台适配。
步骤103,基于第一计算图和预设的语言生成规则,生成第二高级语言。
其中,第一高级语言和第二高级语言不一致。
其中,第二高级语言包括C语言。
一个具体实施例中,在得到第一计算图之后,遍历第一计算图,提取第一计算图中的各个第一算子节点,以及各个第一算子节点之间的关联关系;对任一个第一算子节点执行以下处理过程:确定第一算子节点对应的类型和规格信息;确定与类型对应的语言转换模板,基于规格信息修改语言转换模板中的模板规格信息,得到第一算子节点对应的子第二高级语言;基于子第二高级语言、关联关系和预设的语言生成规则,得到第二高级语言。
其中,第一算子节点的类型包括:加法运算、减法运算、乘法运算和除法运算等。不同类型对应不同的语言转换模板,同一类型的第一算子节点之间的区别仅为参与运算的规格信息。其中,该类型基于运算符确定。
其中,规格信息为张量,即同一类型的第一算子节点之间的区别为参与运算的张量的大小。张量是一个数据容器,它包括了各种维度的数据,如标量可以称作零维张量,矩阵可以称作二维张量等,它是机器学习中最基本的数据格式。在神经网络计算图中,张量是算子的输入和输出,如卷积算子一般以三维张量作为输入和输出,全连接算子一般以一维张量作为输入和输出。然而,神经网络计算图是较为抽象的高级表示,并没有说明底层运算应该如何进行,实际上张量之间的运算在底层就是张量的每个元素之间的运算,例如定义两个一维张量相加,底层的运算是这两个张量对应位置上的元素两两相加并形成一个新的张量。这种遍历张量每个位置上元素的计算模式和C语言中的循环和嵌套循环本质相同,因此,本发明的编译工具链采用多层循环的方式表达每一种张量运算,即符合张量运算的原理,也方便使用C语言进行表达。具体的,由于同一类型的第一算子节点之间的区别为参与运算的张量的大小,而具体到元素级别的运算都是相同的,所以该特征也是本发明的语言转换模板有效的原因。因此,对于同一类型的第一算子节点利用预先设置的语言转换模板即可得到对应的C语言,并针对具体的运算修改张量即可。
例如,将一个全连接层对应的第一算子节点映射到两层嵌套循环,而该两层嵌套循环即是输入和输出张量的规模。针对卷积层对应的第一算子节点也是类似,加载预先设置的语言转换模板,并针对具体的卷积运算修改卷积核大小,卷积步长以及被卷积图像的通道数和长宽即可。
其中,语言转换模板的示例代码如下所示:
其中,i、j表示循环控制变量,FM0_SIZE表示全连接层输入张量的维度大小,FM1_SIZE表示全连接层输出张量的维度大小,fm0_ptr表示全连接层的输入张量,fm1_ptr表示全连接层的输出张量,fclweight表示全连接层的权重。
其中,上述示例代码的实现示意图参见图2。
其中,预设语言生成规则用于指示生成高层次综合的C语言代码。其中,预设语言生成规则也可以定义为高层次综合的C语言代码规则。在基于第一计算图生成C语言时必须遵守预设语言生成规则,否则,生成的C语言并不能得到硬件描述语言。其中,预设语言生成规则包括:
(1)程序中不能有涉及系统调用的C语言操作,即,不能存在设计系统调用的函数,如打印字符、读写文件等;
(2)程序中不能有动态的内存分配和释放操作,即,不能存在设计动态内存分配和释放的函数,例如,malloc函数和free函数。由于动态内存分配为运行时操作,高层次综合无法获取所需内存的大小,并且动态内存分配需要系统库支持;
(3)程序中不能有纯软件定义上的递归操作,即,不能存在递归函数调用,由于FPGA硬件后端没有栈的支持;
(4)程序中不能使用标准模板库,即,不能存在STL标准模板库中的函数。由于标准模板库中有很多高层次综合不支持的操作,例如,动态内存分配和递归;
(5)程序中不能对自定义指针进行强制指针类型转换,即,不能存在显式或隐式的指针类型转换。由于FPGA硬件内存相对来说比较固定,一个指针只能指向一块固定的内存。
下面,通过表1对预设语言生成规则进行示例说明:
表1预设语言生成规则
在上述规则的限制下,编译工具链可以生成符合高层次综合的C语言。然而,对于同一功能的C代码,不同的编码风格和编码方式对结果产生很大的影响。例如,用于编码风格和编码方式的差别,导致高层次综合结果面积过大、触发器使用过多等问题。为了解决上述问题,本发明总结了一系列高层次综合不友好的C代码编码风格,并在其基础上形成了一套高层次综合友好的C代码编码风格。
具体的,编译工具链生成的C语言代码不能有定义复杂的函数,其中,函数的复杂性体现在参数的数量和返回值的类型,在传统CPU架构下函数参数和返回值由寄存器传递,但是在FPGA中函数参数和返回值会被综合成函数模块的输入端口,因此较多的参数和较复杂的返回值会导致函数模块占用端口资源较多,面积较大。其次C代码不能进行过于频繁的类型转换操作,类型转换需要额外的连接开销,因此,较多的类型转换会使得延迟过高,运行效率低下。并且C代码不能定义过多的冗余变量,和CPU相比FPGA上的资源非常稀少,冗余变量会使得综合结果需要使用更多的触发器资源,这实际上是一种资源的浪费。
因此,在C语言的编码风格上进行一定的限定,具体如下:
(1)程序中应当避免定义复杂的函数,复杂指函数参数和返回值较多且格式复杂;
(2)程序中应当避免使用不确定的数据类型以及频繁的类型转换;
(3)程序中应当避免定义过多的冗余变量。
下面,通过表2对C语言编码风格进行示例说明:
表2C语言编码风格
其中,/////表示没有样例。
本发明实例针对高层次综合程序和FPGA硬件的特点,提出并总结了高层次综合友好的C代码规范。这些高层次综合友好的C代码规范要求中间代码生成模块在一定的限制下进行代码生成。实验数据表明,遵守高层次综合友好规范的中间C代码与不遵守规范的代码相比,既大大节省了硬件资源的使用,也显著提升了部署在FPGA上程序的运行效率。
一个具体实施例中,基于关联关系,对各个第一算子节点进行拓扑排序,得到拓扑序列;基于拓扑序列,对各个第一算子节点进行编号,得到目标拓扑序列,目标拓扑序列用于指示各个第一算子节点之间的运算顺序;基于目标拓扑序列,确定各个子第二高级语言的执行顺序,并得到初始第二高级语言;基于预设的语言生成规则,优化初始第二高级语言,得到第二高级语言。
其中,在基于语言转换模块生成C语言时,会调度至少一个运算符,将该过程中被调度的多个运算符定义为运算符集合。
本发明通过上述实施例通过语言转化模块和语言生成规则等技术手段解决了各个第一算子节点生成C语言问题,那么如何解决各个第一算子节点的沟通问题呢?本发明采用全局编号的技术手段,搭建各个第一算子节点之间数据沟通的桥梁,来解决各个第一算子节点的沟通问题。
其中,一个第一计算图表示了一个完成的计算流程,包括:数据的输入、数据在第一算子节点之间的传递以及数据的输出。全局编号的技术手段的具体实现为:
按照拓扑序列对各个第一算子节点进行编号,若第一计算图一共有N个第一算子节点,将第一计算图的初始第一算子节点定义为1号节点,终止第一算子节点定位为N号节点,输入的张量定义为0号张量,其中,N为大于1的整数。
本发明通过上述全局编号的技术手段,在遍历第一计算图时按照拓扑序列对第一算子节点和张量进行编号命名,这样在生成代码时,如果代码内容涉及到两个第一算子节点之间数据的交互,可以直接通过编号确定数据操作的对象。
步骤104,将第二高级语言输入智能调度模型,得到智能调度模型输出的硬件描述语言。
其中,智能调度模型通过第二高级语言样本和硬件描述语言样本训练得到。
其中,智能调度模型的初始模型框架为框架bambu,基于预先设计的智能调度算法嵌入到bambu中,进而,基于第二高级语言样本和硬件描述语言样本进行训练,得到最终的智能调度模型。
其中,智能调度算法的具体实现代码如下所示:
其中,bb表示第二高级语言中的基本块,N表示下一步可以被调度的运算符集合,E表示第二计算图中各个第二算子节点之间的依赖关系的集合,C表示资源存在冲突的运算符集合,G表示第二计算图,M表示调度结果对应的调度结果表,o
一个具体实施例中,利用训练好的智能调度模型得到C语言对应的硬件描述语言的具体实现为:将第二高级语言输入智能调度模型,得到第二计算图;提取第二计算图中的各个第二算子节点;基于预设的调度策略对第二计算图中的各个第二算子节点进行调度,直至每个第二算子节点调度完成,得到调度结果;基于调度结果,生成硬件描述语言。
其中,第二计算图为细粒度的有向无环图。
其中,预设的调度策略为预先设计的基于有向无环图将C语言转换为硬件描述语言的执行策略。
一个具体实施例中,第二计算图用于指示第i个第二算子节点调度到第j个时间片的相关信息,第i个第二算子节点的调度范围和第i个第二算子节点对应的调度时间差,i为大于或等于1的整数,j为大于或等于1的整数。
其中,第i个第二算子节点的调度范围为第i个第二算子节点可以移动的时间范围;第i个第二算子节点对应的调度时间差为第i个第二算子节点在最早最好调度算法对应的时间点和在最晚最好调度算法对应的时间点的差值。其中,最早最好调度算法用于指示所有的第二算子节点调度完成时第i个第二算子节点对应的最早的时间,最晚最好调度算法用于指示所有的第二算子节点调度完成时第i个第二算子节点对应的最晚的时间。
具体如图3所示,以4个第二算子节点为例进行说明:
其中,4个第二算子节点分别用c
下面,通过表3和表4对智能调度模型的多个层以及每个层的输入和输出进行实例说明。
表3智能调度模型的多个层以及每个层的输入和输出
表4表示智能调度模型的多个层以及每个层的输入和输出
其中,表3示例的层用于特征提取,表4示例的层用于分类,用于输出当前时间点可移动的第二计算机节点。
具体的,在训练智能调度模型时,初始超参数建立在监督学习的最好结果上,在此结果之后,根据大量的第二高级语言样本和硬件描述语言样本进行模型的训练,在训练过程中,每次选择合法的第二算子节点,即,移动后不会影响执行顺序的第二算子节点,进而向下移动。
其中,智能调度模型的训练代码如下所示:
其中,N表示蒙特卡洛搜索次数,T表示蒙特卡洛模拟的时间步,
一个具体实施例中,基于预设的调度策略对第二计算图中的各个第二算子节点进行调度,直至每个第二算子节点调度完成,得到调度结果之前,确定当前时间片对应的待调度第二算子节点和发生调度的调度第二算子节点;当待调度第二算子节点和调度第二算子节点不匹配时,从调度第二算子节点中确定目标第二算子节点;基于预设的调度策略、相关信息、调度范围和调度时间差,对目标第二算子节点进行调度,直至每个第二算子节点调度完成,得到调度结果。
其中,时间点和时间片存在对应关系。
具体的,智能调度模型在进行调度时,确定当前时间点是否存在资源冲突的第二算子节点,其中,当确定待调度第二算子节点和调度第二算子节点不匹配时,则确定存在资源冲突的第二算子节点,此时,从调度第二算子节点中,将在调度完成时时间最短时对应的调度第二算子节点作为目标第二算子节点,以目标第二算子节点向下进行调度,直至所有的第二算子节点满足资源约束的要求。其中,在调度时需要判断其后继是否“紧邻”,调度完成这些紧邻的对应的第二算子节点之后,调度目标第二算子节点。
其中,在对任意一个第二算子节点进行调度时,由于资源冲突的引入,需要进行局部和全局的资源分布更新。在此基础上,每一步将每一个冲突的第二算子节点向下调度,直至硬件约束被满足,具体实现代码如下所示:
其中,P表示不同的第二算子节点被调度的可能性向量,RL是指强化学习。
其中,在进行调度的过程中对时间约束进行增加操作,通过修改第二算子节点的时间片,增加资源调度冲突无法排解时的可调度性,具体实现代码如下所示:
其中,op表示被调度的第二算子节点。
其中,bambu调用智能调度算法通过参数类进入主程序,通过主程序调用综合步骤管理类,进而调用综合步骤工厂类,进而调用算法类,进行基于预设的调度策略进行第二算子节点的调度。
最终,将生成的硬件描述语言经过逻辑综合,物理设计步骤最终部署在FPGA上。具体的,本发明的具体实现流程总结为:基于描述神经网络计算的计算图,生成相应的中间C代码程序。该C代码程序接着被输入到高层次综合程序中生成支持FPGA编程的硬件描述语言。用户以计算图的形式定义神经网络模型,由中间生成代码模块生成对应的中间C代码程序,该中间C代码程序被用于经高层次综合程序生成支持FPGA编程的硬件描述语言。此编译工具链支持多种通用数学计算以及多层感知机和各种卷积神经网络的训练和推理任务。
本发明实例针对高层次综合中的硬件资源调度优化问题,提出了基于强化学习的调度算法,基于现有的半自动高层次综合框架bambu实现高层次综合解决方案,提出并总结了调度问题的转化方式与强化学习调度模型,其中包括但不限于数据预处理、训练方式与相关参数。调度问题透过定义转化,生成模型输入,并基于调度模型,给出满足资源约束且接近理论最优的周期表现。
本发明提供的支持机器学习的硬件描述语言的生成方法及编译工具链,该方法应用于编译工具链,该编译工具链应用于FPGA芯片,方法通过编译工具链获取采用第一高级语言构建的神经网络模型;生成用于描述神经网络模型的第一计算图;基于第一计算图和预设的语言生成规则,生成第二高级语言,第一高级语言和第二高级语言不一致;将第二高级语言输入智能调度模型,得到智能调度模型输出的硬件描述语言,可见,本发明基于该编译工具链便可以直接得的神经网络模型对应的硬件描述语言,这个过程无需人为参与,无需人为研究硬件编程,节约了人工成本,提高了神经网络模型向硬件描述语言的转化速率,节约了转化时长,提高了用户体验,进而,将硬件描述语言部署在FPGA中即可,本发明通过将神经网络模型转化为硬件描述语言,为将神经网络模型部署在FPGA中提供了有效的转化基础,解决了神经网络模型部署在FPGA中耗时长的缺陷,实现了快速完成神经网络模型的部署操作。
下面对本发明提供的编译工具链进行描述,下文描述的编译工具链与上文描述的支持机器学习的硬件描述语言的生成方法可相互对应参照,重复之处不再赘述,如图4所示,该编译工具链包括:
获取模块401,用于获取采用第一高级语言构建的神经网络模型;
生成模块402,用于生成用于描述神经网络模型的第一计算图;
第一高层次综合模块402,用于基于第一计算图和预设的语言生成规则,生成第二高级语言,第一高级语言和第二高级语言不一致;
第二高层次综合模块403,用于将第二高级语言输入智能调度模型,得到智能调度模型输出的硬件描述语言,智能调度模型通过第二高级语言样本和硬件描述语言样本训练得到。
一个具体实施例中,第一高层次综合模块402,具体用于提取第一计算图中的各个第一算子节点,以及各个第一算子节点之间的关联关系;对任一个第一算子节点执行以下处理过程:确定第一算子节点对应的类型和规格信息;确定与类型对应的语言转换模板,基于规格信息修改语言转换模板中的模板规格信息,得到第一算子节点对应的子第二高级语言;基于子第二高级语言、关联关系和预设的语言生成规则,得到第二高级语言。
一个具体实施例中,第一高层次综合模块402,具体用于基于关联关系,对各个第一算子节点进行拓扑排序,得到拓扑序列;基于拓扑序列,对各个第一算子节点进行编号,得到目标拓扑序列,目标拓扑序列用于指示各个第一算子节点之间的运算顺序;基于目标拓扑序列,确定各个子第二高级语言的执行顺序,并得到初始第二高级语言;基于预设的语言生成规则,优化初始第二高级语言,得到第二高级语言。
一个具体实施例中,第二高层次综合模块403,具体用于将第二高级语言输入智能调度模型,得到第二计算图;提取第二计算图中的各个第二算子节点;基于预设的调度策略对第二计算图中的各个第二算子节点进行调度,直至每个第二算子节点调度完成,得到调度结果;基于调度结果,生成硬件描述语言。
一个具体实施例中,第二计算图用于指示第i个第二算子节点调度到第j个时间片的相关信息,第i个第二算子节点的调度范围和第i个第二算子节点对应的调度时间差,i为大于或等于1的整数,j为大于或等于1的整数。
一个具体实施例中,第二高层次综合模块403,还用于确定当前时间片对应的待调度第二算子节点和发生调度的调度第二算子节点;当待调度第二算子节点和调度第二算子节点不匹配时,从调度第二算子节点中确定目标第二算子节点;第二高层次综合模块403,具体用于基于预设的调度策略、相关信息、调度范围和调度时间差,对目标第二算子节点进行调度,直至每个第二算子节点调度完成,得到调度结果。
具体的,按照硬件描述语言的生成过程编译工具链还可以按照前端、中端和后端进行划分,具体参见图5,该编译工具链包括编译框架前端501,编译框架中端502和编译框架后端503。
具体的,本发明实施例采用现有的开源神经网络编译框架(TVM)作为编译框架前端501,采用高层次综合技术(High Level Synthesis,简称HLS)设计编码框架中端502,高层次综合软件和FPGA开发软件作为编译框架后端503。编译框架前端501,编译框架中端502和编译框架后端503各个模块都对应输入数据,因此,需要设计各个模块的输出数据,以使得各个模块之间可以有机的合成一个整体,即编译工具链。
其中,编译框架前端501,用于获取神经网络模型,将其转化为神经网络交换格式,进而得到Relay中间表达。
编译框架中端502,用于遍历第一计算图,生成C语言。
编译框架后端503,用于生成第二计算图,对第二计算图的第二算子节点进行调度,得到硬件描述语言。
按照硬件描述语言的生成过程编译工具链,还包括部署后端,用于将硬件描述语言部署在FPGA中。
图6示例了一种电子设备的实体结构示意图,如图6所示,该电子设备可以包括:处理器(processor)601、通信接口(Communications Interface)602、存储器(memory)603和通信总线604,其中,处理器601,通信接口602,存储器603通过通信总线604完成相互间的通信。处理器601可以调用存储器603中的逻辑指令,以执行支持机器学习的硬件描述语言的生成方法,该方法包括:获取采用第一高级语言构建的神经网络模型;生成用于描述神经网络模型的第一计算图;基于第一计算图和预设的语言生成规则,生成第二高级语言,第一高级语言和第二高级语言不一致;将第二高级语言输入智能调度模型,得到智能调度模型输出的硬件描述语言,智能调度模型通过第二高级语言样本和硬件描述语言样本训练得到。
此外,上述的存储器603中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的支持机器学习的硬件描述语言的生成方法,该方法包括:获取采用第一高级语言构建的神经网络模型;生成用于描述神经网络模型的第一计算图;基于第一计算图和预设的语言生成规则,生成第二高级语言,第一高级语言和第二高级语言不一致;将第二高级语言输入智能调度模型,得到智能调度模型输出的硬件描述语言,智能调度模型通过第二高级语言样本和硬件描述语言样本训练得到。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的支持机器学习的硬件描述语言的生成方法,该方法包括:获取采用第一高级语言构建的神经网络模型;生成用于描述神经网络模型的第一计算图;基于第一计算图和预设的语言生成规则,生成第二高级语言,第一高级语言和第二高级语言不一致;将第二高级语言输入智能调度模型,得到智能调度模型输出的硬件描述语言,智能调度模型通过第二高级语言样本和硬件描述语言样本训练得到。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
- 一种指令缓存方法及编译工具链
- 交叉编译工具链构建方法、装置、电子设备及存储介质