CN117331541A - 面向动态图框架和异构芯片的编译与运行方法和装置 - Google Patents

面向动态图框架和异构芯片的编译与运行方法和装置 Download PDF

Info

Publication number
CN117331541A
CN117331541A CN202311411611.0A CN202311411611A CN117331541A CN 117331541 A CN117331541 A CN 117331541A CN 202311411611 A CN202311411611 A CN 202311411611A CN 117331541 A CN117331541 A CN 117331541A
Authority
CN
China
Prior art keywords
graph
compiling
intermediate representation
framework
dynamic
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
Application number
CN202311411611.0A
Other languages
English (en)
Other versions
CN117331541B (zh
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.)
Beijing Zhiyuan Artificial Intelligence Research Institute
Original Assignee
Beijing Zhiyuan Artificial Intelligence Research Institute
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 Beijing Zhiyuan Artificial Intelligence Research Institute filed Critical Beijing Zhiyuan Artificial Intelligence Research Institute
Priority to CN202311411611.0A priority Critical patent/CN117331541B/zh
Publication of CN117331541A publication Critical patent/CN117331541A/zh
Application granted granted Critical
Publication of CN117331541B publication Critical patent/CN117331541B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • 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)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了面向动态图框架和异构芯片的编译与运行方法和装置,属于人工智能技术领域。该方法包括,针对动态图框架注册编译器接口,以向编译器提供待编译对象,从动态图框架中获取FX graph计算图;将FX graph计算图编译生成中间表示并进行优化,基于中间表示生成设备可执行代码,构建输出计算图,其中中间表示与前端框架及芯片架构无关;获取并执行输出计算图,根据计算图节点的属性信息为每个计算图节点分配设备资源,等待设备调度执行。本发明提升了编译器跨平台性和易迁移性。

Description

面向动态图框架和异构芯片的编译与运行方法和装置
技术领域
本发明涉及人工智能技术领域,尤其涉及面向动态图框架和异构芯片的编译与运行方法和装置。
背景技术
随着人工智能技术的快速发展,编译器对于优化性能和端到端易用性是至关重要的。在性能优化方面,编译器可以显著提升框架和芯片使用性能。例如,面向Tensorflow框架和谷歌TPU加速器设计的XLA编译器,可以平均提升模型性能两倍以上,而英伟达的Cuda编译器能够充分利用GPU特性,为用Cuda编写的算子提供了高性能代码生成。在端到端易用性方面,编译器自动将高层算子翻译成底层实现,模型开发者无需过分关注算子性能问题。
然而随着GPU和人工智能芯片产业的繁荣,编译器面临多种硬件带来的横向跨平台适配问题。摩尔定律的终结带动了异构加速器架构的蓬勃发展,人工智能可用的GPU和智能芯片越来越多,然而由于不同架构的硬件往往需要不同的编程模型和优化方法。在满足AI算力增长需求的同时,难以通过一种统一的流程高效地适配并充分利用多种芯片,因此框架和编译器的跨平台性成为人工智能基础软件的难题。目前的主流解决方案仍然以适配完整的算子库为主,这必然导致软硬件适配的M*N工作量***问题,其中M代表多种前端框架或者算子库,N代表多种后端芯片。而另一方面,基于单一框架和单一芯片的编译器虽然能够优化性能和易用性,但无法实现跨平台高效适配,因此目前的框架和编译器限制了人工智能对多种算力资源的充分利用。
发明内容
为了解决现有技术中人工智能框架存在的上述易用性和跨平台性问题,本发明提供了如下技术方案。
本发明在第一方面提供了一种面向动态图框架和异构芯片的编译与运行方法,包括:
针对动态图框架注册编译器接口,以向编译器提供待编译对象,并从所述动态图框架中获取FX graph计算图;
将所述FX graph计算图编译生成中间表示并进行优化,基于所述中间表示生成设备可执行代码,构建输出计算图,其中所述中间表示与前端框架及芯片架构无关:
获取并执行所述输出计算图,根据计算图节点的属性信息为每个计算图节点分配设备资源,等待设备调度执行。
优选地,所述针对动态图框架注册编译器接口,进一步包括:
将追踪获取的计算图以参数形式传递给面向所述动态图框架的字节码追踪器的自动微分变换接口,
以所述自动微分变换接口为跳板函数,将所述计算图传递给所述字节码追踪器的控制入口,从而完成编译器与所述动态图框架的对接。
优选地,所述从所述动态图框架中获取FX graph计算图,进一步包括:
判断是否命中编译缓存,若命中则跳过追踪,直接执行编译后的目标函数,否则追踪执行并获取所述计算图。
优选地,所述基于所述中间表示生成设备可执行代码,进一步包括:
根据不同芯片指令集,将所述中间表示切分成多个可执行区域,每个区域针对不同芯片指令集生成可执行代码,以可执行区域为节点构建输出计算图。
优选地,将所述FX graph计算图编译生成中间表示,进一步包括:
遍历所输入的FX graph计算图,对FX graph计算图中的每个节点,查询其算子对应的下降规则,调用所述下降规则生成中间表示的构建函数;
基于所述编译器接口的输入,构建与其类型和形状信息相符的符号输入,根据所述符号输入调用所述中间表示的构建函数,将函数返回结果作为所述中间表示。
优选地,所述将所述FX graph计算图编译生成中间表示并进行优化,进一步包括:
利用编译器优化算法优化所述中间表示,所述编译器优化算法包括死代码删除(DCE)、公共子表达式(CSE)、常数传播(CP)、常数折叠(CF)或全局值编号(GVN)。
优选地,所述根据计算图节点的属性信息为每个计算图节点分配设备资源,等待设备调度执行,进一步包括:
将计算图节点送入调度线程的就绪队列;
从调度线程的就绪队列中取出计算图节点,根据输入输出设备信息确定将该节点发送到哪一个设备执行;
如果执行过程中出现跨设备的依赖,则***信号等待。
本发明在第二方面提供了一种面向动态图框架和异构芯片的编译与运行平台,包括:
框架接口单元,用于针对动态图框架注册编译器接口,以向编译器提供待编译对象,并从所述动态图框架中获取FX graph计算图;
编译单元,用于将所述FX graph计算图编译生成中间表示并进行优化,基于所述中间表示生成设备可执行代码,构建输出计算图,其中所述中间表示与前端框架及芯片架构无关;
运行时执行单元,用于获取并执行所述输出计算图,根据计算图节点的属性信息为每个计算图节点分配设备资源,等待设备调度执行。
本发明第三方面提供了一种电子设备,包括处理器和存储器,所述存储器存储有多条指令,所述处理器用于读取所述指令并执行前述第一方面的方法。
本发明第四方面提供了一种存储介质,所述存储介质存储有多条指令,所述多条指令可被处理器读取并执行前述第一方面的方法。
本发明的有益效果是:
本发明的面向动态图框架和异构芯片的编译与运行方法和平台,基于框架和芯片架构无关的BSIL中间表示进行优化变换,面向不同芯片指令集生成可执行kernel代码并构建计算图。运行时***根据输入输出信息和设备信息自动调度kernel代码在目标设备上执行,完成执行前的资源准备及执行后的资源回收,并管理设备代码缓存,实现了动态图框架下对用户透明的多芯片跨平台编译和执行,提升了编译器跨平台性和易迁移性。
附图说明
图1示出了本发明所述的面向动态图框架和异构芯片的编译与运行平台的***架构示意图。
图2示出了本发明所述的BSIL中间表示的层次结构示意图。
图3示出了本发明所述的面向动态图框架和异构芯片的编译与运行方法的流程图。
图4示出了本发明所述的框架接口单元的执行过程示意图。
图5示出了本发明所述的编译单元的执行过程示意图。
图6示出了本发明所述的运行时执行单元的执行过程示意图。
具体实施方式
为了更好地理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案做详细的说明。
本发明提供的方法可以在如下的终端环境中实施,该终端可以包括一个或多个如下部件:处理器、存储器和显示屏。其中,存储器中存储有至少一条指令,所述指令由处理器加载并执行以实现下述实施例所述的方法。
处理器可以包括一个或者多个处理核心。处理器利用各种接口和线路连接整个终端内的各个部分,通过运行或执行存储在存储器内的指令、程序、代码集或指令集,以及调用存储在存储器内的数据,执行终端的各种功能和处理数据。
存储器可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory,ROM)。存储器可用于存储指令、程序、代码、代码集或指令。
显示屏用于显示各个应用程序的用户界面。
除此之外,本领域技术人员可以理解,上述终端的结构并不构成对终端的限定,终端可以包括更多或更少的部件,或者组合某些部件,或者不同的部件布置。比如,终端中还包括射频电路、输入单元、传感器、音频电路、电源等部件,在此不再赘述。
本发明利用Pytorch动态图框架的字节码分析功能动态获取FX graph格式计算图,逐条编译FX graph计算图节点,生成与前端框架及芯片架构无关的编译器中间表示,称为BSIL,该中间表示是基于加速计算的抽象表示,用于抽取不同异构芯片编程的共性特征。然后对BSIL中间表示进行优化变换,面向不同芯片指令集,将中间表示切分成多个可执行区域,每个区域针对不同芯片指令集生成可执行代码,以可执行区域为节点构建输出计算图;调用运行时***执行输出计算图,运行时***根据输出计算图节点间的依赖关系和输入状态调度执行各节点,根据输入输出信息和设备信息自动为计算图节点分配设备内存并执行跨设备数据拷贝。后端芯片驱动实现统一的运行时设备接口driver agent,以与运行时***进行交互,实现动态图框架下对用户透明的多芯片跨平台编译和执行功能。
下文结合编译器和运行时***整体架构及执行流程对本发明的方法进行详细说明。
如图1所示,本发明的方法由面向动态图框架和异构芯片的编译和运行时平台执行,该编译和运行时平台包括框架接口单元、编译单元和运行时执行单元。
所述框架接口单元是编译器、运行时***与用户程序和框架间建立的交互界面,提供有用户程序接口、编译器接口、运行时接口和框架交互接口等API,用户程序的控制流通过框架接口单元进入编译器和运行时的控制域。所述用户程序接口用于包装需要编译的目标函数,维护函数的用户状态和指标信息。所述框架交互接口用于启动动态图框架,并向动态图框架问询函数执行状态。所述动态图框架追踪目标函数执行,从字节码中获取目标函数的内在表示即计算图,调用编译器接口对获取的计算图进行编译,编译完成后,通过运行时接口进入设备调度队列等待设备调度执行。
所述编译单元用于编译优化和代码生成,所述编译单元首先从所述编译器接口中获取FX graph格式计算图,将FX graph计算图编译成BSIL IR(BSIL中间表示),对BSIL IR进行分析和优化,调用后端代码生成器生成可执行设备代码,构建输出计算图。
所述运行时执行单元用于执行编译单元得到的输出计算图,包括管理内存生命周期,调度算子执行顺序,管理加速器设备,提交设备执行命令,接收和处理执行结果。
其中所述BSIL中间表示是一种以操作为基本单位的递归表示,其层次结构如图2所示。其中:
编译上下文是IR的顶层容器,定义了IR最外层作用域,包含最外层所有操作,管理全局符号表、属性表和常量池;
操作是IR基本语义单位,一个操作由类型、操作码、操作数、操作属性及Payload(可选的)构成,每个操作均定义一个有明确语义含义的程序步骤;
操作数既可以指向其生产者操作,也可以指向常量池中的元素;
Payload是附属于特定操作的IR容器,其定义一个局部作用域,包含一系列局部操作,Payload本身也可定义一系列属性,用于制导编译行为或用作该作用域中所有操作的默认属性;
以下是BSIL IR的文字表示示例,其语义是首先定义一个函数foo.1,再以输入i.1为参数调用foo.1,最后将函数结果o.1用作IR的输出。在IR中{{}}及{}表示作用域范围,!表示属性,<5,3>:f32表示形状为单元类型为f32且形状为5x3的张量类型,fn表示函数定义操作,exp表示指数操作,permute表示转置操作,call表示函数调用操作,INPUT声明输入,OUTPUT声明输出。
mod={{
!dtype=f32
!strides=[1,2,3,4]
!shape=[1,2,3,4]
INPUT i.1<5,3>:f32
foo.1=fn{
e.1<5,3>:f32=exp i.1
e.3<5,3>:f32=permute e.1[4,3,2,1,0]
OUTPUT e.3
}
o.1<5,3>:f32=call foo.1i.1
OUTPUT o.1
}}
如图3所示,本发明第一方面提供了一种面向动态图框架和异构芯片的编译与运行方法,包括:
S101、针对动态图框架注册编译器接口,以向编译器提供待编译对象,并从所述动态图框架中获取FX graph计算图。
所述步骤S101由框架接口单元执行。参见图4,根据具体的实施例,所述步骤S101进一步包括:
S111、构建BSILFunction对象。
BSILFunction对象的构建过程主要是为成员变量设置初始值,其成员变量包括target_fn、meta、frontend、backend、obj和stat。其中target_fn是编译的目标函数,meta是用于控制编译行为的元数据,frontend是前端框架单元,backend是设备后端对象,obj是前端框架返回的新的入口函数或者后端可执行的编译对象,stat是运行行为指标数据。
根据具体实施例,BSILFunction对象的Python实现实例如下代码所示:
S112、将编译器作为回调函数传递给前端框架的字节码追踪器。
在该实施例中,前端框架单元BSILPytorchFrontend提供compile接口,用于向前端动态图框架注册编译器回调函数compile_fx,返回待进入的新的入口函数。
当用于训练场景时,在将追踪获取的计算图传递给编译器前先进行自动微分,因此编译器无需区分神经网络的前向算子与反向算子;在Pytorch 2.0的实现中,传递编译器回调函数的方法是,先以参数形式传递给aot_autograd,再以其为跳板函数传递给torch.compile,从而完成编译器与框架前端的对接。其中所述aot_autograd是Pytorch面向字节码追踪器的自动微分变换接口,所述torch.compile是Pytorch 2.0框架字节码追踪器的控制入口。
在具体的实施例中,针对Pytorch 2.0动态图框架的代码示例如下:
class BSILPytorchFrontend(BSILFrontendBase):
...
def compile(self,target_fn,*params):
...
backend=params[‘backend’]
def compile_fx(gm:torch.fx.GraphModule,inputs:List[torch.Tensor]):
“””Compiles a FX graph passed from dynamo”””
#Generates BSIL IR
ir=lower_fx(gm,inputs)
return backend.codegen(ir)
compiled_fn=torch,compile(
target_fn,backend=aot_autograd(fw_compiler=compile_fx)
)
torch._dynamo.reset()
S1l3、执行BSILFunction对象。
以步骤S111的示例代码为例,即以输入参数调用BSILFunction的_call_方法,进入后检查前端compile接口返回的对象obj是否可调用,如果是,则直接调用obj,否则需要显式启动后端单元的run方法执行obj。对Pytorch 2.0而言,compile接口返回的是进入字节码追踪器控制器的入口函数,因此调用该函数即启动追踪执行过程,追踪时首先判断是否命中编译缓存,若命中则跳过追踪,直接执行编译后的目标函数,否则追踪执行并获取计算图。
S1l4、在获取FX graph计算图之后,调用编译器回调函数,生成可执行代码,输出计算图。
以步骤S112中的compile_fx即为编译器回调函数示例,其gm参数是框架字节码追踪器捕获的FX graph计算图,inputs是目标函数的输入。compile_fx执行两个步骤,第一步是将FX graph计算图编译成BSIL IR,第二步是调用后端设备代码生成器生成设备可执行代码,返回输出计算图。
S115、当再次调用编译后的BSILFunction时,进入_call_方法的过程与S113相同,首先判断对象obj是否可调用,是则直接调用执行,否则需要显式启动后端单元的run方法执行obj。不论哪种情况,若编译缓存项未被释放,则从缓存中获取编译生成的计算图,启动后端运行时***调度执行。
作为具体实施例,以下给出框架接口单元的用户程序示例代码:
def vecadd(x,y):
z=x+y
retum z
size=10
x=torch.rand(size,device=device)
y=torch.rand(size,device=device)
torch_resu1t=x+y
bsil_function=BSILFunction(vecadd,frontend=’pt2’,backend=’pt2_triton’)
bsil_result=bsil_function(x,y)
以向量加法为例,用户编译和执行一个函数仅需两步,第一步是构建BSILFunction对象,第二步是以一般函数的形式调用生成的BSILFunction对象,编译器将后端实现完全封装起来,用户无需关系底层细节。
S102、将所述FX graph计算图编译生成中间表示并进行优化,所述中间表示与前端框架及芯片架构无关,并基于所述中间表示生成设备可执行代码,构建输出计算图。
所述步骤S102由所述编译单元执行。编译单元的执行流程如图5所示。根据具体的实施例,所述步骤S102进一步包括:
S121、遍历由所述框架接口单元在S114输入的FX graph计算图,对计算图中的每个节点,查询其算子对应的下降规则,调用该规则生成BSIL builder节点。以下代码示例展示了sum和addmm两个Pytorch算子的下降规则,规则返回新的函数类型FX graph节点,在该实施例中返回的节点分别对应构建XReduce和Join类型BSIL IR操作的构建函数,因此在遍历输入FX graph并调用相应的下降规则后,即生成了一个BSIL IR的完整构建函数。
S122、基于框架接口单元在步骤S113的输入,构建与其类型和形状信息相符的符号输入,以生成的符号输入为参数,调用S121生成的BSIL IR构建函数,该函数的返回结果为中间表示BSIL IR。
S123、利用编译器优化算法优化中间表示BSIL IR。优化算法例如死代码删除(DCE)、公共子表达式(CSE)、常数传播(CP)、常数折叠(CF)或全局值编号(GVN)等,然后基于代价模型进行算子融合、拆分及平铺(tiling)等变换,最后生成优化后的后端无关的BSILIR中间表示。
S124,调用后端代码生成器生成设备可执行代码,构建输出计算图,返回框架接口单元的步骤Sl14,编译过程结束。具体地,FX graph计算图中的每个节点表示单个算子,算子本身只有附带可执行代码的信息(如地址)才能执行,利用编译后得到的一系列可执行代码创建一个新的FX graph计算图,将可执行代码的地址信息存入对应的计算图节点,得到输出计算图。
S103、获取并执行所述输出计算图,根据计算图节点的属性信息为每个计算图节点分配设备资源,等待设备调度执行。
在步骤S103中,运行时执行单元用于执行编译生成的计算图,流程如图6所示。根据具体的实施例,所述步骤S103进一步包括:
S1 31、接收编译器返回的计算图,遍历计算图节点,当节点kernel代码不在缓存中时,调用设备编译器生成可执行二进制kernel代码,同时为kernel添加缓存项;
S132、与步骤S131同时,扫描输出计算图,将未结束的节点及其输入的状态发送到状态机中执行,当节点的输入及其代码生成均完毕时,将节点送入调度线程的就绪队列;
S133、从调度线程的就绪队列中取出节点,根据输入输出设备信息确定将该节点发送到哪一个设备执行;如果执行过程中出现跨设备的依赖,则***信号等待;
S134、每个设备启动一个工作线程,用于对该设备自身资源的管理,如设备内存管理,包括内存的分配和回收。
根据优选的实施例,所述步骤S132的计算图调度方法可以进一步包括:
S1321、对计算图进行拓扑排序,得到待调度的任务队列q;
S1322、逐个调度队列q中的任务t,以确定将q放置在设备中的哪一个流(stream)中,具体计算方法为:
如果任务t仅与其中一个stream中的任务存在依赖,则将任务t放入该stream;
如果两个stream都有依赖,则任务t选择依赖项更接近“队尾”的stream;
如果都没有依赖,则选择任务较少的stream;
如果任务t依赖于被调度stream之外的内容,则需要在两个stream中放入一个signal对象,实现同步;
如果其中有一个stream中积压的任务过多,例如任务数量大于阈值,则暂停调度。
BSIL采用一组通用张量并行模式刻画加速计算,将不同异构芯片编程的共性特征抽取出来,使用通用的并行模式表示加速计算操作是实现编译器跨平台性和易迁移性的关键特性。
所述张量并行模式是BSIL IR中除基础标量操作和控制流操作之外的主要操作类型,按读写复杂度和计算复杂度将张量操作分为四类,分别是view、map、reduce和join,每类模式又包括一个或多个具体的操作,其对应关系见下表1。
表1
四种张量并行模式中,view不涉及张量读写,map和reduce是访存密集型操作,计算复杂度与读写复杂度相当,单位带宽FLOPS较低,而join是计算密集型操作,单位带宽FLOPS比较高,这几种模式的读写与计算复杂性的关系一般是恒定不变的,通常不受后端架构影响,基于该并行模式的等价变换是支持跨平台迁移的关键。
以下给出张量计算模式中每个算子的详细说明。
View操作语法
#输入、输出均为张量类型
<输出>=view<输入>{{
INPUT<输出索引变量>…
索引影射计算
OUTPUT<输入索引变量>…
}}
View操作示例
#表示transpose
transpose_out=view x{{
INPUT i,j:u64
OUTPUTj,i
}}
#表示broadcast
broadcast_out=view x{{
INPUT i,j,k,1:u64
OUTPUTj,0,1
}}
#表示reshape
reshape_out=view x{{
INPUT i,j:u64
CONST reshape=[4,5]
nr,nc=dims x
off_0=mul i nc
off=add off_0 j
out_i,out_j=idiv off reshape[1]
OUTPUT out_i,out_j
}}
#表示slice
slice_out=view x{{
INPUT i,j:u64
jx2=mulj 2
out_j=add jx2 1
OUTPUT i,out_j
}}
#表示fold
fold_out<3,4,2,2>=view x{{
INPUT bi,bj,ki,kj:u64
i,j=add[bi,bj][ki,kj]
OUTPUT i,j
}}
Map操作语法
#输入、输出均为张量类型
<输出>=map<输入1>[<输入2>…]{{
INPUT<输入切片1>[<输入切片2>…]
切片计算
OUTPUT<输出切片>…
}}
Map操作示例
#表示iota
iota_out<5,4>:f32=cexpr_map{{
INPUT i,j:u64
out:f32=convert j
OUTPUT out
}}
#表示pointwise exp(x-y)
v1<5,3>:f32=map x0 x1{{
INPUT arg0,arg1:f32
y0=sub arg0 arg 1
y1=exp y0
OUTPUT yl
}}
Reduce操作语法
#输入为张量类型
<输出1>[,<输出2>…]=map<输入1>[<输入2>…][!规约类型][{{
INPUT<聚合切片1>[,<聚合切片2>…],<输入切片1>[,<输入切片2>…]
切片计算
OUTPUT<输出切片1>[,<输出切片2>]
}}]
规约类型=add,min,max,argmin,argmax
Reduce操作示例
x<100>=rand
#表示sum
x_sum=reduce x!add
#min,argmin
a<100>=cexpr_map{{
INPUT i
OUTPUT i
}}
x_min,x_argmin=reduce x a{{
INPUT r0,r1,s0,s1
p=compare.lt r0,s0
r0_new=select p r0 s0
r1_new=select p r1 s1
OUTPUT r0_new,r1_new
}}
Join操作语法
#输入、输出均为张量类型
<输出>=join<输入1><输入2>[!消去类型][{{
INPUT<输入切片1>,<输入切片2>
切片计算
OUTPUT<输出切片>
}}]
消去类型=dot
Join操作示例
#表示matmul
conv1d=join F A!dot
可以看出,本发明的上述面向动态图框架和异构芯片的编译与运行方法,基于框架和芯片架构无关的BSIL中间表示进行优化变换,面向不同芯片指令集生成可执行kernel代码并构建计算图。运行时***根据输入输出信息和设备信息自动调度kernel代码在目标设备上执行,完成执行前的资源准备及执行后的资源回收,并管理设备代码缓存,实现了动态图框架下对用户透明的多芯片跨平台编译和执行,提升了编译器跨平台性和易迁移性。
如前所述,本发明另一方面还包括与前述面向动态图框架和异构芯片的编译与运行方法完全对应一致的功能模块架构,即提供了上述编译与运行平台,包括:
框架接口单元,用于针对动态图框架注册编译器接口,以向编译器提供待编译对象,并从所述动态图框架中获取FX graph计算图;
编译单元,用于将所述FX graph计算图编译生成中间表示并进行优化,基于所述中间表示生成设备可执行代码,构建输出计算图,其中所述中间表示与前端框架及芯片架构无关;
运行时执行单元,用于获取并执行所述输出计算图,根据计算图节点的属性信息为每个计算图节点分配设备资源,等待设备调度执行。
该平台可通过上述面向动态图框架和异构芯片的编译与运行方法实现,具体的实现方式可参见方法实施例中的描述,在此不再赘述。
本发明还提供了一种电子设备,包括处理器和存储器,所述存储器存储有多条指令,所述处理器用于读取所述指令并执行前述任一种方法。其中处理器和存储器可以通过总线或者其他方式连接,以通过总线连接为例。处理器可以为中央处理器(CentralProcessing Unit,CPU)。处理器还可以为其他通用处理器、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
存储器作为一种非暂态存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本申请实施例中的面向动态图框架和异构芯片的编译与运行方法对应的程序指令/模块。处理器通过运行存储在存储器中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施例中的面向动态图框架和异构芯片的编译与运行方法。
存储器可以包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需要的应用程序;存储数据区可存储处理器所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本发明还提供了一种存储介质,所述存储介质存储有多条指令,所述指令可被处理器加载并执行,以使所述处理器能够执行如上述方法实施例中的任意一种方法。该存储介质可以是有形存储介质,诸如随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、软盘、硬盘、可移动存储盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (10)

1.一种面向动态图框架和异构芯片的编译与运行方法,其特征在于,包括:
针对动态图框架注册编译器接口,以向编译器提供待编译对象,并从所述动态图框架中获取FX graph计算图;
将所述FX graph计算图编译生成中间表示并进行优化,基于所述中间表示生成设备可执行代码,构建输出计算图,其中所述中间表示与前端框架及芯片架构无关;
获取并执行所述输出计算图,根据计算图节点的属性信息为每个计算图节点分配设备资源,等待设备调度执行。
2.根据权利要求1所述的面向动态图框架和异构芯片的编译与运行方法,其特征在于,所述针对动态图框架注册编译器接口,进一步包括:
将追踪获取的计算图以参数形式传递给面向所述动态图框架的字节码追踪器的自动微分变换接口,
以所述自动微分变换接口为跳板函数,将所述计算图传递给所述字节码追踪器的控制入口,从而完成编译器与所述动态图框架的对接。
3.根据权利要求2所述的面向动态图框架和异构芯片的编译与运行方法,其特征在于,所述从所述动态图框架中获取FX graph计算图,进一步包括:
判断是否命中编译缓存,若命中则跳过追踪,直接执行编译后的目标函数,否则追踪执行并获取所述计算图。
4.根据权利要求1所述的面向动态图框架和异构芯片的编译与运行方法,其特征在于,所述基于所述中间表示生成设备可执行代码,进一步包括:
根据不同芯片指令集,将所述中间表示切分成多个可执行区域,每个区域针对不同芯片指令集生成可执行代码,以可执行区域为节点构建输出计算图。
5.根据权利要求1所述的面向动态图框架和异构芯片的编译与运行方法,其特征在于,将所述FX graph计算图编译生成中间表示,进一步包括:
遍历所输入的FX graph计算图,对FX graph计算图中的每个节点,查询其算子对应的下降规则,调用所述下降规则生成中间表示的构建函数;
基于所述编译器接口的输入,构建与其类型和形状信息相符的符号输入,根据所述符号输入调用所述中间表示的构建函数,将函数返回结果作为所述中间表示。
6.根据权利要求1所述的面向动态图框架和异构芯片的编译与运行方法,其特征在于,所述将所述FX graph计算图编译生成中间表示并进行优化,进一步包括:
利用编译器优化算法优化所述中间表示,所述编译器优化算法包括死代码删除(DCE)、公共子表达式(CSE)、常数传播(CP)、常数折叠(CF)或全局值编号(GVN)。
7.根据权利要求1所述的面向动态图框架和异构芯片的编译与运行方法,其特征在于,所述根据计算图节点的属性信息为每个计算图节点分配设备资源,等待设备调度执行,进一步包括:
将计算图节点送入调度线程的就绪队列;
从调度线程的就绪队列中取出计算图节点,根据输入输出设备信息确定将该节点发送到哪一个设备执行;
如果执行过程中出现跨设备的依赖,则***信号等待。
8.一种面向动态图框架和异构芯片的编译与运行平台,其特征在于,包括:
框架接口单元,用于针对动态图框架注册编译器接口,以向编译器提供待编译对象,并从所述动态图框架中获取FX graph计算图;
编译单元,用于将所述FX graph计算图编译生成中间表示并进行优化,基于所述中间表示生成设备可执行代码,构建输出计算图,其中所述中间表示与前端框架及芯片架构无关;
运行时执行单元,用于获取并执行所述输出计算图,根据计算图节点的属性信息为每个计算图节点分配设备资源,等待设备调度执行。
9.一种电子设备,其特征在于,包括处理器和存储器,所述存储器存储有多条指令,所述处理器用于读取所述指令并执行如权利要求1至7任一项所述的面向动态图框架和异构芯片的编译与运行方法。
10.一种存储介质,其特征在于,所述存储介质存储有多条指令,所述多条指令可被处理器读取并执行如权利要求1至7任一项所述的面向动态图框架和异构芯片的编译与运行方法。
CN202311411611.0A 2023-10-27 2023-10-27 面向动态图框架和异构芯片的编译与运行方法和装置 Active CN117331541B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311411611.0A CN117331541B (zh) 2023-10-27 2023-10-27 面向动态图框架和异构芯片的编译与运行方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311411611.0A CN117331541B (zh) 2023-10-27 2023-10-27 面向动态图框架和异构芯片的编译与运行方法和装置

Publications (2)

Publication Number Publication Date
CN117331541A true CN117331541A (zh) 2024-01-02
CN117331541B CN117331541B (zh) 2024-07-19

Family

ID=89279244

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311411611.0A Active CN117331541B (zh) 2023-10-27 2023-10-27 面向动态图框架和异构芯片的编译与运行方法和装置

Country Status (1)

Country Link
CN (1) CN117331541B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190391796A1 (en) * 2019-06-28 2019-12-26 Intel Corporation Control of scheduling dependencies by a neural network compiler
CN110766147A (zh) * 2018-07-25 2020-02-07 赛灵思公司 神经网络编译器架构及编译方法
CN111752691A (zh) * 2020-06-22 2020-10-09 深圳鲲云信息科技有限公司 Ai计算图的排序方法、装置、设备及存储介质
CN113553054A (zh) * 2021-07-02 2021-10-26 北京算能科技有限公司 基于异构***的编译方法、装置、设备及存储介质
CN113835695A (zh) * 2021-11-25 2021-12-24 之江实验室 基于统一后端引擎的深度学习框架与硬件设备适配方法
CN114398080A (zh) * 2021-12-17 2022-04-26 飞腾信息技术有限公司 一种数据处理方法、装置、设备及计算机存储介质
CN116149797A (zh) * 2023-04-04 2023-05-23 上海燧原科技有限公司 面向异构场景的ai统一计算方法、装置、设备及介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110766147A (zh) * 2018-07-25 2020-02-07 赛灵思公司 神经网络编译器架构及编译方法
US20190391796A1 (en) * 2019-06-28 2019-12-26 Intel Corporation Control of scheduling dependencies by a neural network compiler
CN111752691A (zh) * 2020-06-22 2020-10-09 深圳鲲云信息科技有限公司 Ai计算图的排序方法、装置、设备及存储介质
CN113553054A (zh) * 2021-07-02 2021-10-26 北京算能科技有限公司 基于异构***的编译方法、装置、设备及存储介质
CN113835695A (zh) * 2021-11-25 2021-12-24 之江实验室 基于统一后端引擎的深度学习框架与硬件设备适配方法
CN114398080A (zh) * 2021-12-17 2022-04-26 飞腾信息技术有限公司 一种数据处理方法、装置、设备及计算机存储介质
CN116149797A (zh) * 2023-04-04 2023-05-23 上海燧原科技有限公司 面向异构场景的ai统一计算方法、装置、设备及介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
冷冻工厂: "Pytorch2 如何通过算子融合和 CPU/GPU 代码生成加速深度学习", pages 1 - 4, Retrieved from the Internet <URL:https://zhuanlan.zhihu.com/p/625830457> *
吾乃阿尔法: "一文搞懂 TorchDynamo 原理", Retrieved from the Internet <URL:https://zhuanlan.zhihu.com/p/630933479> *
文渊博: "面向智能计算***的跨平台编译技术研究", 中国博士学位论文全文数据库 信息科技辑, no. 3, 15 March 2023 (2023-03-15), pages 138 - 11 *

Also Published As

Publication number Publication date
CN117331541B (zh) 2024-07-19

Similar Documents

Publication Publication Date Title
US10942716B1 (en) Dynamic computational acceleration using a heterogeneous hardware infrastructure
EP3754495B1 (en) Data processing method and related products
US11941400B2 (en) Methods and apparatus for intentional programming for heterogeneous systems
WO2021000970A1 (zh) 深度学习算法的编译方法、装置及相关产品
US10908884B2 (en) Methods and apparatus for runtime multi-scheduling of software executing on a heterogeneous system
EP2601577B1 (en) A method and apparatus for a compiler and related components for stream-based computations for a general-purpose, multiple-core system
CN108369591B (zh) 用于缓存和参数化ir的***和方法
CN101799760A (zh) 生成任意目标架构的并行单指令多数据代码的***和方法
WO2021000971A1 (zh) 操作数据的生成方法、装置及相关产品
US20090328016A1 (en) Generalized expression trees
CN104067225A (zh) 对用于图形处理单元的具有相关联的纹理加载指令的控制流指令的判定
US10564947B2 (en) Computer system and method for multi-processor communication
WO2022166480A1 (zh) 任务调度方法、装置及***
JP4830108B2 (ja) プログラム処理装置、プログラム処理方法、並列処理プログラム用コンパイラおよび並列処理プログラム用コンパイラを格納した記録媒体
CN114201156A (zh) 接入方法、装置、电子设备及计算机存储介质
CN117331541B (zh) 面向动态图框架和异构芯片的编译与运行方法和装置
US20210182041A1 (en) Method and apparatus for enabling autonomous acceleration of dataflow ai applications
US11947941B2 (en) Dynamic computation offloading to graphics processing unit
EP3906470B1 (en) Techniques for scheduling instructions in compiling source code
US11429358B2 (en) Representing asynchronous state machine in intermediate code
US8984473B2 (en) Methods for type analysis in systems for code generation
US20240143296A1 (en) METHODS AND APPARATUS FOR COMBINING CODE LARGE LANGUAGE MODELS (LLMs) WITH COMPILERS
WO2024039923A1 (en) Method of compile-time optimization for nested parallel for-loops for deep learning neural network computation
CN117687912A (zh) 一种仿真优化处理方法及装置
CN117075903A (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
GR01 Patent grant
GR01 Patent grant