CN113703768A - 张量程序优化方法及装置 - Google Patents

张量程序优化方法及装置 Download PDF

Info

Publication number
CN113703768A
CN113703768A CN202110788296.8A CN202110788296A CN113703768A CN 113703768 A CN113703768 A CN 113703768A CN 202110788296 A CN202110788296 A CN 202110788296A CN 113703768 A CN113703768 A CN 113703768A
Authority
CN
China
Prior art keywords
tensor
program
subprogram
mutation
operator
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
CN202110788296.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.)
Tsinghua University
Original Assignee
Tsinghua University
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 Tsinghua University filed Critical Tsinghua University
Priority to CN202110788296.8A priority Critical patent/CN113703768A/zh
Publication of CN113703768A publication Critical patent/CN113703768A/zh
Priority to PCT/CN2022/105400 priority patent/WO2023284770A1/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明提供了一种张量程序优化方法及装置,方法包括:对待优化的张量程序进行划分生成线性的张量子程序;按预设的算子集合生成所述的子程序的突变程序;对子程序的突变程序中不等价的突变程序进行纠错处理以使各突变程序均与对应的子程序等价;从纠错处理后的突变程序中选取最优子程序进行拼接生成优化后的张量程序。本发明对待优化的张量程序进行划分生成线性的张量子程序,减少需要探索的搜索空间,将各子程序的突变以最优的方式组合成一个完整的张量程序,可以使张量程序的执行更加高效。

Description

张量程序优化方法及装置
技术领域
本发明涉及数据处理技术,具体的讲是一种张量程序优化方法及装置。
背景技术
现有的深度学习框架将深度学习程序表示为由张量和算子构成的张量程序,而该张量程序往往以计算图的形式表现。现有技术中,对张量程序的优化方案可分为三种类型:对计算图上的算子进行等价替换的图级别优化,对张量内存布局进行替换的数据布局优化及生成更高效算子的算子级优化。
现有的算子库,如cuDNN,cuBLAS,Intel MKL等可以支持不同的数据布局。通过对不同算子应用最适合的内存布局,可以提高其计算效率。目前的技术对于内存布局的优化主要有以下局限性:1.底层算子库所考虑到的数据布局,都只是对张量不同维度的顺序的简单调整,如二维张量的行优先和列优先,四维张量的NCHW,NHWC等。2.基于内存布局优化的张量程序优化工作都只考虑了底层算子库所支持的较为有限的布局。对于计算图的优化,现有的许多工作利用基于规则的优化方法,即对于一个由若干算子构成的计算子图,根据预先设计的特定规则,将其用另一个子图进行替换。但是基于规则的优化方法需要开发人员对计算子图的变换有足够的了解,并据此设计出相关的变换规则。同时,由于所有规则都需要开发人员手动指定,因此其搜索空间往往有较大的局限性,无法对未知的变换规则进行探索。
现有技术中还有一种自动搜索算法,可以通过自动的方法对一个计算图进行优化,并通过形式化验证的方式保证其在数学上的正确性。但是目前的自动搜索算法只支持完全等价的变换,其形式化验证的方式需要根据一些基本规则进行推导,需要的验证时间也比较长。
发明内容
针对现有的张量程序优化中存在的缺陷,本发明旨在利用新的优化方法对张量程序的优化空间进行扩展,提供一种张量程序优化方法,包括:
对待优化的张量程序进行划分生成线性的张量子程序;
按预设的算子集合生成所述的子程序的突变程序;
对子程序的突变程序中不等价的突变程序进行纠错处理以使各突变程序均与对应的子程序等价;
从纠错处理后的突变程序中选取最优子程序进行拼接生成优化后的张量程序。
本发明实施例中,所述的对待优化的张量程序进行划分生成线性的张量子程序包括:
确定所述待优化的张量程序中的非线性激活函数算子;
根据所述的非线性激活函数算子对待优化的张量程序进行划分生成线性的张量子程序。
本发明实施例中,所述的按预设的算子集合生成所述的子程序的突变程序包括:
步骤1,枚举所述子程序中的张量分别作为预设的算子集合中各算子的输入;
步骤2,将算子的输出张量添加到所述子程序中;
步骤3,判断所述子程序的大小是否超过预设的阈值,未达到阈值,则执行步骤1-步骤3,确定达到阈值则终止。
本发明实施例中,所述的预设的算子集合中包括:计算密集型算子、逐元素算子及张量操作算子。
本发明实施例中,所述的对子程序的突变程序中不等价的突变程序进行纠错处理以使各突变程序均与对应的子程序等价包括:
利用归约域传播确定所述子程序及其突变程序的归约域;
对任意两归约域的重叠区域,标识m+1个位置上进行随机测试以确定不等价的突变程序;其中,m为子程序输出张量的维数;
根据不等价的突变程序对应的子程序生成纠错内核;
利用生成的纠错内核修正不等价的突变程序。
本发明实施例中,所述的从纠错处理后的突变程序中选取最优子程序进行拼接生成优化后的张量程序包括:
利用贪心算法从纠错处理后的突变程序中分别选取各子程序的K个候选子程序;K为预设值;
从各子程序的K个候选子程序中选取拼接之后的前后子程序的处转换开销最小的候选子程序作为各子程序的最优子程序;
对确定的最优子程序进行拼接生成优化后的张量程序。
本发明实施例中,所述的对确定的最优子程序进行拼接生成优化后的张量程序包括:
对确定的最优子程序进行拼接生成拼接后的张量程序;
对拼接后的张量程序进行可逆算子消除;
根据预处理后的权重张量对进行可逆算子消除后的拼接后的张量程序进行算子融合生成优化后的张量程序;其中,所述的预处理后的权重张量为根据拼接后的张量程序的计算图对预设的权重张量进行变形后确定的。
同时,本发明还提供一种张量程序优化装置,包括:
程序划分模块,用于对待优化的张量程序进行划分生成线性的张量子程序;
突变生成模块,用于按预设的算子集合生成所述的子程序的突变程序;
突变纠错模块,用于对子程序的突变程序中不等价的突变程序进行纠错处理以使各突变程序均与对应的子程序等价;
优化程序生成模块,从纠错处理后的突变程序中选取最优子程序进行拼接生成优化后的张量程序。
本发明实施例中,所述的程序划分模块包括:
算子确定单元,用于确定所述待优化的张量程序中的非线性激活函数算子;
划分单元,用于根据所述的非线性激活函数算子对待优化的张量程序进行划分生成线性的张量子程序。
本发明实施例中,所述的突变生成模块按预设的算子集合生成所述的子程序的突变程序的步骤包括:
步骤1,枚举所述子程序中的张量分别作为预设的算子集合中各算子的输入;
步骤2,将算子的输出张量添加到所述子程序中;
步骤3,判断所述子程序的大小是否超过预设的阈值,未达到阈值,则执行步骤1-步骤3,确定达到阈值则终止。
本发明实施例中,所述的突变纠错模块包括:
归约域确定单元,用于利用归约域传播确定所述子程序及其突变程序的归约域;
标识单元,用于对任意两归约域的重叠区域,标识m+1个位置上进行随机测试以确定不等价的突变程序;其中,m为子程序输出张量的维数;
内核生成单元,用于根据不等价的突变程序对应的子程序生成纠错内核;
纠错单元,用于利用生成的纠错内核修正不等价的突变程序。
本发明实施例中,所述的优化程序生成模块包括:
候选程序确定单元,用于利用贪心算法从纠错处理后的突变程序中分别选取各子程序的K个候选子程序;K为预设值;
选取单元,用于从各子程序的K个候选子程序中选取拼接之后的前后子程序的处转换开销最小的候选子程序作为各子程序的最优子程序;
优化程序拼接单元,用于对确定的最优子程序进行拼接生成优化后的张量程序。
本发明实施例中,所述的优化程序拼接单元包括:
拼接单元,用于对确定的最优子程序进行拼接生成拼接后的张量程序;
可逆算子消除单元,用于对拼接后的张量程序进行可逆算子消除;
优化单元,用于根据预处理后的权重张量对进行可逆算子消除后的拼接后的张量程序进行算子融合生成优化后的张量程序;其中,所述的预处理后的权重张量为根据拼接后的张量程序的计算图对预设的权重张量进行变形后确定的。
同时,本发明还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述方法。
同时,本发明还提供一种计算机可读存储介质,计算机可读存储介质存储有执行上述方法的计算机程序。
本发明对待优化的张量程序进行划分生成线性的张量子程序,减少需要探索的搜索空间,对于每个子程序所有可能的基于内存重排的局部等价变形进行探索,并生成该子程序所有可能的突变,并且为了保证优化后的张量程序的端到端的正确性,对优化前后的张量子程序的输出进行对比,找出其中的不等价位置并加以修正,完成纠错的突变将会进一步优化,将各子程序的突变以最优的方式组合成一个完整的张量程序,可以使张量程序的执行更加高效。
为让本发明的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提供的张量程序优化方法的流程图;
图2为本发明实施例中的示意图;
图3为本发明实施例中的示意图;
图4为本发明实施例中的示意图;
图5为本发明实施例中的示意图;
图6为本发明实施例中的示意图;
图7为本发明实施例中的示意图;
图8为本发明实施例中的示意图;
图9为本发明实施例中的示意图;
图10为本发明实施例中的示意图;
图11为本发明实施例中的示意图;
图12为本发明提供的张量程序优化装置的框图;
图13为本发明实施例中的电子设备示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了对张量程序的优化空间进行扩展,使张量程序的执行更加高效,本发明提供一种张量程序优化方法,如图1所示,本发明的方法包括:
步骤S101,对待优化的张量程序进行划分生成线性的张量子程序;
步骤S102,按预设的算子集合生成所述的子程序的突变程序;
步骤S103,对子程序的突变程序中不等价的突变程序进行纠错处理以使各突变程序均与对应的子程序等价;
步骤S104,从纠错处理后的突变程序中选取最优子程序进行拼接生成优化后的张量程序。
本发明实施例中,步骤S101中,对待优化的张量程序进行划分生成线性的张量子程序包括:
确定所述待优化的张量程序中的非线性激活函数算子;
根据所述的非线性激活函数算子对待优化的张量程序进行划分生成线性的张量子程序。
本发明实施例中,在待优化的张量程序中使用非线性算子作为分割点。诸如深度神经网络中的激活函数之类的非线性算子在张量程序中被广泛使用。通常,每一个或几个线性算子后面都会有非线性激活函数算子(例如ReLU或sigmoid),本发明实施例中,通过这些算子可以有效地将张量程序拆分为期望大小的子程序。并且,对于最新的等效图形优化算法,在其替换模式中几乎没有包含非线性算子(算子融合除外,将在代码生成优化中处理),因此将非线性算子留在子程序之外不会显著影响优化效果。
对于两个多重线性张量程序
Figure BDA0003159834270000061
Figure BDA0003159834270000062
如果
Figure BDA0003159834270000063
Figure BDA0003159834270000064
具有相同数量和形状的输入输出,则称
Figure BDA0003159834270000065
Figure BDA0003159834270000066
的突变(其计算无需等价)。如果
Figure BDA0003159834270000067
是某个张量程序的子程序,则利用
Figure BDA0003159834270000068
代替
Figure BDA0003159834270000069
该张量程序依然是合法的,但可能会产生不同的结果,因此突变的替换能保证程序的合法性,但无法保证程序的正确性或数学等价性。
在通过非线性算子对张量程序进行划分之后,可以进一步调整子程序的大小。为了将多个独立的算子组合为更大的组或批去处理算子以寻求更多优化机会,会将几个彼此不依赖的子程序组成较大的子程序,例如Inception网络中的多个分支。另一方面,如果子程序太大,每次仅会对该子程序的一个算子子集进行突变优化。
对于每个子程序所有可能的基于内存重排的局部等价变形进行探索,并生成该子程序所有可能的突变。每个突变与原子程序具有相同的输入张量和形状相同的输出张量。
具体的,本发明实施例中,按预设的算子集合生成所述的子程序的突变程序包括:
步骤1,枚举所述子程序中的张量分别作为预设的算子集合中各算子的输入;
步骤2,将算子的输出张量添加到所述子程序中;
步骤3,判断所述子程序的大小是否超过预设的阈值,未达到阈值,则执行步骤1-步骤3,确定达到阈值则终止。
本发明实施例中,所述的预设的算子集合中包括:计算密集型算子、逐元素算子及张量操作算子。
本发明实施例中,对于任意给定的子程序
Figure BDA0003159834270000071
根据一个给定的算子集合
Figure BDA0003159834270000072
作为基础去生成其可能的突变,其中,算子集合
Figure BDA0003159834270000073
涵盖了DNN(DNN,Deep Neural Network,深度神经网络)和其他张量程序中最为常用的算子,包括:计算密集型算子(如conv、matmul等)和逐元素算子(如add、mul等),以及张量操作算子(如split、transpose等)。该集合
Figure BDA0003159834270000074
可根据用户的需求轻松地进行扩展,以覆盖各种不同类型的张量程序。为了生成潜在的突变,从一个没有操作符但包含了
Figure BDA0003159834270000075
中原始输入张量的空程序开始,枚举集合
Figure BDA0003159834270000076
中的每个算子,同时亦枚举当前程序中所有可用的张量作为算子的输入,并将其输出张量添加到当前的程序中,直到当前程序的大小达到了某个阈值(称为突变深度)为止。如果生成的突变
Figure BDA0003159834270000077
与原始程序
Figure BDA0003159834270000078
具有相同数量和形状的输入输出,则认为该突变
Figure BDA0003159834270000079
Figure BDA00031598342700000710
的一个有效突变体。
为了保证优化后的张量程序的端到端的正确性,对优化前后的张量子程序的输出进行对比,找出其中的不等价位置并加以修正。本实施例中,突变纠错的处理中利用了严格的线性代数理论基础来简化了这项极为复杂的任务。
对子程序生成更高性能的突变,但并不能保证突变与原程序在计算上的等价性。为了维持张量程序端到端的正确性,需要进一步找出突变中与原子程序不等价的位置,并加以修正。本实施例中将原始的多重线性张量程序
Figure BDA00031598342700000711
及其突变之一
Figure BDA00031598342700000712
作为输入,自动找出其输出中不等价的位置并生成对应的纠错内核,以保证
Figure BDA00031598342700000713
Figure BDA00031598342700000714
在功能上的等价。
为了简化分析,假设每个输入子程序
Figure BDA00031598342700000715
及其突变
Figure BDA00031598342700000716
都只有一个输出。通过顺序地分析每个输出,该结果可以轻松地推广到具有多个输出的子程序。输出张量的计算通常涉及沿某些维度的归约。例如,卷积算子conv在channel(通道)维度上对输入张量和权重张量在height(高度)和width(宽度)维度的乘积进行累加。
同一个归约域中的输出位置具有相同的归约边界和相似的数学性质,突变纠错器会以此为基础进行等价性检查,本发明实施例基于以下两个线性代数理论:
定理1:对于两个拥有m维输出张量的MLTP
Figure BDA0003159834270000081
Figure BDA0003159834270000082
Figure BDA0003159834270000083
为m维的基向量集合,即
Figure BDA0003159834270000084
为长度为m的元组,其中第i个元素为1,其他均为0。
Figure BDA0003159834270000085
Figure BDA0003159834270000086
Figure BDA0003159834270000087
的一个归约域,
Figure BDA0003159834270000088
Figure BDA0003159834270000089
中的任意位置。令
Figure BDA00031598342700000810
1≤j≤m。如果
Figure BDA00031598342700000811
0≤i≤m,
Figure BDA00031598342700000812
Figure BDA00031598342700000813
定理2:对两个MLTP
Figure BDA00031598342700000814
Figure BDA00031598342700000815
Figure BDA00031598342700000816
Figure BDA00031598342700000817
Figure BDA00031598342700000818
的一个不等价位置,即
Figure BDA00031598342700000819
Figure BDA00031598342700000820
令I为一个随机生成的输入,则
Figure BDA00031598342700000821
的可能性至多为
Figure BDA00031598342700000822
其中,d为输入变量I的所有可能取值的个数。
定理1表明,如果
Figure BDA00031598342700000823
Figure BDA00031598342700000824
在一个归约域中的m+1个特定位置是等价的,则此归约域中的所有其他位置也均为等价的。本实施例中采用的该定理大大减少了验证的工作量:不需要检查输出张量中的所有位置,而只需要测试每个归约域中的m+1个特定位置即可。
定理2表明,如果两个子程序在某个位置上不相等,那么如果用32位整数进行随机测试,则在此随机输入上计算出的结果相同的概率至多为2-32
通过结合定理1和定理2,检查所有输出位置上依赖的所有输入值的组合简化为仅需要使用几个随机生成的输入来测试几个具有代表性的位置的轻量级任务。
本发明实施例中,对子程序的突变程序中不等价的突变程序进行纠错处理以使各突变程序均与对应的子程序等价包括:
利用归约域传播确定所述子程序及其突变程序的归约域;
对任意两归约域的重叠区域,标识m+1个位置上进行随机测试以确定不等价的突变程序;其中,m为子程序输出张量的维数;
根据不等价的突变程序对应的子程序生成纠错内核;
利用生成的纠错内核修正不等价的突变程序。
本发明实施例中突变纠错的验证算法如下:
步骤1:归约域传播。首先,通过归约域传播来计算给定子程序的归约域。归约域传播的概念类似于深度学习中的前向和后向传播,即根据输入张量的归约域通过分析算子计算的依赖性来计算算子输出张量的归约域。为张量的每个维度维护一组分割点,以标识其归约域的边界。对于线性算子,可以根据输入张量的分割点以及算子类型和超参数来推断其输出张量的分割点。
步骤2:对每个归约域进行随机测试。在获得原程序
Figure BDA0003159834270000091
及其突变
Figure BDA0003159834270000092
的输出张量中的所有归约域后,利用前面提到的定理检查两个程序中每对归约域的相交区域。如果两个归约域没有任何重叠区域,则可以跳过它们。对于每个重叠区域,在定理1所标识的一组m+1个位置上检查两个程序的等价性,其中m是输出张量维数(例如,上图中的子程序中m=4,因为conv的输出是4维)。在这m+1个位置上,利用随机生成的一组输入进行随机测试。
步骤3:纠错内核。对于每个未通过随机测试的归约域,都会生成纠错内核以修正其输出从而保证原始子程序及其突变之间的数学等价性。为了修正输出,纠错内核需在与原始子程序不等效的归约域上执行相同的一组运算符以对这些位置做出修正。
为了减少纠错内核引入的额外开销,通过内核融合优化技术对生成的纠错内核进行优化。当纠错内核与优化后的子程序的算子相同时,可以通过内核融合的优化方法将其合并为一个计算内核。对于纠错内核与优化后的子程序中的算子不相同的情况,由于纠错内核与优化前的原子程序算子相同,而优化后的子程序的算子是由原子程序的算子变形得到,因此总是可以将纠错内核的算子也变换为与优化后的子程序具有相同的算子,即可进一步进行融合优化。
本发明实施例中,所述的从纠错处理后的突变程序中选取最优子程序进行拼接生成优化后的张量程序包括:
利用贪心算法从纠错处理后的突变程序中分别选取各子程序的K个候选子程序;K为预设值;
从各子程序的K个候选子程序中选取拼接之后的前后子程序的处转换开销最小的候选子程序作为各子程序的最优子程序;
对确定的最优子程序进行拼接生成优化后的张量程序。
本发明实施例中,所述的对确定的最优子程序进行拼接生成优化后的张量程序包括:
对确定的最优子程序进行拼接生成拼接后的张量程序;
对拼接后的张量程序进行可逆算子消除;
根据预处理后的权重张量对进行可逆算子消除后的拼接后的张量程序进行算子融合生成优化后的张量程序;其中,所述的预处理后的权重张量为根据拼接后的张量程序的计算图对预设的权重张量进行变形后确定的。
在经过程序划分后,输入程序将转换为一个子程序列表。代码生成优化中的全局优化器通过查询突变生成器遍历每个子程序生成其突变列表,并以贪心的方式保持迄今为止性能最佳的整个程序的前K个候选程序Cands。对于每个子程序,都会选K个候选保存下来(因为保存所有的突变会占用大量空间),然后在后面的拼接过程中选取其中最合适的一个,本实施例中,所谓最合适的子程序是拼接之后与前后子程序的“接缝”处转换开销最小的子程序。
为了以合理的时间和空间成本为每个子程序探索足够大的突变空间,全局优化器通过几个关键的超参数对突变过程进行了仔细设计。首先,如果子程序太大,则会将其分成较小的算子子集,仅在每个子集上进行突变生成,在一个算子子集进行突变生成时保持其余算子不变。其次,通过允许子程序上的迭代突变最多进行r轮(r为预设的可调参数值),可以大大扩展搜索空间,并实现更复杂和可能更优的突变生成。
在完成子程序的优化后,还需要将所有子程序的优化结果连接在一起。除了连接它们的输入和输出张量之外,还需要对跨子程序的边界执行一些后优化处理,以进一步提高整体性能。本发明一实施例中,首先将R/T算子与非线性的ReLU算子进行重排序,从而使得两个子程序连接处的所有R/T算子为连续的。显然由于包括ReLU在内的非线性激活函数算子的计算是逐元素的,因此该重排序操作是可以保证其正确性的。接下来将继续进行3项后优化处理:
1.可逆算子消除。对于任何一组可以互相抵消(即在一个张量上运行这些算子后等同于无操作)的R/T算子,称之为可逆变形,显然可逆变形可以在不影响正确性的情况下从程序中删除。
2.算子融合。将剩余的连续内存重排算子R/T融合到单个内核中,以降低内核启动开销(R/T-DH)。同时,对于ReLU这样的激活算子,也会像经典优化一样将其融合到其相邻的计算算子中(Conv-Relu-CF)。
3.预处理。如果一个张量是静态可知的(如权重张量),后优化处理器将会在预处理阶段完成其内存重排,如图6中的(b)上卷积的权重张量w1与w2,其内存重排操作对应的算子R/T-B与R/T-I将会在对权重的预处理期间执行,而非在运行时完成。
在深度学习应用中,会有一些张量用来保存权重,这些权重张量是静态就可以确定的。预处理,也就是在推理进行之前,先按照优化后的计算图把权重张量做一次变形,然后以变形后的结果来存储这些权重张量,那么在真正进行推理的时候就无需再执行一次这些变形算子了。
本发明提供的张量程序优化方法,其为基于内存重排和局部等价变换的优化方法,目前并未被其他框架所使用,虽然大部分的变换可以通过经典算子的组合来完成,但如果没有对这些算子进行专门的代码生成优化处理,其优化效果无法体现。因此,本发明所述的系统是一个完整系统,现有的框架无法替代其中的大部分工作。另外,本发明通过与不同的后端(如cuDNN/cuBLAS、TVM、Ansor)结合,可以达到最高2倍以上的加速比。
本发明一实施例还提供一种基于内存重排与局部等价变换的张量程序优化系统,包括:程序划分、突变生成器、突变纠错器和代码生成优化几个主要模块。
本实施例提供的张量程序优化系统的整体架构如图2所示:
本发明实施例中,张量程序优化系统的输入是一个待优化的张量程序。首先将输入程序划分为较小的子程序来减少需要探索的搜索空间,并保证所有子程序的均为线性程序(以应用后续的验证理论)。
本实施例中,对于每个子程序,突变生成器对其所有可能的基于内存重排的局部等价变形进行探索,并生成该子程序所有可能的突变。每个突变与原子程序具有相同的输入张量和形状相同的输出张量。
为了保证优化后的张量程序的端到端的正确性,突变纠错器对优化前后的张量子程序的输出进行对比,找出其中的不等价位置并加以修正。突变纠错器利用了严格的线性代数理论基础来简化了这项极为复杂的任务。
完成纠错的突变将会进一步通过程序优化器,将各子程序的突变以最优的方式组合成一个完整的张量程序,并对其进行进一步调优,即可得到优化后的张量程序。
以下将从程序划分、突变生成器、突变纠错器和代码生成优化等几个模块进行分别介绍,并以几个典型的安全来介绍本系统可以达到的优化效果。
(一)程序划分:
本实施例中,在输入程序中使用非线性算子作为分割点。首先,诸如深度神经网络中的激活函数之类的非线性算子在张量程序中被广泛使用。通常,每一个或几个线性算子后面都会有非线性激活函数算子(例如ReLU或sigmoid),通过这些算子可以有效地将张量程序拆分为期望大小的子程序。其次,由于突变纠错器的理论基础仅适用于多重线性张量程序,必须从子程序中排除任何非线性算子,这使得以非线性算子作为拆分点成为自然的选择。第三,对于最新的等效图形优化算法,在其替换模式中几乎没有包含非线性算子(算子融合除外,将在代码生成优化中处理),因此将它们保留在子程序之外不会显著影响优化效果。
在通过非线性算子对张量程序进行划分之后,可以进一步调整子程序的大小。为了将多个独立的算子组合为更大的组或批去处理算子以寻求更多优化机会,会将几个彼此不依赖的子程序组成较大的子程序,例如Inception网络中的多个分支。另一方面,如果子程序太大,每次仅会对该子程序的一个算子子集进行突变优化。
(二)突变生成器:
对于两个多重线性张量程序
Figure BDA0003159834270000121
Figure BDA0003159834270000122
如果
Figure BDA0003159834270000123
Figure BDA0003159834270000124
具有相同数量和形状的输入输出,则称
Figure BDA0003159834270000125
Figure BDA0003159834270000126
的突变(其计算无需等价)。如果
Figure BDA0003159834270000127
是某个张量程序的子程序,则利用
Figure BDA0003159834270000128
代替
Figure BDA0003159834270000129
该张量程序依然是合法的,但可能会产生不同的结果,因此突变的替换能保证程序的合法性,但无法保证程序的正确性或数学等价性。
对于任意给定的
Figure BDA00031598342700001210
突变生成器会根据一个给定的算子集合
Figure BDA00031598342700001211
作为基础去生成其可能的突变,其中算子集合
Figure BDA00031598342700001212
涵盖了DNN和其他张量程序中最为常用的算子,包括计算密集型算子(如conv、matmul等)和逐元素算子(如add、mul等),以及张量操作算子(如split、transpose等)。该集合可根据用户的需求轻松地进行扩展,以覆盖各种不同类型的张量程序。为了生成潜在的突变,突变生成器从一个没有操作符但包含了
Figure BDA00031598342700001213
中原始输入张量的空程序开始,枚举集合
Figure BDA00031598342700001214
中的每个算子,同时亦枚举当前程序中所有可用的张量作为算子的输入,并将其输出张量添加到当前的程序中,直到当前程序的大小达到了某个阈值(称为突变深度,下图算法中的threshold)为止。如果生成的突变
Figure BDA00031598342700001215
与原始程序
Figure BDA00031598342700001216
具有相同数量和形状的输入输出,则突变生成器会认为该突变
Figure BDA00031598342700001217
Figure BDA00031598342700001218
的一个有效突变体。
如下所示为用于生成
Figure BDA00031598342700001219
的可能突变体的深度优先搜索算法的代码。
Figure BDA0003159834270000131
(三)突变纠错器:
通过突变生成器可以对一个子程序生成更高性能的突变,但并不能保证突变与原程序在计算上的等价性。为了维持张量程序端到端的正确性,需要进一步找出突变中与原子程序不等价的位置,并加以修正。突变纠错器将原始的多重线性张量程序
Figure BDA0003159834270000132
及其突变之一
Figure BDA0003159834270000133
作为输入,自动找出其输出中不等价的位置并生成对应的纠错内核,以保证
Figure BDA0003159834270000134
Figure BDA0003159834270000135
在功能上的等价。
为了简化分析,假设每个输入子程序
Figure BDA0003159834270000136
及其突变
Figure BDA0003159834270000137
都只有一个输出。通过顺序地分析每个输出,该结果可以轻松地推广到具有多个输出的子程序。输出张量的计算通常涉及沿某些维度的归约。例如,卷积算子conv在channel维度上对输入张量和权重张量在height维度和width维度的乘积进行累加。
但是,输出张量中的不同位置可能涉及不同的归约边界。例如,对于内核大小为3×3的卷积,计算左上角输出位置时仅涉及内核中2×2的位置,因为该位置上的计算在最左侧一列和最上侧一行超出了输入张量的边界(在same padding的情况下),如图3所示。具有相同归约边界的输出位置可以划入同一个归约域中,即如果输出张量中的多个位置共享完全相同的归约边界,则它们属于同一个归约域。图3示出了具有3×3内核的conv的九个归约域及其对应的归约边界。
同一个归约域中的输出位置具有相同的归约边界和相似的数学性质,突变纠错器会以此为基础进行等价性检查。突变纠错器基于以下两个线性代数理论:
定理1:对于两个拥有m维输出张量的子程序
Figure BDA0003159834270000141
Figure BDA0003159834270000142
Figure BDA0003159834270000143
为m维的基向量集合,即
Figure BDA0003159834270000144
为长度为m的元组,其中第i个元素为1,其他均为0。
Figure BDA0003159834270000145
Figure BDA0003159834270000146
Figure BDA0003159834270000147
的一个归约域,
Figure BDA0003159834270000148
Figure BDA0003159834270000149
中的任意位置。令
Figure BDA00031598342700001410
1≤j≤m。如果
Figure BDA00031598342700001411
0≤i≤m,
Figure BDA00031598342700001412
Figure BDA00031598342700001413
定理2:对两个子程序
Figure BDA00031598342700001414
Figure BDA00031598342700001415
Figure BDA00031598342700001416
Figure BDA00031598342700001417
Figure BDA00031598342700001418
的一个不等价位置,即
Figure BDA00031598342700001419
Figure BDA00031598342700001420
令I为一个随机生成的输入,则
Figure BDA00031598342700001421
的可能性至多为
Figure BDA00031598342700001422
其中d为输入变量I的所有可能取值的个数。
定理1表明,如果
Figure BDA00031598342700001423
Figure BDA00031598342700001424
在一个归约域中的m+1个特定位置是等价的,则此归约域中的所有其他位置也均为等价的。该定理大大减少了验证的工作量:突变纠错器不需要检查输出张量中的所有位置,而只需要测试每个归约域中的m+1个特定位置即可。
定理2表明,如果两个子程序在某个位置上不相等,那么如果用32位整数进行随机测试,则在此随机输入上计算出的结果相同的概率至多为2-32
通过结合定理1和定理2,突变纠错器将检查所有输出位置上依赖的所有输入值的组合简化为了仅需要使用几个随机生成的输入来测试几个具有代表性的位置的轻量级任务。
本实施例中,突变纠错器的验证算法如下:
步骤1:归约域传播。首先,突变纠错器通过归约域传播来计算给定子程序的归约域。归约域传播的概念类似于深度学习中的前向和后向传播,即根据输入张量的归约域通过分析算子计算的依赖性来计算算子输出张量的归约域。突变纠错器为张量的每个维度维护一组分割点,以标识其归约域的边界。对于线性算子,可以根据输入张量的分割点以及算子类型和超参数来推断其输出张量的分割点。图4显示了归约域传播过程。
步骤2:对每个归约域进行随机测试。在获得原程序
Figure BDA0003159834270000151
及其突变
Figure BDA0003159834270000152
的输出张量中的所有归约域后,突变纠错器利用前面提到的定理检查两个程序中每对归约域的相交区域。如果两个归约域没有任何重叠区域,则可以跳过它们。对于每个重叠区域,在定理1所标识的一组m+1个位置上检查两个程序的等价性,其中,m是输出张量维数。在这m+1个位置上,突变纠错器会利用随机生成的一组输入进行随机测试。
步骤3:纠错内核。对于每个未通过随机测试的归约域,张量程序优化系统都会生成纠错内核以修正其输出从而保证原始子程序及其突变之间的数学等价性。为了修正输出,纠错内核需在与原始子程序不等效的归约域上执行相同的一组运算符以对这些位置做出修正。
如图5的(a)到(b)的过程展示了纠错内核的生成,图5的(b)到(c)为纠错内核融合的过程示意。
纠错内核的融合优化:为了减少纠错内核引入的额外开销,本工作通过内核融合优化技术对生成的纠错内核进行优化。如图5的(b)到(c)的过程所示,当纠错内核与优化后的子程序的算子相同时(即Conv-1和Conv-2,共享权重W1),可以通过内核融合的优化方法将其合并为一个计算内核(即图5的(c)中的Conv-1-2)。对于纠错内核与优化后的子程序中的算子不相同的情况,由于纠错内核与优化前的原子程序算子相同,而优化后的子程序的算子是由原子程序的算子变形得到,因此总是可以将纠错内核的算子也变换为与优化后的子程序具有相同的算子,即可进一步进行融合优化。
(四)代码生成优化:
在经过程序划分后,输入程序将转换为一个子程序列表。代码生成优化中的全局优化器通过查询突变生成器遍历每个子程序生成其突变列表,并以贪心的方式保持迄今为止性能最佳的整个程序的前K个候选。对于每个子程序,都会选K个候选保存下来(因为保存所有的突变会占用大量空间,故选K个候选),然后在后面的拼接过程中选取其中最合适的一个子程序进行拼接。所谓最合适子程序是指拼接之后与前后子程序的“接缝”处转换开销最小的子程序。
为了以合理的时间和空间成本为每个子程序探索足够大的突变空间,全局优化器通过几个关键的超参数对突变过程进行了仔细设计。首先,如果子程序太大,则会将其分成较小的算子子集,仅在每个子集上进行突变生成,在一个算子子集进行突变生成时保持其余算子不变。其次,通过允许子程序上的迭代突变最多进行r轮,可以大大扩展搜索空间,并实现更复杂和可能更优的突变生成。
本发明在程序拼接过程中,涉及两个关键步骤,一是如何对每个子程序进行分别的搜索(即找出最合适的突变的过程),二是在拼接过程中的后优化处理,从而使生成的程序更加高效。
在完成子程序的优化后,还需要将所有子程序的优化结果连接在一起。子程序连接的具体过程即将若干个计算图拼接的过程,为在深度学习优化领域的基本操作,在此不再赘述。
在完成子程序的优化后,还需要将所有子程序的优化结果连接在一起。除了连接它们的输入和输出张量之外,还需要对跨子程序的边界执行一些后优化处理,以进一步提高整体性能。
图6给出了两个子程序进行突变优化后的结果。首先将R/T算子与非线性的ReLU算子进行重排序,如图6的(b)所示,从而使得两个子程序连接处的所有R/T算子为连续的。显然由于包括ReLU在内的非线性激活函数算子的计算是逐元素的,因此该重排序操作是可以保证其正确性的。接下来将继续进行3项后优化处理:
1.可逆算子消除。对于任何一组可以互相抵消(即在一个张量上运行这些算子后等同于无操作)的R/T算子,称之为可逆变形,显然可逆变形可以在不影响正确性的情况下从程序中删除。如图6的(b)的例子中R/T-E与R/T-G即为可消除的可逆变形。
2.算子融合。如图6的(c)所示,后优化处理器将剩余的连续内存重排算子R/T融合到单个内核中,以降低内核启动开销(R/T-DH)。同时,对于ReLU这样的激活算子,也会像经典优化一样将其融合到其相邻的计算算子中(Conv-Relu-CF)。
3.预处理。如果一个张量是静态可知的(如权重张量),后优化处理器将会在预处理阶段完成其内存重排,如图6的(b)上卷积的权重张量w1与w2,其内存重排操作对应的算子R/T-B与R/T-I将会在对权重的预处理期间执行,而非在运行时完成。
在深度学习应用中,会有一些张量用来保存“权重”,这些权重张量是静态就可以确定的(准确的说是在训练过程中确定的,本发明的工作是面向推理的,在推理之前这些权重都已经定的)。预处理,也就是在推理进行之前,先按照优化后的计算图把权重张量做一次变形(变形用到的算子如图6中的RT-B等),然后以变形后的结果来存储这些权重张量,那么在进行推理的时候就无需再执行一次这些变形算子了。
典型优化案例:
案例1:如图7所示,沿宽度方向将两个单独的图像连成了一个较大的图像,即将N维度的数据转移到了W维度。而在特定的维度大小下,该变形可以提供更大的并行度并改善计算的局部性,从而提升性能。内存重排的思路为张量程序的优化提供了新的机会。然而,在进行完该变迁后,在输出张量沿着合并边界的子区域上(图(b)上的斜线阴影位置)产生了与原结果不相等的元素,因此该优化为一个局部等价的优化,而非完全等价的优化。
案例2:如图8给出了一种突变,该突变将通过内存重排把空洞卷积的计算变为标准卷积的计算。(图中斜线阴影部分)给出的是突变中存在的不等价位置,张量程序优化系统将通过突变纠错器对其进行进一步修正。该优化将低效的空洞卷积转换为了被现有算子库高度优化的标准卷积,可以使用如Winograd,FFT等高效算法。
案例3:图9展示了用于优化Inception模块的两种图变换策略。对于具有不同的输出通道的两个并行的conv算子,图9的(a)展示了一个基于内存重排的非等价变换,该变换将W2用0进行填充,使其具有与W1相同的形状,从而可以将两个conv算子融合为一个groupconv算子。在其纠错过程中,需要再删掉填充到W2中的0计算出的结果(标记为zeros部分的张量,由其计算过程可推导出该张量所有元素均为0)。
图9的(b)中即为发现的等价转换,该转变的基本原理也是内存的重排,但在此过程中需要对一部分张量进行冗余复制。该转换通过对输入张量I2进行复制,并通过concat算子对输入张量和权重进行合并,从而将两个conv算子融合为一个group conv算子。
本发明的主体是基于内存重排与局部等价变换的张量程序优化系统,该系统提供了相应的接口供用户构建张量程序计算图,同时也支持onnx格式的模型导入,其输出为一个可执行的张量程序。
本发明可以使张量程序的执行更加高效。
本发明实施例中,实验所用的服务器配备了两个28核的Intel Xeon E52680 v4(启用超线程)、256GB DRAM和一个NVIDIA Tesla V100 GPU。除了与TVM和Ansor相关的实验外,所有实验均使用CUDA 10.2和cuDNN 7.6.5,而TVM和Ansor相关的实验则直接使用通过这两个张量编译器生成的最佳内核。
测试程序实验中使用了5个真实的DNN模型:
·Resnet-18,一个被广泛使用的卷积神经网络,用于图像分类;
·CSRNet,用于语义分割的膨胀卷积网络,可以任意调整采样率以扩大接收域,以获得更准确的预测结果;
·Inception-v3,为GoogleNet的改进版本,由精心设计的Inception模块组成,以提高准确率并降低计算复杂度;
·BERT,一个用于自然语言处理的网络结构,具有非常高的准确性;
·Resnet18-3D,一个用于视频处理的神经网络;
在端到端的实验上,本发明相较于现有工作,可以达到最高2.51倍的加速比,如图10所示。
在算子级的实验上,本发明通过与不同的后端(cuDNN/cuBLAS、TVM、Ansor)结合,可以达到最高2倍以上的加速比,如图11所示。
本发明基于内存重排和局部等价变换的程序优化方法,目前并未被其他框架所使用,虽然大部分的变换可以通过经典算子的组合来完成,但如果没有对这些算子进行专门的代码生成优化处理,其优化效果无法体现。因此,本发明所述的系统是一个完整系统,现有的框架无法替代其中的大部分工作。
如图12所示,本发明还提供一种张量程序优化装置,包括:
程序划分模块201,用于对待优化的张量程序进行划分生成线性的张量子程序;
突变生成模块202,用于按预设的算子集合生成所述的子程序的突变程序;
突变纠错模块203,用于对子程序的突变程序中不等价的突变程序进行纠错处理以使各突变程序均与对应的子程序等价;
优化程序生成模块204,从纠错处理后的突变程序中选取最优子程序进行拼接生成优化后的张量程序。
对本领域技术人员而言,通过前述实施例内容的描述可清楚获知本发明提供的一种张量程序优化装置的实现方式,在此不再赘述。
本实施例还提供一种电子设备,该电子设备可以是台式计算机、平板电脑及移动终端等,本实施例不限于此。在本实施例中,该电子设备可以参照前述方法及装置的实施例,其内容被合并于此,重复之处不再赘述。
图13为本发明实施例的电子设备600的系统构成的示意框图。如图13所示,该电子设备600可以包括中央处理器100和存储器140;存储器140耦合到中央处理器100。值得注意的是,该图是示例性的;还可以使用其他类型的结构,来补充或代替该结构,以实现电信功能或其他功能。
一实施例中,张量程序优化功能可以被集成到中央处理器100中。其中,中央处理器100可以被配置为进行如下控制:
对待优化的张量程序进行划分生成线性的张量子程序;
按预设的算子集合生成所述的子程序的突变程序;
对子程序的突变程序中不等价的突变程序进行纠错处理以使各突变程序均与对应的子程序等价;
从纠错处理后的突变程序中选取最优子程序进行拼接生成优化后的张量程序。
在另一个实施方式中,张量程序优化装置可以与中央处理器100分开配置,例如可以将张量程序优化装置配置为与中央处理器100连接的芯片,通过中央处理器的控制来实现张量程序优化功能。
如图13所示,该电子设备600还可以包括:通信模块110、输入单元120、音频处理单元130、显示器160、电源170。值得注意的是,电子设备600也并不是必须要包括图13中所示的所有部件;此外,电子设备600还可以包括图13中没有示出的部件,可以参考现有技术。
如图13所示,中央处理器100有时也称为控制器或操作控件,可以包括微处理器或其他处理器装置和/或逻辑装置,该中央处理器100接收输入并控制电子设备600的各个部件的操作。
其中,存储器140,例如可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其它合适装置中的一种或更多种。可储存上述与失败有关的信息,此外还可存储执行有关信息的程序。并且中央处理器100可执行该存储器140存储的该程序,以实现信息存储或处理等。
输入单元120向中央处理器100提供输入。该输入单元120例如为按键或触摸输入装置。电源170用于向电子设备600提供电力。显示器160用于进行图像和文字等显示对象的显示。该显示器例如可为LCD显示器,但并不限于此。
该存储器140可以是固态存储器,例如,只读存储器(ROM)、随机存取存储器(RAM)、SIM卡等。还可以是这样的存储器,其即使在断电时也保存信息,可被选择性地擦除且设有更多数据,该存储器的示例有时被称为EPROM等。存储器140还可以是某种其它类型的装置。存储器140包括缓冲存储器141(有时被称为缓冲器)。存储器140可以包括应用/功能存储部142,该应用/功能存储部142用于存储应用程序和功能程序或用于通过中央处理器100执行电子设备600的操作的流程。
存储器140还可以包括数据存储部143,该数据存储部143用于存储数据,例如联系人、数字数据、图片、声音和/或任何其他由电子设备使用的数据。存储器140的驱动程序存储部144可以包括电子设备的用于通信功能和/或用于执行电子设备的其他功能(如消息传送应用、通讯录应用等)的各种驱动程序。
通信模块110即为经由天线111发送和接收信号的发送机/接收机110。通信模块(发送机/接收机)110耦合到中央处理器100,以提供输入信号和接收输出信号,这可以和常规移动通信终端的情况相同。
基于不同的通信技术,在同一电子设备中,可以设置有多个通信模块110,如蜂窝网络模块、蓝牙模块和/或无线局域网模块等。通信模块(发送机/接收机)110还经由音频处理器130耦合到扬声器131和麦克风132,以经由扬声器131提供音频输出,并接收来自麦克风132的音频输入,从而实现通常的电信功能。音频处理器130可以包括任何合适的缓冲器、解码器、放大器等。另外,音频处理器130还耦合到中央处理器100,从而使得可以通过麦克风132能够在本机上录音,且使得可以通过扬声器131来播放本机上存储的声音。
本发明实施例还提供一种计算机可读程序,其中当在电子设备中执行所述程序时,所述程序使得计算机在所述电子设备中执行如上面实施例所述的张量程序优化方法。
本发明实施例还提供一种存储有计算机可读程序的存储介质,其中所述计算机可读程序使得计算机在电子设备中执行上面实施例所述的张量程序优化。
以上参照附图描述了本发明的优选实施方式。这些实施方式的许多特征和优点根据该详细的说明书是清楚的,因此所附权利要求旨在覆盖这些实施方式的落入其真实精神和范围内的所有这些特征和优点。此外,由于本领域的技术人员容易想到很多修改和改变,因此不是要将本发明的实施方式限于所例示和描述的精确结构和操作,而是可以涵盖落入其范围内的所有合适修改和等同物。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (15)

1.一种张量程序优化方法,其特征在于,所述的方法包括:
对待优化的张量程序进行划分生成线性的张量子程序;
按预设的算子集合生成所述的子程序的突变程序;
对子程序的突变程序中不等价的突变程序进行纠错处理以使各突变程序均与对应的子程序等价;
从纠错处理后的突变程序中选取最优子程序进行拼接生成优化后的张量程序。
2.如权利要求1所述的张量程序优化方法,其特征在于,所述的对待优化的张量程序进行划分生成线性的张量子程序包括:
确定所述待优化的张量程序中的非线性激活函数算子;
根据所述的非线性激活函数算子对待优化的张量程序进行划分生成线性的张量子程序。
3.如权利要求1所述的张量程序优化方法,其特征在于,所述的按预设的算子集合生成所述的子程序的突变程序包括:
步骤1,枚举所述子程序中的张量分别作为预设的算子集合中各算子的输入;
步骤2,将算子的输出张量添加到所述子程序中;
步骤3,判断所述子程序的大小是否超过预设的阈值,未达到阈值,则执行步骤1-步骤3,确定达到阈值则终止。
4.如权利要求1所述的张量程序优化方法,其特征在于,所述的预设的算子集合中包括:计算密集型算子、逐元素算子及张量操作算子。
5.如权利要求1所述的张量程序优化方法,其特征在于,所述的对子程序的突变程序中不等价的突变程序进行纠错处理以使各突变程序均与对应的子程序等价包括:
利用归约域传播确定所述子程序及其突变程序的归约域;
对任意两归约域的重叠区域,标识m+1个位置上进行随机测试以确定不等价的突变程序;其中,m为子程序输出张量的维数;
根据不等价的突变程序对应的子程序生成纠错内核;
利用生成的纠错内核修正不等价的突变程序。
6.如权利要求1所述的张量程序优化方法,其特征在于,所述的从纠错处理后的突变程序中选取最优子程序进行拼接生成优化后的张量程序包括:
利用贪心算法从纠错处理后的突变程序中分别选取各子程序的K个候选子程序;K为预设值;
从各子程序的K个候选子程序中选取拼接之后的前后子程序的处转换开销最小的候选子程序作为各子程序的最优子程序;
对确定的最优子程序进行拼接生成优化后的张量程序。
7.如权利要求6所述的张量程序优化方法,其特征在于,所述的对确定的最优子程序进行拼接生成优化后的张量程序包括:
对确定的最优子程序进行拼接生成拼接后的张量程序;
对拼接后的张量程序进行可逆算子消除;
根据预处理后的权重张量对进行可逆算子消除后的拼接后的张量程序进行算子融合生成优化后的张量程序;其中,所述的预处理后的权重张量为根据拼接后的张量程序的计算图对预设的权重张量进行变形后确定的。
8.一种张量程序优化装置,其特征在于,所述的装置包括:
程序划分模块,用于对待优化的张量程序进行划分生成线性的张量子程序;
突变生成模块,用于按预设的算子集合生成所述的子程序的突变程序;
突变纠错模块,用于对子程序的突变程序中不等价的突变程序进行纠错处理以使各突变程序均与对应的子程序等价;
优化程序生成模块,从纠错处理后的突变程序中选取最优子程序进行拼接生成优化后的张量程序。
9.如权利要求8所述的张量程序优化装置,其特征在于,所述的程序划分模块包括:
算子确定单元,用于确定所述待优化的张量程序中的非线性激活函数算子;
划分单元,用于根据所述的非线性激活函数算子对待优化的张量程序进行划分生成线性的张量子程序。
10.如权利要求8所述的张量程序优化装置,其特征在于,所述的突变生成模块按预设的算子集合生成所述的子程序的突变程序的步骤包括:
步骤1,枚举所述子程序中的张量分别作为预设的算子集合中各算子的输入;
步骤2,将算子的输出张量添加到所述子程序中;
步骤3,判断所述子程序的大小是否超过预设的阈值,未达到阈值,则执行步骤1-步骤3,确定达到阈值则终止。
11.如权利要求8所述的张量程序优化装置,其特征在于,所述的突变纠错模块包括:
归约域确定单元,用于利用归约域传播确定所述子程序及其突变程序的归约域;
标识单元,用于对任意两归约域的重叠区域,标识m+1个位置上进行随机测试以确定不等价的突变程序;其中,m为子程序输出张量的维数;
内核生成单元,用于根据不等价的突变程序对应的子程序生成纠错内核;
纠错单元,用于利用生成的纠错内核修正不等价的突变程序。
12.如权利要求8所述的张量程序优化装置,其特征在于,所述的优化程序生成模块包括:
候选程序确定单元,用于利用贪心算法从纠错处理后的突变程序中分别选取各子程序的K个候选子程序;K为预设值;
选取单元,用于从各子程序的K个候选子程序中选取拼接之后的前后子程序的处转换开销最小的候选子程序作为各子程序的最优子程序;
优化程序拼接单元,用于对确定的最优子程序进行拼接生成优化后的张量程序。
13.如权利要求12所述的张量程序优化装置,其特征在于,所述的优化程序拼接单元包括:
拼接单元,用于对确定的最优子程序进行拼接生成拼接后的张量程序;
可逆算子消除单元,用于对拼接后的张量程序进行可逆算子消除;
优化单元,用于根据预处理后的权重张量对进行可逆算子消除后的拼接后的张量程序进行算子融合生成优化后的张量程序;其中,所述的预处理后的权重张量为根据拼接后的张量程序的计算图对预设的权重张量进行变形后确定的。
14.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7任一项所述方法。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行权利要求1至7任一项所述方法的计算机程序。
CN202110788296.8A 2021-07-13 2021-07-13 张量程序优化方法及装置 Pending CN113703768A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202110788296.8A CN113703768A (zh) 2021-07-13 2021-07-13 张量程序优化方法及装置
PCT/CN2022/105400 WO2023284770A1 (zh) 2021-07-13 2022-07-13 张量程序优化方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110788296.8A CN113703768A (zh) 2021-07-13 2021-07-13 张量程序优化方法及装置

Publications (1)

Publication Number Publication Date
CN113703768A true CN113703768A (zh) 2021-11-26

Family

ID=78648499

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110788296.8A Pending CN113703768A (zh) 2021-07-13 2021-07-13 张量程序优化方法及装置

Country Status (2)

Country Link
CN (1) CN113703768A (zh)
WO (1) WO2023284770A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115130675A (zh) * 2022-09-02 2022-09-30 之江实验室 一种量子随机电路的多振幅模拟方法和装置
WO2023284770A1 (zh) * 2021-07-13 2023-01-19 清华大学 张量程序优化方法及装置
CN116107669A (zh) * 2023-04-14 2023-05-12 北京大学 深度学习框架的算子注册方法、装置、设备及存储介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110689121A (zh) * 2019-09-24 2020-01-14 上海寒武纪信息科技有限公司 一种用多核处理器实现神经网络模型拆分方法及相关产品
CN111401537A (zh) * 2019-09-24 2020-07-10 上海寒武纪信息科技有限公司 一种数据处理方法、装置、计算机设备及存储介质
CN110968321B (zh) * 2019-10-25 2023-06-20 杭州未名信科科技有限公司 张量计算代码优化方法、装置、设备及介质
CN111078395B (zh) * 2019-11-12 2023-06-20 华中科技大学 一种基于张量的深度学习gpu内存管理优化方法及系统
US11055639B1 (en) * 2020-04-28 2021-07-06 Sas Institute Inc. Optimizing manufacturing processes using one or more machine learning models
CN112579063B (zh) * 2021-03-01 2021-06-08 之江实验室 一种用于深度学习编译器中探索优化空间的加速方法
CN113703768A (zh) * 2021-07-13 2021-11-26 清华大学 张量程序优化方法及装置

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023284770A1 (zh) * 2021-07-13 2023-01-19 清华大学 张量程序优化方法及装置
CN115130675A (zh) * 2022-09-02 2022-09-30 之江实验室 一种量子随机电路的多振幅模拟方法和装置
CN116107669A (zh) * 2023-04-14 2023-05-12 北京大学 深度学习框架的算子注册方法、装置、设备及存储介质
CN116107669B (zh) * 2023-04-14 2023-08-18 北京大学 深度学习框架的算子注册方法、装置、设备及存储介质

Also Published As

Publication number Publication date
WO2023284770A1 (zh) 2023-01-19

Similar Documents

Publication Publication Date Title
US10963693B2 (en) Method and apparatus for training a character detector based on weak supervision, system and medium
CN113703768A (zh) 张量程序优化方法及装置
US11423311B2 (en) Automatic tuning of artificial neural networks
US10997503B2 (en) Computationally efficient neural network architecture search
Wang et al. {PET}: Optimizing tensor programs with partially equivalent transformations and automated corrections
US20210232929A1 (en) Neural architecture search
US20230259778A1 (en) Generating and utilizing pruned neural networks
EP3740887A2 (en) Machine-learning circuit optimization using quantized prediction functions
EP3355203A1 (en) Translation method and apparatus, and translation system
EP3828776A1 (en) Program, learning method, and learning apparatus
CN111401510A (zh) 一种数据处理方法、装置、计算机设备及存储介质
WO2021011914A1 (en) Scheduling operations on a computation graph
CN111401538A (zh) 一种数据处理方法、装置、计算机设备及存储介质
CN111401539A (zh) 一种数据处理方法、装置、计算机设备及存储介质
US20230206126A1 (en) Reshape and broadcast optimizations to avoid unnecessary data movement
KR20220032861A (ko) 하드웨어에서의 성능을 고려한 뉴럴 아키텍처 서치 방법 빛 장치
CN114385180A (zh) 一种数据处理方法、装置、设备及计算机存储介质
US20200184328A1 (en) Accelerating artificial neural network computations by skipping input values
CN116755714B (zh) 深度神经网络模型的运行方法、装置、设备和存储介质
US11313694B2 (en) Method and apparatus for recommending travel way
US20230325664A1 (en) Method and apparatus for generating neural network
CN115393174B (zh) 一种粗粒度的图像神经网络加速器指令集架构方法及装置
CN111340215B (zh) 一种网络模型推理加速方法、装置、存储介质和智能设备
US20220027710A1 (en) Method and apparatus for determining neural network architecture of processor
CN115599400A (zh) 一种Docker镜像快速构建方法、系统及介质

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