CN114218929A - 一种基于元算子融合的多平台算子智能化开发系统及方法 - Google Patents
一种基于元算子融合的多平台算子智能化开发系统及方法 Download PDFInfo
- Publication number
- CN114218929A CN114218929A CN202210159700.XA CN202210159700A CN114218929A CN 114218929 A CN114218929 A CN 114218929A CN 202210159700 A CN202210159700 A CN 202210159700A CN 114218929 A CN114218929 A CN 114218929A
- Authority
- CN
- China
- Prior art keywords
- operator
- meta
- fusion
- library
- fusion rule
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/253—Grammatical analysis; Style critique
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/25—Fusion techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/279—Recognition of textual entities
- G06F40/284—Lexical analysis, e.g. tokenisation or collocates
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Health & Medical Sciences (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Evolutionary Computation (AREA)
- Evolutionary Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Bioinformatics & Computational Biology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Stored Programmes (AREA)
Abstract
一种基于元算子融合的多平台算子智能化开发系统及方法,包括:初始化器、元算子库预处理器、算子模板生成器、融合规则迭代器、算子融合器、调度策略优化器;初始化器:用于获取系统中内置的融合规则库和对应的元算子接口声明,然后将元算子接口声明转发到元算子库预处理器,将融合规则库转发到融合规则迭代器;由于算子融合器能够根据融合规则和对应的目标平台元算子,来生成目标平台的算子代码,和融合规则平台无关且易于描述,元算子的逻辑比较简单而且可以复用于多个算子。因此,本发明降低了算子开发的工程量和开发难度,且用户需要开发的算子越多,需要适配的平台越多,本发明的效果越明显。
Description
技术领域
本发明涉及人工智能技术领域,特别涉及一种基于元算子融合的多平台算子智能化开发系统及方法。
背景技术
近年来,深度学习算法经过相关研究人员的不断发展和改进,而且也受益于数据量和硬件计算能力的增长,在多个任务上取得了突破性的进展,目前被普遍应用于现实生活中,应用场景主要包括图像识别、语音识别、机器翻译、自动驾驶等。
深度学习框架可以认为是开发和运行深度学习算法的基础设施,它通过提供一系列的深度学习相关组件,包括自动求导、计算图优化、分布式训练等功能,能够减少算法开发者的重复工作,降低深度学习算法的开发难度。
每个具体的深度学习算法由多个计算单元组成,这些计算单元被称为算子(operator)。因此除基础功能之外,深度学习框架还需要提供算子库。
算子库目前是工程开发人员在深度学习框架中投入精力最多的模块之一,其主要原因如下:
第一,由于必须涵盖数量庞大的深度学习算法所需要的所有算子,因此算子库中的算子数量很大。据统计,在2020年,TensorFlow 框架中的算子数量就已达到 2000以上,PyTorch 框架中的算子数量也在 700以上。而且由于深度学习算法日新月异,新的算子需求还在不断增加,现有深度学习框架中的算子数量仍在持续迅速增长。显然,开发和维护如此庞大的算子库,需要消耗大量的工程开发人员的精力。
第二,深度学习框架通常需要支持用户不同的硬件设备需求,这些需求的来源可能是加速深度学习模型的训练和推理、或者降低硬件成本等。对于工程开发人员,在一个新的硬件平台上开发算子,需要额外付出学习成本,尤其是对算子的运算效率要求较高的情况,更是要求算子开发者必须深刻掌握平台的硬件特性,并深刻理解算子本身的运算逻辑。这不仅增大了工程开发人员的工作量,也在很大程度上提高了开发难度。而且即使只需要移植一个其他平台上已经实现的算子,也必须重新开发其运算过程。因此,对不同的硬件设备的支持需求进一步增大了深度学习框架的开发成本。
因此,在深度学习框架中如何自动化地开发算子,尤其是如何自动化地开发面向多个硬件平台的算子,是降低算子开发难度、提高算子开发效率的关键问题。
发明内容
本发明的目的在于提供一种基于元算子融合的多平台算子智能化开发系统及方法,以克服现有技术中的不足。
为实现上述目的,本发明提供如下技术方案:
本发明公开了一种基于元算子融合的多平台算子智能化开发系统,包括:初始化器、元算子库预处理器、算子模板生成器、融合规则迭代器、算子融合器、调度策略优化器;
初始化器:用于获取系统中内置的融合规则库和对应的元算子接口声明,然后将元算子接口声明转发到元算子库预处理器,将融合规则库转发到融合规则迭代器,其中,所述融合规则库记录待开发的算子的融合规则,所述元算子接口声明与所述融合规则库的需求相对应;
元算子库预处理器:用于解析用户输入的目标平台元算子库,确保其符合融合规则库的需求,并获取目标平台的语法规则,其中,当所述元算子接口声明中的内容中存在所述目标平台的元算子库的内容时,所述目标平台的元算子库符合融合规则库的需求;
算子模板生成器:用于按照目标平台的语法规则生成目标平台的算子模板;
融合规则迭代器:用于迭代融合规则库中的所有融合规则;
算子融合器:用于解析当前迭代的融合规则,生成此融合规则对应的算子的目标代码;
调度策略优化器:用于优化算子目标代码的执行效率,然后将优化后的目标代码加入目标平台算子库。
作为优选的,所述目标平台的元算子库的内容包括所述目标平台的语法规则和所述目标平台的元算子库包含的所有元算子的函数签名;所述元算子库预处理器包括元算子库解析器和元算子接口匹配器,所述元算子库解析器用于获取用户输入的目标平台的元算子库,对所述目标平台的元算子库进行词法分析和语法分析,以获取所述目标平台的语法规则和所述目标平台的所有元算子的函数签名;所述元算子接口匹配器用于将所述目标平台的元算子库中每个元算子的函数签名与元算子接口声明中的内容进行匹配,判断是否符合融合规则库的需求。
作为优选的,所述融合规则库中包含一个或多个待开发的算子的融合规则,每一个算子对应一条融合规则,且融合规则库支持扩展,所述融合规则库中的待开发的算子可由用户自定义。
作为优选的,所述元算子接口声明描述所有需要的元算子的函数签名,包括每个元算子的名称、输入参数的个数和类型、返回值的个数和类型。
作为优选的,所述算子融合器包括融合规则解析器和元算子添加器,所述融合规则解析器用于对当前算子的融合规则进行词法分析和语法分析,得出需要的元算子及其输入参数,然后从用户提供的目标平台元算子库中获取待融合的元算子;所述元算子添加器用于将待融合的元算子的代码加入算子模板。
作为优选的,所述调度策略优化器的优化方式为根据输入的目标平台的硬件参数,对算子的目标代码进行循环嵌套优化。
作为优选的,所述目标平台的硬件参数包括芯片的内存大小、计算单元个数;所述循环嵌套优化方式包括分割、合并、重排序、平铺、展开。
本发明还公开了一种基于元算子融合的多平台算子智能化开发方法,包括如下步骤:
步骤S1:利用初始化器,获取系统中内置的融合规则库和对应的元算子接口声明,然后将元算子接口声明转发到元算子库预处理器,将融合规则库转发到融合规则迭代器,其中,所述融合规则库记录待开发的算子的融合规则,所述元算子接口声明与所述融合规则库的需求相对应;
步骤S2:利用元算子库预处理器,解析用户输入的目标平台元算子库,确保其符合融合规则库的需求,并获取目标平台的语法规则,其中,当所述元算子接口声明中的内容中存在所述目标平台的元算子库的内容时,所述目标平台的元算子库符合融合规则库的需求;
步骤S3:利用算子模板生成器,按照目标平台的语法规则生成目标平台的算子模板;
步骤S4:利用融合规则迭代器,迭代融合规则库中的所有融合规则,迭代方式为一条条读取融合规则库内的全部内容;
步骤S5:利用算子融合器,解析当前迭代的融合规则,生成此融合规则对应的算子的目标代码;
步骤S6:利用调度策略优化器,优化算子目标代码的执行效率,然后将优化后的目标代码加入目标平台算子库;
步骤S7:重复上述步骤S4、S5和S6,直到所有融合规则的迭代过程完成,则目标平台的算子库开发完毕。
作为优选的,所述步骤S1中所述融合规则库中包含一个或多个待开发的算子的融合规则,每一个算子对应一条融合规则,且融合规则库支持扩展,所述融合规则库中的待开发的算子可由用户自定义。
作为优选的,所述元算子接口声明对应于融合规则库的需求,所述声明描述了所有需要的元算子的函数签名,包括每个元算子的名称、输入参数的个数和类型、返回值的个数和类型。
作为优选的,所述步骤S2又分为以下子步骤:
S21:利用元算子库解析器,获取用户输入的目标平台的元算子库,对所述目标平台的元算子库进行词法分析和语法分析,以获取所述目标平台的语法规则和所述目标平台的所有元算子的函数签名;
S22:利用元算子接口匹配器,将所述目标平台的元算子库中每个元算子的函数签名与元算子接口声明中的内容进行匹配,判断是否符合融合规则库的需求,若不符合需求则算子开发过程失败,系统退出执行;若符合需求,执行步骤S3。
作为优选的,所述步骤S5又分为以下子步骤:
S51:利用融合规则解析器,对当前算子的融合规则进行词法分析和语法分析,得出需要的元算子及其输入参数,然后从用户提供的目标平台元算子库中获取待融合的元算子;
S52:利用元算子添加器,将待融合的元算子的代码加入算子模板;
S53:重复子步骤S52,直到所有需要的元算子添加完成,则算子模板中已包含算子完整的目标代码,即步骤S5完成。
本发明的有益效果:
由于算子融合器能够根据融合规则和对应的目标平台元算子,来生成目标平台的算子代码,和融合规则平台无关且易于描述,元算子的逻辑比较简单而且可以复用于多个算子。因此,本发明降低了算子开发的工程量和开发难度,且用户需要开发的算子越多,需要适配的平台越多,本发明的效果越明显。之后,调度策略优化器能够根据硬件参数自动进行循环嵌套优化,而无需手动处理,也降低了算子开发的工程量和开发难度。
附图说明
图1是本发明实施例的一种基于元算子融合的多平台算子智能化开发系统的结构图;
图2是本发明实施例的一种基于元算子融合的多平台算子智能化开发方法的整体流程图;
图3是本发明实施例的一种基于元算子融合的多平台算子智能化开发方法元算子库预处理流程图。
图4是本发明实施例的一种基于元算子融合的多平台算子智能化开发方法算子融合流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明了,下面通过附图及实施例,对本发明进行进一步详细说明。但是应该理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限制本发明的范围。此外,在以下说明中,省略了部分公知结构和技术的描述,以避免不必要地混淆本发明的概念。
如图1所示,本发明例提供了一种基于元算子融合的多平台算子智能化开发系统,该系统包括如下模块:
初始化器S101,用于获取系统中内置的融合规则库和对应的元算子接口声明,然后将元算子接口声明转发到元算子库预处理器S201,将融合规则库转发到融合规则迭代器S401。其中,所述融合规则库记录待开发的算子的融合规则,所述元算子接口声明与所述融合规则库的需求相对应,所述融合规则库中包含一个或多个待开发的算子的融合规则,每一个算子对应一条融合规则,且融合规则库支持扩展,所述融合规则库中的待开发的算子可由用户自定义。所述元算子接口声明描述了所有需要的元算子的函数签名,包括每个元算子的名称、输入参数的个数和类型、返回值的个数和类型。所述元算子接口声明需要满足所述融合规则库的需求,即声明中包含所有融合规则库中需要调用的元算子,且每个元算子的函数签名与融合规则库中的调用必须一致。
元算子库预处理器S201,用于解析用户输入的目标平台元算子库,确保其符合融合规则库的需求,并获取目标平台的语法规则。其中,当所述元算子接口声明中的内容中存在所述目标平台的元算子库的内容时,所述目标平台的元算子库符合融合规则库的需求。所述目标平台的元算子库的内容包括所述目标平台的语法规则和所述目标平台的元算子库包含的所有元算子的函数签名,所述元算子库预处理器S201包括元算子库解析器S202和元算子接口匹配器S203,所述元算子库解析器S202用于获取用户输入的目标平台元算子库,对其进行词法分析和语法分析,从而获取目标平台的语法规则和所有元算子的函数签名。所述元算子接口匹配器S203用于将元算子库中每个元算子的函数签名与元算子接口声明中的内容进行匹配,从而判断是否符合融合规则库的需求,若不符合需求则算子开发过程失败,系统退出执行。所述用户输入的目标平台元算子库中的内容对应于融合规则库的需求,除元算子接口声明之外,系统还会预先提供元算子接口文档,对元算子库进行说明,并根据融合规则库的需求对用户所有应该提供的元算子的功能进行详细描述。所述目标平台可以是中央处理器CPU(Central Processing Unit)平台、Nvidia的图形处理器 GPU(Graphics Processing Unit)、Google的张量处理单元TPU(Tensor Processing Unit)平台和Qualcomm 的骁龙Hexagon平台,以及其他类似的处理器平台。
算子模板生成器S301,用于按照目标平台的语法规则生成目标平台的算子模板;
融合规则迭代器S401,用于迭代融合规则库中的所有融合规则,迭代方式为一条条读取融合规则库内的全部内容;
算子融合器S501,用于解析当前迭代的融合规则,生成此融合规则对应的算子的目标代码。所述算子融合器S501包括融合规则解析器S502和元算子添加器S503,所述融合规则解析器S502用于对当前融合规则进行词法分析和语法分析,得出需要的元算子及其输入参数,然后从用户提供的目标平台元算子库中获取待融合的元算子。所述元算子添加器S503用于将待融合的元算子的代码加入算子模板。
调度策略优化器S601,用于优化算子目标代码的执行效率,然后将优化后的目标代码加入目标平台算子库。所述优化方式为根据输入的目标平台的硬件参数,对算子的目标代码进行循环嵌套优化。所述目标平台的硬件参数包括芯片的内存大小、计算单元个数。所述循环嵌套优化方式包括分割、合并、重排序、平铺、展开。
如图2所示,本发明提供了一种基于元算子融合的多平台算子智能化开发方法,包括以下步骤:
步骤S1:利用初始化器S101,获取本发明中内置的融合规则库和对应的元算子接口声明,然后将元算子接口声明转发到元算子库预处理器S201,将融合规则库转发到融合规则迭代器S401。其中,所述融合规则库记录待开发的算子的融合规则,所述元算子接口声明与所述融合规则库的需求相对应。所述融合规则库中包含一个或多个待开发的算子的融合规则,每一个算子对应一条融合规则,且融合规则库支持扩展,所述融合规则库中的待开发的算子可由用户自定义。所述元算子接口声明描述了所有需要的元算子的函数签名,包括每个元算子的名称、输入参数的个数和类型、返回值的个数和类型。
步骤S2:利用元算子库预处理器S201,解析用户输入的目标平台元算子库,确保其符合融合规则库的需求,并获取目标平台的语法规则。其中,当所述元算子接口声明中的内容中存在所述目标平台的元算子库的内容时,所述目标平台的元算子库符合融合规则库的需求。所述用户输入的目标平台元算子库中的内容对应于融合规则库的需求,除元算子接口声明之外,系统还会预先提供元算子接口文档,对元算子库进行说明,并根据融合规则库的需求对用户所有应该提供的元算子的功能进行详细描述。
步骤S3:利用算子模板生成器S301,按照目标平台的语法规则生成目标平台的算子模板;
步骤S4:利用融合规则迭代器S401,迭代融合规则库中的所有融合规则,迭代方式为一条条读取融合规则库内的全部内容;
步骤S5:利用算子融合器S501,解析当前迭代的融合规则,生成此融合规则对应的算子的目标代码;
步骤S6:利用调度策略优化器S601,优化算子目标代码的执行效率,然后将优化后的目标代码加入目标平台算子库。所述优化方式为根据输入的目标平台的硬件参数,对算子的目标代码进行循环嵌套优化。所述目标平台的硬件参数包括芯片的内存大小、计算单元个数。所述循环嵌套优化方式包括分割、合并、重排序、平铺、展开;
步骤S7:重复上述步骤S4、S5和S6,直到所有融合规则的迭代过程完成,则目标平台的算子库开发完毕。
如图3所示,其中步骤S2又分为以下子步骤:
S21:利用元算子库解析器S202,获取用户输入的目标平台的元算子库,对所述目标平台的元算子库进行词法分析和语法分析,以获取所述目标平台的语法规则和所述目标平台的所有元算子的函数签名;
S22:利用元算子接口匹配器S203,将所述目标平台的元算子库中每个元算子的函数签名与元算子接口声明中的内容进行匹配,从而判断是否符合融合规则库的需求,若不符合需求则算子开发过程失败,系统退出执行。
如图4所示,其中步骤S5又分为以下子步骤:
S51:利用融合规则解析器S502,对当前算子的融合规则进行词法分析和语法分析,得出需要的元算子及其输入参数,然后从用户提供的目标平台的元算子库中获取待融合的元算子;
S52:利用元算子添加器S503,将待融合的元算子的代码加入算子模板;
S53:重复子步骤S52,直到所有需要的元算子添加完成,则算子模板中已包含算子完整的目标代码,即步骤S5完成。
下面以一个完整示例具体说明此方法的过程:
1、利用初始化器S101先获取输入,分别为系统内置的融合规则库和对应的元算子接口声明,具体如下:
(一)系统内置的融合规则库,假设此示例中包含13条融合规则,分别对应以下算子:
(1)矩阵(二维张量)相乘matmul_2d算子
(2)一维卷积conv_1d算子
(3)二维卷积conv_2d算子
(4)三维卷积conv_3d算子
(5)一维批归一化batch_norm_1d算子
(6)二维批归一化batch_norm_2d算子
(7)三维批归一化batch_norm_3d算子
(8)一维最大池化max_pooling_1d算子
(9)二维最大池化max_pooling_2d算子
(10)三维最大池化max_pooling_3d算子
(11)一维平均池化avg_pooling_1d算子
(12)二维平均池化avg_pooling_2d算子
(13)三维平均池化avg_pooling_3d算子
此处以矩阵相乘matmul_2d算子和二维批归一化batch_norm_2d算子为例,描述其功能和对应的融合规则。
(1)矩阵相乘matmul_2d算子
实现的运算为标准矩阵乘法。
接口为matmul_2d (a: Tensor, b: Tensor)->Tensor,其中输入参数a为二维张量,形状为(m * k),b为二维张量,形状为(k * n),返回相乘后的结果张量,形状为(m *n)。
融合规则可用python语言描述如下,其中以#字符开头的行是注释:
def matmul_2d (a: Tensor, b: Tensor) -> Tensor:
# 获取输入数据张量的形状
(m, k), (k, n) = a.shape, b.shape
# 输入数据张量从低维(m, k)变换到高维(m, k, n)
a = broadcast(a, 0, n)
# 将输入数据张量从低维(k, n)变换到高维(m, k, n)
b = broadcast(b, 2, m)
# 每个对应元素相乘
c = element_wise_mul(a, b)
# 将结果从高维(m, k, n)变换回低维(m, n)
c = reduce_sum(c, 1)
return c
(2)二维批归一化batch_norm_2d算子
接口为batch_norm_2d(x: Tensor, running_mean: Tensor, running_var:Tensor, gamma: Tensor, beta: Tensor, eps: Tensor)->Tensor,其中输入参数x为四维张量,形状为(n, c, h, w),running_mean、running_var、gamma、beta、eps均为一维张量,形状为(c),返回归一化后的结果张量,形状为(n, c, h, w)。
融合规则可用python语言描述如下,其中以#字符开头的行是注释:
def batch_norm_2d(x: Tensor, running_mean: Tensor, running_var:Tensor, gamma: Tensor, beta: Tensor, eps: Tensor) -> Tensor:
# 获取输入数据张量的形状
n, c, h, w = x.shape
# 从低维(c)变换到高维(n, c, h, w)
running_mean = broadcast(running_mean, 1, n)
running_mean = broadcast(running_mean, 0, h)
running_mean = broadcast(running_mean, 0, w)
# 计算x-E[x]
x = element_wise_sub(x, running_mean)
# 计算Var[x]+ϵ
running_var = element_wise_add(running_var, eps)
# 计算标准差
std = element_wise_sqrt(running_var)
# 每个对应元素相除
g = element_wise_div(gamma, std)
# 从低维(c)变换到高维(n, c, h, w)
g = broadcast(g, 1, n)
g = broadcast(g, 0, h)
g = broadcast(g, 0, w)
x = element_wise_mul(x, g)
# 从低维(c)变换到高维(n, c, h, w)
beta = broadcast(beta, 1, n)
beta = broadcast(beta, 0, h)
beta = broadcast(beta, 0, w)
# 计算最终的归一化结果
y = element_wise_add(x, beta)
return y
其他算子的融合规则也可以此方式进行描述,此处不再详细说明其他算子的功能和融合规则。
(二)系统内置的融合规则库对应的元算子接口声明
在此示例中,各算子需要的元算子如下:
(1)矩阵相乘算子需要张量广播broadcast元算子、张量逐元素相乘element_wise_mul元算子、张量相加规约reduce_sum元算子;
(2)卷积算子(包括一维二维三维)需要张量广播broadcast元算子、张量逐元素相乘element_wise_mul元算子、张量相加规约reduce_sum元算子、张量重索引元算子;
(3)批归一化算子(包括一维二维三维)需要张量广播broadcast元算子、张量逐元素相乘element_wise_mul元算子、张量逐元素相除element_wise_div元算子、张量逐元素相加element_wise_add元算子、张量逐元素相减element_wise_sub元算子、张量逐元素开平方element_wise_sqrt元算子;
(4)最大池化算子(包括一维二维三维)需要张量最大规约reduce_max元算子、重索引reindex元算子;
(5)平均池化算子(包括一维二维三维)需要张量平均规约reduce_avg元算子、张量重索引reindex元算子。
因此,总共需要10个元算子,在此列出它们的接口声明,并简单描述它们的功能:
(1)张量广播broadcast元算子
接口为broadcast(input: Tensor, dim: int, size: int)->Tensor,其中输入参数input为待广播的数据张量,可以是任意维度,dim为被广播的维度序号,数值必须在input张量的维度范围内,size为目标维度广播后的大小,数值必须为正整数,返回广播后的结果张量。
可以看到,此处broadcast元算子的函数签名与上述融合规则库中矩阵相乘matmul_2d算子、二维批归一化batch_norm_2d算子中调用broadcast元算子时传入的参数、获取的返回值等均保持一致。同样的,以下元算子的函数签名与上述融合规则库中的调用也一致,此处不再赘述。
广播过程为在dim维度将输入张量重复size次。
(2)张量逐元素相乘element_wise_mul元算子
接口为element_wise_mul(lhs: Tensor, rhs: Tensor)->Tensor,其中输入参数lhs为任意维度张量,rhs为与lhs形状相同的张量,返回lhs和rhs对应元素相乘的结果张量。
(3)张量逐元素相除element_wise_div元算子
接口为element_wise_div(lhs: Tensor, rhs: Tensor)->Tensor,其中输入参数lhs为任意维度张量,rhs为与lhs形状相同的张量,返回lhs和rhs对应元素相除的结果张量。
(4)张量逐元素相加element_wise_add元算子
接口为element_wise_add(lhs: Tensor, rhs: Tensor)->Tensor,其中输入参数lhs为任意维度张量,rhs为与lhs形状相同的张量,返回lhs和rhs对应元素相加的结果张量。
(5)张量逐元素相减element_wise_sub元算子
接口为element_wise_sub(lhs: Tensor, rhs: Tensor)->Tensor,其中输入参数lhs为任意维度张量,rhs为与lhs形状相同的张量,返回lhs和rhs对应元素相减的结果张量。
(6)张量逐元素开平方element_wise_sqrt元算子
接口为element_wise_sqrt(input: Tensor)->Tensor,其中输入参数input为任意维度张量,返回将每个元素开平方的结果张量。
(7)张量相加规约reduce_sum元算子
接口为reduce_sum(input: Tensor, dim: int)->Tensor,其中输入参数input为待规约的数据张量,可以是任意维度,dim为被规约的维度序号,数值必须在input张量的维度范围内,返回规约后的结果张量。
相加规约过程为在dim维度将输入张量求和。
(8)张量最大规约reduce_max元算子
接口为reduce_max(input: Tensor, dim: int)->Tensor,其中输入参数input为待规约的数据张量,可以是任意维度,dim为被规约的维度序号,数值必须在input张量的维度范围内,返回规约后的结果张量。
最大规约过程为在dim维度求输入张量的最大值。
(9)张量平均规约reduce_avg元算子
接口为reduce_avg(input: Tensor, dim: int)->Tensor,其中输入参数input为待规约的数据张量,可以是任意维度,dim为被规约的维度序号,数值必须在input张量的维度范围内,返回规约后的结果张量。
平均规约过程为在dim维度求输入张量的平均值。
(10)张量重索引reindex元算子
接口为reindex (input: Tensor, shape: Tuple[int], indexes: Tuple[str])->Tensor,其中输入参数input为待重索引的数据张量,可以是任意维度,shape为输出张量的形状,类型是整型数组,indexes为输入张量与输出张量中的元素索引的映射关系,输入张量中的每个元素会映射到输出张量中的一个或多个元素,indexes的类型为字符串数组,返回重索引后的结果张量。
重索引过程不涉及张量中数据的运算,只是重新排列张量中的元素,排列方式为根据映射关系来确定输出张量的每个元素对应的输入张量的元素位置,然后通过拷贝数据来构造输出张量。根据重索引过程和广播过程可知,张量广播broadcast元算子是张量重索引reindex元算子的一种简单情况。
此处元算子接口声明中包含了所有融合规则库中需要的元算子,且每个元算子的函数签名与该融合规则库中的调用相一致,因此满足了上述融合规则库的需求。
在获取输入之后,初始化器S101会将元算子接口声明转发到元算子库预处理器S201,将融合规则库转发到融合规则迭代器S401。
2、利用元算子库预处理器S201,解析用户输入的目标平台的元算子库,确保其符合融合规则库的需求,并获取目标平台的语法规则。此处为方便用户,系统会预先提供元算子接口文档对元算子库进行说明,并根据融合规则库的需求对用户所有应该提供的元算子的功能进行详细描述。
假设此示例中用户的目标平台为GPU平台,则用户需要提供上述10个元算子在GPU平台的实现代码。
3、利用算子模板生成器S301,按照GPU平台的语法规则生成GPU平台算子模板;
4、利用融合规则迭代器S401,迭代融合规则库中的所有融合规则,迭代方式为一条条读取融合规则库内的全部内容,在此示例中需要迭代13次。
5、利用算子融合器S501,解析本次迭代的算子的融合规则,生成其在GPU平台的目标代码。
6、利用调度策略优化器S601,解析输入的GPU平台的硬件参数,假设此例中硬件运算性能和内存都很大,则可进行循环展开,提高并行度,充分利用硬件性能,从而提升执行效率,然后将生成的目标代码加入GPU平台算子库。
7、迭代过程在迭代13次之后完成,此时目标平台的算子库开发完毕,在此例中共得到13个算子在GPU平台的实现源码。
其中过程2(元算子库预处理)又分为以下子过程:
1)、利用元算子库解析器S202,获取用户输入的GPU平台元算子库,对其进行词法分析和语法分析,从而获取GPU平台的语法规则和所有元算子的函数签名,其中GPU平台的语法规则在此示例中包括CUDA(Compute Unified Device Architecture,统一计算架构,是Nvidia开发的GPU编程模型)核函数的声明方式、参数传递方式等;
2)、利用元算子接口匹配器S203,将元算子库中每个元算子的函数签名与上述10个元算子的接口进行匹配,从而判断是否符合融合规则库的需求,若不符合需求则算子开发过程失败,系统退出执行。
其中过程5(算子融合)又分为以下子过程,此处以矩阵相乘matmal_2d算子为例:
1)、对matmal_2d算子的融合规则进行词法分析和语法分析,得出需要的元算子(broadcast、element_wise_mul、reduce_sum)及其输入参数,然后从用户提供的GPU平台元算子库中,获取待融合的broadcast、element_wise_mul、reduce_sum元算子;
2)、将broadcast元算子的代码加入算子模板;
3)、重复子过程2,按照融合规则将element_wise_mul、reduce_sum元算子代码也逐步加入算子模板,则算子模板中已包含matmul_2d算子完整的目标代码, matmul_2d算子的融合过程完成。
在此示例中可以看到本发明的以下优点:
1、单个元算子实现的功能都很简单,因此用户开发元算子库的难度和工程量都较小;
2、算子融合规则的描述粒度是元算子,无需深入细节,因此描述难度较低;
3、算子融合规则与平台无关。若用户还需要适配CPU平台和Hexagon平台,则只需分别提供目标平台上的包含上述10个元算子的元算子库,即可得到对应平台上的13个算子。用户需要适配的目标平台越多,本发明降低算子开发的工程量和开发难度的效果越明显;
4、元算子可以复用于多个算子。若用户还需要开发张量拼接concat算子,由于concat算子需要的element_wise_add、reindex元算子已存在于元算子库,因此无需再开发元算子,只需在融合规则库中加入concat算子的融合规则,即可得到所有已经适配的目标平台上的concat算子。通常待开发的算子越多,元算子的复用程度越高,本发明降低算子开发的工程量和开发难度的效果越明显;
5、根据目标平台硬件参数能够自动进行循环嵌套优化,而无需手动处理,从而也降低了算子开发的工程量和开发难度。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换或改进等,均应包含在本发明的保护范围之内。
Claims (12)
1.一种基于元算子融合的多平台算子智能化开发系统,其特征在于,包括:初始化器、元算子库预处理器、算子模板生成器、融合规则迭代器、算子融合器、调度策略优化器;
初始化器:用于获取系统中内置的融合规则库和对应的元算子接口声明,然后将元算子接口声明转发到元算子库预处理器,将融合规则库转发到融合规则迭代器,其中,所述融合规则库记录待开发的算子的融合规则,所述元算子接口声明与所述融合规则库的需求相对应;
元算子库预处理器:用于解析用户输入的目标平台元算子库,确保其符合融合规则库的需求,并获取目标平台的语法规则,其中,当所述元算子接口声明中的内容中存在所述目标平台的元算子库的内容时,所述目标平台的元算子库符合融合规则库的需求;
算子模板生成器:用于按照目标平台的语法规则生成目标平台的算子模板;
融合规则迭代器:用于迭代融合规则库中的所有融合规则;
算子融合器:用于解析当前迭代的融合规则,生成此融合规则对应的算子的目标代码;
调度策略优化器:用于优化算子目标代码的执行效率,然后将优化后的目标代码加入目标平台算子库。
2.如权利要求1所述的一种基于元算子融合的多平台算子智能化开发系统,其特征在于:所述目标平台的元算子库的内容包括所述目标平台的语法规则和所述目标平台的元算子库包含的所有元算子的函数签名;所述元算子库预处理器包括元算子库解析器和元算子接口匹配器,所述元算子库解析器用于获取用户输入的目标平台的元算子库,对所述目标平台的元算子库进行词法分析和语法分析,以获取所述目标平台的语法规则和所述目标平台的所有元算子的函数签名;所述元算子接口匹配器用于将所述目标平台的元算子库中每个元算子的函数签名与元算子接口声明中的内容进行匹配,判断是否符合融合规则库的需求。
3.如权利要求1所述的一种基于元算子融合的多平台算子智能化开发系统,其特征在于:所述融合规则库中包含一个或多个待开发的算子的融合规则,每一个算子对应一条融合规则,且融合规则库支持扩展,所述融合规则库中的待开发的算子可由用户自定义。
4.如权利要求1所述的一种基于元算子融合的多平台算子智能化开发系统,其特征在于:所述元算子接口声明描述所有需要的元算子的函数签名,包括每个元算子的名称、输入参数的个数和类型、返回值的个数和类型。
5.如权利要求1所述的一种基于元算子融合的多平台算子智能化开发系统,其特征在于:所述算子融合器包括融合规则解析器和元算子添加器,所述融合规则解析器用于对当前算子的融合规则进行词法分析和语法分析,得出需要的元算子及其输入参数,然后从用户提供的目标平台元算子库中获取待融合的元算子;所述元算子添加器用于将待融合的元算子的代码加入算子模板。
6.如权利要求1所述的一种基于元算子融合的多平台算子智能化开发系统,其特征在于:所述调度策略优化器的优化方式为根据输入的目标平台的硬件参数,对算子的目标代码进行循环嵌套优化。
7.如权利要求6所述的一种基于元算子融合的多平台算子智能化开发系统,其特征在于:所述目标平台的硬件参数包括芯片的内存大小、计算单元个数;所述循环嵌套优化方式包括分割、合并、重排序、平铺、展开。
8.一种基于元算子融合的多平台算子智能化开发方法,其特征在于:包括如下步骤:
步骤S1:利用初始化器,获取系统中内置的融合规则库和对应的元算子接口声明,然后将元算子接口声明转发到元算子库预处理器,将融合规则库转发到融合规则迭代器,其中,所述融合规则库记录待开发的算子的融合规则,所述元算子接口声明与所述融合规则库的需求相对应;
步骤S2:利用元算子库预处理器,解析用户输入的目标平台元算子库,确保其符合融合规则库的需求,并获取目标平台的语法规则,其中,当所述元算子接口声明中的内容中存在所述目标平台的元算子库的内容时,所述目标平台的元算子库符合融合规则库的需求;
步骤S3:利用算子模板生成器,按照目标平台的语法规则生成目标平台的算子模板;
步骤S4:利用融合规则迭代器,迭代融合规则库中的所有融合规则,迭代方式为一条条读取融合规则库内的全部内容;
步骤S5:利用算子融合器,解析当前迭代的融合规则,生成此融合规则对应的算子的目标代码;
步骤S6:利用调度策略优化器,优化算子目标代码的执行效率,然后将优化后的目标代码加入目标平台算子库;
步骤S7:重复上述步骤S4、S5和S6,直到所有融合规则的迭代过程完成,则目标平台的算子库开发完毕。
9.如权利要求8所述的一种基于元算子融合的多平台算子智能化开发方法,其特征在于:所述步骤S1中所述融合规则库中包含一个或多个待开发的算子的融合规则,每一个算子对应一条融合规则,且融合规则库支持扩展,所述融合规则库中的待开发的算子可由用户自定义。
10.如权利要求8所述的一种基于元算子融合的多平台算子智能化开发方法,其特征在于:所述元算子接口声明描述了所有需要的元算子的函数签名,包括每个元算子的名称、输入参数的个数和类型、返回值的个数和类型。
11.如权利要求8所述的一种基于元算子融合的多平台算子智能化开发方法,其特征在于:所述步骤S2又分为以下子步骤:
S21:利用元算子库解析器,获取用户输入的目标平台的元算子库,对所述目标平台的元算子库进行词法分析和语法分析,以获取所述目标平台的语法规则和所述目标平台的所有元算子的函数签名;
S22:利用元算子接口匹配器,将所述目标平台的元算子库中每个元算子的函数签名与元算子接口声明中的内容进行匹配,判断是否符合融合规则库的需求,若不符合需求则算子开发过程失败,系统退出执行;若符合需求,执行步骤S3。
12.如权利要求8所述的一种基于元算子融合的多平台算子智能化开发方法,其特征在于:所述步骤S5又分为以下子步骤:
S51:利用融合规则解析器,对当前算子的融合规则进行词法分析和语法分析,得出需要的元算子及其输入参数,然后从用户提供的目标平台的元算子库中获取待融合的元算子;
S52:利用元算子添加器,将待融合的元算子的代码加入算子模板;
S53:重复子步骤S52,直到所有需要的元算子添加完成,则算子模板中已包含算子完整的目标代码,即步骤S5完成。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210159700.XA CN114218929B (zh) | 2022-02-22 | 2022-02-22 | 一种基于元算子融合的多平台算子智能化开发系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210159700.XA CN114218929B (zh) | 2022-02-22 | 2022-02-22 | 一种基于元算子融合的多平台算子智能化开发系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114218929A true CN114218929A (zh) | 2022-03-22 |
CN114218929B CN114218929B (zh) | 2022-05-17 |
Family
ID=80709215
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210159700.XA Withdrawn - After Issue CN114218929B (zh) | 2022-02-22 | 2022-02-22 | 一种基于元算子融合的多平台算子智能化开发系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114218929B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023221408A1 (zh) * | 2022-05-19 | 2023-11-23 | 北京百度网讯科技有限公司 | 深度学习框架的算子处理方法、装置、设备和存储介质 |
WO2024001594A1 (zh) * | 2022-06-29 | 2024-01-04 | 第四范式(北京)技术有限公司 | 算子开发、处理方法、装置、电子设备、系统及存储介质 |
CN117609870A (zh) * | 2024-01-23 | 2024-02-27 | 北京燧原智能科技有限公司 | 结构识别模型训练、模型结构识别方法、设备及介质 |
CN117971236A (zh) * | 2024-03-31 | 2024-05-03 | 浪潮电子信息产业股份有限公司 | 基于词法和语法分析的算子解析方法、装置、设备及介质 |
CN118051234A (zh) * | 2024-04-12 | 2024-05-17 | 北京壁仞科技开发有限公司 | 用于软硬件适配的方法、计算装置、介质和程序产品 |
CN118277133A (zh) * | 2024-06-03 | 2024-07-02 | 浪潮电子信息产业股份有限公司 | 模型运算优化方法、产品、设备及介质 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116932092B (zh) * | 2023-09-18 | 2024-01-09 | 之江实验室 | 一种算子调用代码自动生成的方法、装置、介质及设备 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080010291A1 (en) * | 2006-07-05 | 2008-01-10 | Krishna Leela Poola | Techniques for clustering structurally similar web pages |
GB0724116D0 (en) * | 2007-12-10 | 2008-01-23 | Isaytext Ltd | Trasmitting formatted data and applications in a communications system |
CN108665440A (zh) * | 2018-03-14 | 2018-10-16 | 重庆邮电大学 | 一种基于改进Sobel算子的不规则烟包图像融合边缘检测算法 |
CN109581981A (zh) * | 2018-12-06 | 2019-04-05 | 山东大学 | 一种基于数据评估与系统协调模块的数据融合系统及其工作方法 |
CN111382347A (zh) * | 2018-12-28 | 2020-07-07 | 广州市百果园信息技术有限公司 | 一种对象特征的处理和信息推送方法、装置和设备 |
CN111539532A (zh) * | 2020-04-01 | 2020-08-14 | 深圳市魔数智擎人工智能有限公司 | 一种面向模型构建的特征自动化衍生方法 |
CN112199086A (zh) * | 2020-09-18 | 2021-01-08 | 北京达佳互联信息技术有限公司 | 自动编程控制系统、方法、装置、电子设备及存储介质 |
CN112766512A (zh) * | 2021-01-25 | 2021-05-07 | 北京大学(天津滨海)新一代信息技术研究院 | 基于元算子的深度学习框架诊断系统、方法、装置、设备及介质 |
CN113420865A (zh) * | 2021-06-15 | 2021-09-21 | 之江实验室 | 一种基于多算子融合的深度神经网络推理加速方法和系统 |
CN113778459A (zh) * | 2021-09-08 | 2021-12-10 | 北京航空航天大学杭州创新研究院 | 一种在fpga和dsp上部署优化的算子库设计方法 |
-
2022
- 2022-02-22 CN CN202210159700.XA patent/CN114218929B/zh not_active Withdrawn - After Issue
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080010291A1 (en) * | 2006-07-05 | 2008-01-10 | Krishna Leela Poola | Techniques for clustering structurally similar web pages |
GB0724116D0 (en) * | 2007-12-10 | 2008-01-23 | Isaytext Ltd | Trasmitting formatted data and applications in a communications system |
CN108665440A (zh) * | 2018-03-14 | 2018-10-16 | 重庆邮电大学 | 一种基于改进Sobel算子的不规则烟包图像融合边缘检测算法 |
CN109581981A (zh) * | 2018-12-06 | 2019-04-05 | 山东大学 | 一种基于数据评估与系统协调模块的数据融合系统及其工作方法 |
CN111382347A (zh) * | 2018-12-28 | 2020-07-07 | 广州市百果园信息技术有限公司 | 一种对象特征的处理和信息推送方法、装置和设备 |
CN111539532A (zh) * | 2020-04-01 | 2020-08-14 | 深圳市魔数智擎人工智能有限公司 | 一种面向模型构建的特征自动化衍生方法 |
CN112199086A (zh) * | 2020-09-18 | 2021-01-08 | 北京达佳互联信息技术有限公司 | 自动编程控制系统、方法、装置、电子设备及存储介质 |
CN112766512A (zh) * | 2021-01-25 | 2021-05-07 | 北京大学(天津滨海)新一代信息技术研究院 | 基于元算子的深度学习框架诊断系统、方法、装置、设备及介质 |
CN113420865A (zh) * | 2021-06-15 | 2021-09-21 | 之江实验室 | 一种基于多算子融合的深度神经网络推理加速方法和系统 |
CN113778459A (zh) * | 2021-09-08 | 2021-12-10 | 北京航空航天大学杭州创新研究院 | 一种在fpga和dsp上部署优化的算子库设计方法 |
Non-Patent Citations (2)
Title |
---|
WANG MINGANG; WANG CHAO; FAN YINGPING: ""Research for Target Recognition of Infrared Bridge Based on Morphological Operator and Bridge Template"", 《2012 INTERNATIONAL CONFERENCE ON COMPUTER SCIENCE AND SERVICE SYSTEM》 * |
梁佳利;华保健;吕雅帅;苏振宇: ""面向深度学习算子的循环不变式外提算法"", 《计算机科学与探索》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023221408A1 (zh) * | 2022-05-19 | 2023-11-23 | 北京百度网讯科技有限公司 | 深度学习框架的算子处理方法、装置、设备和存储介质 |
WO2024001594A1 (zh) * | 2022-06-29 | 2024-01-04 | 第四范式(北京)技术有限公司 | 算子开发、处理方法、装置、电子设备、系统及存储介质 |
CN117609870A (zh) * | 2024-01-23 | 2024-02-27 | 北京燧原智能科技有限公司 | 结构识别模型训练、模型结构识别方法、设备及介质 |
CN117609870B (zh) * | 2024-01-23 | 2024-04-23 | 北京燧原智能科技有限公司 | 结构识别模型训练、模型结构识别方法、设备及介质 |
CN117971236A (zh) * | 2024-03-31 | 2024-05-03 | 浪潮电子信息产业股份有限公司 | 基于词法和语法分析的算子解析方法、装置、设备及介质 |
CN118051234A (zh) * | 2024-04-12 | 2024-05-17 | 北京壁仞科技开发有限公司 | 用于软硬件适配的方法、计算装置、介质和程序产品 |
CN118277133A (zh) * | 2024-06-03 | 2024-07-02 | 浪潮电子信息产业股份有限公司 | 模型运算优化方法、产品、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN114218929B (zh) | 2022-05-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114218929B (zh) | 一种基于元算子融合的多平台算子智能化开发系统及方法 | |
Bergstra et al. | Theano: A CPU and GPU Math Compiler in Python. | |
Gareev et al. | High-performance generalized tensor operations: A compiler-oriented approach | |
Huang et al. | Compiling Markov chain Monte Carlo algorithms for probabilistic modeling | |
Mutlu et al. | Comet: A domain-specific compilation of high-performance computational chemistry | |
Makrynioti et al. | Declarative data analytics: A survey | |
CN115525287A (zh) | 多阶段编译器架构 | |
CN115481718A (zh) | 一种基于精简算子集的深度学习图算一体优化器 | |
Minnella et al. | Design and Optimization of Residual Neural Network Accelerators for Low-Power FPGAs Using High-Level Synthesis | |
Yu et al. | Mctensor: A high-precision deep learning library with multi-component floating-point | |
Sousa et al. | Tensor slicing and optimization for multicore NPUs | |
Hinsen et al. | Using B SP and Python to simplify parallel programming | |
Wu et al. | Accelerating openvx through halide and mlir | |
Gervich et al. | How OPS (optimizing parallelizing system) may be useful for clang | |
Alaejos et al. | Algorithm 1039: Automatic Generators for a Family of Matrix Multiplication Routines with Apache TVM | |
Joisha et al. | A translator system for the MATLAB language | |
Park et al. | NEST‐C: A deep learning compiler framework for heterogeneous computing systems with artificial intelligence accelerators | |
Hsu et al. | GPTPU: Accelerating applications using edge tensor processing units | |
Klute | Space-time Trade-off in Clash: Improving Smart Machines | |
Liu et al. | C-Coupler3. 0: an integrated coupler infrastructure for Earth system modeling | |
CN118796196A (zh) | 编译方法、装置及计算机可读存储介质 | |
Faingnaert | Flexible matrix multiplication kernels on GPUs | |
Coym | Python for High Performance I/O | |
Xie et al. | GAMUT: Matrix Multiplication-Like Tasks on GPUs. | |
Chang | COMPILER FOR A TRACE-BASED DEEP NEURAL NETWORK ACCELERATOR |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
AV01 | Patent right actively abandoned |
Granted publication date: 20220517 Effective date of abandoning: 20220525 |
|
AV01 | Patent right actively abandoned |
Granted publication date: 20220517 Effective date of abandoning: 20220525 |
|
AV01 | Patent right actively abandoned | ||
AV01 | Patent right actively abandoned |