CN117170681A - 核函数生成方法、装置、电子设备及存储介质 - Google Patents
核函数生成方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN117170681A CN117170681A CN202311166179.3A CN202311166179A CN117170681A CN 117170681 A CN117170681 A CN 117170681A CN 202311166179 A CN202311166179 A CN 202311166179A CN 117170681 A CN117170681 A CN 117170681A
- Authority
- CN
- China
- Prior art keywords
- kernel
- operators
- neural network
- generation
- network model
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 78
- 230000008689 nuclear function Effects 0.000 title description 2
- 238000003062 neural network model Methods 0.000 claims abstract description 92
- 238000004590 computer program Methods 0.000 claims description 16
- 238000003066 decision tree Methods 0.000 claims description 5
- 230000011218 segmentation Effects 0.000 claims description 2
- 238000011161 development Methods 0.000 abstract description 6
- 238000013473 artificial intelligence Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 230000018109 developmental process Effects 0.000 description 5
- 238000013527 convolutional neural network Methods 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000001172 regenerating effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 230000000306 recurrent effect Effects 0.000 description 1
- 230000008929 regeneration Effects 0.000 description 1
- 238000011069 regeneration method Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种核函数生成方法、装置、电子设备及存储介质,涉及人工智能技术领域,其中方法包括:在对神经网络模型进行实时编译的过程中,基于缓存器的大小及神经网络模型中至少部分算子的形状大小,确定神经网络模型中至少部分算子对应的kernel生成策略;基于kernel生成策略,生成神经网络模型中各算子对应的目标kernel;kernel生成策略包括以下至少一项:第一kernel生成策略,用于指示基于至少部分算子对应的不展开的for循环生成单个循环的kernel;第二kernel生成策略,用于指示基于至少部分算子对应的全展开的for循环生成kernel。通过上述方法,提高了算子的开发效率。
Description
技术领域
本发明涉及人工智能技术领域,尤其涉及一种核函数(kernel)生成方法、装置、电子设备及存储介质。
背景技术
高性能可复用的算子设备代码是人工智能芯片支持模型运行的基础。目前,算子库生成的kernel是一种完全展开的形式,与算子shape相关的信息会以立即数的形式写在kernel中。在模型支持的过程中,算子的shape是复杂多变的,导致对每一种shape都需要支持一种kernel。
相关技术中,kernel篇幅很长,且有不少类似指令块,一旦kernel生成结束,如果遇到模型中的算子在运行时发生了shape变化,已经生成的kernel并不能够支持,就需要重新生成一遍kernel。随着模型的规模增大,kernel的生成时间是阻碍业务落地的严重问题之一。
因此,如何缩短调用算子库生成kernel的时长,是目前亟待解决的问题。
发明内容
针对现有技术存在的问题,本发明实施例提供一种核函数生成方法、装置、电子设备及存储介质。
本发明提供一种核函数kernel生成方法,包括:
在对神经网络模型进行实时编译JIT的过程中,基于缓存器的大小及所述神经网络模型中至少部分算子的形状shape大小,确定所述神经网络模型中至少部分算子对应的kernel生成策略;
基于所述kernel生成策略,生成所述神经网络模型中各算子对应的目标kernel,所述目标kernel中包括所述至少部分算子对应的kernel;
其中,所述kernel生成策略包括以下至少一项:
第一kernel生成策略,用于指示基于所述至少部分算子对应的不展开的for循环生成单个循环的kernel;
第二kernel生成策略,用于指示基于所述至少部分算子对应的全展开的for循环生成kernel。
可选地,所述基于所述kernel生成策略,生成所述神经网络模型中各算子对应的目标kernel,包括:
在所述至少部分算子的shape大小大于所述缓存器的大小的情况下,基于所述第一kernel生成策略及所述第二kernel生成策略,生成所述至少部分算子对应的kernel;
基于所述第二kernel生成策略,生成除所述至少部分算子之外的算子对应的kernel。
可选地,所述基于所述第一kernel生成策略及所述第二kernel生成策略,生成所述至少部分算子对应的kernel,包括:
获取所述至少部分算子对应的tiling策略;所述tiling策略包括外层for循环及内层for循环;
针对所述外层for循环,执行目标操作;所述目标操作包括以下至少一项:不展开所述外层for循环;在所述外层for循环首尾插入控制流指令;
基于所述第一kernel生成策略及所述控制流指令,生成所述至少部分算子的所述外层for循环对应的kernel;
针对所述内层for循环,全展开所述内层for循环,并基于所述第二kernel生成策略,生成所述至少部分算子的所述内层for循环对应的kernel。
可选地,在所述生成所述至少部分算子的所述内层for循环对应的kernel之后,所述方法还包括:
将第一信息以变量的形式缓存至寄存器中;所述第一信息包括与所述至少部分算子的shape相关联的信息。
可选地,在所述获取所述至少部分算子对应的tiling策略之后,所述方法还包括:
基于所述至少部分算子对应的tiling策略,生成所述tiling策略对应的决策树schedule tree;所述tiling策略中的for循环语句与所述schedule tree中的节点一一对应。
可选地,所述基于所述kernel生成策略,生成所述神经网络模型中各算子对应的目标kernel,包括:
在所述至少部分算子的shape大小小于或等于所述缓存器的大小的情况下,基于所述第二kernel生成策略,生成所述神经网络模型中各算子对应的所述目标kernel。
可选地,在所述基于所述kernel生成策略,生成所述神经网络模型中各算子对应的目标kernel之后,所述方法还包括:
将所述目标kernel存储至内核缓存kernel cache中。
可选地,在所述基于缓存器的大小及所述神经网络模型中至少部分算子的形状shape大小,确定所述神经网络模型中至少部分算子对应的kernel生成策略之前,所述方法还包括:
将所述神经网络模型中的各算子与kernel cache中存储的至少一个kernel进行匹配;
在至少部分算子与所述kernel cache中存储的至少一个kernel匹配成功的情况下,基于匹配成功的kernel执行与所述至少部分算子相关联的操作。
本发明还提供一种核函数kernel生成装置,包括:
确定模块,用于在对神经网络模型进行实时编译JIT的过程中,基于缓存器的大小及所述神经网络模型中至少部分算子的形状shape大小,确定所述神经网络模型中至少部分算子对应的kernel生成策略;
第一生成模块,用于基于所述kernel生成策略,生成所述神经网络模型中各算子对应的目标kernel,所述目标kernel中包括所述至少部分算子对应的kernel;
其中,所述kernel生成策略包括以下至少一项:
第一kernel生成策略,用于指示基于所述至少部分算子对应的不展开的for循环生成单个循环的kernel;
第二kernel生成策略,用于指示基于所述至少部分算子对应的全展开的for循环生成kernel。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述kernel生成方法。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述kernel生成方法。
本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述kernel生成方法。
本发明提供的kernel生成方法、装置、电子设备及存储介质,通过在对神经网络模型进行实时编译JIT的过程中,基于缓存器的大小及神经网络模型中至少部分算子的shape大小,确定神经网络模型中至少部分算子对应的kernel生成策略;其中,kernel生成策略包括以下至少一项:第一kernel生成策略,用于指示基于至少部分算子对应的不展开的for循环生成单个循环的kernel,第二kernel生成策略,用于指示基于至少部分算子对应的全展开的for循环生成kernel;然后,基于kernel生成策略,生成神经网络模型中各算子对应的目标kernel;通过上述方法,可以针对至少部分算子,以静态生成单个循环的kernel的形式生成kernel,使得单次生成kernel的时长可以得到有效缩短,提高了算子的开发效率。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的kernel生成方法的流程示意图之一;
图2是本发明提供的kernel生成方法的流程示意图之二;
图3是本发明提供的kernel生成方法的逻辑示意图;
图4是本发明提供的kernel生成装置的结构示意图;
图5是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合图1至图3对本发明提供的kernel生成方法进行具体描述。图1是本发明提供的kernel生成方法的流程示意图之一,参见图1所示,该方法包括步骤101-步骤102,其中:
步骤101、在对神经网络模型进行实时编译JIT的过程中,基于缓存器的大小及所述神经网络模型中至少部分算子的形状shape大小,确定所述神经网络模型中至少部分算子对应的kernel生成策略;其中,所述kernel生成策略包括以下至少一项:第一kernel生成策略,用于指示基于所述至少部分算子对应的不展开的for循环生成单个循环的kernel;第二kernel生成策略,用于指示基于所述至少部分算子对应的全展开的for循环生成kernel。
首先需要说明的是,本发明的执行主体可以是能够实现kernel生成的任何电子设备,例如可以为智能手机、智能手表、台式电脑、手提电脑等任何一种。
本发明实施例应用于人工智能芯片软件栈中算子代码生成(Code generation)的场景。高性能可复用的算子设备代码是人工智能芯片支持模型运行的基础,本发明实施例提出一种动静态混合的kernel生成的方法,一方面缩短用户调用算子库生成kernel的时长,另一方可以复用kernel,为复杂多变的模型提供便利。
在本发明实施例中,神经网络模型可以应用于图像识别、语音处理、自然语言处理等领域,神经网络模型例如可以是卷积神经网络模型(Convolutional Neural Networks,CNN)、循环神经网络模型(Recurrent Neural Networks,RNN)等,运行神经网络模型需要多个算子的支撑。
在对神经网络模型进行实时编译(Just-In-time Compile,JIT)的过程中,首先需要基于缓存器(buffer)的大小以及神经网络模型中至少部分算子的shape大小,确定生成至少部分算子对应kernel的kernel生成策略。
kernel生成策略包括以下至少一项:
a)第一kernel生成策略,用于指示基于所述至少部分算子对应的不展开的for循环生成单个循环的kernel。
具体地,利用第一kernel生成策略生成kernel,是指以静态生成单个循环的kernel的形式生成kernel。
需要说明的是,在利用第一kernel生成策略生成kernel时,需要将与至少部分算子相关联的shape信息(又称敏感shape信息)与相关寄存器进行绑定。
b)第二kernel生成策略,用于指示基于所述至少部分算子对应的全展开的for循环生成kernel。
具体地,利用第二kernel生成策略生成kernel,是指以全展开的方式,利用预先编译(Ahead of Time Compile,AOT)编译生成kernel。
步骤102、基于所述kernel生成策略,生成所述神经网络模型中各算子对应的目标kernel,所述目标kernel中包括所述至少部分算子对应的kernel。
本发明提供的kernel生成方法,通过在对神经网络模型进行实时编译JIT的过程中,基于缓存器的大小及神经网络模型中至少部分算子的shape大小,确定神经网络模型中至少部分算子对应的kernel生成策略;其中,kernel生成策略包括以下至少一项:第一kernel生成策略,用于指示基于至少部分算子对应的不展开的for循环生成单个循环的kernel,第二kernel生成策略,用于指示基于至少部分算子对应的全展开的for循环生成kernel;然后,基于kernel生成策略,生成神经网络模型中各算子对应的目标kernel;通过上述方法,可以针对至少部分算子,以静态生成单个循环的kernel的形式生成kernel,使得单次生成kernel的时长可以得到有效缩短,提高了算子开发效率。
可选地,在所述基于缓存器的大小(buffer size)及所述神经网络模型中至少部分算子的形状shape大小,确定所述神经网络模型中至少部分算子对应的kernel生成策略之前,还需要执行以下步骤1)-步骤2):
步骤1)、将所述神经网络模型中的各算子与kernel cache中存储的至少一个kernel进行匹配;
步骤2)、在至少部分算子与所述kernel cache中存储的至少一个kernel匹配成功的情况下,基于匹配成功的kernel执行与所述至少部分算子相关联的操作。
在本发明实施例中,首先通过匹配(matching)算法,将神经网络模型中的各算子与内核缓存(kernel cache)中存储的至少一个kernel进行匹配。
在至少部分算子与kernel cache中存储的至少一个kernel匹配成功的情况下,说明在kernel cache中可以找到与至少部分算子对应的kernel。然后再将用户shape信息传递寄存器中,从而快速生成对应的kernel,无需再次编译。然后基于生成的kernel执行与至少部分算子相关联的操作。
在上述实施方式中,通过将神经网络模型中的各算子与kernel cache中存储的至少一个kernel进行匹配,即使算子的shape发生变化,也能获取kernel cache中的kernel,无需重新生成kernel。通过上述方法,能够在运行时用同一份kernel支持相同算子不同shape输入的张量(tensor),避免重复生成kernel,提高算子的开发效率。
可选地,所述基于所述kernel生成策略,生成所述神经网络模型中各算子对应的目标kernel,具体可以通过步骤1)-步骤2)实现:
步骤1)、在所述至少部分算子的shape大小大于所述缓存器的大小的情况下,基于所述第一kernel生成策略及所述第二kernel生成策略,生成所述至少部分算子对应的kernel;
步骤2)、基于所述第二kernel生成策略,生成除所述至少部分算子之外的算子对应的kernel。
可选地,所述基于所述第一kernel生成策略及所述第二kernel生成策略,生成所述至少部分算子对应的kernel,具体可以通过以下步骤[1]-步骤[4]实现:
步骤[1]、获取所述至少部分算子对应的切分(tiling)策略;所述tiling策略包括外层for循环及内层for循环。
步骤[2]、针对所述外层for循环,执行目标操作;所述目标操作包括以下至少一项:不展开所述外层for循环;在所述外层for循环首尾插入控制流指令。
步骤[3]、基于所述第一kernel生成策略及所述控制流指令,生成所述至少部分算子的所述外层for循环对应的kernel。
步骤[4]、针对所述内层for循环,全展开所述内层for循环,并基于所述第二kernel生成策略,生成所述至少部分算子的所述内层for循环对应的kernel。
可选地,在所述获取所述至少部分算子对应的tiling策略之后,还需要执行以下步骤:
基于所述至少部分算子对应的tiling策略,生成所述tiling策略对应的决策树schedule tree;所述tiling策略中的for循环语句与所述schedule tree中的节点一一对应。
在本发明实施例中,通过将tiling策略转换为schedule tree来表示tiling的for循环,从而实现tiling策略的可配置,在需要对tiling策略更新的情况下,无需重新编写tiling策略,实现了对tiling策略的任意配置。
实际应用中,在至少部分算子的shape大小大于缓存尺寸buffer size的情况下,首先获取至少部分算子对应的tiling策略。针对tiling策略中的外层for循环及内层for循环,有不同的kernel生成方式,具体包括:
一、针对外层for循环。
在kernel生成(kernel generate)的过程中,在识别到至少部分算子的shape大小大于buffer size的情况下,针对外层for循环,需要不展开外层for循环,需要在外层for循环的首尾插入控制流指令(又称跳转指令),以静态生成单个循环的kernel的形式生成kernel。
需要说明的是,由于schedule tree为可配置的,因此可以在schedule tree的任意节点插入控制流指令。
实际应用中,通过硬件资源相关的算法逻辑识别到不展开的外层tiling循环的情况下(即,识别到至少部分算子的shape大小大于buffer size的情况下),需要将控制流指令标记到schedule tree中外层for循环对应的首尾节点上,在相应的节点增加前块prolog、主题循环部分body、尾块epilog三层对应的循环loop部分。
二、针对内层for循环。
针对内层for循环,依然使用全展开的方式生成kernel,与内层for循环相关联的shape信息通过寄存器以变量的形式获取,并存入kernel cache,成为预先编译ahead oftime compile生成的kernel。
可选地,在所述生成所述至少部分算子的所述内层for循环对应的kernel之后,还需要执行以下步骤:
将第一信息以变量的形式缓存至寄存器中;所述第一信息包括与所述至少部分算子的shape相关联的信息。
在本发明实施例中,将与至少部分算子的shape相关联的信息以变量的形式缓存至寄存器,在生成kernel时,直接读取寄存器中与算子shape相关联的变量,避免将shape相关的信息以立即数的形式写在kernel中,提高了生成kernel的效率。
可选地,所述基于所述kernel生成策略,生成所述神经网络模型中各算子对应的目标kernel,还可以通过以下步骤实现:
在所述至少部分算子的shape大小小于或等于所述缓存器的大小的情况下,基于所述第二kernel生成策略,生成所述神经网络模型中各算子对应的所述目标kernel。
具体地,在至少部分算子的shape大小小于或等于buffer size的情况下,即,将至少部分算子对应的tiling策略,以全展开for循环的方式生成kernel。
可选地,在所述基于所述kernel生成策略,生成所述神经网络模型中各算子对应的目标kernel之后,还需要执行以下步骤:
将所述目标kernel存储至内核缓存kernel cache中。
在本发明实施例中,将目标kernel存储至kernel cache中,在神经网络模型发生更新的情况下,将更新后的神经网络模型中的各算子与kernel cache中的kernel进行匹配,即使更新后的神经网络模型中的各算子的shape发生变化,也能获取kernel cache中的kernel,无需重新生成kernel。
在上述实施方式中,能够在神经网络模型发生更新的情况下,用同一份kernel支持相同算子不同shape输入的tensor,避免重复生成kernel,提高算子的开发效率。
图2是本发明提供的kernel生成方法的流程示意图之二,参见图2所示,该方法包括步骤201-步骤210,其中:
步骤201、将神经网络模型中的各算子与kernel cache中存储的至少一个kernel进行匹配。
步骤202、在至少部分算子与kernel cache中存储的至少一个kernel匹配成功的情况下,基于匹配成功的kernel执行与至少部分算子相关联的操作。
在至少部分算子与kernel cache中存储的至少一个kernel匹配失败的情况下,执行步骤203-步骤208,或者执行步骤209。
步骤203、在对神经网络模型进行实时编译的过程中,在神经网络模型中至少部分算子的shape大小大于缓存器的大小的情况下,获取至少部分算子对应的tiling策略;其中,tiling策略包括外层for循环及内层for循环。
步骤204、基于至少部分算子对应的tiling策略,生成tiling策略对应的scheduletree;其中,tiling策略中的for循环语句与schedule tree中的节点一一对应。
步骤205、针对外层for循环,执行目标操作;目标操作包括以下至少一项:不展开外层for循环;在外层for循环首尾插入控制流指令。
步骤206、基于第一kernel生成策略及控制流指令,生成至少部分算子的外层for循环对应的kernel。
具体地,第一kernel生成策略,用于指示基于至少部分算子对应的不展开的for循环生成单个循环的kernel。
步骤207、针对内层for循环,全展开内层for循环,并基于第二kernel生成策略,生成至少部分算子的内层for循环对应的kernel。
具体地,第二kernel生成策略,用于指示基于至少部分算子对应的全展开的for循环生成kernel。
步骤208、基于第二kernel生成策略,生成除至少部分算子之外的算子对应的kernel。
需要说明的是,目标kernel中包括至少部分算子的外层for循环对应的kernel、至少部分算子的内层for循环对应的kernel及除至少部分算子之外的算子对应的kernel。
步骤209、在对神经网络模型进行实时编译的过程中,在神经网络模型中至少部分算子的shape大小小于或等于缓存器的大小的情况下,基于第二kernel生成策略,生成神经网络模型中各算子对应的目标kernel。
步骤210、将目标kernel存储至kernel cache中。
图3是本发明提供的kernel生成方法的逻辑示意图,参见图3:
首先,获取用户定义的神经网络模型或其他神经网络模型。然后将上述模型利用匹配算法(Matching Algorithm)与内核缓存(Kernel Cache)中的kernel进行匹配。
在匹配成功的情况下,在图形处理器(Graphics Processing Unit,GPU)上利用匹配成功的kernel执行模型中各算子的相关操作。
在匹配失败的情况下,回退至JIT编译过程。即,利用JIT进行编译优化(compiler)。其中,compiler过程包括:
1、转换为静态图(Convert to a Graph)。
2、优化过程,包括决定是否展开for循环的决策。(Optimization Passes:includedecision on non-unroll dims)。
3、构建切分tiling策略(Construct Tiling Strategy)。
4、解析为决策树(Split Schedule tree)。
5、对shape与寄存器进行绑定(Combine registers with dynamic shape)。
6、插入控制流指令(Insert Control ops)。
在利用JIT进行编译compile之后,代码生成,在汇编文件(Assembly,ASM文件)中生成有携带控制流指令的kernel。然后将携带控制流指令的kernel的ASM文件存储至Kernel Cache。
最后,在GPU上执行携带控制流指令的kernel。
下面对本发明提供的kernel生成装置进行描述,下文描述的kernel生成装置与上文描述的kernel生成方法可相互对应参照。图4是本发明提供的kernel生成装置的结构示意图,如图4所示,该kernel生成装置400包括:确定模块401、第一生成模块402,其中:
确定模块401,用于在对神经网络模型进行实时编译JIT的过程中,基于缓存器的大小及所述神经网络模型中至少部分算子的形状shape大小,确定所述神经网络模型中至少部分算子对应的kernel生成策略;
第一生成模块402,用于基于所述kernel生成策略,生成所述神经网络模型中各算子对应的目标kernel,所述目标kernel中包括所述至少部分算子对应的kernel;
其中,所述kernel生成策略包括以下至少一项:
第一kernel生成策略,用于指示基于所述至少部分算子对应的不展开的for循环生成单个循环的kernel;
第二kernel生成策略,用于指示基于所述至少部分算子对应的全展开的for循环生成kernel。
本发明提供的kernel生成装置,通过在对神经网络模型进行实时编译JIT的过程中,基于缓存器的大小及神经网络模型中至少部分算子的shape大小,确定神经网络模型中至少部分算子对应的kernel生成策略;其中,kernel生成策略包括以下至少一项:第一kernel生成策略,用于指示基于至少部分算子对应的不展开的for循环生成单个循环的kernel,第二kernel生成策略,用于指示基于至少部分算子对应的全展开的for循环生成kernel;然后,基于kernel生成策略,生成神经网络模型中各算子对应的目标kernel;通过上述方法,可以针对至少部分算子,以静态生成单个循环的kernel的形式生成kernel,使得单次生成kernel的时长可以得到有效缩短,提高了算子开发效率。
可选地,所述第一生成模块402,进一步用于:
在所述至少部分算子的shape大小大于所述缓存器的大小的情况下,基于所述第一kernel生成策略及所述第二kernel生成策略,生成所述至少部分算子对应的kernel;
基于所述第二kernel生成策略,生成除所述至少部分算子之外的算子对应的kernel。
可选地,所述第一生成模块402,进一步用于:
获取所述至少部分算子对应的tiling策略;所述tiling策略包括外层for循环及内层for循环;
针对所述外层for循环,执行目标操作;所述目标操作包括以下至少一项:不展开所述外层for循环;在所述外层for循环首尾插入控制流指令;
基于所述第一kernel生成策略及所述控制流指令,生成所述至少部分算子的所述外层for循环对应的kernel;
针对所述内层for循环,全展开所述内层for循环,并基于所述第二kernel生成策略,生成所述至少部分算子的所述内层for循环对应的kernel。
可选地,所述装置还包括:
第一缓存模块,用于将第一信息以变量的形式缓存至寄存器中;所述第一信息包括与所述至少部分算子的shape相关联的信息。
可选地,所述装置还包括:
第二生成模块,用于基于所述至少部分算子对应的tiling策略,生成所述tiling策略对应的决策树schedule tree;所述tiling策略中的for循环语句与所述scheduletree中的节点一一对应。
可选地,所述第一生成模块402,进一步用于:
在所述至少部分算子的shape大小小于或等于所述缓存器的大小的情况下,基于所述第二kernel生成策略,生成所述神经网络模型中各算子对应的所述目标kernel。
可选地,所述装置还包括:
第二缓存模块,用于将所述目标kernel存储至内核缓存kernel cache中。
可选地,所述装置还包括:
匹配模块,用于将所述神经网络模型中的各算子与kernel cache中存储的至少一个kernel进行匹配;
执行模块,用于在至少部分算子与所述kernel cache中存储的至少一个kernel匹配成功的情况下,基于匹配成功的kernel执行与所述至少部分算子相关联的操作。
图5示例了一种电子设备的实体结构示意图,如图5所示,该电子设备可以包括:处理器(processor)510、通信接口(Communications Interface)520、存储器(memory)530和通信总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。处理器510可以调用存储器530中的逻辑指令,以执行kernel生成方法,该方法包括:在对神经网络模型进行实时编译JIT的过程中,基于缓存器的大小及所述神经网络模型中至少部分算子的形状shape大小,确定所述神经网络模型中至少部分算子对应的kernel生成策略;基于所述kernel生成策略,生成所述神经网络模型中各算子对应的目标kernel,所述目标kernel中包括所述至少部分算子对应的kernel;其中,所述kernel生成策略包括以下至少一项:第一kernel生成策略,用于指示基于所述至少部分算子对应的不展开的for循环生成单个循环的kernel;第二kernel生成策略,用于指示基于所述至少部分算子对应的全展开的for循环生成kernel。
此外,上述的存储器530中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的kernel生成方法,该方法包括:在对神经网络模型进行实时编译JIT的过程中,基于缓存器的大小及所述神经网络模型中至少部分算子的形状shape大小,确定所述神经网络模型中至少部分算子对应的kernel生成策略;基于所述kernel生成策略,生成所述神经网络模型中各算子对应的目标kernel,所述目标kernel中包括所述至少部分算子对应的kernel;其中,所述kernel生成策略包括以下至少一项:第一kernel生成策略,用于指示基于所述至少部分算子对应的不展开的for循环生成单个循环的kernel;第二kernel生成策略,用于指示基于所述至少部分算子对应的全展开的for循环生成kernel。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的kernel生成方法,该方法包括:在对神经网络模型进行实时编译JIT的过程中,基于缓存器的大小及所述神经网络模型中至少部分算子的形状shape大小,确定所述神经网络模型中至少部分算子对应的kernel生成策略;基于所述kernel生成策略,生成所述神经网络模型中各算子对应的目标kernel,所述目标kernel中包括所述至少部分算子对应的kernel;其中,所述kernel生成策略包括以下至少一项:第一kernel生成策略,用于指示基于所述至少部分算子对应的不展开的for循环生成单个循环的kernel;第二kernel生成策略,用于指示基于所述至少部分算子对应的全展开的for循环生成kernel。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (12)
1.一种核函数kernel生成方法,其特征在于,包括:
在对神经网络模型进行实时编译JIT的过程中,基于缓存器的大小及所述神经网络模型中至少部分算子的形状shape大小,确定所述神经网络模型中至少部分算子对应的kernel生成策略;
基于所述kernel生成策略,生成所述神经网络模型中各算子对应的目标kernel,所述目标kernel中包括所述至少部分算子对应的kernel;
其中,所述kernel生成策略包括以下至少一项:
第一kernel生成策略,用于指示基于所述至少部分算子对应的不展开的for循环生成单个循环的kernel;
第二kernel生成策略,用于指示基于所述至少部分算子对应的全展开的for循环生成kernel。
2.根据权利要求1所述的kernel生成方法,其特征在于,所述基于所述kernel生成策略,生成所述神经网络模型中各算子对应的目标kernel,包括:
在所述至少部分算子的shape大小大于所述缓存器的大小的情况下,基于所述第一kernel生成策略及所述第二kernel生成策略,生成所述至少部分算子对应的kernel;
基于所述第二kernel生成策略,生成除所述至少部分算子之外的算子对应的kernel。
3.根据权利要求2所述的kernel生成方法,其特征在于,所述基于所述第一kernel生成策略及所述第二kernel生成策略,生成所述至少部分算子对应的kernel,包括:
获取所述至少部分算子对应的切分tiling策略;所述tiling策略包括外层for循环及内层for循环;
针对所述外层for循环,执行目标操作;所述目标操作包括以下至少一项:不展开所述外层for循环;在所述外层for循环首尾插入控制流指令;
基于所述第一kernel生成策略及所述控制流指令,生成所述至少部分算子的所述外层for循环对应的kernel;
针对所述内层for循环,全展开所述内层for循环,并基于所述第二kernel生成策略,生成所述至少部分算子的所述内层for循环对应的kernel。
4.根据权利要求3所述的kernel生成方法,其特征在于,在所述生成所述至少部分算子的所述内层for循环对应的kernel之后,所述方法还包括:
将第一信息以变量的形式缓存至寄存器中;所述第一信息包括与所述至少部分算子的shape相关联的信息。
5.根据权利要求3所述的kernel生成方法,其特征在于,在所述获取所述至少部分算子对应的tiling策略之后,所述方法还包括:
基于所述至少部分算子对应的tiling策略,生成所述tiling策略对应的决策树schedule tree;所述tiling策略中的for循环语句与所述schedule tree中的节点一一对应。
6.根据权利要求1所述的kernel生成方法,其特征在于,所述基于所述kernel生成策略,生成所述神经网络模型中各算子对应的目标kernel,包括:
在所述至少部分算子的shape大小小于或等于所述缓存器的大小的情况下,基于所述第二kernel生成策略,生成所述神经网络模型中各算子对应的所述目标kernel。
7.根据权利要求1至6中任一项所述的kernel生成方法,其特征在于,在所述基于所述kernel生成策略,生成所述神经网络模型中各算子对应的目标kernel之后,所述方法还包括:
将所述目标kernel存储至内核缓存kernel cache中。
8.根据权利要求1至6中任一项所述的kernel生成方法,其特征在于,在所述基于缓存器的大小及所述神经网络模型中至少部分算子的形状shape大小,确定所述神经网络模型中至少部分算子对应的kernel生成策略之前,所述方法还包括:
将所述神经网络模型中的各算子与kernel cache中存储的至少一个kernel进行匹配;
在至少部分算子与所述kernel cache中存储的至少一个kernel匹配成功的情况下,基于匹配成功的kernel执行与所述至少部分算子相关联的操作。
9.一种核函数kernel生成装置,其特征在于,包括:
确定模块,用于在对神经网络模型进行实时编译JIT的过程中,基于缓存器的大小及所述神经网络模型中至少部分算子的形状shape大小,确定所述神经网络模型中至少部分算子对应的kernel生成策略;
第一生成模块,用于基于所述kernel生成策略,生成所述神经网络模型中各算子对应的目标kernel,所述目标kernel中包括所述至少部分算子对应的kernel;
其中,所述kernel生成策略包括以下至少一项:
第一kernel生成策略,用于指示基于所述至少部分算子对应的不展开的for循环生成单个循环的kernel;
第二kernel生成策略,用于指示基于所述至少部分算子对应的全展开的for循环生成kernel。
10.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至8任一项所述核函数kernel生成方法。
11.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至8任一项所述核函数kernel生成方法。
12.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至8任一项所述核函数kernel生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311166179.3A CN117170681A (zh) | 2023-09-08 | 2023-09-08 | 核函数生成方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311166179.3A CN117170681A (zh) | 2023-09-08 | 2023-09-08 | 核函数生成方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117170681A true CN117170681A (zh) | 2023-12-05 |
Family
ID=88929671
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311166179.3A Pending CN117170681A (zh) | 2023-09-08 | 2023-09-08 | 核函数生成方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117170681A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117591776A (zh) * | 2024-01-18 | 2024-02-23 | 北京壁仞科技开发有限公司 | 用于计算的方法、计算装置、介质和程序产品 |
CN117908967A (zh) * | 2024-03-15 | 2024-04-19 | 北京壁仞科技开发有限公司 | 支持动态形状的计算的方法、装置、介质和程序产品 |
-
2023
- 2023-09-08 CN CN202311166179.3A patent/CN117170681A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117591776A (zh) * | 2024-01-18 | 2024-02-23 | 北京壁仞科技开发有限公司 | 用于计算的方法、计算装置、介质和程序产品 |
CN117591776B (zh) * | 2024-01-18 | 2024-05-03 | 北京壁仞科技开发有限公司 | 用于计算的方法、计算装置、介质和程序产品 |
CN117908967A (zh) * | 2024-03-15 | 2024-04-19 | 北京壁仞科技开发有限公司 | 支持动态形状的计算的方法、装置、介质和程序产品 |
CN117908967B (zh) * | 2024-03-15 | 2024-05-31 | 北京壁仞科技开发有限公司 | 支持动态形状的计算的方法、装置、介质和程序产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN117170681A (zh) | 核函数生成方法、装置、电子设备及存储介质 | |
CN111880807A (zh) | 深度学习编译方法、装置、设备及存储介质 | |
US11803404B2 (en) | Deep learning algorithm compiling method, device, and related product | |
JP6141365B2 (ja) | 逐次コンピュータプログラムコードを並列処理する方法及びシステム | |
CN111178517B (zh) | 模型部署方法、系统、芯片、电子设备及介质 | |
WO2021057252A1 (zh) | 一种业务处理流程配置方法、业务请求处理方法及装置 | |
KR20190054770A (ko) | 커널을 이용한 컨볼루션 연산 처리 방법 및 장치 | |
US7386843B2 (en) | Method and system for register allocation | |
US11461291B2 (en) | Method, electronic device and computer program product for processing machine learning model | |
CN111191789B (zh) | 模型优化部署系统、芯片、电子设备及介质 | |
US20220172044A1 (en) | Method, electronic device, and computer program product for deploying machine learning model | |
CN110633785A (zh) | 一种卷积神经网络的计算方法及系统 | |
CN115576699A (zh) | 数据处理方法、装置、ai芯片、电子设备及存储介质 | |
CN117609670A (zh) | 支持动态形状的计算的方法、装置、介质和程序产品 | |
CN117591776A (zh) | 用于计算的方法、计算装置、介质和程序产品 | |
CN117291259A (zh) | 算子优化方法、装置、电子设备及存储介质 | |
CN116523052B (zh) | 一种快速推理方法、装置及设备 | |
CN116796289A (zh) | 算子处理方法、装置、电子设备及存储介质 | |
CN116954615A (zh) | 一种基于TensorIR的TPU自动张量化方法 | |
JP3683281B2 (ja) | メモリアクセスの高速化処理装置および方法 | |
CN115907013A (zh) | 人工智能模型的算子的管理系统、方法、设备和介质 | |
CN111340175B (zh) | 图重写的处理方法及装置、计算设备及可读介质 | |
CN110689475A (zh) | 一种图像数据处理方法、系统、电子设备及存储介质 | |
CN118093847B (zh) | 应答信息生成方法、系统、装置、设备、介质及程序产品 | |
CN115186813B (zh) | 张量引用算子在深度学习编译器中的表示及融合方法 |
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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Country or region after: China Address after: 201114 room 1302, 13 / F, building 16, 2388 Chenhang Road, Minhang District, Shanghai Applicant after: Shanghai Bi Ren Technology Co.,Ltd. Address before: 201114 room 1302, 13 / F, building 16, 2388 Chenhang Road, Minhang District, Shanghai Applicant before: Shanghai Bilin Intelligent Technology Co.,Ltd. Country or region before: China |