CN116501325A - 一种算子的处理方法及计算机设备 - Google Patents

一种算子的处理方法及计算机设备 Download PDF

Info

Publication number
CN116501325A
CN116501325A CN202210049301.8A CN202210049301A CN116501325A CN 116501325 A CN116501325 A CN 116501325A CN 202210049301 A CN202210049301 A CN 202210049301A CN 116501325 A CN116501325 A CN 116501325A
Authority
CN
China
Prior art keywords
micro
operator
operators
shape
combination
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210049301.8A
Other languages
English (en)
Inventor
周卿
俞峰
何剑
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202210049301.8A priority Critical patent/CN116501325A/zh
Priority to PCT/CN2022/143087 priority patent/WO2023134453A1/zh
Publication of CN116501325A publication Critical patent/CN116501325A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Abstract

本申请实施例公开了一种算子的处理方法及计算机设备,可应用于人工智能领域,具体可应用于动态shape场景,包括:针对任意一个待输出的实时地第一张量形状,可实时地用事先建立的微算子库中的一个或多个微算子组合而成,由于不同的组合有不同的性能,再从中选择(如选择性能最优)一种组合包括的微算子进行执行。由于微算子库里的微算子事先编译好,因此无需编译器的参与,节省了编译开销,避免了即时编译技术在runtime时编译开销过大的问题;且由于微算子形状固定且各不相同,用于作为“形状空间”里的“基”,因此任意一种形状都可以用微算子库里的一个或多个微算子组合,在动态shape场景中可编程性高,同时微算子库内的微算子数量有限,内存占用小。

Description

一种算子的处理方法及计算机设备
技术领域
本申请涉及机器学习领域,尤其涉及一种算子的处理方法及计算机设备。
背景技术
即时(just in time,JIT)编译是一种应用广泛的编译技术,即在运行时的运行时间(runtime)内,即刻调用编译器,对指定任务进行标准编译(包括前端词法/语法分析、中间代码分析、代价模型评估运行代价以及后端代码生成等),产生二进制代码(binarycode)并执行的过程。
图1描述了动态shape场景下应用即时编译技术的流程。shape的字面含义就是形状,在人工智能(artificial intelligence,AI)、高性能计算(high performancecomputing,HPC)等应用中,会需要矩阵乘法、卷积、向量操作等计算密集型操作(称为算子),这些算子在数学上都是对多维数组(或者称为张量(tensor))的一种函数计算。多维数组的每个维度都有一个具体的数值,比如二维数组的高H和宽W;三维数组的高H、宽W、深D。这些不同维度的数值统称为该多维数组(即tensor)的形状,也就是shape。在图1中,由于是动态shape场景,因此事先(例如在神经网络训练之前)是无法知道具体待输出张量的形状,即由于张量的形状实时变化,对应层的算子(如卷积算子)无法事先被编译出二进制代码,这里的无法编译出二进制代码特指应用静态形状编译器的场景下。但是,张量形状的具体数值会在runtime时被确认,即运行到要计算某个算子的时刻,系统知道当前时刻待输出张量形状的数值到底为多少。例如在图1中,在runtime即刻,系统知道待输出的张量的形状为378*125的一个矩阵。因此,这个确定的378*125的形状信息对于静态形状编译器而言,已经是足够使用的信息了,即系统会暂停计算(其实此刻也无法计算,因为没有支持378*125矩阵形状的算子的二进制代码)主动调用静态形状编译器,对支持张量378*125的算子进行相应的编译,并产生二进制代码以供使用。
上述即时编译调用静态形状编译器生成与待输出张量的形状一致的算子的二进制代码的时间消耗为秒级别(一般在10秒以内),而一个算子(如卷积)的计算开销为微秒至毫秒级别,即在整个计算过程中即时编译的编译开销过大;此外,在动态shape场景中,调用静态形状编译器的次数可高达数十万次,系统的整体计算性能被即时编译严重的损耗了。
发明内容
本申请实施例提供了一种算子的处理方法及计算机设备,针对任意一个待输出的实时地第一张量的形状,都可以实时地用事先建立的微算子库里的一个或多个微算子组合而成,由于不同的组合会有不同的性能,最后再从中选择(如选择性能最优)一种组合所包括的微算子进行执行,间接提高了系统性能。在本申请实施例中,由于该微算子库里的微算子事先编译好,因此无需编译器的参与,节省了编译开销,避免了即时编译技术在runtime时编译开销过大的问题;此外,由于微算子形状固定且各不相同,用于作为“形状空间”里的“基”,因此任意一种形状都可以用微算子库里的一个或多个微算子组合,具备解空间的完备性,在动态shape场景中可编程性高,同时微算子库内的微算子数量有限,内存占用小。
基于此,本申请实施例提供以下技术方案:
第一方面,本申请实施例首先提供一种算子的处理方法,可用于人工智能领域中,具体可应用于动态shape场景中,例如,常见的卡尔曼滤波(constant velocity,CV)模型(如检测、分割、语音类模型、自动语音识别(Automatic Speech Recognition,ASR)、自然语言处理(natural language processing,NLP)等模型)在训练、推理中均会涉及动态shape问题,该方法包括:获取待输出的张量的形状(即从输出视角看),该待输出的张量可称为第一张量。在获取到待输出的第一张量的第一形状之后,会进一步确定满足该第一形状的至少一个组合,其中,每个组合包括至少一个目标微算子,且每个目标微算子均来自于同一个微算子库。这里需要注意的是,微算子库内的微算子为事先编译好的微算子,各个微算子互为独立事件。需要注意的是,在一些实施方式中,对于张量的任意形状,都可以使用该微算子库中的一个或多个微算子组合而成,也就是说,该微算子库满足“解空间”的完备性,微算子库里的每个微算子都可看做“形状空间”的“基”。从微算子库中选择目标微算子来组合成该第一形状可能具有一种或多种组合,在组合为n种的情况下,则从n种组合中选择第一组合所包括的微算子(可称为第一微算子)进行执行,其中,第一微算子为所述目标微算子中的一个或多个。
在本申请上述实施方式中,针对任意一个待输出的实时地第一张量的形状,都可以实时地用事先建立的微算子库里的一个或多个微算子组合而成,由于不同的组合会有不同的性能,最后再从中选择(如选择性能最优)一种组合所包括的微算子进行执行,间接提高了系统性能。在本申请实施例中,由于该微算子库里的微算子事先编译好,因此无需编译器的参与,节省了编译开销,避免了即时编译技术在runtime时编译开销过大的问题;此外,由于微算子形状固定且各不相同,用于作为“形状空间”里的“基”,因此任意一种形状都可以用微算子库里的一个或多个微算子组合,具备解空间的完备性,在动态shape场景中可编程性高,同时微算子库内的微算子数量有限,内存占用小。
在第一方面的一种可能的实现方式中,可以从所花费的运行代价的角度从n种组合中选择出最终的第一组合,具体地,首先,可以计算这n种组合中每种组合所包括的微算子总的运行代价(cost),从而得到n个运行代价,之后,再从所述n个运行代价中选择满足预设条件(可称为第一预设条件)的一个运行代价作为最终的运行代价(即第一运行代价),例如,可以选择运行代价值最小的那个组合作为所述的第一组合,最后,将与该第一运行代价对应的第一组合所包括的微算子(即第一微算子)进行执行。
在本申请上述实施方式中,具体阐述了是基于运动代价的角度从n个组合中选择出最终的第一组合,通过对每个组合所包括的微算子的运行代价进行评估,得出运行代价取值小的那个组合,提高了系统的性能。
在第一方面的一种可能的实现方式中,运行代价可以以组合所包括的微算子在执行时所需要的总时长进行表征,具体地,可以是:计算目标组合所包括的m个微算子中每个微算子在执行时需要的时长,得到m个时长,该目标组合中的一个微算子对应一个时长,之后,根据这m个时长得到总时长(即m个时长相加得到总时长),其中,目标组合为上述n种组合中的任意一种,m≥1;最后,将n种组合中的每种组合作为该目标组合计算总时长,得到n个总时长。
在本申请上述实施方式中,每个组合所包括的微算子的运行代价以组合中的所有微算子在执行时所需要的总时长进行表征,具备可实现性。
在第一方面的一种可能的实现方式中,微算子库内的每个微算子形状固定,且不同微算子的形状尺寸各不相同。
在本申请上述实施方式中,阐述了微算子库内的微算子所要满足的前提条件,目的是以尽量少的微算子就能组合出第一张量的任意形状,可节省内存开销。
在第一方面的一种可能的实现方式中,该微算子库从事先构建的多个预备微算子库中选择得到,来自于不同微算子库的微算子的算子类型不同,且来自于同一微算子库内的微算子的算子类型相同。例如,假设该计算机设备上部署有3个微算子库(即预备微算子库),分别为微算子库A、B、C,微算子库A用于进行卷积运算,微算子库B用于进行矩阵乘法运算,微算子库C用于进行向量加法运算,那么微算子库A里的每个微算子都是卷积算子,微算子库B里的每个微算子都是矩阵乘算子,微算子库C里的每个微算子都是向量加算子。又假设,当前正在进行的事务是卷积神经网络的训练过程,那么调用的当前微算子库就是计算机设备上事件构建好的上述3个微算子库中的微算子库A(若该计算机设备上只有1个微算子库,则调用的当前微算子库就只能是这1个微算子库)。
在本申请上述实施方式中,具体阐述了微算子库可以从构建好的预备微算子库中选取,具备广泛适用性和灵活性。
在第一方面的一种可能的实现方式中,微算子库内的微算子虽然形状固定且各不相同,但其自身也有特定的形状,在本申请实施例中,假设微算子库内的微算子均为二阶张量,那么微算子库内的微算子的形状可以都为正方形,也可以都为长方形,还可以即包括正方形也包括长方形,具体本申请对此不做限定,只需满足对于张量的任意形状,都可以使用该微算子库中的一个或多个微算子组合而成即可。
在本申请上述实施方式中,阐述了微算子库里的微算子的形状可以多种多样,具备灵活性。
在第一方面的一种可能的实现方式中,由于微算子库里的每个微算子的形状都是固定的(即静态形状),那么每个微算子都可以不断被优化从而得到最优性能,并将该最优性能的微算子放入该微算子库,即微算子库内的每个微算子是从至少两个预备微算子中挑选得到的,这至少两个预备微算子具有相同形状,且该至少两个预备微算子是事先编译好的。
在本申请上述实施方式中,具体阐述了微算子库里的每个微算子也是不断优化挑选得到的,具备可实现性。
在第一方面的一种可能的实现方式中,选的方式可以是:根据每个预备微算子的属性信息计算每个预备微算子的性能,并将目标预备微算子作为该微算子库内的一个微算子,其中,该目标预备微算子为性能满足预设条件(可称为第二预设条件)的一个预备微算子,例如,从预备微算子中挑选性能最优的那个加入微算子内。
在本申请上述实施方式中,具体阐述了微算子库里的每个微算子挑选的是性能满足要求的微算子,如性能最优的微算子,从而间接提高了系统的整体性能。
在第一方面的一种可能的实现方式中,预备微算子的属性信息包括但不限于:吞吐量、占用带宽等。例如,可以基于吞吐量和占用带宽两个因素从预备微算子中选取性能最优的那个微算子加入微算子库。作为一种示例,可以是先基于吞吐量因素从预备微算子中筛除不满足吞吐量要求的一部分预备微算子,再基于占用带宽因素从剩下的预备微算子中选出最终加入微算子库的微算子;作为另一示例,也可以是赋予吞吐量和占用带宽这两个因素不同的权重,再对每个预备微算子进行加权求和,最后基于加权求和的结果取结果最优的那个预备微算子加入微算子库,具体本申请对如何从预备微算子中选取微算子加入微算子库的具体实施方式不做限定。
在本申请上述实施方式中,具体阐述了微算子的属性信息有哪些,具备普适性。
在第一方面的一种可能的实现方式中,在动态shape场景中,该第一张量的形状是动态变化的,即第一张量为待输出的具有动态形状的张量,只有在run time时刻第一张量的形状的具体取值才会被确定,这个具有具体取值的形状则称为第一张量的第一形状。
在本申请上述实施方式中,具体阐述了第一张量可以是动态shape场景中的待输出的张量,具备广泛适用性。
本申请实施例第二方面提供一种计算机设备,该计算机设备具有实现上述第一方面或第一方面任意一种可能实现方式的方法的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。
本申请实施例第三方面提供一种计算机设备,可以包括存储器、处理器以及总线系统,其中,存储器用于存储程序,处理器用于调用该存储器中存储的程序以执行本申请实施例第一方面或第一方面任意一种可能实现方式的方法。
本申请实施例第四方面提供一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机可以执行上述第一方面或第一方面任意一种可能实现方式的方法。
本申请实施例第五方面提供了一种计算机程序,当其在计算机上运行时,使得计算机执行上述第一方面或第一方面任意一种可能实现方式的方法。
本申请实施例第六方面提供了一种芯片,该芯片(如,CPU)包括至少一个处理器和至少一个接口电路,该接口电路和该处理器耦合,至少一个接口电路用于执行收发功能,并将指令发送给至少一个处理器,至少一个处理器用于运行计算机程序或指令,其具有实现如上述第一方面或第一方面任意一种可能实现方式的方法的功能,该功能可以通过硬件实现,也可以通过软件实现,还可以通过硬件和软件组合实现,该硬件或软件包括一个或多个与上述功能相对应的模块。此外,该接口电路用于与该芯片之外的其它模块进行通信,例如,该接口电路可将芯片上处理器得到的第一组合所包括的第一微算子发送给GPU进行执行。
附图说明
图1为动态shape场景下应用即时编译技术的一个流程示意图;
图2为本申请实施例提供的动态形状的解耦架构的一个示意图;
图3为本申请实施例提供的产品形态的一个示意图;
图4为本申请实施例提供的算子的处理方法的一个流程示意图;
图5为本申请实施例提供的微算子库的一个示意图;
图6为本申请实施例提供的微算子库所包括的微算子具体形状的一个示意图;
图7为本申请实施例提供的对算子进行编译的一个示意图;
图8为本申请实施例提供的对算子进行编译的另一示意图;
图9为本申请实施例提供的实时组合并实时计算运行代价的一个示意图;
图10为本申请实施例提供的算子的处理方法的一个实例示意图;
图11为本申请实施例提供的应用架构的一个示意图;
图12为本申请实施例提供的计算机设备的一种结构示意图;
图13是本申请实施例提供的计算机设备一种结构示意图。
具体实施方式
本申请实施例提供了一种算子的处理方法及计算机设备,针对任意一个待输出的实时地第一张量的形状,都可以实时地用事先建立的微算子库里的一个或多个微算子组合而成,由于不同的组合会有不同的性能,最后再从中选择(如选择性能最优)一种组合所包括的微算子进行执行,间接提高了系统性能。在本申请实施例中,由于该微算子库里的微算子事先编译好,因此无需编译器的参与,节省了编译开销,避免了即时编译技术在runtime时编译开销过大的问题;此外,由于微算子形状固定且各不相同,用于作为“形状空间”里的“基”,因此任意一种形状都可以用微算子库里的一个或多个微算子组合,具备解空间的完备性,在动态shape场景中可编程性高,同时微算子库内的微算子数量有限,内存占用小。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本申请的实施例中对相同属性的对象在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
本申请实施例涉及了许多关于算子、动态shape、即时编译等的相关知识,为了更好地理解本申请实施例的方案,下面先对本申请实施例可能涉及的相关术语和概念进行介绍。应理解的是,相关的概念解释可能会因为本申请实施例的具体情况有所限制,但并不代表本申请仅能局限于该具体情况,在不同实施例的具体情况可能也会存在差异,具体此处不做限定。
(1)算子(operator)
算子是某种数学运算的统称,如卷子算子、矩阵乘法算子等。具体地,算子可以认为是一个函数空间到函数空间上的映射O:X→X。广义上的算子可以推广到任何空间,如内积空间等。
(2)张量(tensor)
在人工智能领域,张量是多维数组,具体地,张量在给定基底下也可以被定义为:满足某种变换规律的一组数。这些数写成一竖行就是一阶张量;写成一个二维数阵就是二阶张量;写成三维立体数阵就是三阶张量等。维数高于三阶的,可称为高阶张量。
(3)张量的形状(shape)
shape的字面含义就是形状;在AI、HPC等应用中,会需要矩阵乘法、卷积、向量操作等计算密集型操作(称为算子),这些算子在数学上都是对多维数组(即张量)的一种函数计算。多维数组的每个维度都有一个具体的数值,比如二维数组的高H和宽W;三维数组的高H、宽W、深D。这些不同维度的数值统称为该多维数组(即tensor)的形状,也就是shape。
而张量的形状就是指定义张量时赋予该张量的形状。例如,5*5的矩阵的形状就是长为5,宽为5;再如定义用于卷积计算的卷积核(filter)的张量为3*3,其形状就是长为3,宽为3。作为一个示例,假设被卷积的图片像素的形状为6*6,深度为3(表示R/G/B三原色);卷积核为一个3*3*3的立方体。于是,卷积核为一个形状为(3,3,3)的张量,可记为Tensor1;被卷积的图片可以表示为一个形状为(6,6,3)的张量,可记为Tensor2,对Tensor1和Tensor2这两个张量进行卷积运算的操作则称为一个算子,记为Convolution。
(4)张量的动态形状
由于每个张量都表达了一种物理含义,例如图片的像素、卷积核等。如果在模型的训练或推理计算过程中,每层待输出的张量的形状是不变化的,那么,在这类计算过程中所采用的算子可以称为固定形状算子,待输出的张量则为固定形状的张量;反之,如果在模型的训练或推理计算过程中,每层待输出的张量的形状是可以变化的,那么,在这类计算过程中所采用的算子可以称为动态形状算子,待输出的张量则为动态形状的张量。
(5)静态编译器(static compiler)
指编译过程在离线(off-line)时间生命周期内完成。编译产生二进制代码,二进制代码在运行时runtime被处理器执行。
(6)JIT编译器(JIT compiler)
指编译过程在运行时run time时间生命周期内完成。编译所产生的二进制代码是在运行时run time时刻临时产生的。
(7)静态形状编译器(static shape compiler)
也可称为固定形状编译器,只支持编译固定形状的算子的静态编译器。
(8)动态形状编译器(dynamic shape compiler)
支持编译任意形状的算子的静态编译器。
(9)神经网络
神经网络可以是由神经单元组成的,具体可以理解为具有输入层、隐含层、输出层的神经网络,一般来说第一层是输入层,最后一层是输出层,中间的层数都是隐含层。其中,具有很多层隐含层的神经网络则称为深度神经网络(deep neural network,DNN)。神经网络中的每一层的工作可以用数学表达式来描述,从物理层面,神经网络中的每一层的工作可以理解为通过五种对输入空间(输入向量的集合)的操作,完成输入空间到输出空间的变换(即矩阵的行空间到列空间),这五种操作包括:1、升维/降维;2、放大/缩小;3、旋转;4、平移;5、“弯曲”。其中1、2、3的操作由/>完成,4的操作由“+b”完成,5的操作则由“a()”来实现。这里之所以用“空间”二字来表述是因为被分类的对象并不是单个事物,而是一类事物,空间是指这类事物所有个体的集合,其中,W是神经网络各层的权重矩阵,该矩阵中的每一个值表示该层的一个神经元的权重值。该矩阵W决定着上文所述的输入空间到输出空间的空间变换,即神经网络每一层的W控制着如何变换空间。训练神经网络的目的,也就是最终得到训练好的神经网络的所有层的权重矩阵。因此,神经网络的训练过程本质上就是学习控制空间变换的方式,更具体的就是学习权重矩阵。
(10)损失函数(loss function)
在训练神经网络的过程中,因为希望神经网络的输出尽可能的接近真正想要预测的值,可以通过比较当前网络的预测值和真正想要的目标值,再根据两者之间的差异情况来更新每一层神经网络的权重矩阵(当然,在第一次更新之前通常会有初始化的过程,即为神经网络中的各层预先配置参数),比如,如果网络的预测值高了,就调整权重矩阵让它预测低一些,不断的调整,直到神经网络能够预测出真正想要的目标值。因此,就需要预先定义“如何比较预测值和目标值之间的差异”,这便是损失函数(loss function)或目标函数(objective function),它们是用于衡量预测值和目标值的差异的重要方程。其中,以损失函数举例,损失函数的输出值(loss)越高表示差异越大,那么神经网络的训练就变成了尽可能缩小这个loss的过程。
在神经网络的训练过程中,可以采用误差反向传播(back propagation,BP)算法修正初始的神经网络模型中参数的大小,使得神经网络模型的重建误差损失越来越小。具体地,前向传递输入信号直至输出会产生误差损失,通过反向传播误差损失信息来更新初始的神经网络模型中的参数,从而使误差损失收敛。反向传播算法是以误差损失为主导的反向传播运动,旨在得到最优的神经网络模型的参数,例如权重矩阵。
下面结合附图,对本申请的实施例进行描述。本领域普通技术人员可知,随着技术的发展和新场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
首先,对本申请实施例提供的系统架构进行介绍,具体请参阅图2,图2为本申请实施例提供的动态形状的解耦架构的一个示意图,其中,图2中的(a)子示意图示意的是自上而下视角的双层解耦架构,上层为动态形状计算接口层,下层为硬件虚拟层,硬件虚拟层支持一组微算子应用程序编程接口(application programming interface,API),从输出视角看,动态形状计算接口层在runtime过程中,待输出的张量形状是动态变化的,可记为shape(X,Y),X和Y实时变化,但在runtime即刻,X和Y的数值可确定。此时,确定了数值的shape(X,Y)可使用微算子库(即所述的一组微算子)中的一个或多个微算子组合而成,微算子库里的每个微算子都可看做“形状空间”的“基”。之后,可以通过代价模型实时计算一组“基”的不同组合的运行代价;硬件虚拟层包括抽象的底层硬件,其中存储有微算子库,如(a)子示意图所示的微算子1*1、2*2、……。图2中的(b)子示意图示意的是自下而上视角的双层解耦架构,硬件虚拟层将实际应用层的实现映射到一组微算子API,实际硬件层则可以包括AI Core、图形处理器(graphics processing unit,GPU)等物理硬件,用于执行代价模型最终选出的一组微算子的二进制代码。
需要说明的是,本申请的实际落地产品形态可以是软件形态,也可以是硬件形态,具体本申请对此不做限定,为便于阐述,下面以产品形态为软件形态为例进行说明,具体请参阅图3,在本申请的一些实施方式中,本申请实施例的软件产品形态可以包括2个部分,分别为微算子库(也可称为算子代码库、二进制代码库等)和实时代价模型,这两部分可以分别部署于计算机设备的CPU(如,AI CPU)上,也就是host端,下面分别进行介绍:
(1)微算子库
在本申请实施例中,微算子库可以是单核微算子库,也可以是多核微算子库,具体本申请对此不做限定。所谓单核微算子库,是指该微算子库里的每个微算子都被实现为单核kernel代码。
微算子库可以支持多种不同类型的算子,如,卷积运算、矩阵乘法、向量加法等类型的算子操作,但需要注意的是,属于同一微算子库里的算子均为同一算子类型。这些算子都是以一组微算子的二进制代码的形式打包在各自所属类型的微算子库中,即对于卷积算子,会有一组固定形状且形状各不相同的卷积微算子的二进制代码实现,如支持计算1*1、2*2、4*4、……、512*512的卷积微算子。但还需要注意的是,这些不同形状的微算子必须具备如下特性:a、可实现二进制代码;b、每个微算子的形状固定且各不相同;c、微算子之间各自独立,且具有各自的属性信息,如带宽、吞吐量等。
(2)实时代价模型
在本申请上述实施方式中,对于待输出张量的任意一种形状,都可以“实时”地使用该微算子库中的一个或多个组合而成,而不同的组合会有不同的计算性能,因此,需要一个“实时”代价模型,根据每个算子的属性计算哪一种组合性能最优,并最终执行性能最优的那个组合所包括的微算子。
实时代价模型可以以一个独立的模块形式嵌入在标准的算子下发执行流程中,如图3所示,标准的算子下发执行流程包括图执行引擎→infershape→分配内存→实时代价模型→下发算子→向GM写入device参数→启动算子执行,该实时代价模型处于图执行引擎后发起算子计算操作和正式下发算子到每个device之间。实时代价模型的输入信息有2个,分别是微算子库和待输出张量的形状信息,其主要功能是实时地使用微算子库中的固定形状的一个或多个微算子,完成对待输出张量的任意形状(即动态形状)的组合,并从中选择一种组合(如,性能最优的组合)所包括的微算子进行执行。
这里需要注意的是,执行过程是由计算机设备的GPU(如,AI Core)启动算子执行,AI Core也称为device端。AI CPU基于实时代价模型选择出最终待执行的组合所包括的微算子后,会将该微算子下发给AI Core,由AI Core进行具体的微算子执行操作。
需要说明的是,在本申请的一些实施方式中,实时代价模型进一步可以分为如下三个模块:
1)组合器:实时地使用微算子库中的固定形状的一个或多个微算子,完成对待输出张量的任意形状(即动态形状)的组合,其中,组合可以有一种或多种;
2)代价模型:以组合器的结果为输入,并根据每个微算子的属性(如,带宽、吞吐量)计算多种不同的组合中,哪一种组合的计算性能是符合预设条件(如,计算性能最优);
3)device参数计算:代价模型输出的组合就是待调度到每个device设备上(如,GPU)实际执行的一个个微算子,因此需要为每个device设备计算相应的参数,以达到计算相应微算子二进制代码的目的。
基于上述所述的系统架构,接下来对本申请实施例提供的算子的处理方法进行详细介绍,具体请参阅图4,图4为本申请实施例提供的算子的处理方法的一个流程示意图,具体可以包括如下步骤:
401、获取第一张量的第一形状。
首先,计算机设备可以通过CPU(即host端))获取待输出的张量的形状(即从输出视角看),该待输出的张量可称为第一张量,在动态shape场景中,该第一张量的形状是动态变化的,即第一张量为待输出的具有动态形状的张量,只有在run time时刻第一张量的形状的具体取值才会被确定,这个具有具体取值的形状则称为第一张量的第一形状。
需要注意的是,在本申请实施例中,该计算机设备可以包括手持终端设备,如,手机、电脑、iPad等,也可以包括智能可穿戴设备,如,智能手环、智能手表、智能心率计等;还可以包括轮式移动设备,如,车辆(如自动驾驶车辆)、飞行器、机器人(如扫地机器人)等,具体本申请对计算机设备的产品形态不做限定,只要能用于实现本申请所述的算子的处理方法的电子设备,都可以称为计算机设备。
402、确定满足第一形状的至少一个组合,每个组合包括至少一个目标微算子,每个目标微算子来自于微算子库,微算子库内的微算子事先编译好且互相独立。
计算机设备在获取到待输出的第一张量的第一形状之后,会进一步确定满足该第一形状的至少一个组合,其中,每个组合包括至少一个目标微算子,且每个目标微算子均来自于同一个微算子库。这里需要注意的是,微算子库内的微算子为事先编译好的微算子,各个微算子互为独立事件。需要注意的是,在本申请的一些实施方式中,对于张量的任意形状,都可以使用该微算子库中的一个或多个微算子组合而成,也就是说,该微算子库满足“解空间”的完备性,微算子库里的每个微算子都可看做“形状空间”的“基”。在本申请实施例中,由于微算子库里的微算子都是事先编译好且选择的都是性能最优的微算子,因此在run time时无需编译器参与,只需从微算子库中选择合适的目标微算子进行组合即可,节省了编译开销。
需要说明的是,在本申请的一些实施实施方式中,该微算子库内的每个微算子形状固定,且不同微算子的形状尺寸各不相同,为便于理解,下面举例进行示意,具体请参阅图5,图5为本申请实施例提供的微算子库的一个示意图,以该微算子库里的微算子均为二阶张量(即矩阵)为例进行说明,该微算子库一共包括n个微算子,分别为E1、E2、……、En,其中,微算子E1的形状为H1*W1,微算子E2的形状为H2*W2,……,微算子En的形状为Hn*Wn。一般来说,H1≠H2≠……≠Hn,和/或,W1≠W2≠……≠Wn,但在特殊情况下,也不排除其中会存在几个H相等或W相等的情况,本申请对此不做限定。只需满足各个微算子形状固定且各不相同即可。
需要注意的是,在本申请的一些实施方式中,微算子库内的微算子虽然形状固定且各不相同,但其自身也有特定的形状,在本申请实施例中,假设微算子库内的微算子均为二阶张量,那么微算子库内的微算子的形状可以都为正方形,也可以都为长方形,还可以即包括正方形也包括长方形,具体本申请对此不做限定,只需满足对于张量的任意形状,都可以使用该微算子库中的一个或多个微算子组合而成即可。如图6所示,图6为本申请实施例提供的微算子库所包括的微算子具体形状的一个示意图,图6中的(a)子示意图表示该微算子库里的每个微算子的形状均为正方形,即H1=W1、H2=W2、……、Hn=Wn;图6中的(b)子示意图表示该微算子库里的每个微算子的形状均为长方形,即H1≠W1、H2≠W2、……、Hn≠Wn,作为一个示例,每个H的取值可以为各自对应W的二分之一、四分之一等,即H1=1/2W1、H2=1/2W2、……、Hn=1/2Wn,或,H1=1/4W1、H2=1/4W2、……、Hn=1/4Wn等,作为另一示例,每个W的取值可以为各自对应H的二分之一、四分之一等,1/2H1=W1、1/2H2=W2、……、1/2Hn=Wn,或,1/4H1=W1、1/4H2=W2、……、1/4Hn=Wn等,具体本申请对微算子库内每个微算子具体是怎样的长方形不做限定。类似地,在本申请实施例中,假设微算子库内的微算子均为三阶张量,那么微算子库内的微算子的形状可以是多面体,例如,可以都为正方体,也可以都为长方体,还可以即包括正方体也包括长方体,具体本申请对此不做限定,只需满足对于张量的任意形状,都可以使用该微算子库中的一个或多个微算子组合而成即可,对于更高阶的张量也是类似的情形,此处不予赘述。
此外,还需要说明的是,在本申请实施例中,该微算子库基于至少一个事先构建的预备微算子库得到,且属于同一微算子库内的微算子的算子类型相同。例如,假设该计算机设备上部署有3个微算子库(即预备微算子库),分别为微算子库A、B、C,微算子库A用于进行卷积运算,微算子库B用于进行矩阵乘法运算,微算子库C用于进行向量加法运算,那么微算子库A里的每个微算子都是卷积算子,微算子库B里的每个微算子都是矩阵乘算子,微算子库C里的每个微算子都是向量加算子。又假设,当前正在进行的事务是卷积神经网络的训练过程,那么调用的当前微算子库就是计算机设备上事件构建好的上述3个微算子库中的微算子库A(若该计算机设备上只有1个微算子库,则调用的当前微算子库就只能是这1个微算子库)。这里需要注意的是,在本申请实施例中,微算子库可以是单核微算子库,也可以是多核微算子库,具体本申请对此不做限定。所谓单核微算子库,是指该微算子库里的每个微算子都被实现为单核kernel代码。
还需要说明的是,在本申请的一些实施方式中,由于微算子库里的每个微算子的形状都是固定的(即静态形状),那么每个微算子都可以不断被优化从而得到最优性能,并将该最优性能的微算子放入该微算子库,即微算子库内的每个微算子是从至少两个预备微算子中挑选得到的,这至少两个预备微算子具有相同形状,且该至少两个预备微算子是事先编译好的。
作为一种示例,挑选的方式可以是:根据每个预备微算子的属性信息计算每个预备微算子的性能,并将目标预备微算子作为该微算子库内的一个微算子,其中,该目标微算子为性能满足预设条件(可称为第二预设条件)的一个预备微算子,例如,从预备微算子中挑选性能最优的那个加入微算子内。
需要注意的是,在本申请的一些实施方式中,预备微算子的属性信息包括但不限于:吞吐量、占用带宽等。例如,可以基于吞吐量和占用带宽两个因素从预备微算子中选取性能最优的那个微算子加入微算子库。作为一种示例,可以是先基于吞吐量因素从预备微算子中筛除不满足吞吐量要求的一部分预备微算子,再基于占用带宽因素从剩下的预备微算子中选出最终加入微算子库的微算子;作为另一示例,也可以是赋予吞吐量和占用带宽这两个因素不同的权重,再对每个预备微算子进行加权求和,最后基于加权求和的结果取结果最优的那个预备微算子加入微算子库,具体本申请对如何从预备微算子中选取微算子加入微算子库的具体实施方式不做限定。
下面对如何从具有相同形状的至少两个事先编译好的预备微算子中挑选得到性能最优的那个微算子进行介绍:
为便于理解,下面以矩阵乘法为例,先对编译算子的核心概念“tiling”进行说明,具体请参阅图7,图7为本申请实施例提供的对算子进行编译的一个示意图,假设待输出的张量为二阶张量,形状为M*N,在图7中,编译器对同一个矩阵乘法串行代码分别进行了两种不同的编译策略,一种是对M轴切分tiling基本块,如图7中的第一行,可称为tiling策略1;另一种是同时对M轴和N轴切分tiling基本块,如图7中的第二行,可称为tiling策略2。从输出视角来看,第一种编译方式得到的tiling块排列方式如图7第一行右侧所示,第二种编译方式得到的tiling块排列方式如图7第二行右侧所示。由于不同的tiling策略编译出来的算子的性能也是不一样的,如图8所示,依然以同一个矩阵乘法串行语义表达为例,假设编译的策略共有N种,分别为policy 1、policy 2、……、policy N,其中,policy 1对应tiling策略1、policy 2对应tiling策略2、……、policy N对应tiling策略N,得到的tiling块排列方式分别如图8所示,即不同的policy,对应不同的tiling策略,从而产生不同版本的编译算子的二进制代码binary code,这N种编译方式得到的N种编译算子(即binary code 1至binary code N)运行在硬件上,哪个policy对应的binary code性能高,就认为其对应的编译算子是最优代码,就可将其作为当前该固定形状最优的微算子加入微算子库。
403、在组合为n种的情况下,从n种组合中选择第一组合所包括的第一微算子进行执行,第一微算子为所述目标微算子中的一个或多个,n≥2。
从微算子库中选择目标微算子来组合成该第一形状可能具有一种或多种组合,下面分别进行介绍:
(1)组合为一种的情况
在组合为一种的情况下,那么就没有比较的条件,直接将该组合所包括的微算子进行执行,具体地,由计算机设备的AI CPU将该组合所包括的微算子传递给AI Core启动微算子执行操作。
(2)组合为n种的情况,n≥2
在组合为n种的情况下,则从n种组合中选择第一组合所包括的微算子(可称为第一微算子)进行执行,其中,第一微算子为所述目标微算子中的一个或多个。
需要说明的是,在本申请的一些实施方式中,可以从所花费的运行代价的角度从n种组合中选择出最终的第一组合,具体地,首先,可以计算这n种组合中每种组合所包括的微算子总的运行代价(cost),从而得到n个运行代价,之后,再从所述n个运行代价中选择满足预设条件(可称为第一预设条件)的一个运行代价作为最终的运行代价(即第一运行代价),例如,可以选择运行代价值最小的那个组合作为所述的第一组合,最后,将与该第一运行代价对应的第一组合所包括的微算子(即第一微算子)进行执行。具体过程可参阅图9,图9为本申请实施例提供的实时组合并实时计算运行代价的一个示意图,假设待输出的第一张量为二阶张量,其形状为一个宽为W、高为H的四边形P,且H和W是动态变化的,在runtime时,针对每个具有具体形状的P,都可以使用微算子库里的微算子进行组合,可存在多种不同的组合构成形状P,最终从中选择其中一种组合所包括的一个或多个微算子下发到M个AICore上执行。该过程一方面可实时地完成对任意形状P的组合求解,另一方面可实时地计算什么样的组合可以使得P在AI Core上获得最佳性能。
为便于理解该过程,下面举例进行示意:假设针对某个特定的第一形状,一共有3种组合,分别为组合1、组合2、组合3,其中,假设组合1所包括的目标微算子有2个微算子A以及1个微算子B,组合2所包括的目标微算子有4个微算子C以及1个微算子D,组合3所包括的目标微算子有1个微算子A以及3个微算子E,通过计算每个组合所包括的微算子的总的运行代价,分别得到与组合1对应的运行代价1、与组合2对应的运行代价2、与组合3对应的运行代价3,假设在这3个运行代价中,运行代价2的取值最低,那么就可以将与之对应的组合2所包括的4个微算子C以及1个微算子D进行执行。
需要注意的是,在本申请的一些实施方式中,运行代价可以以组合所包括的微算子在执行时所需要的总时长进行表征,具体地,可以是:计算目标组合所包括的m个微算子中每个微算子在执行时需要的时长,得到m个时长,该目标组合中的一个微算子对应一个时长,之后,根据这m个时长得到总时长(即m个时长相加得到总时长),其中,目标组合为上述n种组合中的任意一种,m≥1;最后,将n种组合中的每种组合作为该目标组合计算总时长,得到n个总时长。
为便于理解该过程,依然以上面的例子继续示意:假设针对某个特定的第一形状,一共有3种组合,分别为组合1、组合2、组合3,其中,假设组合1所包括的目标微算子有2个微算子A以及1个微算子B,组合2所包括的目标微算子有4个微算子C以及1个微算子D,组合3所包括的目标微算子有1个微算子A以及3个微算子E,由于组合1包括3个目标微算子,可计算该组合1中每个微算子在执行时所需的时长,共得到3个时长,3个时长相加后得到总时长A;类似地,组合2包括5个目标微算子,可计算得到5个时长,5个时长相加后得到总时长B,组合3包括4个目标微算子,可计算得到4个时长,4个时长相加后得到总时长C。最后可以通过比较哪个组合对应的总时长的长短选择出最终的组合。
需要说明的是,在本申请实施例中,在具体的计算过程中,可以基于如下公式(1)来计算每个组合的运行代价Cost:
其中,ei表示微算子库中某个具体的微算子,例如,形状为512*512的微算子;DataVolume(ei)表示微算子ei总共的计算量,比如浮点计算的量(基浮点乘法和浮点加法的计算量总和);Throughout(ei)表示微算子ei的吞吐量,单位为FLOPS,即“每秒浮点运算次数(floating point of per second,FLOPS)”,表示每秒计算的浮点乘或浮点加的量;则表达了一个单核AI Core计算ei所需要的时长,单位为秒;Amount(ei)表示在当前组合中ei的数量;HardwareAICoreNumber表示该计算机设备中AI Core的数量,比如Ascend910有32个AI Core;Π表示向上取整,/>向上取整表示需要“几轮”才能计算完所有的ei,例如,在当前组合中存在的ei有33个,即Amount(ei)=33,向上取整就是2,即需要“2轮”才能计算完所有的ei,/> 就表达了计算完所有的ei需要的时间;最后,对于任意一个待计算的第一形状,由于它可以分解为多个微算子,例如,x个e1、y个e2、z个e3;每个ei(即e1、e2和e3)都可以按照上述公式(1)计算获得各自的时长,最后,再将这3个ei所需要的时间取和,就是最终的该组合所包括的微算子的总时长。
为便于进一步理解上述步骤401至步骤403的过程,下面以一个具体的实例,对本申请实施例提供的算子的处理方法进行说明,该实例的实现过程可参阅图10,图10为本申请实施例提供的算子的处理方法的一个实例示意图,在该实例中,假设待输出的第一张量为二阶张量,其动态形状为M*N,在runtime时刻,假设确定的M和N的值分别为512和768,并假设事先建立好的微算子库中包括的微算子均为正方形(如图10所示),这些微算子是一组事先编译好的性能最优的微算子的二进制代码,在确定第一张量当前的第一形状为512*768后,就可从微算子库中选择目标微算子进行组合,以组合成所述第一形状,这个操作可由组合器完成,假设组合有2种,如图10所示,那么可进一步计算不同组合所包括的微算子的运行代价,并从中选择运行代价取值最低的那个组合所包括的微算子作为待执行的微算子,这个操作可由实时代价模型完成,选择出的目标组合所包括的微算子就由AI Core直接运行。
这里需要注意的是,在图10对应的实施例中,其中一种组合是包括2个256*256的微算子以及1个512*512的微算子,图10是一种排列方式,即2个256*256的微算子排列在右边,512*512的微算子排列在左边。在实际应用中,也可以2个256*256的微算子排列在左边,512*512的微算子排列在右边,本申请对选择出来的目标微算子的具体排布方式不做限定,都认为是一种组合(是否属于同一种组合只关心选择出的目标微算子的数量和形状是否相同),这是因为评估组合所包括的微算子的运行代价与目标微算子在组合中所处的位置无关,因为微算子的算子操作不受实时张量的具体数据的影响,数据是实时写入的。
还需要注意的是,在本申请实施例中,由于微算子库包括的微算子是作为“形状空间”的“基”,因此一般来说,“基”的数量越多,组合就越多,意味着最终就越能挑选到性能更好的微算子组合,但同时一个缺点是,数量多了组合过程以及评估性能的过程就相应会减慢;反之,“基”的数量越小(前提还是要满足能组合出任意形状),组合就越少,相应的缺点就是会损失算子的性能。因此,在实际应用过程中,需折中考虑,一般来说,微算子库里的微算子数量通常少于10个。这也说明本申请实施例事先构建的微算子库只需要保存有限个微算子的二进制代码,在run time时可实时组合出第一张量的任意一个动态形状,从而避免了高内存开销,也克服了动态形状可编程性差的问题。
进一步地,本申请实施例所述的算子的处理方法可以应用于图11所示的架构中,图11为本申请实施例提供的应用架构的一个示意图,该架构包含了算子下发引擎、微算子库、组合器、实时代价模型、微算子调度器、runTime执行器。这些模块的作用分别如下:1)算子下发引擎算子下发引擎为算子计算的发起者,它实时的知道需要计算什么算子以及待输出张量的信息(如第一张量的第一形状);2)微算子库为一组事先编译好的最优微算子的二进制代码;3)组合器使用微算子库的微算子,实时地组合出待输出的第一张量的任意形状;4)实时代价模型实时地根据微算子的性能属性,计算哪一种组合的性能最优;5)微算子调度器将组合出的一组微算子均衡地调度在底层多核上执行;6)run time执行器发起最终的目标组合中的每个微算子的执行。
需要说明的是,本申请实施例所提供的算子的处理方法可应用于各种AI芯片上,例如,针对昇腾这样的AI专用芯片,可以选择待实现的微算子(如矩阵乘法),以输出为视角,分别实现1*1、2*2、4*4、……,一直到N*N的固定形状的单核矩阵算子(其中N*N算子为目标平台上单核(昇腾的AI Core)性能最强的一个微算子,即其单核吞吐量最大)构成微算子库,这些固定的微算子可以事先通过auto TVM等工具自动搜索一个单核性能最强的代码实现,并编译成二进制代码,保存在微算子库中。之后,在深度神经网络(deep neuralnetwork,DNN)的图执行引擎中,分别实现组合器、实时代价模型以及相关的device参数计算模块,其中,组合器考虑各种不同的微算子组合以构成待输出第一张量的形状;而实时代价模型可以按照公式(1)进行实现,用于实时的计算哪一种组合的运行代价最小,这个运行代价最小组合所包括的微算子会通过device参数计算模块计算相关参数信息,并最终由算子调度器分发给每个AI Core执行。
在本申请实施例中,host端(即AI CPU)上不再运行编译器(即不执行具体的编译过程),而是运行组合器和实时代价模型,节省了编译开销;device端(即AI Core)执行的是固定形状的微算子的二进制代码,且每个微算子都是单核性能最强,其性能、吞吐量和带宽使用量都提前知道,提高了系统整体的计算性能。
最后,对申请实施例的应用场景进行说明,本申请实施例提供的算子的处理方法可应用于动态shape场景,例如,常见的卡尔曼滤波(constant velocity,CV)模型(如检测、分割、语音类模型、自动语音识别(Automatic Speech Recognition,ASR)、自然语言处理(atural language processing,NLP)等模型)在训练、推理中均会涉及动态shape问题,典型的如图片检测中图像分辨率的改变和批量数据大小(batch size)改变、ASR语料切片输入长度长短不一、广告推荐业务中常见的稀疏化模型中每个tensor的尺寸也是变化的等。在这些应用场景中,都可以使用本申请实施例提供的算子的处理方法。
在上述对应实施例的基础上,为了更好的实施本申请实施例的上述方案,下面还提供用于实施上述方案的计算机设备。该计算机设备可以包括手持终端设备,如,手机、电脑、iPad等,也可以包括智能可穿戴设备,如,智能手环、智能手表、智能心率计等;还可以包括轮式移动设备,如,车辆(如自动驾驶车辆)、飞行器、机器人(如扫地机器人)等,具体本申请对计算机设备的产品形态不做限定,只要能用于实现本申请所述的算子的处理方法的电子设备,都可以称为计算机设备。具体参阅图12,图12为本申请实施例提供的计算机设备的一种结构示意图,该计算机设备1200包括:获取模块1201、组合模块1202以及选择模块1203,其中,获取模块1201,用于获取第一张量的第一形状;组合模块1202,用于确定满足该第一形状的至少一个组合,其中,每个所述组合包括至少一个目标微算子,每个目标微算子来自于微算子库,该微算子库内的微算子事先编译好且互相独立,任意形状都可使用该微算子库中的一个或多个微算子组合而成;选择模块1203,用于在组合为n种的情况下,从n种组合中选择第一组合所包括的第一微算子进行执行,该第一微算子为该目标微算子中的一个或多个,n≥2。
在一种可能的设计中,选择模块1203,具体用于:计算该n种组合中每种组合所包括的微算子总的运行代价,得到n个运行代价,并从该n个运行代价中选择满足第一预设条件的一个运行代价作为第一运行代价,最后,将与该第一运行代价对应的第一组合所包括的第一微算子进行执行。
在一种可能的设计中,在运行代价以总时长进行表征的情况下,选择模块1203,具体还用于:计算目标组合所包括的m个微算子中每个微算子在执行时需要的时长,得到m个时长,并根据该m个时长得到总时长,该目标组合为该n种组合中的任意一种,m≥1,并将该n种组合中的每种组合作为该目标组合计算总时长,得到n个总时长。
在一种可能的设计中,该微算子库内的每个微算子形状固定,且不同微算子的形状尺寸各不相同。
在一种可能的设计中,微算子库从事先构建的多个预备微算子库中选择得到,来自于不同微算子库的微算子的算子类型不同,且来自于同一微算子库内的微算子的算子类型相同。
在一种可能的设计中,该微算子库内的微算子的形状至少包括如下任意一种:正方形、长方形。
在一种可能的设计中,该微算子库内的每个微算子从至少两个预备微算子中挑选得到,该至少两个预备算子具有相同形状,且该至少两个预备微算子事先编译好。
在一种可能的设计中,挑选方式包括但不限于:根据每个预备微算子的属性信息计算每个预备微算子的性能,并将目标预备微算子作为所述微算子库内的一个微算子,其中,目标预备微算子为性能满足第二预设条件的一个预备微算子。
在一种可能的设计中,该属性信息至少包括如下任意一项:吞吐量、占用带宽。
在一种可能的设计中,该第一张量为待输出的具有动态形状的张量。
需要说明的是,图12提供的计算机设备1200中各模块/单元之间的信息交互、执行过程等内容,与本申请中图4对应的方法实施例基于同一构思,具体内容可参见本申请前述所示的方法实施例中的叙述,此处不再赘述。
本申请实施例还提供了一种计算机设备,请参阅图13,图13是本申请实施例提供的计算机设备一种结构示意图,为便于说明,仅示出了与本申请实施例相关的部分,具体技术细节未揭示的,请参照本申请实施例方法部分。该计算机设备1300上可以部署有图12对应实施例中所描述的模块,用于实现图12对应实施例中计算机设备1200的功能,具体的,计算机设备1300由一个或多个服务器实现,计算机设备1300可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processing units,CPU)1322和存储器1332,一个或一个以上存储应用程序1342或数据1344的存储介质1330(例如一个或一个以上海量存储设备)。其中,存储器1332和存储介质1330可以是短暂存储或持久存储。存储在存储介质1330的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对计算机设备1300中的一系列指令操作。更进一步地,中央处理器1322可以设置为与存储介质1330通信,在计算机设备1300上执行存储介质1330中的一系列指令操作。
计算机设备1300还可以包括一个或一个以上电源1326,一个或一个以上有线或无线网络接口1350,一个或一个以上输入输出接口1358,和/或,一个或一个以上操作系统1341,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
本申请实施例中,中央处理器1322,用于执行图4对应实施例中的算子的处理方法。例如,中央处理器1322可以用于:获取待输出的张量的形状(即从输出视角看),该待输出的张量可称为第一张量。只有在run time时刻第一张量的形状的具体取值才会被确定,这个具有具体取值的形状则称为第一张量的第一形状。在获取到待输出的第一张量的第一形状之后,会进一步确定满足该第一形状的至少一个组合,其中,每个组合包括至少一个目标微算子,且每个目标微算子均来自于同一个微算子库。这里需要注意的是,微算子库内的微算子为事先编译好的微算子,各个微算子互为独立事件,并且,对于张量的任意形状,都可以使用该微算子库中的一个或多个微算子组合而成,也就是说,该微算子库满足“解空间”的完备性,微算子库里的每个微算子都可看做“形状空间”的“基”。在本申请实施例中,由于微算子库里的微算子都是事先编译好且选择的都是性能最优的微算子,因此在runtime时无需编译器参与,只需从微算子库中选择合适的目标微算子进行组合即可,节省了编译开销。从微算子库中选择目标微算子来组合成该第一形状可能具有一种或多种组合,在组合为n种的情况下,则从n种组合中选择第一组合所包括的微算子(可称为第一微算子)进行执行,其中,第一微算子为所述目标微算子中的一个或多个。
需要说明的是,中央处理器1322还可以用于执行与本申请中图4对应的方法实施例中任意一个步骤,具体内容可参见本申请前述所示的方法实施例中的叙述,此处不再赘述。
本申请实施例中还提供一种计算机可读存储介质,该计算机可读存储介质中存储有用于进行信号处理的程序,当其在计算机上运行时,使得计算机执行如前述所示实施例描述中计算机设备所执行的步骤。
另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本申请提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本申请而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、U盘、移动硬盘、只读存储器(read only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,训练设备,或者网络设备等)执行本申请各个实施例所述的方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、训练设备或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、训练设备或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的训练设备、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,高密度数字视频光盘(digital video disc,DVD))、或者半导体介质(例如,固态硬盘(solid statedisk,SSD))等。

Claims (24)

1.一种算子的处理方法,其特征在于,包括:
获取第一张量的第一形状;
确定满足所述第一形状的至少一个组合,每个所述组合包括至少一个目标微算子,每个所述目标微算子来自于微算子库,所述微算子库内的微算子事先编译好且互相独立;
在组合为n种的情况下,从n种组合中选择第一组合所包括的第一微算子进行执行,所述第一微算子为所述目标微算子中的一个或多个,n≥2。
2.根据权利要求1所述的方法,其特征在于,所述从n种组合中选择第一组合所包括的第一微算子进行执行包括:
计算所述n种组合中每种组合所包括的微算子总的运行代价,得到n个运行代价;
从所述n个运行代价中选择满足第一预设条件的一个运行代价作为第一运行代价;
将与所述第一运行代价对应的第一组合所包括的第一微算子进行执行。
3.根据权利要求2所述的方法,其特征在于,所述n个运行代价为n个总时长,所述计算所述n种组合中每组组合所包括的微算子总的运行代价,得到n个运行代价包括:
计算目标组合所包括的m个微算子中每个微算子在执行时需要的时长,得到m个时长,并根据所述m个时长得到总时长,所述目标组合为所述n种组合中的任意一种,m≥1;
将所述n种组合中的每种组合作为所述目标组合计算总时长,得到所述n个总时长。
4.根据权利要求1-3中任一项所述的方法,其特征在于,所述微算子库内的每个微算子形状固定,且不同微算子的形状尺寸各不相同。
5.根据权利要求1-4中任一项所述的方法,其特征在于,所述微算子库从事先构建的多个预备微算子库中选择得到,来自于不同微算子库的微算子的算子类型不同,且来自于同一微算子库的微算子的算子类型相同。
6.根据权利要求1-5中任一项所述的方法,其特征在于,所述微算子库内的微算子的形状至少包括如下任意一种:
正方形、长方形。
7.根据权利要求1-6中任一项所述的方法,其特征在于,所述微算子库内的每个微算子从至少两个预备微算子中挑选得到,所述至少两个预备算子具有相同形状,且所述至少两个预备微算子事先编译好。
8.根据权利要求7所述的方法,其特征在于,挑选方式包括:
根据每个预备微算子的属性信息计算所述每个预备微算子的性能,并将目标预备微算子作为所述微算子库内的一个微算子,所述目标预备微算子为性能满足第二预设条件的一个预备微算子。
9.根据权利要求8所述的方法,其特征在于,所述属性信息至少包括如下任意一项:
吞吐量、占用带宽。
10.根据权利要求1-9中任一项所述的方法,其特征在于,所述第一张量为待输出的具有动态形状的张量。
11.一种计算机设备,其特征在于,包括:
获取模块,用于获取第一张量的第一形状;
组合模块,用于确定满足所述第一形状的至少一个组合,每个所述组合包括至少一个目标微算子,每个所述目标微算子来自于微算子库,所述微算子库内的微算子事先编译好且互相独立;
选择模块,用于在组合为n种的情况下,从n种组合中选择第一组合所包括的第一微算子进行执行,所述第一微算子为所述目标微算子中的一个或多个,n≥2。
12.根据权利要求11所述的设备,其特征在于,所述选择模块,具体用于:
计算所述n种组合中每种组合所包括的微算子总的运行代价,得到n个运行代价;
从所述n个运行代价中选择满足第一预设条件的一个运行代价作为第一运行代价;
将与所述第一运行代价对应的第一组合所包括的第一微算子进行执行。
13.根据权利要求12所述的设备,其特征在于,所述n个运行代价为n个总时长,所述选择模块,具体还用于:
计算目标组合所包括的m个微算子中每个微算子在执行时需要的时长,得到m个时长,并根据所述m个时长得到总时长,所述目标组合为所述n种组合中的任意一种,m≥1;
将所述n种组合中的每种组合作为所述目标组合计算总时长,得到所述n个总时长。
14.根据权利要求11-13中任一项所述的设备,其特征在于,所述微算子库内的每个微算子形状固定,且不同微算子的形状尺寸各不相同。
15.根据权利要求11-14中任一项所述的设备,其特征在于,所述微算子库从事先构建的多个预备微算子库中选择得到,来自于不同微算子库的微算子的算子类型不同,且来自于同一所述微算子库内的微算子的算子类型相同。
16.根据权利要求11-15中任一项所述的设备,其特征在于,所述微算子库内的微算子的形状至少包括如下任意一种:
正方形、长方形。
17.根据权利要求11-16中任一项所述的设备,其特征在于,
所述微算子库内的每个微算子从至少两个预备微算子中挑选得到,所述至少两个预备算子具有相同形状,且所述至少两个预备微算子事先编译好。
18.根据权利要求17所述的设备,其特征在于,挑选方式包括:
根据每个预备微算子的属性信息计算所述每个预备微算子的性能,并将目标预备微算子作为所述微算子库内的一个微算子,所述目标预备微算子为性能满足第二预设条件的一个预备微算子。
19.根据权利要求18所述的设备,其特征在于,所述属性信息至少包括如下任意一项:
吞吐量、占用带宽。
20.根据权利要求11-19中任一项所述的设备,其特征在于,所述第一张量为待输出的具有动态形状的张量。
21.一种计算机设备,包括处理器和存储器,所述处理器与所述存储器耦合,其特征在于,
所述存储器,用于存储程序;
所述处理器,用于执行所述存储器中的程序,使得所述计算机设备执行如权利要求1-10中任一项所述的方法。
22.一种计算机可读存储介质,包括程序,当其在计算机上运行时,使得计算机执行如权利要求1-10中任一项所述的方法。
23.一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行如权利要求1-10中任一项所述的方法。
24.一种芯片,所述芯片包括处理器与数据接口,所述处理器通过所述数据接口读取存储器上存储的指令,执行如权利要求1-10中任一项所述的方法。
CN202210049301.8A 2022-01-17 2022-01-17 一种算子的处理方法及计算机设备 Pending CN116501325A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202210049301.8A CN116501325A (zh) 2022-01-17 2022-01-17 一种算子的处理方法及计算机设备
PCT/CN2022/143087 WO2023134453A1 (zh) 2022-01-17 2022-12-29 一种算子的处理方法及计算机设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210049301.8A CN116501325A (zh) 2022-01-17 2022-01-17 一种算子的处理方法及计算机设备

Publications (1)

Publication Number Publication Date
CN116501325A true CN116501325A (zh) 2023-07-28

Family

ID=87280124

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210049301.8A Pending CN116501325A (zh) 2022-01-17 2022-01-17 一种算子的处理方法及计算机设备

Country Status (2)

Country Link
CN (1) CN116501325A (zh)
WO (1) WO2023134453A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117171577A (zh) * 2023-11-02 2023-12-05 之江实验室 一种高性能算子选择的动态决策方法及装置

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116954721B (zh) * 2023-09-20 2023-12-15 天津南大通用数据技术股份有限公司 一种执行器多模态算子异步非阻塞分裂方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109726822B (zh) * 2018-12-14 2020-10-09 中科寒武纪科技股份有限公司 运算方法、装置及相关产品
CN112308198A (zh) * 2019-07-26 2021-02-02 中科寒武纪科技股份有限公司 循环神经网络的计算方法及相关产品
CN115456161A (zh) * 2020-03-27 2022-12-09 华为技术有限公司 一种数据处理方法和数据处理系统
CN112947935A (zh) * 2021-02-26 2021-06-11 上海商汤智能科技有限公司 运算方法及装置、电子设备和存储介质
CN113885871A (zh) * 2021-09-13 2022-01-04 清华大学 支持机器学习训练的专用后端代码生成方法及装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117171577A (zh) * 2023-11-02 2023-12-05 之江实验室 一种高性能算子选择的动态决策方法及装置
CN117171577B (zh) * 2023-11-02 2024-03-22 之江实验室 一种高性能算子选择的动态决策方法及装置

Also Published As

Publication number Publication date
WO2023134453A1 (zh) 2023-07-20

Similar Documents

Publication Publication Date Title
US11494608B2 (en) Methods and apparatus to tile walk a tensor for convolution operations
TWI748151B (zh) 神經網絡計算加速器及其執行的方法
KR102261768B1 (ko) 대안적인 루프 제한
CN110689115B (zh) 神经网络模型处理方法、装置、计算机设备及存储介质
US11816559B2 (en) Dilated convolution using systolic array
WO2023134453A1 (zh) 一种算子的处理方法及计算机设备
JP7450815B2 (ja) 階層的重み疎畳み込み処理のための方法とシステム
CN112084038B (zh) 神经网络的内存分配方法及装置
US10268951B2 (en) Real-time resource usage reduction in artificial neural networks
CN110826708B (zh) 一种用多核处理器实现神经网络模型拆分方法及相关产品
JP6961640B2 (ja) データ処理のシステムおよび方法
JP2023109847A (ja) 機械学習のための画像変換
KR102432254B1 (ko) 전자 장치가 뉴럴 네트워크 내의 소정 레이어에서 컨볼루션 연산을 수행하는 방법 및 그 방법을 수행하는 전자 장치
US10120717B2 (en) Method for optimizing the size of a data subset of a processing space for improved execution performance
CN115186821A (zh) 面向芯粒的神经网络推理开销估计方法及装置、电子设备
JP7246447B2 (ja) モデルトレーニング方法、装置、電子デバイス、記憶媒体、開発システムおよびプログラム
CN109685068A (zh) 一种基于生成对抗神经网络的图像处理方法以及系统
US20230196113A1 (en) Neural network training under memory restraint
CN111523642B (zh) 用于卷积运算的数据重用方法、运算方法及装置、芯片
CN113868187A (zh) 处理神经网络的方法和电子装置
JP2024502225A (ja) ワークロードが平準化された活性化スパース性を用いた畳込みのための方法およびシステム
JP7251416B2 (ja) 情報処理プログラムおよび情報処理方法
US20240144051A1 (en) Hardware-aware generation of machine learning models
KR20200023155A (ko) 뉴럴 네트워크의 학습을 가속하는 방법 및 뉴럴 네트워크 시스템
US11775268B1 (en) Color selection schemes for storage allocation

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination