机器学习计算优化方法和编译器技术

技术编号:33703685 阅读:8 留言:0更新日期:2022-06-06 08:21
本发明专利技术公开了一种机器学习计算优化方法和编译器。该方法包括:识别机器学习计算图中的访存密集型算子,得到多个子图;识别子图中包括的骨干算子,并基于骨干算子对子图进行分组;将索引信息从每个分组的骨干算子向其前序算子进行传播;并将访存密集型算子子图中的算子融合到一个GPU核函数中。本发明专利技术的编译优化方案通过计算图的依赖关系特性、GPU多层次存储架构上的数据局部性、以及不同数据尺寸之下的线程并发性等方面的联合考虑,自动化地为大粒度的复杂访存密集算子子图生成高效的GPU代码,降低GPU核函数的调用及框架层算子调度的额外开销,避免不必要的重复计算,减少片外访存,同时适配各种数据尺寸以得到优化的并行效率。率。率。

【技术实现步骤摘要】
机器学习计算优化方法和编译器


[0001]本专利技术涉及机器学习领域,尤其涉及一种机器学习计算优化方法和编译器。

技术介绍

[0002]近年来,随着具有高度并行能力的芯片及其配套计算架构的提出,诸如卷积和矩阵乘的高强度并行计算已经不再成为机器学习模型的掣肘。在现有技术中,由于自动优化能力有限,难以针对复杂的访存密集算子子图高效生成代码,使得算子调度和数据存取带来的额外开销降低了整体计算效率。换句话说,访存密集型的计算由于其频繁的存取而变为当今机器学习模型的一个性能瓶颈。
[0003]为此,需要一种改进的机器学习计算优化方案。

技术实现思路

[0004]为了解决上述至少一个问题,本专利技术提出了一种针机器学习计算优化方案。该方案利用计算图的依赖关系特性和GPU多层次存储架构上的数据局部性,将一个访存密集型子图融合为一个GPU核函数,以降低深度计算模型实际使用过程中GPU核函数的调用及框架层算子调度的额外开销,由此提升整体计算效率。
[0005]根据本公开的第一方面,提出了一种机器学习计算优化方法,包括:识别机器学习计算图中的访存密集型算子,得到多个访存密集型算子子图;识别所述访存密集型算子子图中包括的骨干算子,并对所述访存密集型算子子图进行分组,其中,将骨干算子及其前序算子归为一个分组中;以及将索引信息从每个分组的骨干算子向其前序算子进行传播;以及将所述访存密集型算子子图中的算子融合到一个GPU核函数中。
[0006]可选地,所述访存密集型算子包括机器学习计算图中计算密集型算子之外的其他算子,并且得到的多个访存密集型算子子图包括由计算密集型算子隔开的多个访存密集型算子子图。
[0007]可选地,识别所述访存密集型算子子图中包括的骨干算子包括:识别所述访存密集型算子子图中包括的reduce算子作为骨干算子。
[0008]可选地,识别所述访存密集型算子子图中包括的骨干算子,并对所述访存密集型算子子图进行分组还包括:判定两个骨干算子之间是否包括能够进行索引信息传播的其他路径;响应于判定两个骨干算子之间包括能够进行索引信息传播的其他路径,将所述两个骨干算子之一识别为次骨干算子;以及将这两个算子以及这两个算子的前序算子分入同一个分组。
[0009]可选地,将索引信息从每个分组的骨干算子向其前序算子进行传播包括:骨干算子根据待处理的数据形状,自适应地生成线程映射策略;以及将所述线程映射策略传播给同一分组内的其他算子。
[0010]可选地,骨干算子根据待处理的数据形状,自适应地生成线程映射策略包括:设置线程映射规则,所述线程映射规则用于根据数据形状的维度大小和GPU实时运行状况,对线
程块进行拼接或是切割。
[0011]可选地,所述方法还包括:检查所述访存密集型算子子图中骨干算子与后续算子之间的数据依赖关系,并且进行如下操作:响应于数据依赖关系为线程级别,通过寄存器传播中间数据;响应于数据依赖关系为线程块级别,通过共享内存传播中间数据;以及响应于数据依赖关系为跨线程块级别,通过全局内存传播中间数据。
[0012]可选地,所述方法还包括:分析每个访存密集型算子子图中各个算子对共享内存的申请和使用关系;以及使得同一访存密集型算子子图中的后续算子的共享内存申请优先选择复用前序算子的共享内存申请。
[0013]根据本公开的第二方面,提出了一种机器学习编译器,包括:子图获取模块,用于从机器学习计算图中识别访存密集型算子,得到多个访存密集型算子子图;子图处理模块,包括:算子分组子模块,用于识别所述访存密集型算子子图中包括的骨干算子,并对所述访存密集型算子子图进行分组,其中,将骨干算子及其前序算子归为一个分组中;以及传播子模块,用于将索引信息从每个分组的骨干算子向其前序算子进行传播;以及算子融合模块,用于将每个分组中经传播的算子融合到一个GPU核函数中。
[0014]根据本公开的第三方面,提出了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如第一方面所述的方法。
[0015]根据本公开的第四方面,提出了一种非暂时性机器可读存储介质,其上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如第一方面所述的方法。
[0016]由此,提出了一种大粒度计算融合的优化方案,通过计算图的依赖关系特性、GPU多层次存储架构上的数据局部性、以及不同数据尺寸之下的线程并发性等方面的联合考虑,自动化地为大粒度的复杂访存密集算子子图生成高效的GPU代码,大幅减少GPU核函数的调用及框架层算子调度的额外开销,避免不必要的重复计算,大幅减少片外访存,同时适配各种数据尺寸以得到优化的并行效率。
附图说明
[0017]通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
[0018]图1示出了CUDA的软件和硬件结构。
[0019]图2示出了根据本专利技术一个实施例的机器学习计算优化方法的示意性流程图。
[0020]图3示出了reduce算子降低张量维度的例子。
[0021]图4示出了对访存密集型算子子图进行分组的例子。
[0022]图5示出了根据本专利技术的输入数据形状自适应操作的例子。
[0023]图6示出了算子分组、线程映射传播与跨线程数据重用的例子。
[0024]图7示出了根据本专利技术一个实施例的机器学习编译器的组成示意图。
[0025]图8示出了基于本专利技术的一个机器学习编译器的组成例。
[0026]图9示出了根据本专利技术一实施例可用于实现上述机器学习计算优化方法的计算设
备的结构示意图。
具体实施方式
[0027]下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
[0028]当前,机器学习被广泛地应用于图像处理、自然语言处理、搜索、推荐及广告等领域中。机器学习的任务往往需要消耗巨大的计算机算力,常被部署在GPU等加速器上进行计算。为了适配机器学习计算,业已提出了诸如CUDA的并行计算架构。CUDA是一种新的操作GPU计算的硬件和软件架构,它将GPU视作一个数据并行计算设备,无需把这些计算映射到图形API,并且可以利用图形处理器中的多颗计算核进行通用计算处理工作。图1示出了CUDA的软件和硬件结构。
[0029]从硬件上看,如图1右侧所示,SP(Streaming Processor,即,流处理器)是GPU最基本的处理单元。SP也可以被称为是CUDA core(CUDA核)。
[0030]多个CUDA core可以组成一个SM(Streaming本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种机器学习计算优化方法,包括:识别机器学习计算图中的访存密集型算子,得到访存密集型算子子图;识别所述访存密集型算子子图中包括的骨干算子,并基于所述骨干算子对所述访存密集型算子子图进行分组,其中,将骨干算子及其前序算子归为一个分组中;将索引信息从每个分组的骨干算子向其前序算子进行传播;以及将所述访存密集型算子子图中的算子融合到一个GPU核函数中。2.如权利要求1所述的方法,其中,所述访存密集型算子包括机器学习计算图中计算密集型算子之外的其他算子,并且得到的访存密集型算子子图包括由计算密集型算子隔开的多个访存密集型算子子图。3.如权利要求1所述的方法,其中,识别所述访存密集型算子子图中包括的骨干算子包括:识别所述访存密集型算子子图中包括的reduce算子作为骨干算子。4.如权利要求3所述的方法,其中,识别所述访存密集型算子子图中包括的骨干算子,并基于所述骨干算子对所述访存密集型算子子图进行分组还包括:判定两个骨干算子之间是否包括能够进行索引信息传播的其他路径;响应于判定两个骨干算子之间包括能够进行索引信息传播的其他路径,将所述两个骨干算子之一识别为次骨干算子;以及将这两个算子以及这两个算子的前序算子分入同一个分组。5.如权利要求1所述的方法,其中,将索引信息从每个分组的骨干算子向其前序算子进行传播包括:骨干算子根据待处理的数据形状,自适应地生成线程映射策略;以及将所述线程映射策略传播给同一分组内的其他算子。6.如权利要求5所述的方法,其中,骨干算子根据待处理的数据形状,自适应地生成线程映射策略包括:设置线程映射规则,所述线程映射规则用于根据数...

【专利技术属性】
技术研发人员:郑祯朱凯林伟
申请(专利权)人:阿里云计算有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1