一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

自动生成算子的方法和装置与流程

2022-04-30 02:17:53 来源:中国专利 TAG:


1.本技术涉及人工智能领域,并且更具体地,涉及一种自动生成算子的方法和装置。


背景技术:

2.随着人工智能(artificial intelligence,ai)的普及,深度学习(deep learning,dl)模型已广泛应用于计算机视觉、自然语言处理、自动驾驶等领域。
3.深度学习开源软件框架如tensorflow、pytorch、mxnet等为用户提供了友好的深度学习模型的编程环境,使得用户可以方便地将设计的深度学习模型部署在cpu、gpu等通用计算机硬件平台。算子(operator)是深度学习模型的基本计算单元,例如矩阵乘法(matrix multiplication)、卷积(convolution)等。为了保证深度学习模型在硬件平台的高性能运行,需要依靠高性能算子加速库(kernel libraries)来提高算子的计算性能,例如英特尔公司和facebook公司基于cpu分别设计的深度神经网络加速库(deep neural network library,dnnl)、深度神经网络加速包(neural network package,nnpack),英伟达公司基于gpu设计的加速库英伟达通用并行计算结构深度神经网络加速库(nvidia cuda deep neural network library,cudnn)等。然而,目前的算子开发和算子性能优化均依赖于人工设计,需要耗费大量人力且效率不高,且设计出的算子库一般只针对特定的场景进行优化,一旦场景变化,算子就不能保证高性能甚至不能使用,即算子的泛化能力较差。


技术实现要素:

4.本技术提供一种自动生成算子的方法和装置,可以实现算子代码的自动生成和算子的自动优化,降低人工依赖,提高用户体验。
5.第一方面,提供一种自动生成算子的方法,包括:根据计算需求,生成多个操作步骤;
6.根据多个操作步骤中的每个操作步骤在ai芯片上的缓冲区,对多个操作步骤分组,以得到多组操作步骤,多组操作步骤中的每组操作步骤包括一个或多个操作步骤;根据每组操作步骤的嵌套循环,确定每组操作步骤的切分策略;根据每组操作步骤的切分策略确定每组操作步骤的代码。
7.本技术实施例的方法,可以应用于架构复杂的具有多级缓冲区的ai芯片,实现算子代码的自动生成,无需依赖人工配置。
8.结合第一方面,在一些可能的实现方式中,根据每组操作步骤的嵌套循环,确定每组操作步骤的多种切分策略之后,方法还包括:根据每组操作步骤的多种切分策略和缓冲区的大小,确定多组操作步骤的多种切分策略组合。
9.本技术实施例的方法,同时可以生成算子的合法空间,合法空间包括多种切分策略组合,切分策略覆盖范围广,算子泛化能力强。
10.结合第一方面,在一些可能的实现方式中,方法还包括:根据每组操作步骤的特征和评估模型,获取每组操作步骤在多种切分策略组合中的每种切分策略组合条件下的运行
时间,评估模型为预先训练好的模型;将最短运行时间对应的切分策略组合作为最优的切分策略组合。
11.本技术实施例的方法,还可以从合法空间中选取最优的切分策略组合,实现算子的自动性能优化。
12.结合第一方面,在一些可能的实现方式中,每组操作步骤的特征包括:执行的计算类型、每次载入的数据量和载入次数、每次循环的计算量和循环次数、执行每条指令的计算量和执行次数中的至少一个。
13.结合第一方面,在一些可能的实现方式中,根据每组操作步骤的多种切分策略和缓冲区的大小,确定多组操作步骤的多种切分策略组合,包括:在多种切分策略中的每种切分策略的条件下,确定每组操作步骤占用ai芯片的对应缓冲区的大小;确定多组操作步骤的多种切分策略组合,多种切分策略组合中的每种切分策略组合的条件下,多组操作步骤占用ai芯片的对应缓冲区的大小之和小于或等于ai芯片的对应缓冲区的大小。
14.结合第一方面,在一些可能的实现方式中,根据每组操作步骤的切分策略确定每组操作步骤的代码,包括:根据每组操作步骤的切分策略生成每组操作步骤的策略调度原语;调用每组操作步骤的策略调度原语生成策略调度原语的代码。
15.第二方面,提供一种自动生成算子的装置,包括处理单元,用于:根据计算需求,生成多个操作步骤;根据多个操作步骤中的每个操作步骤在ai芯片上的缓冲区,对多个操作步骤分组,以得到多组操作步骤,多组操作步骤中的每组操作步骤包括一个或多个操作步骤;根据每组操作步骤的嵌套循环,确定每组操作步骤的切分策略;根据每组操作步骤的切分策略确定每组操作步骤的代码。
16.结合第二方面,在一些可能的实现方式中,根据每组操作步骤的嵌套循环,确定每组操作步骤的多种切分策略之后,处理单元还用于:根据每组操作步骤的多种切分策略和缓冲区的大小,确定多组操作步骤的多种切分策略组合。
17.结合第二方面,在一些可能的实现方式中,处理单元还用于:根据每组操作步骤的特征和评估模型,获取每组操作步骤在多种切分策略组合中的每种切分策略组合条件下的运行时间,评估模型为预先训练好的模型;将最短运行时间对应的切分策略组合作为最优的切分策略组合。
18.结合第二方面,在一些可能的实现方式中,每组操作步骤的特征包括:执行的计算类型、每次载入的数据量和载入次数、每次循环的计算量和循环次数、执行每条指令的计算量和执行次数中的至少一个。
19.结合第二方面,在一些可能的实现方式中,处理单元根据每组操作步骤的多种切分策略和缓冲区的大小,确定多组操作步骤的多种切分策略组合,包括:在多种切分策略中的每种切分策略的条件下,确定每组操作步骤占用ai芯片的对应缓冲区的大小;确定多组操作步骤的多种切分策略组合,多种切分策略组合中的每种切分策略组合的条件下,多组操作步骤占用ai芯片的对应缓冲区的大小之和小于或等于ai芯片的对应缓冲区的大小。
20.结合第二方面,在一些可能的实现方式中,处理单元根据每组操作步骤的切分策略确定每组操作步骤的代码,包括:根据每组操作步骤的切分策略生成每组操作步骤的策略调度原语;调用每组操作步骤的策略调度原语生成策略调度原语的代码。
21.第三方面,提供一种自动生成算子的设备,其特征在于,设备包括处理器和存储
器,存储器用于存储计算机程序,处理器用于从存储器中调用并运行计算机程序,使得设备执行上述第一方面或第二方面中的任意一种实现方式中的方法。
22.第四方面,提供一种计算机可读存储介质,其特征在于,计算机可读存储介质存储了计算机程序,当计算机程序被处理器执行时,使得处理器执行上述第一方面或第二方面中的任意一种实现方式中的方法。
23.第五方面,提供一种包含指令的计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述第一方面或第二方面中的任意一种实现方式中的方法。
24.第六方面,提供一种芯片,其特征在于,芯片包括处理器与数据接口,处理器通过数据接口读取存储器上存储的指令,以执行上述第一方面或第二方面中的任意一种实现方式中的方法。
25.可选地,作为一种实现方式,芯片还可以包括存储器,存储器中存储有指令,处理器用于执行存储器上存储的指令,当指令被执行时,处理器用于执行第一方面或第二方面中的任意一种实现方式中的方法。
26.上述芯片具体可以是现场可编程门阵列(field-programmable gate array,fpga)或者专用集成电路(application-specific integrated circuit,asic)。
附图说明
27.图1是本技术实施例的tvm自动生成算子的示意性流程图;
28.图2是本技术实施例的自动生成算子的系统架构的示意性框图;
29.图3是本技术实施例的华为昇腾芯片架构的示意性框图;
30.图4是本技术实施例的自动生成算子的方法的示意性流程图;
31.图5是本技术实施例的利用调度生成模块、分组和切分模块、评估模型模块实现算子代码的自动生成的示意性流程图;
32.图6是本技术实施例的分组和切分模块的作用的示意性框图;
33.图7是本技术实施例的调度生成模块的作用的示意性框图;
34.图8是本技术实施例的自动生成算子的装置的示意性框图;
35.图9是本技术的自动生成算子的设备的结构示意图。
具体实施方式
36.以下实施例中所使用的术语只是为了描述特定实施例的目的,而并非旨在作为对本技术的限制。如在本技术的说明书和所附权利要求书中所使用的那样,单数表达形式“一个”、“一种”、“所述”、“上述”、“该”和“这一”旨在也包括例如“一个或多个”这种表达形式,除非其上下文中明确地有相反指示。还应当理解,在本技术以下各实施例中,“至少一个”、“一个或多个”是指一个、两个或两个以上。术语“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系;例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b的情况,其中a、b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。
37.在本说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本技术的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在
另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
38.为了便于理解本技术的技术方案,首先对本技术涉及的概念做简要介绍。
39.计算逻辑(compute):深度学习模型的算子的数学计算逻辑描述,与硬件平台无关。
40.算子操作步骤(stage):根据算子计算描述(compute)生成对应硬件平台的所有操作步骤,包括数据搬移、数据计算等。
41.算子数据切分策略(tiling):由于硬件平台缓存(buffer)大小的限制,需要对算子各操作步骤的数据做切分,算子的数据切分策略极大程度决定了算子的性能,数据切分策略与硬件平台相关。
42.算子数据调度优化(schedule):基于算子的数据切分策略,通过算子数据调度优化的原语,执行各操作步骤的优化。其中,原语指由若干条指令组成的程序段。
43.算子性能评估模型(cost model):用于评估算子不同的数据切分策略在ai芯片上的运行时间。
44.下面将结合附图,对本技术中的技术方案进行描述。
45.为了满足深度学习对庞大计算力的需求,基于领域专用架构(domain specific architecture,dsa)的ai芯片兴起,例如谷歌、华为公司等专门设计了ai芯片以加速深度学习模型的计算。根据深度模型的计算特点,目前的ai芯片普遍采用多级缓存(buffer)架构设计,来减少对片外(做成芯片的集成电路外部)主存或内存的访问,以充分利用片上(做成芯片的集成电路内部)的计算资源。而ai芯片复杂的硬件计算架构也进一步加大了算子开发和算子性能优化的难度。
46.要使ai芯片支持深度学习架构,即要将深度学习架构中的代码编译成芯片支持的指令集,需要从头到尾涉及一套软件栈,做一套全栈的优化,因此目前许多深度学习的架构只能在某一些厂商的gpu设备上获得加速。而张量虚拟机(tensor virtual machine,tvm)针对不同的深度学习框架和硬件平台,实现了统一的软件栈,以尽可能高效的方式将不同框架下的深度学习模型部署到硬件平台上。tvm深度学习编译器为深度学习模型在各种硬件平台部署,提供了端到端的解决方案,tvm通过统一的中间表达(intermediate respresentation,ir)堆栈,连接前端深度学习框架和后端硬件平台,实现特定硬件架构平台算子的生成和优化的自动化。
47.tvm借鉴了图像处理领域专用语言(domain specific language,dsl)halide的思想,将硬件平台无关的算子计算描述(compute)和硬件平台相关的算子计算过程(schedule)相分离。图1示出了本技术实施例的tvm自动生成算子的示意性流程图,如图1所示,将不同深度学习框架的深度学习模型部署在特定的硬件平台,首先tvm将深度学习模型转换为统一的计算图,然后各个算子根据计算逻辑描述生成在特定硬件平台的所有操作步骤(包括操作步骤0至操作步骤n),接着对每个操作步骤生成相应的策略调度原语,并且调用该原语,最后自动生成算子对应的特定硬件平台(例如llvm、cuda、opengl等)的代码。其中,算子策略调度是算子代码自动生成和优化的核心,针对特定硬件平台的算子的数据调度优化需要较高的背景知识和经验。而tvm提供了算子策略调度的原语对各个计算步骤进
行优化,优化包括:循环优化(fuse、split、tile、recorder、unroll),访存优化(cache_read、cache_write、set_scope、storage_align、compute at、compute inline),多线程并行优化(bind、parallel、vectorize)和其他优化(prefetch、pragma、tensorize、double_buffer)等。tvm主要针对输入张量计算的嵌套循环,基于循环切块(tiling)策略,通过策略调度(schedule)原语操作来实现算子的性能优化。其中对操作步骤的切分主要是为了满足片上缓冲区等硬件参数规格和计算流水线(pipeline)并发的需求,从而最大化发挥硬件平台的算力。tvm支持算子数据调度优化的半自动优化:通过人工配置算子切分策略和人工设计和算子数据调度优化模板,基于离线搜索获得最优的切分策略,从而实现算子数据调度优化。对于输入的相同的张量,该最优的切分策略可以保存在文件中,供算子在线推理阶段直接调用。
48.tvm虽然提供了针对特定硬件架构平台算子代码自动生成和算子自动优化的解决方案,但是算子策略调度开发和算子策略调度性能优化均依赖于切分策略,而该切分策略需要人工配置。此外,由于算子切分策略的合法空间(即切分策略各维度的有效组合)难以推断,且缺少合适的算子性能评估模型,tvm只能支持输入的已知张量规格的算子离线性能优化,无法满足对输入的未知张量规格的算子在线性能优化的需求,即算子的泛化能力不佳。
49.因此本技术实施例提供一种自动生成算子的方法,基于深度学习编译器tvm,可以实现算子切分策略及其合法空间的自动生成,基于切分策略实现算子策略调度的自动生成,并且基于切分策略及其合法空间与算子性能评估模型实现算子策略调度性能的在线自动优化。
50.图2示出了本技术实施例的自动生成算子的系统架构的示意性框图,如图2所示,深度学习框架调用深度学习编译器在主cpu(host cpu)中完成算子编译,然后将编译生成的可执行文件在ai芯片上进行部署和执行,最后将执行结果返回至主cpu。
51.图3示出了本技术实施例的华为昇腾芯片架构的示意性框图,如图3所示,该芯片包括l0a缓冲区、l0b缓冲区、l0c缓冲区、矩阵计算单元、向量计算单元、标量计算单元、输出缓冲器、专用寄存器(special purpose register,spr)、通用寄存器(general purpose register,gpr)等,其中计算单元用于实现相应的计算,缓冲区、缓冲器、寄存器等用于存储相应的数据。
52.图4示出了本技术实施例的自动生成算子的方法的示意性流程图,如图4所示,包括步骤401至步骤404,以下分别进行介绍。
53.s401,根据计算需求,生成多个操作步骤。
54.本技术实施例的计算需求,是指用户想要进行的计算,例如加法计算、乘法计算等。具体的,本技术实施例的自动生成算子的方法应用于ai芯片时,根据计算需求和ai芯片的架构(包括缓冲区层次和计算架构等),自动生成原语,例如cache_read、cache_write、set_scope schedule等原语,从而得到多个操作步骤,该多个操作步骤用于实现用户想要进行的计算。
55.s402,根据多个操作步骤中的每个操作步骤在ai芯片上的缓冲区,对多个操作步骤分组,以得到多组操作步骤,多组操作步骤中的每组操作步骤包括一个或多个操作步骤。
56.具体的,将在同一个缓冲区的对同一个数据的操作步骤分为一组。例如对于数据a
和数据b在同一个缓冲区的操作步骤,对于数据a的操作步骤被分为一组,对于数据b的操作步骤被分为一组。
57.s403,根据每组操作步骤的嵌套循环,确定每组操作步骤的切分策略。
58.具体的,将每组的第一个操作步骤作为待切分操作步骤,根据该待切分操作步骤的各层嵌套循环及其大小,就可以确定该待切分操作步骤各层嵌套循环对应的切分策略及其取值范围,并将该切分策略作为该组操作步骤的切分策略。
59.s404,根据每组操作步骤的切分策略确定每组操作步骤的代码。
60.具体的,根据每组操作步骤的切分策略生成每组操作步骤的策略调度原语,然后调用所述每组操作步骤的策略调度原语生成该策略调度原语的代码。
61.可选的,在根据每组操作步骤的嵌套循环,确定每组操作步骤的多种切分策略之后,本技术实施例的方法还包括,根据每组操作步骤的多种切分策略和缓冲区的大小,确定多组操作步骤的多种切分策略组合。具体的,由于ai芯片上的每个缓冲区都具有一定的大小,因此,首先在每种切分策略的条件下,确定每组操作步骤分别占用ai芯片的对应缓冲区的大小,其中对应缓冲区即操作步骤在ai芯片上占用的缓冲区。例如,对于数据a,在切分策略a1的条件下,确定操作步骤组α所占用对应缓冲区的大小a11,在切分策略a2的条件下,确定操作步骤组α所占用对应缓冲区的大小a22;对于数据b,在切分策略b1的条件下,确定操作步骤组β所占用对应缓冲区的大小b11,在切分策略b2的条件下,确定操作步骤组β所占用对应缓冲区的大小b22。然后确定多组操作步骤的多种切分策略组合,该多种切分策略组合中的每种切分策略组合的条件下,多组操作步骤占用ai芯片的对应缓冲区的大小之和小于或等于所述ai芯片的对应缓冲区的大小。在上述示例中,判断a11与b11之和、a11与b22之和、a22与b11之和、a22与b22之和的大小,例如,如果a11与b11之和小于或等于对应缓冲区的大小,则认为a11与b11是满足要求的切分策略组合。由此可以得到多种切分策略组合,多种切分策略组合构成了算子的合法空间。
62.可选的,本技术实施例的自动生成算子的方法还包括,从上述多种切分策略组合中选取最优的切分策略组合。具体的,根据每组操作步骤的特征和评估模型,获取每组操作步骤在多种切分策略组合中的每种切分策略组合条件下的运行时间,然后将最短运行时间对应的切分策略组合作为最优的切分策略组合。具体的,在一种切分策略组合的条件下,获取该种切分策略组合对应的每组操作步骤的策略调度,例如在切分策略组合a11和b11的条件下,则获取a11和b11条件下的操作步骤组α和操作步骤组β的策略调度,然后分别提取操作步骤组α和操作步骤组β的特征,特征包括:该操作步骤执行的计算类型、该操作步骤每次载入的数据量、该操作步骤的载入次数、该操作步骤单次循环的计算量、该操作步骤计算的循环次数、该操作步骤执行每条指令的计算量、指令执行的次数。最后将操作步骤组α和操作步骤组β的特征分别输入评估模型,得到每组操作步骤对应的运行时间,从而可以得到在切分策略组合a11和b11的条件下操作步骤的运行时间。由此可以得到每种切分策略组合条件下的运行时间,将最短运行时间对应的切分策略组合作为最优的切分策略组合,获取到最优的切分策略组合,则实现了算子性能的优化。
63.其中,评估模型为预先训练好的模型,可以是机器学习模型、深度神经网络模型等,本技术实施例在此不做限定。模型的训练过程可以是将已知的切分策略组合条件下的所有操作步骤的特征作为训练数据输入待训练的模型,将已知的该切分策略组合条件下的
所有操作步骤对应的运行时间作为训练标签,完成机器学习模型或深度神经网络模型的训练。
64.本技术实施例的方法,可以应用于架构复杂的具有多级缓冲区的ai芯片,实现算子代码的自动生成,无需依赖人工配置;同时可以生成算子的合法空间,切分策略覆盖范围广,算子泛化能力强;并从合法空间中选取最优的切分策略组合,实现算子的自动性能优化。
65.本技术实施例的自动生成算子的方法涉及调度生成模块、分组和切分模块、评估模型模块,图5示出了利用这三种模块实现算子代码的自动生成的示意性流程图。
66.如图5所示,首先基于算子计算描述和ai芯片架构,利用调度生成模块自动生成cache_read、cache_write、set_scope schedule原语,从而得到操作步骤图,其中算子计算描述是由用户完成。根据操作步骤图,分组和切分模块基于操作步骤在ai芯片上的不同缓冲区对操作步骤进行自动分组,通过各组操作步骤的嵌套循环,来确定切分策略,并且根据ai芯片的缓冲区的大小的约束,来确定切分策略的合法空间。在得到切分策略后,调度生成模块根据切分策略自动生成切分相关的原语,并且根据切分策略和合法空间,提取切分对应的各操作步骤的特征。评估模型模块根据操作步骤的特征,确定最优的切分策略,即实现算子的在线性能优化。最后代码生成模块可以生成ai芯片相应的算子代码。
67.本技术实施例的自动生成算子的方法针对ai芯片能支持的任意算子计算描述均可生成高性能的策略调度。以下实施例以华为昇腾芯片和dl模型中常见的矩阵乘计算c=a*b为例对上述的调度生成模块、分组和切分模块、评估模型模块的作用进行详细的说明,其中c=a*b为卷积算子,全连接算子等均会用到该计算。
68.一、分组和切分模块
69.分组和切分模块用于实现算子的切分策略及其合法空间的自动生成。对于矩阵乘计算c=a*b,该计算在ai芯片上的典型的数据流为:从双倍速率存储器(double data rate,ddr)获取输入数据a、b,经过ub、l1缓冲区到l0a或l0b缓冲区,在完成矩阵乘的计算后,将输出数据c经过l0c缓冲区到ub,最后再输入回ddr。具体流程如下:
70.(1)图6示出了本技术实施例分组和切分模块对操作步骤进行分组和切分的示意性框图,如图6所示,首先根据算子计算描述,和图3的昇腾芯片的缓冲区层次和计算架构,以及调度生成模块生成的cache_read、cache_write、set_scope schedule等原语,自动生成所有操作步骤,所有的操作步骤组合成一个操作步骤图。图6中的操作步骤图包括a、a_0、a_1、a_2,b、b_0、b_1、b_2,c、c_0、c_1等操作步骤,其中,对于输入数据a,操作步骤a、a_0、a_1、a_2表示输入数据a在不同级别的缓冲区(ub、l1、l0)中的数据搬移操作,其保存的切块大小分别为ub(0)、l1(0)、l0a;类似的,对于输入数据b,操作步骤b、b_0、b_1、b_2表示输入数据b在不同级别的缓冲区(ub、l1、l0)的数据搬移操作,其保存的切块大小分别为ub(1)、l1(1)、l0b;对于输出数据c,操作步骤c_0、c_1分别表示矩阵计算操作和数据搬移操作,其保存的切块大小分别为l0c和ub(2)。对除了ddr中的a、b、c之外的操作步骤,根据这些操作步骤所在的缓冲区进行自动分组,图6中的分组用虚框表示,这里每组只包含一个操作步骤作为示例,实际也可以包含多个操作步骤。
71.(2)在完成分组后,如果每组包括多个操作步骤,将每组中的第一个操作步骤作为待切分的操作步骤,由于图6中每组只包含一个操作步骤,因此就将该操作步骤作为待切分
的操作步骤。然后根据每组的待切分的操作步骤的嵌套循环(其中,a_0、a_1、a_2的循环变量为m、k;b_0、b_1、b_2的循环变量为k、n;c_0、c_1的循环变量为m、n),确定每组待切分的操作步骤的切分策略。
72.(3)根据ai芯片的缓冲区大小的约束确定切分策略的合法空间,即确定所有满足条件的切分策略的组合,例如ub(0)、ub(1)、ub(2)的大小之和小于等于ub缓冲区的大小。
73.可选的,如果组内有特殊的操作步骤计算而导致不能满足缓冲区的大小限制时,例如broadcast计算,该计算通过广播的形式进行数据扩展,此时则需要将该组中的操作步骤进一步分为多个小组。
74.二、调度生成模块
75.调度生成模块主要用于实现算子策略调度原语的自动生成,图7示出了本技术实施例的调度生成模块的作用的示意性框图,如图7所示,调度生成模块首先自动生成cache_read、cache_write、set_scope等策略调度原语,然后利用这些原语生成图6中除a、b、c外的其他操作步骤,即a_0、a_1、a_2,b_0、b_1、b_2,c_0、c_1等,从而得到操作步骤图。然后根据分组和切分模块确定的切分策略自动生成各操作步骤的相关的策略调度原语操作。在评估模型模块确定最优切分策略后,自动调用split、reorder、compute_at、double_buffer等策略调度原语,其中在策略调度原语调用过程中,通过代码打印的方式生成策略调度原语代码,从而实现策略调度代码自动生成。
76.三、评估模型模块
77.评估模型模块包括算子性能评估模型,用于在线评估算子策略调度的性能。首先根据切分的合法空间中的各条切分策略生成各操作步骤对应的策略调度,然后提取各操作步骤的特征,其中特征包括:
78.1)stage type:表征该操作步骤执行的计算类型,例如矩阵运算、向量运算等;
79.2)store bit:表征该操作步骤每次载入的数据量;
80.3)store num:表征该操作步骤的载入次数;
81.4)compute bit:表征该操作步骤单次循环的计算量;
82.5)compute num:表征该操作步骤计算的循环次数;
83.6)emit bit:表征该操作步骤执行每条指令的计算量;
84.7)emit num:表征指令执行的次数。
85.在提取了操作步骤的特征后,将该操作步骤的特征作为输入,利用离线训练好的评估模型,来预测该切分策略对应的算子的策略调度的运行时间。其中,该评估模型可以是机器学习模型或深度神经网络模型等,本技术实施例在此不做限定。
86.在算子进行在线性能优化时,可利用评估模型从切分策略的合法空间中选取最优的切分策略,因此本技术实施例针对输入计算描述中不同张量规格的输入,切分策略为动态可调,即针对不同张量规格输入可由评估模型旋转最优的切分策略。
87.昇腾ai芯片中的卷积2d正向算子通过人工优化,在特定硬件中性能可以达到极致,而使用本技术实施例自动生成算子的方法自动生成的ai芯片中的卷积2d正向算子,可以达到与人工优化相当的极致性能效果。
88.上文介绍了本技术实施例的自动生成算子的方法,下文结合附图介绍本技术实施例的自动生成算子的装置。可以理解的是,自动生成算子的装置为了实现上述功能,其包含
了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本技术能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
89.例如,可以将不同的功能划分为不同的功能单元,也可以将两个或两个以上的功能集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本技术中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
90.图8示出了本技术实施例的自动生成算子的装置800的示意性框图,如图8所示,包括处理单元810和存储单元820,以下分别进行介绍。
91.处理单元810用于执行:根据计算需求,生成多个操作步骤;根据所述多个操作步骤中的每个操作步骤在ai芯片上的缓冲区,对所述多个操作步骤分组,以得到多组操作步骤,所述多组操作步骤中的每组操作步骤包括一个或多个操作步骤;根据所述每组操作步骤的嵌套循环,确定每组操作步骤的切分策略;根据所述每组操作步骤的切分策略确定每组操作步骤的代码。
92.可选的,在根据每组操作步骤的嵌套循环,确定每组操作步骤的多种切分策略之后,处理单元810还用于:根据每组操作步骤的多种切分策略和缓冲区的大小,确定多组操作步骤的多种切分策略组合。
93.可选的,处理单元810还用于:根据每组操作步骤的特征和评估模型,获取每组操作步骤在多种切分策略组合中的每种切分策略组合条件下的运行时间,评估模型为预先训练好的模型;将最短运行时间对应的切分策略组合作为最优的切分策略组合。
94.可选的,每组操作步骤的特征包括:执行的计算类型、每次载入的数据量和载入次数、每次循环的计算量和循环次数、执行每条指令的计算量和执行次数中的至少一个。
95.可选的,处理单元810根据每组操作步骤的多种切分策略和缓冲区的大小,确定多组操作步骤的多种切分策略组合,具体包括:在多种切分策略中的每组切分策略的条件下,确定每组操作步骤占用ai芯片的对应缓冲区的大小;确定多组操作步骤的多种切分策略组合,多种切分策略组合中的每组切分策略组合的条件下,多种操作步骤占用ai芯片的对应缓冲区的大小之和小于或等于ai芯片的对应缓冲区的大小。
96.可选的,处理单元810根据每组操作步骤的切分策略确定每组操作步骤的代码,具体包括:根据每组操作步骤的切分策略生成每组操作步骤的策略调度原语;调用每组操作步骤的策略调度原语生成策略调度原语的代码。
97.存储单元820,用于存储处理单元810处理前或处理后的数据。
98.图9示出了本技术提供的一种自动生成算子的设备的结构示意图。图9中的虚线表示该单元或该模块为可选的。设备900可用于实现上述方法实施例中描述的方法。设备900可以是终端设备或服务器或芯片。
99.设备900包括一个或多个处理器901,该一个或多个处理器901可支持设备900实现方法实施例中的方法。处理器901可以是通用处理器或者专用处理器。例如,处理器901可以是中央处理器(central processing unit,cpu)。cpu可以用于对设备900进行控制,执行软
件程序,处理软件程序的数据。设备900还可以包括通信单元905,用以实现信号的输入(接收)和输出(发送)。
100.例如,设备900可以是芯片,通信单元905可以是该芯片的输入和/或输出电路,或者,通信单元905可以是该芯片的通信接口,该芯片可以作为终端设备或网络设备或其它电子设备的组成部分。
101.又例如,设备900可以是终端设备或服务器,通信单元905可以是该终端设备或该服务器的收发器,或者,通信单元905可以是该终端设备或该服务器的收发电路。
102.设备900中可以包括一个或多个存储器902,其上存有程序904,程序904可被处理器901运行,生成指令903,使得处理器901根据指令903执行上述方法实施例中描述的方法。可选地,存储器902中还可以存储有数据(如神经网络)。可选地,处理器901还可以读取存储器902中存储的数据,该数据可以与程序904存储在相同的存储地址,该数据也可以与程序904存储在不同的存储地址。
103.处理器901和存储器902可以单独设置,也可以集成在一起,例如,集成在终端设备的系统级芯片(system on chip,soc)上。
104.处理器901执行自动生成算子的方法的具体方式可以参见方法实施例中的相关描述。
105.应理解,上述方法实施例的各步骤可以通过处理器901中的硬件形式的逻辑电路或者软件形式的指令完成。处理器901可以是cpu、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field programmable gate array,fpga)或者其它可编程逻辑器件,例如,分立门、晶体管逻辑器件或分立硬件组件。
106.本技术还提供了一种计算机程序产品,该计算机程序产品被处理器901执行时实现本技术中任一方法实施例所述的方法。
107.该计算机程序产品可以存储在存储器902中,例如是程序904,程序904经过预处理、编译、汇编和链接等处理过程最终被转换为能够被处理器901执行的可执行目标文件。
108.本技术还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被计算机执行时实现本技术中任一方法实施例所述的方法。该计算机程序可以是高级语言程序,也可以是可执行目标程序。
109.该计算机可读存储介质例如是存储器902。存储器902可以是易失性存储器或非易失性存储器,或者,存储器902可以同时包括易失性存储器和非易失性存储器。
110.应理解,本技术实施例中的处理器可以为中央处理单元(central processing unit,cpu),该处理器还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
111.还应理解,本技术实施例中的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,rom)、可编程只读存储器(programmable rom,prom)、可擦除可编程只读存储
器(erasable prom,eprom)、电可擦除可编程只读存储器(electrically eprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(random access memory,ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的随机存取存储器(random access memory,ram)可用,例如静态随机存取存储器(static ram,sram)、动态随机存取存储器(dram)、同步动态随机存取存储器(synchronous dram,sdram)、双倍数据速率同步动态随机存取存储器(double data rate sdram,ddr sdram)、增强型同步动态随机存取存储器(enhanced sdram,esdram)、同步连接动态随机存取存储器(synchlink dram,sldram)和直接内存总线随机存取存储器(direct rambus ram,dr ram)。
112.上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令或计算机程序。在计算机上加载或执行所述计算机指令或计算机程序时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质。半导体介质可以是固态硬盘。
113.应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况,其中a,b可以是单数或者复数。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系,但也可能表示的是一种“和/或”的关系,具体可参考前后文进行理解。
114.本技术中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。
115.应理解,在本技术的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。
116.本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
117.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
118.在本技术所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的
划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
119.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
120.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
121.所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
122.以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献