一种数据处理方法、装置、设备及计算机存储介质与流程

文档序号:29809363发布日期:2022-04-27 02:31阅读:97来源:国知局
一种数据处理方法、装置、设备及计算机存储介质与流程

1.本发明涉及计算机软件技术领域,尤其涉及一种数据处理方法、装置、设备及计算机存储介质。


背景技术:

2.以机器学习、深度学习为代表的新一波人工智能热潮已经持续升温数年,深度学习是近年来人工智能领域的研究热点,在诸多领域获得了突破性的进展,现今有很多种深度学习框架以及支持多种深度学习框架的多种硬件平台。深度学习框架和硬件多样性给用户带来很大的好处,对于维持人工智能生态系统的健康发展至关重要,但支持多个框架和硬件需要巨大的工作量,这也给人工智能开发者带来了不小的挑战。
3.随着深度学习的应用越来越广,大家越来越关心深度学习算法在不同硬件架构上训练和推理的实现效率,由于深度学习有众多不同的前端和后端,因此需要一个桥梁来有效实现它们之间的优化和映射。ir(intermediate representation,中间表示)是程序编译过程中,源代码与目标代码之间翻译的中介,ir的设计对编译器来说非常关键,ir要考虑从源代码到目标代码编译的完备性、编译优化的易用性和性能。因此中间表示的竞争,将是未来框架之争的重要一环。参考传统编译器设计的经验,nnvm(neural network virtual machine)、tvm(tensor virtual machine)和xla(accelerated linear algebra)都开始了很好的尝试,它们都是围绕特定中间表示构建的优化和编译工具。但是它们没有在多个硬件平台和人工智能开发框架上进行适配型测试和优化,导致中间表示的可移植性较低,对于不同的硬件平台都需要重新进行优化。并且,在实际应用过程中,中间表示的种类千变万化,对中间表示进行优化处理的难度会随着中间表示中表达项规模的增长呈指数级上升。基于此,如何对中间表示进行优化是亟需解决的问题。


技术实现要素:

4.本发明实施例所要解决的技术问题在于,提供一种数据处理方法、装置、设备及计算机存储介质,通过对静态中间表示进行优化处理,能够实现前端框架无关以及后端平台无关,提高了中间表示的可移植性,以适用于多种硬件平台。
5.第一方面,本发明实施例提供了一种数据处理方法,包括:
6.获取深度学习模型的第一静态中间表示;其中,所述深度学习模型为基于前端模型框架构建的模型,所述第一静态中间表示具有图结构,所述图结构包括m个节点和连接不同节点的有向边,所述有向边上承载有静态张量数据,m>1;
7.将所述第一静态中间表示转化为与所述前端模型框架无关的第二静态中间表示;
8.对所述第二静态中间表示进行优化,得到第三静态中间表示;
9.对所述第三静态中间表示进行编译,得到后端硬件设备可执行的目标代码,以使所述后端硬件设备执行所述目标代码,实现所述目标代码的功能。
10.本实施例通过将静态中间表示转化为与前端模型框架无关的静态中间表示,并对
转化后的静态中间表示进行优化处理,能够实现前端框架无关以及后端平台无关,提高了中间表示的可移植性,以适用于多种硬件平台。
11.在第一方面的一种可能的实现方式中,所述将所述第一静态中间表示转化为与所述前端模型框架无关的第二静态中间表示,包括:
12.对所述第一静态中间表示进行解耦,去除所述第一静态中间表示中与所述前端模型框架相关的节点和静态张量数据,得到与所述前端模型框架无关的所述第二静态中间表示。
13.本实施例通过将与前端模型框架相关的第一静态中间表示转化为与前端模型框架无关的第二静态中间表示,能够实现前端框架无关以及后端平台无关,提高了中间表示的可移植性,以适用于多种硬件平台。
14.可选的,本发明实施例中对所述第二静态中间表示进行优化可以采用如下几种可能的实现方式:
15.第一种可能的实现方式中,所述对所述第二静态中间表示进行优化,包括:
16.对所述第二静态中间表示中包含的节点进行融合,以将所述第二静态中间表示中具有同一属性的多个节点融合到同一个内核函数中。
17.本实施例通过对第二静态中间表示进行算子融合的优化,将第二静态中间表示中具有同一属性的每一组节点对应融合到同一个内核函数中,这样可以不将中间结果保存回全局内存,减少中间数据的迁移,避免频繁的来回读写。
18.第二种可能的实现方式中,所述对所述第二静态中间表示进行优化,包括:
19.获取所述第二静态中间表示中每一节点的张量操作所对应的布局要求;
20.根据所述布局要求对所述第二静态中间表示的静态张量数据进行数据布局转换。
21.本实施例通过对第二静态中间表示进行数据布局转换的优化,以优化局部访存效率。
22.第三种可能的实现方式中,所述对所述第二静态中间表示进行优化,包括:
23.对所述第二静态中间表示中包含的节点进行融合,以将所述第二静态中间表示中具有同一属性的多个节点融合到同一个内核函数中,得到至少一个融合节点;
24.获取每一所述融合节点的张量操作所对应的布局要求;
25.根据所述布局要求对融合后的第二静态中间表示的静态张量数据进行数据布局转换。
26.本实施例通过对第二静态中间表示进行算子融合和数据布局转换的优化,可以不将中间结果保存回全局内存,减少中间数据的迁移,避免频繁的来回读写,优化局部访存效率。
27.第二方面,本发明实施例还提供了一种数据处理方法,包括:
28.获取目标代码和待处理图像;
29.根据所述目标代码对所述待处理图像进行处理,得到图像处理结果;其中,所述目标代码为通过上述第一方面任一项所述的数据处理方法得到的。
30.本实施例通过对静态中间表示进行优化后再编译获得目标代码,能够提高目标代码的运行效率,从而提高图像处理效率。
31.第三方面,本发明实施例还提供了一种数据处理装置,包括接收单元和处理单元:
32.所述接收单元,用于获取深度学习模型的第一静态中间表示;其中,所述深度学习模型为基于前端模型框架构建的模型,所述第一静态中间表示具有图结构,所述图结构包括m个节点和连接不同节点的有向边,所述有向边上承载有静态张量数据,m>1;
33.所述处理单元,用于将所述第一静态中间表示转化为与所述前端模型框架无关的第二静态中间表示;对所述第二静态中间表示进行优化,得到第三静态中间表示;对所述第三静态中间表示进行编译,得到后端硬件设备可执行的目标代码,以使所述后端硬件设备执行所述目标代码,实现所述目标代码的功能。
34.在第三方面的一种可能的实现方式中,所述处理单元将所述第一静态中间表示转化为与所述前端模型框架无关的第二静态中间表示,具体为:
35.对所述第一静态中间表示进行解耦,去除所述第一静态中间表示中与所述前端模型框架相关的节点和静态张量数据,得到与所述前端模型框架无关的所述第二静态中间表示。
36.可选的,本发明实施例中所述处理单元对所述第二静态中间表示进行优化可以采用如下几种可能的实现方式:
37.第一种可能的实现方式中,所述处理单元对所述第二静态中间表示进行优化,具体为:
38.对所述第二静态中间表示中包含的节点进行融合,以将所述第二静态中间表示中具有同一属性的多个节点融合到同一个内核函数中。
39.第二种可能的实现方式中,所述处理单元对所述第二静态中间表示进行优化,具体包括:
40.获取所述第二静态中间表示中每一节点的张量操作所对应的布局要求;
41.根据所述布局要求对所述第二静态中间表示的静态张量数据进行数据布局转换。
42.第三种可能的实现方式中,所述处理单元对所述第二静态中间表示进行优化,具体包括:
43.对所述第二静态中间表示中包含的节点进行融合,以将所述第二静态中间表示中具有同一属性的多个节点融合到同一个内核函数中,得到至少一个融合节点;
44.获取每一所述融合节点的张量操作所对应的布局要求;
45.根据所述布局要求对融合后的第二静态中间表示的静态张量数据进行数据布局转换。
46.需要说明的是,本发明实施例第三方面提供的一种数据处理装置的各实施例的相关具体实现方案和有益效果,与本发明实施例第一方面提供的一种数据处理方法的各实施例的具体实现方案和有益效果对应相同,在此不作赘述。
47.第四方面,本发明实施例还提供了一种数据处理装置,包括接收单元和处理单元:
48.所述接收单元,用于获取目标代码和待处理图像;
49.所述处理单元,用于根据所述目标代码对所述待处理图像进行处理,得到图像处理结果;其中,所述目标代码为通过上述第一方面任一项所述的数据处理方法得到的。
50.第五方面,本发明实施例还提供了一种数据处理设备,包括:存储器和处理器,所述存储器用于存储程序,所述处理器执行所述存储器存储的程序,当存储器存储的程序被执行时,所述处理器用于执行上述第一方面任一项所述的数据处理方法,或者,上述第二方
面所述的数据处理方法。
51.第六方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行上述第一方面任一项所述的数据处理方法,或者,上述第二方面所述的数据处理方法。
52.相对于现有技术,本发明实施例提供的一种数据处理方法、装置、设备及计算机存储介质的有益效果在于:通过获取深度学习模型的第一静态中间表示;将所述第一静态中间表示转化为与所述前端模型框架无关的第二静态中间表示;对所述第二静态中间表示进行优化,得到第三静态中间表示;对所述第三静态中间表示进行编译,得到后端硬件设备可执行的目标代码,以使所述后端硬件设备执行所述目标代码,实现所述目标代码的功能。本发明实施例通过对静态中间表示进行优化处理,能够实现前端框架无关以及后端平台无关,提高了中间表示的可移植性,以适用于多种硬件平台。
附图说明
53.图1是本发明提供的一种数据处理方法的一个实施例的流程示意图;
54.图2是本发明提供的一种数据处理方法的另一个实施例的流程示意图;
55.图3是本发明提供的一种数据处理方法的又一个实施例的流程示意图;
56.图4是本发明提供的一种数据处理方法应用于图像处理的流程示意图;
57.图5是本发明提供的一种数据处理装置的一个实施例的结构示意图;
58.图6是本发明提供的一种数据处理装置的另一个实施例的结构示意图;
59.图7是本发明提供的一种数据处理设备的一个实施例的结构示意图。
具体实施方式
60.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
61.请参阅图1,图1是本发明提供的一种数据处理方法的一个实施例的流程示意图。所述数据处理方法,包括:
62.s101,获取深度学习模型的第一静态中间表示;其中,所述深度学习模型为基于前端模型框架构建的模型,所述第一静态中间表示具有图结构,所述图结构包括m个节点和连接不同节点的有向边,所述有向边上承载有静态张量数据,m>1。
63.具体的,在深度学习初始阶段,每个深度学习研究者都需要写大量的重复代码。为了提高工作效率,这些研究者就将这些代码写成了一个框架放到网上让所有研究者一起使用。接着,网上就出现了不同的框架。随着时间的推移,最为好用的几个框架被大量使用从而流行了起来。目前,全世界最为流行的深度学习框架有paddlepaddle、tensorflow、caffe、theano、mxnet、torch和pytorch。深度学习框架是一种界面、库或工具,它使我们在无需深入了解底层算法的细节的情况下,能够更容易、更快速地构建深度学习模型。深度学习框架利用预先构建和优化好的组件集合定义模型,为深度学习模型的构建提供了一种清
晰而简洁的方法。由于深度学习有众多不同的前端和后端,ir(intermediate representation,中间表示)作为源代码与目标代码之间翻译的中介,可以表达源程序的数据结构以及相关算法。
64.示例性的,本实施例中获取的深度学习模型的第一静态中间表示具有图结构,该图结构包括m个节点和连接不同节点的有向边,有向边上承载有静态张量数据,m为大于1的正整数。其中,图结构即计算图,通过计算图形式的中间表示来表示来自前端模型框架的深度学习模型的工作负载。
65.需要说明的是,可以通过训练好的神经网络对深度学习模型的数据进行分类,相应获得静态数据流和动态数据流,则根据获得的静态数据流即可获得第一静态中间表示。
66.s102,将所述第一静态中间表示转化为与所述前端模型框架无关的第二静态中间表示。
67.具体的,s101中获取的深度学习模型的第一静态中间表示是与前端模型框架相关的,为了使优化后的静态中间表示能够适用于多种后端硬件设备,需要将与前端模型框架相关的第一静态中间表示转化为与前端模型框架无关的第二静态中间表示。
68.需要说明的是,可以将第一静态中间表示转化为解耦框架的形式,解耦框架的形式具体是指转化后的中间表示与上层的模型框架没有关系,从而获得与前端模型框架无关的第二静态中间表示。
69.s103,对所述第二静态中间表示进行优化,得到第三静态中间表示。
70.具体的,中间表示作为源代码与目标代码之间翻译的中介,可以表达源程序的数据结构以及相关算法,对中间表示进行编译,可以得到后端硬件设备可执行的目标代码。一个好的中间表示,既要拥有准确无误地表达源程序信息的能力,同时也要方便进行变换。在变换的过程中,中间表示会进行多次操作,从而变得非常复杂。因此,为了提高编译得到的目标代码的运行性能,需要对第二静态中间表示进行优化处理。
71.由于静态中间表示为包含了各种属性映射信息的计算图,在解耦框架的形式上进行优化,即对第二静态中间表示进行优化时,可以使得该计算图拥有更多的属性(例如,增加一些新的运算符,针对具体的运算符调整属性)或者变为另一个新的计算图。
72.s104,对所述第三静态中间表示进行编译,得到后端硬件设备可执行的目标代码,以使所述后端硬件设备执行所述目标代码,实现所述目标代码的功能。
73.具体的,对优化后的第三静态中间表示进行编译,能够得到后端硬件设备可执行的目标代码。后端硬件设备执行该目标代码,即可实现该目标代码的功能。
74.本实施例通过将静态中间表示转化为与前端模型框架无关的静态中间表示,并对转化后的静态中间表示进行优化处理,能够实现前端框架无关以及后端平台无关,提高了中间表示的可移植性,以适用于多种硬件平台。
75.作为其中一种可选的实施例,所述s102,将所述第一静态中间表示转化为与所述前端模型框架无关的第二静态中间表示,包括:
76.对所述第一静态中间表示进行解耦,去除所述第一静态中间表示中与所述前端模型框架相关的节点和静态张量数据,得到与所述前端模型框架无关的所述第二静态中间表示。
77.示例性的,第一静态中间表示具有图结构,该图结构包括m个节点和连接不同节点
的有向边,有向边上承载有静态张量数据。可以采用nnvm编译器对第一静态中间表示进行解耦,去除第一静态中间表示中与前端模型框架相关的节点和静态张量数据,得到与前端模型框架无关的第二静态中间表示。其中,在对第一静态中间表示进行解耦时,采用的编译器不仅限于上述nnvm编译器,还可以是tvm编译器、xla编译器等等,只要能实现对静态中间表示进行解耦的编译器都可以。
78.本实施例通过将与前端模型框架相关的第一静态中间表示转化为与前端模型框架无关的第二静态中间表示,能够实现前端框架无关以及后端平台无关,提高了中间表示的可移植性,以适用于多种硬件平台。
79.作为其中一种可选的实施例,所述对所述第二静态中间表示进行优化,包括:
80.对所述第二静态中间表示中包含的节点进行融合,以将所述第二静态中间表示中具有同一属性的多个节点融合到同一个内核函数中。
81.具体的,对第二静态中间表示进行算子融合,根据节点属性对第二静态中间表示中包含的所有节点进行分组,获得至少一组节点,每一组节点中的所有节点具有同一属性,将第二静态中间表示中具有同一属性的每一组节点对应融合到同一个内核函数中,这样可以不将中间结果保存回全局内存,减少中间数据的迁移,避免频繁的来回读写。
82.作为其中一种可选的实施例,所述对所述第二静态中间表示进行优化,包括:
83.获取所述第二静态中间表示中每一节点的张量操作所对应的布局要求;
84.根据所述布局要求对所述第二静态中间表示的静态张量数据进行数据布局转换。
85.具体的,对第二静态中间表示进行数据布局转换,张量操作是计算图的基本算子,在不同的算子中张量可能有不同的布局要求,获取第二静态中间表示中每一个节点的张量操作所对应的布局要求,根据该布局要求对第二静态中间表示的静态张量数据进行数据布局转换,以优化局部访存效率。例如,第二静态中间表示中的某一个节点可能会使用4x4的张量操作,所以需要将原始2x2的静态张量数据转换成4x4的块来存储,以优化局部访存效率。
86.作为其中一种可选的实施例,所述对所述第二静态中间表示进行优化,包括:
87.对所述第二静态中间表示中包含的节点进行融合,以将所述第二静态中间表示中具有同一属性的多个节点融合到同一个内核函数中,得到至少一个融合节点;
88.获取每一所述融合节点的张量操作所对应的布局要求;
89.根据所述布局要求对融合后的第二静态中间表示的静态张量数据进行数据布局转换。
90.具体的,对第二静态中间表示进行算子融合和数据布局转换,根据节点属性对第二静态中间表示中包含的所有节点进行分组,获得至少一组节点,每一组节点中的所有节点具有同一属性,将第二静态中间表示中具有同一属性的每一组节点对应融合到同一个内核函数中,得到至少一个融合节点。获取每一个融合节点的张量操作所对应的布局要求,根据该布局要求对融合后的第二静态中间表示的静态张量数据进行数据布局转换。例如,第二静态中间表示中的某一个融合节点可能会使用4x4的张量操作,所以需要将原始2x2的静态张量数据转换成4x4的块来存储,以优化局部访存效率。
91.本实施例通过对第二静态中间表示进行算子融合和数据布局转换的优化,可以不将中间结果保存回全局内存,减少中间数据的迁移,避免频繁的来回读写,优化局部访存效
率。
92.本发明还提供一种数据处理方法,对动态中间表示进行优化,请参阅图2,图2是本发明提供的一种数据处理方法的另一个实施例的流程示意图。所述数据处理方法,包括:
93.s201,获取深度学习模型的第一动态中间表示;其中,所述第一动态中间表示中包括至少一个计算子图,所述计算子图包括n个节点和连接不同节点的有向边,所述有向边上承载有动态张量数据,n>1。
94.具体的,在深度学习初始阶段,每个深度学习研究者都需要写大量的重复代码。为了提高工作效率,这些研究者就将这些代码写成了一个框架放到网上让所有研究者一起使用。接着,网上就出现了不同的框架。随着时间的推移,最为好用的几个框架被大量使用从而流行了起来。目前,全世界最为流行的深度学习框架有paddlepaddle、tensorflow、caffe、theano、mxnet、torch和pytorch。深度学习框架是一种界面、库或工具,它使我们在无需深入了解底层算法的细节的情况下,能够更容易、更快速地构建深度学习模型。深度学习框架利用预先构建和优化好的组件集合定义模型,为深度学习模型的构建提供了一种清晰而简洁的方法。由于深度学习有众多不同的前端和后端,ir(intermediate representation,中间表示)作为源代码与目标代码之间翻译的中介,可以表达源程序的数据结构以及相关算法。
95.示例性的,本实施例中获取的深度学习模型的第一动态中间表示包括至少一个计算子图,其中,每个计算子图均包括n个节点和连接不同节点的有向边,有向边上承载有动态张量数据,n为大于1的正整数。
96.需要说明的是,可以通过训练好的神经网络对深度学习模型的数据进行分类,相应获得静态数据流和动态数据流,则根据获得的动态数据流即可获得第一动态中间表示。
97.s202,根据所述至少一个计算子图各自对应的运行时长对所述至少一个计算子图进行筛选,获得至少一个待优化计算子图。
98.具体的,将每一个计算子图在后端硬件设备上进行执行,可以得到各自在后端硬件设备上执行的对应的运行时长,根据运行时长对对应的所有计算子图进行筛选,可以获得至少一个待优化计算子图。
99.s203,对所述至少一个待优化计算子图进行优化,得到第二动态中间表示;其中,所述第二动态中间表示至少包括优化后的计算子图。
100.具体的,中间表示作为源代码与目标代码之间翻译的中介,可以表达源程序的数据结构以及相关算法,对中间表示进行编译,可以得到后端硬件设备可执行的目标代码。一个好的中间表示,既要拥有准确无误地表达源程序信息的能力,同时也要方便进行变换。在变换的过程中,中间表示会进行多次操作,从而变得非常复杂。因此,为了提高编译得到的目标代码的运行性能,需要对获取的第一动态中间表示中的待优化计算子图进行优化处理。
101.需要说明的是,从深度学习模型获取的第一动态中间表示中包括至少一个计算子图,因此,在对计算子图进行筛选以获取待优化计算子图时,会有可能出现一些不需要优化的计算子图,进而使得优化后得到的第二动态中间表示中既可能只包括优化后的计算子图,也可能包括优化后的计算子图以及不需要优化的计算子图。
102.s204,对所述第二中间表示进行编译,得到后端硬件设备可执行的目标代码,以使
所述后端硬件设备执行所述目标代码,实现所述目标代码的功能。
103.具体的,对优化后的第二静态中间表示进行编译,能够得到后端硬件设备可执行的目标代码。后端硬件设备执行该目标代码,即可实现该目标代码的功能。
104.本实施例通过对动态中间表示中的计算子图进行筛选,以获取待优化计算子图,并对待优化计算子图进行优化处理,能够实现前端框架无关以及后端平台无关,提高了中间表示的可移植性,以适用于多种硬件平台。
105.作为其中一种可选的实施例,所述根据所述至少一个计算子图各自对应的运行时长对所述至少一个计算子图进行筛选,获得至少一个待优化计算子图,包括:
106.针对发生变化的计算子图,获取变化后的计算子图在所述后端硬件设备上执行的运行时长;
107.在所述运行时长大于第一阈值的情况下,将所述运行时长对应的计算子图作为所述待优化计算子图。
108.示例性的,第一动态中间表示中包括至少一个计算子图,且该计算子图是动态变化的,针对发生变化的每一个计算子图,获取变化后的计算子图在后端硬件设备上执行的运行时长。将该运行时长与预设的第一时间阈值进行比较,筛选运行时长大于预设的第一时间阈值的情况,在运行时长大于预设的第一时间阈值的情况下,将运行时长对应的计算子图作为待优化计算子图。
109.本实施例通过在运行过程中对运行时长较长的计算子图进行优化,以获取最优的计算子图,进而得到优化后的动态中间表示。
110.作为其中一种可选的实施例,所述根据所述至少一个计算子图各自对应的运行时长对所述至少一个计算子图进行筛选,获得至少一个待优化计算子图,包括:
111.针对发生变化的计算子图,获取变化后的计算子图在所述后端硬件设备上执行的运行时长,得到排序结果;其中,在所述排序结果中,运行时长越长,排名越靠前;
112.将所述排序结果中排名前l位的运行时长对应的计算子图作为所述待优化计算子图,l》0。
113.示例性的,第一动态中间表示中包括至少一个计算子图,且该计算子图是动态变化的,针对发生变化的每一个计算子图,获取变化后的计算子图在后端硬件设备上执行的运行时长。将获取的所有运行时长按照时长从大到小的顺序进行排序,得到排序结果。将排序结果中排名前l位的运行时长对应的计算子图作为待优化计算子图。其中,l为大于0的正整数。
114.本实施例通过在运行过程中对运行时长较长的某几个计算子图进行优化,进而得到优化后的动态中间表示。在这一实现方式中,可以提高设备执行目标代码的性能。
115.作为其中一种可选的实施例,所述根据所述至少一个计算子图各自对应的运行时长对所述至少一个计算子图进行筛选,获得至少一个待优化计算子图,包括:
116.针对发生变化的同一个计算子图,获取变化后的计算子图在所述后端硬件设备上执行的第一运行时长,以及变化前的计算子图在所述后端硬件设备上执行的第二运行时长;
117.在所述第一运行时长与所述第二运行时长之间的差值大于第二阈值的情况下,将所述第一运行时长对应的计算子图作为所述待优化计算子图。
118.示例性的,第一动态中间表示中包括至少一个计算子图,且该计算子图是动态变化的,针对发生变化的同一个计算子图,获取变化后的计算子图在后端硬件设备上执行的第一运行时长,以及变化前的计算子图在后端硬件设备上执行的第二运行时长。计算第一运行时长与第二运行时长之间的差值,将该差值与预设的第二时间阈值进行比较,筛选差值大于预设的第二时间阈值的情况,在差值大于第二阈值的情况下,将第一运行时长对应的计算子图作为待优化计算子图。
119.本实施例通过在运行过程中对变化前后运行时长差值较大的计算子图进行优化以获取最优的计算子图,进而得到优化后的动态中间表示。在这一实现方式中,可以提高设备执行目标代码的性能。
120.本发明还提供一种数据处理方法,同时对静态中间表示和动态中间表示进行优化,请参阅图3,图3是本发明提供的一种数据处理方法的又一个实施例的流程示意图。所述数据处理方法,包括:
121.s301,获取深度学习模型的静态中间表示和动态中间表示;其中,所述深度学习模型为基于前端模型框架构建的模型;在所述静态中间表示对应的计算子图中,各有向边上承载有静态张量数据;在所述动态中间表示对应的计算子图中,各有向边上承载有动态张量数据。
122.具体的,在深度学习初始阶段,每个深度学习研究者都需要写大量的重复代码。为了提高工作效率,这些研究者就将这些代码写成了一个框架放到网上让所有研究者一起使用。接着,网上就出现了不同的框架。随着时间的推移,最为好用的几个框架被大量使用从而流行了起来。目前,全世界最为流行的深度学习框架有paddlepaddle、tensorflow、caffe、theano、mxnet、torch和pytorch。深度学习框架是一种界面、库或工具,它使我们在无需深入了解底层算法的细节的情况下,能够更容易、更快速地构建深度学习模型。深度学习框架利用预先构建和优化好的组件集合定义模型,为深度学习模型的构建提供了一种清晰而简洁的方法。由于深度学习有众多不同的前端和后端,ir(intermediate representation,中间表示)作为源代码与目标代码之间翻译的中介,可以表达源程序的数据结构以及相关算法。
123.示例性的,本实施例中获取的深度学习模型的静态中间表示和动态中间表示均包括至少一个计算子图,其中,每个计算子图均包括n个节点和连接不同节点的有向边。在静态中间表示对应的计算子图中,各有向边上承载有静态张量数据;在动态中间表示对应的计算子图中,各有向边上承载有动态张量数据。
124.需要说明的是,可以通过训练好的神经网络对深度学习模型的数据进行分类,相应获得静态数据流和动态数据流,则根据获得的静态数据流即可获得静态中间表示,根据获得的动态数据流即可获得动态中间表示。
125.s302,将所述静态中间表示转化为与所述前端模型框架无关的静态中间表示,并对转化后的静态中间表示进行优化,得到优化后的静态中间表示。
126.具体的,s301中获取的深度学习模型的静态中间表示是与前端模型框架相关的,为了使优化后的静态中间表示能够适用于多种后端硬件设备,需要将与前端模型框架相关的静态中间表示先转化为与前端模型框架无关的静态中间表示,可以采用nnvm编译器对静态中间表示进行解耦,去除静态中间表示中与前端模型框架相关的节点和静态张量数据,
得到与前端模型框架无关的静态中间表示,即转化后的静态中间表示。在对静态中间表示进行解耦时,采用的编译器不仅限于上述nnvm编译器,还可以是tvm编译器、xla编译器等等,只要能实现对静态中间表示解耦的编译器都可以。然后再对转化后的与前端模型框架无关的静态中间表示进行优化,以提高编译得到的目标代码的运行性能。
127.需要说明的是,可以将静态中间表示转化为解耦框架的形式,解耦框架的形式具体是指转化后的中间表示与上层的模型框架没有关系,从而获得与前端模型框架无关的静态中间表示。由于静态中间表示为包含了各种属性映射信息的计算图,在解耦框架的形式上进行优化,即对与前端模型框架无关的静态中间表示进行优化时,可以使得该计算图拥有更多的属性(例如,增加一些新的运算符,针对具体的运算符调整属性)或者变为另一个新的计算图。
128.s303,在所述动态中间表示对应的计算子图中,根据至少一个计算子图各自对应的运行时长对所述至少一个计算子图进行筛选,获得至少一个待优化计算子图。
129.具体的,针对动态中间表示所对应的计算子图,将每一个计算子图在后端硬件设备上进行执行,可以得到各自在后端硬件设备上执行的对应的运行时长,根据运行时长对对应的所有计算子图进行筛选,可以获得至少一个待优化计算子图。
130.s304,对所述至少一个待优化计算子图进行优化,得到优化后的动态中间表示;其中,所述优化后的动态中间表示至少包括优化后的计算子图。
131.具体的,中间表示作为源代码与目标代码之间翻译的中介,可以表达源程序的数据结构以及相关算法,对中间表示进行编译,可以得到后端硬件设备可执行的目标代码。一个好的中间表示,既要拥有准确无误地表达源程序信息的能力,同时也要方便进行变换。在变换的过程中,中间表示会进行多次操作,从而变得非常复杂。因此,为了提高编译得到的目标代码的运行性能,需要对获取的第一动态中间表示中的待优化计算子图进行优化处理。
132.需要说明的是,从深度学习模型获取的动态中间表示中包括至少一个计算子图,因此,在对计算子图进行筛选以获取待优化计算子图时,会有可能出现一些不需要优化的计算子图,进而使得优化后的动态中间表示中既可能只包括优化后的计算子图,也可能包括优化后的计算子图以及不需要优化的计算子图。
133.s305,对所述优化后的静态中间表示和所述优化后的动态中间表示进行编译,得到后端硬件设备可执行的目标代码,以使所述后端硬件设备执行所述目标代码,实现所述目标代码的功能。
134.具体的,对优化后的静态中间表示和优化后的动态中间表示进行编译,能够得到后端硬件设备可执行的目标代码。后端硬件设备执行该目标代码,即可实现该目标代码的功能。
135.本实施例通过对静态中间表示和动态中间表示同时进行优化处理,优化效果更好,能够实现前端框架无关以及后端平台无关,提高了中间表示的可移植性,以适用于多种硬件平台。
136.作为其中一种可选的实施例,所述对转化后的静态中间表示进行优化,包括:
137.对转化后的静态中间表示中包含的节点进行融合,以将所述转化后的静态中间表示中具有同一属性的多个节点融合到同一个内核函数中;
138.或者,
139.获取转化后的静态中间表示中每一节点的张量操作所对应的布局要求;
140.根据所述布局要求对所述转化后的静态中间表示的静态张量数据进行数据布局转换。
141.具体的,对转化后的静态中间表示进行算子融合,根据节点属性对转化后的静态中间表示中包含的所有节点进行分组,获得至少一组节点,每一组节点中的所有节点具有同一属性,将转化后的静态中间表示中具有同一属性的每一组节点对应融合到同一个内核函数中,这样可以不将中间结果保存回全局内存,减少中间数据的迁移,避免频繁的来回读写。或者,还可以对转化后的静态中间表示进行数据布局转换,张量操作是计算图的基本算子,在不同的算子中张量可能有不同的布局要求,获取转化后的静态中间表示中每一节点的张量操作所对应的布局要求,根据该布局要求对转化后的静态中间表示的静态张量数据进行数据布局转换,以优化局部访存效率。例如,转化后的静态中间表示中的某一个节点可能会使用4x4的张量操作,所以需要将原始2x2的静态张量数据转换成4x4的块来存储,以优化局部访存效率。
142.作为其中一种可选的实施例,所述对转化后的静态中间表示进行优化,包括:
143.对转化后的静态中间表示中包含的节点进行融合,以将所述转化后的静态中间表示中具有同一属性的多个节点融合到同一个内核函数中,得到至少一个融合节点;
144.获取每一所述融合节点的张量操作所对应的布局要求;
145.根据所述布局要求对融合后的静态中间表示的静态张量数据进行数据布局转换。
146.具体的,对转化后的静态中间表示进行算子融合和数据布局转换,根据节点属性对转化后的静态中间表示中包含的所有节点进行分组,获得至少一组节点,每一组节点中的所有节点具有同一属性,将转化后的静态中间表示中具有同一属性的每一组节点对应融合到同一个内核函数中,得到至少一个融合节点。获取每一融合节点的张量操作所对应的布局要求,根据该布局要求对融合后的转化后的静态中间表示的静态张量数据进行数据布局转换。例如,转化后的静态中间表示中的某一个融合节点可能会使用4x4的张量操作,所以需要将原始2x2的静态张量数据转换成4x4的块来存储,以优化局部访存效率。
147.本实施例通过对转化后的静态中间表示进行算子融合和数据布局转换的优化,可以不将中间结果保存回全局内存,减少中间数据的迁移,避免频繁的来回读写,优化局部访存效率。
148.作为其中一种可选的实施例,所述根据至少一个计算子图各自对应的运行时长对所述至少一个计算子图进行筛选,获得至少一个待优化计算子图,包括:
149.针对发生变化的计算子图,获取变化后的计算子图在所述后端硬件设备上执行的运行时长;
150.在所述运行时长大于第一阈值的情况下,将所述运行时长对应的计算子图作为所述待优化计算子图。
151.示例性的,动态中间表示中包括至少一个计算子图,且该计算子图是动态变化的,针对发生变化的每一个计算子图,获取变化后的计算子图在后端硬件设备上执行的运行时长。将该运行时长与预设的第一时间阈值进行比较,筛选运行时长大于预设的第一时间阈值的情况,在运行时长大于预设的第一时间阈值的情况下,将运行时长对应的计算子图作
为待优化计算子图。
152.本实施例通过在运行过程中对运行时长较长的计算子图进行优化以获取最优的计算子图,进而得到优化后的动态中间表示。在这一实现方式中,可以提高设备执行目标代码的性能。
153.作为其中一种可选的实施例,所述根据至少一个计算子图各自对应的运行时长对所述至少一个计算子图进行筛选,获得至少一个待优化计算子图,包括:
154.针对发生变化的计算子图,获取变化后的计算子图在所述后端硬件设备上执行的运行时长,得到排序结果;其中,在所述排序结果中,运行时长越长,排名越靠前;
155.将所述排序结果中排名前l位的运行时长对应的计算子图作为所述待优化计算子图,l》0。
156.示例性的,第一动态中间表示中包括至少一个计算子图,且该计算子图是动态变化的,针对发生变化的每一个计算子图,获取变化后的计算子图在后端硬件设备上执行的运行时长。将获取的所有运行时长按照时长从大到小的顺序进行排序,得到排序结果。将排序结果中排名前l位的运行时长对应的计算子图作为待优化计算子图。其中,l为大于0的正整数。
157.本实施例通过在运行过程中对运行时长较长的某几个计算子图进行优化,进而得到优化后的动态中间表示。在这一实现方式中,可以提高设备执行目标代码的性能。
158.作为其中一种可选的实施例,所述根据至少一个计算子图各自对应的运行时长对所述至少一个计算子图进行筛选,获得至少一个待优化计算子图,包括:
159.针对发生变化的同一个计算子图,获取变化后的计算子图在所述后端硬件设备上执行的第一运行时长,以及变化前的计算子图在所述后端硬件设备上执行的第二运行时长;
160.在所述第一运行时长与所述第二运行时长之间的差值大于第二阈值的情况下,将所述第一运行时长对应的计算子图作为所述待优化计算子图。
161.示例性的,第一动态中间表示中包括至少一个计算子图,且该计算子图是动态变化的,针对发生变化的同一个计算子图,获取变化后的计算子图在后端硬件设备上执行的第一运行时长,以及变化前的计算子图在后端硬件设备上执行的第二运行时长。计算第一运行时长与第二运行时长之间的差值,将该差值与预设的第二时间阈值进行比较,筛选差值大于预设的第二时间阈值的情况,在差值大于第二阈值的情况下,将第一运行时长对应的计算子图作为待优化计算子图。
162.本实施例通过在运行过程中对变化前后运行时长差值较大的计算子图进行优化以获取最优的计算子图,进而得到优化后的动态中间表示。
163.本发明在实际应用时,可以根据实际需求选择仅对静态中间表示进行优化,或者仅对动态中间表示进行优化,或者同时对静态中间表示和动态中间表示进行优化,以实现不同的优化目的。
164.在具体应用时,本实施例以图像处理为例,请参阅图4,图4是本发明提供的一种数据处理方法应用于图像处理的流程示意图。所述数据处理方法,包括:
165.s401,获取目标代码和待处理图像;
166.s402,根据所述目标代码对所述待处理图像进行处理,得到图像处理结果;其中,
所述目标代码为通过本发明上述任一实施例所述的数据处理方法得到的。
167.示例性的,本实施例可由图像处理器(graphics processing unit,gpu)执行,在获得目标代码和待处理图像之后,图像处理器根据目标代码对待处理图像进行处理,相应获得图像处理结果。其中,目标代码可以通过采用上述任一实施例所述的数据处理方法优化获得,图像处理可以包括但不限于卷积处理、分类处理和灰度处理中的任意一个。通过对中间表示进行优化后再编译获得目标代码,能够提高目标代码的运行效率,从而提高图像处理效率。
168.需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本披露并不受所描述的动作顺序的限制,因为依据本披露,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本披露所必须的。
169.进一步需要说明的是,以图1为例,虽然图1的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
170.相应地,本发明还提供一种数据处理装置,能够实现上述实施例中的数据处理方法的所有流程。
171.请参阅图5,图5是本发明提供的一种数据处理装置的一个实施例的结构示意图。所述数据处理装置,包括接收单元501和处理单元502;
172.所述接收单元501,用于获取深度学习模型的第一静态中间表示;其中,所述深度学习模型为基于前端模型框架构建的模型,所述第一静态中间表示具有图结构,所述图结构包括m个节点和连接不同节点的有向边,所述有向边上承载有静态张量数据,m>1;
173.所述处理单元502,用于将所述第一静态中间表示转化为与所述前端模型框架无关的第二静态中间表示;对所述第二静态中间表示进行优化,得到第三静态中间表示;对所述第三静态中间表示进行编译,得到后端硬件设备可执行的目标代码,以使所述后端硬件设备执行所述目标代码,实现所述目标代码的功能。
174.作为其中一种可选的实施例,所述处理单元502将所述第一静态中间表示转化为与所述前端模型框架无关的第二静态中间表示,具体为:
175.对所述第一静态中间表示进行解耦,去除所述第一静态中间表示中与所述前端模型框架相关的节点和静态张量数据,得到与所述前端模型框架无关的所述第二静态中间表示。
176.作为其中一种可选的实施例,所述处理单元502对所述第二静态中间表示进行优化,具体为:
177.对所述第二静态中间表示中包含的节点进行融合,以将所述第二静态中间表示中具有同一属性的多个节点融合到同一个内核函数中。
178.作为其中一种可选的实施例,所述处理单元502对所述第二静态中间表示进行优化,具体包括:
179.获取所述第二静态中间表示中每一节点的张量操作所对应的布局要求;
180.根据所述布局要求对所述第二静态中间表示的静态张量数据进行数据布局转换。
181.作为其中一种可选的实施例,所述处理单元502对所述第二静态中间表示进行优化,具体包括:
182.对所述第二静态中间表示中包含的节点进行融合,以将所述第二静态中间表示中具有同一属性的多个节点融合到同一个内核函数中,得到至少一个融合节点;
183.获取每一所述融合节点的张量操作所对应的布局要求;
184.根据所述布局要求对融合后的第二静态中间表示的静态张量数据进行数据布局转换。
185.在具体应用时,本实施例以图像处理为例,请参阅图6,图6是本发明提供的一种数据处理装置的另一个实施例的结构示意图。所述数据处理装置,包括接收单元601和处理单元602;
186.所述接收单元601,用于获取目标代码和待处理图像;
187.所述处理单元602,用于根据所述目标代码对所述待处理图像进行处理,得到图像处理结果;其中,所述目标代码为通过上述任一项所述的数据处理方法得到的。
188.需要说明的是,在具体实施当中,本发明实施例提供的数据处理装置的工作原理、控制流程及实现的技术效果,与上述实施例中的数据处理方法对应相同,在此不再赘述。
189.请参阅图7,图7是本发明提供的一种数据处理设备的一个实施例的结构示意图。所述数据处理设备包括存储器701和处理器702,所述存储器701用于存储程序,所述处理器702执行所述存储器701存储的程序,当存储器701存储的程序被执行时,所述处理器702用于执行上述任一实施例所述的数据处理方法。
190.作为其中一种可选的实施例,所述计算机程序可以被分割成一个或多个模块/单元(如计算机程序1、计算机程序2、
……
),所述一个或者多个模块/单元被存储在所述存储器701中,并由所述处理器702执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述数据处理设备中的执行过程。
191.所述处理器702可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,通用处理器可以是微处理器,或者所述处理器702也可以是任何常规的处理器,所述处理器702是所述数据处理设备的控制中心,利用各种接口和线路连接所述数据处理设备的各个部分。
192.所述存储器701主要包括程序存储区和数据存储区,其中,程序存储区可存储操作系统、至少一个功能所需的应用程序等,数据存储区可存储相关数据等。此外,所述存储器701可以是高速随机存取存储器,还可以是非易失性存储器,例如插接式硬盘,智能存储卡(smart media card,smc)、安全数字(secure digital,sd)卡和闪存卡(flash card)等,或
所述存储器701也可以是其他易失性固态存储器件。
193.需要说明的是,上述数据处理设备可包括,但不仅限于,处理器、存储器,本领域技术人员可以理解,图7的结构示意图仅仅是上述数据处理设备的示例,并不构成对上述数据处理设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件。
194.本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行上述任一实施例所述的数据处理方法。
195.上述装置的各组成模块如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在计算机可读取存储介质中,基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机产品存储在计算机可读存储介质中。
196.上述计算机可读存储介质可以是前述实施例的设备的内部存储单元,例如硬盘或内存。上述计算机可读存储介质也可以是上述设备的外部存储设备,例如配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。进一步地,上述计算机可读存储介质还可以既包括上述设备的内部存储单元也包括外部存储设备。上述计算机可读存储介质用于存储上述计算机程序以及上述设备所需的其他程序和数据。上述计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
197.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可通过计算机程序来指令相关的硬件来完成,该计算机的程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可存储程序代码的介质。
198.在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
199.作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
200.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
201.上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本技术各个实施例方法的部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(英文:
read-only memory,简称:rom)、随机存取存储器(英文:random access memory,简称:ram)、磁碟或者光盘等各种可以存储程序代码的介质。
202.综上,本发明实施例提供了一种数据处理方法、装置、设备及计算机存储介质,通过获取深度学习模型的第一静态中间表示;将所述第一静态中间表示转化为与所述前端模型框架无关的第二静态中间表示;对所述第二静态中间表示进行优化,得到第三静态中间表示;对所述第三静态中间表示进行编译,得到后端硬件设备可执行的目标代码,以使所述后端硬件设备执行所述目标代码,实现所述目标代码的功能。本发明实施例通过对静态中间表示进行优化处理,能够实现前端框架无关以及后端平台无关,提高了中间表示的可移植性,以适用于多种硬件平台。
203.以上所述是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1