CN116107669B - 深度学习框架的算子注册方法、装置、设备及存储介质 - Google Patents
深度学习框架的算子注册方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN116107669B CN116107669B CN202310400779.5A CN202310400779A CN116107669B CN 116107669 B CN116107669 B CN 116107669B CN 202310400779 A CN202310400779 A CN 202310400779A CN 116107669 B CN116107669 B CN 116107669B
- Authority
- CN
- China
- Prior art keywords
- operator
- function
- kernel function
- deep learning
- registration
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Medical Informatics (AREA)
- Mathematical Physics (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种深度学习框架的算子注册方法、装置、设备及存储介质,方法包括:获取待注册算子的信息,根据待注册算子的信息定义算子内核函数声明,算子内核函数声明中包括预设的形状输出函数;调用算子内核函数声明中预设的形状输出函数,得到输出的形状值,根据形状值定义算子内核函数,算子内核函数为一个compute函数;构造算子内核函数的多功能注册宏,根据多功能注册宏将待注册的算子内核函数注册到深度学习框架。本申请的算子注册方法,设计了算子内核函数注册接口,通过该接口,不同异构硬件的算子能够轻易的注册到深度学习框架中,同时减少了开发者在算子接入深度学习框架的代码开发量,减少开发者对深度学习框架自身结构的掌握程度。
Description
技术领域
本发明涉及人工智能技术领域,特别涉及一种深度学习框架的算子注册方法、装置、设备及存储介质。
背景技术
算子是构建人工智能应用算法的计算单元,被相关硬件所封装,能够被人工智能应用调用并获得返回结果。算子接口定义了算子的调用形式以及功能说明,但不同的硬件对算子的支撑能力不同,其差异主要体现在计算效率和计算精度。不同的硬件(GPU,NPU,XPU等)下,相同功能的算子实现形式也完全不同,要让一个深度学习计算框架(如Tensorflow, Pytorch, PaddlePaddle等)能够支持不同的硬件算子,从开发角度来说,需要将相同功能的算子针对不同的硬件都需要从代码上实现一遍来接入到深度学习框架中。这样对于AI算法开发人员来说,增加了很多的开发工作量,而且需要学习框架的算子编写规范。
当前,深度学习计算框架或多或少提供了一些自定义算子的方式,如TensorFlow的OpKernel基类接入方式,Pytorch的FuncBase基类接入方式等,每一个深度学习框架都定义了一些基本类和接口来支持用户算子接入。一种支持某种硬件的算子如果想在选择的深度学习计算框架中使用,要么需要有硬件厂商提供已有的支持该深度学习计算框架的算子库,要么需要自己编写支持该深度学习计算框架的算子代码。
每一个算子在深度学习计算框架中使用基本都需要有算子声明,内核注册以及算子加载等流程。每新增一种硬件结构就需要针对该硬件重新开发上述算子执行流程。深度学习网络模型中使用到的算子众多,若每种新硬件架构的接入都新增一遍上述流程则工程量浩大。另外当开发者需要新增一个算子,并且扩充到已适配的所有新硬件时,就需要根据相关硬件特性实现内核函数,对开发者的硬件知识以及开发能力有着很高的要求。这样严重影响的AI开发者对算子的使用效率。
发明内容
本申请实施例提供了一种深度学习框架的算子注册方法、装置、设备及存储介质。为了对披露的实施例的一些方面有一个基本的理解,下面给出了简单的概括。该概括部分不是泛泛评述,也不是要确定关键/重要组成元素或描绘这些实施例的保护范围。其唯一目的是用简单的形式呈现一些概念,以此作为后面的详细说明的序言。
第一方面,本申请实施例提供了一种深度学习框架的算子注册方法,包括:
获取待注册算子的信息,根据所述待注册算子的信息定义算子内核函数声明,所述算子内核函数声明中包括预设的形状输出函数;
调用所述算子内核函数声明中预设的形状输出函数,得到输出的形状值,根据所述形状值定义所述算子内核函数,所述算子内核函数为一个compute函数;
构造所述算子内核函数的多功能注册宏,根据所述多功能注册宏将待注册的算子内核函数注册到深度学习框架。
在一个可选地实施例中,根据所述待注册算子的信息定义算子内核函数声明,包括:
获取待注册算子的名称、输入张量、输出张量以及参数;
将张量的形状变量函数化,得到创建的形状输出函数;
根据所述算子的名称、输入张量、输出张量、参数以及形状输出函数定义算子内核函数声明,所述算子内核函数声明包括算子名称、输入张量、输出张量、参数以及形状输出函数。
在一个可选地实施例中,根据所述形状值定义所述算子内核函数之前,还包括:
获取所述算子内核函数模块中需要用到的辅助函数;
基于所述辅助函数构造全局的静态函数,由框架自动执行所述全局的静态函数。
在一个可选地实施例中,根据所述形状值定义所述算子内核函数,包括:
定义compute函数,根据所述compute函数实现算子内核计算;
在Compute计算流程中通过GetOutShape函数,调用所述形状输出函数输出的形状值。
在一个可选地实施例中,构造所述算子内核函数的多功能注册宏,包括:
构造注册宏,在所述注册宏中添加预设的初始化函数以及数据清理函数,得到所述多功能注册宏;
其中,所述多功能注册宏为REG_KERNEL形式。
在一个可选地实施例中,根据所述多功能注册宏将待注册的算子内核函数注册到深度学习框架,包括:
调用所述多功能注册宏;
根据所述多功能注册宏执行数据初始化以及数据释放操作,并将待注册的算子内核函数注册到深度学习框架。
在一个可选地实施例中,根据所述多功能注册宏将待注册的算子内核函数注册到深度学习框架之后,还包括:
通过更新配置框架的CMake文件将注册的算子内核函数编译到对应的算子动态库;或,
通过更新配置框架的GCC命令将注册的算子内核函数编译到对应的算子动态库;或,
通过更新配置框架的GXX命令将注册的算子内核函数编译到对应的算子动态库。
第二方面,本申请实施例提供了一种深度学习框架的算子注册装置,包括:
算子声明模块,用于获取待注册算子的信息,根据所述待注册算子的信息定义算子内核函数声明,所述算子内核函数声明中包括预设的形状输出函数;
算子定义模块,用于调用所述算子内核函数声明中预设的形状输出函数,得到输出的形状值,根据所述形状值定义所述算子内核函数,所述算子内核函数为一个compute函数;
算子注册模块,用于构造所述算子内核函数的多功能注册宏,根据所述多功能注册宏将待注册的算子内核函数注册到深度学习框架。
第三方面,本申请实施例提供了一种电子设备,包括处理器和存储有程序指令的存储器,所述处理器被配置为在执行所述程序指令时,执行上述实施例提供的一种深度学习框架的算子注册方法。
第四方面,本申请实施例提供了一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令被处理器执行以实现上述实施例提供的一种深度学习框架的算子注册方法。
本申请实施例提供的技术方案可以包括以下有益效果:
根据本申请实施例提供的深度学习框架的算子注册方法,提供了一套标准的算子内核函数注册接口,通过这个注册接口,不同异构硬件的算子能够轻易的注册到深度学习框架中,从而使得深度学习使用者能够在深度学习框架中方便的使用不同的硬件资源。
本申请的注册方法,定义的算子内核函数只需要实现一个compute函数就可以完成算子的所有操作,无需再定义其他辅助函数,也无需在Compute计算流程中通过推导来获取输出形状值,通过形状函数化,可以在下面的内核定义中直接获取输出形状值,大大减少了计算量。无需根据相关硬件特性实现内核函数,减少了开发者在算子接入深度学习框架的代码开发量,减少开发者对深度学习框架自身结构的掌握程度。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1是根据一示例性实施例示出的一种深度学习框架的算子注册方法的应用环境示意图;
图2是根据一示例性实施例示出的一种深度学习框架的算子注册方法的应用环境示意图;
图3是根据一示例性实施例示出的一种深度学习框架的算子注册方法的流程示意图;
图4是根据一示例性实施例示出的一种深度学习框架的算子注册方法的示意图;
图5是根据一示例性实施例示出的一种深度学习框架的算子注册装置的结构示意图;
图6是根据一示例性实施例示出的一种电子设备的结构示意图。
具体实施方式
以下描述和附图充分地示出本发明的具体实施方案,以使本领域的技术人员能够实践它们。
应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是如所附权利要求书中所详述的、本发明的一些方面相一致的***和方法的例子。
根据本发明实施例的一个方面,提供了一种深度学习框架的算子注册方法,作为一种可选地实施方式,上述深度学习框架的算子注册方法可以但不限于应用于如图1所示的应用环境中。该应用环境中包括:与用户进行人机交互的终端设备102、网络104、服务器106。用户108与终端设备102之间可以进行人机交互,终端设备102中运行有深度学习框架的算子注册程序。上述终端设备102中包括人机交互屏幕1022,处理器1024及存储器1026。人机交互屏幕1022用于显示人工智能应用算法的深度学习框架;处理器1024用于获取待注册的算子。存储器1026用于存储上述待注册的算子。
此外,服务器106中包括数据库1062及处理引擎1064,数据库1062中用于存储上述待注册的算子。处理引擎1064用于:获取待注册算子的信息,根据待注册算子的信息定义算子内核函数声明,算子内核函数声明中包括预设的形状输出函数;调用算子内核函数声明中预设的形状输出函数,得到输出的形状值,根据形状值定义算子内核函数,算子内核函数为一个compute函数;构造算子内核函数的多功能注册宏,根据多功能注册宏将待注册的算子内核函数注册到深度学习框架。
在一个或多个实施例中,本申请上述深度学习框架的算子注册方法可以应用于图2所示的应用环境中。如图2所示,用户202与用户设备204之间可以进行人机交互。用户设备204中包含有存储器206和处理器208。本实施例中用户设备204可以但不限于参考执行上述终端设备102所执行的操作。
可选地,上述终端设备102和用户设备204包括但不限于为手机、平板电脑、笔记本电脑、PC机,车载电子设备,可穿戴设备等终端,上述网络104可以包括但不限于无线网络或有线网络。其中,该无线网络包括:WIFI及其他实现无线通信的网络。上述有线网络可以包括但不限于:广域网、城域网、局域网。上述服务器106可以包括但不限于任何可以进行计算的硬件设备。上述服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群,或者是云服务器。上述仅是一种示例,本实施例中对此不作任何限定。
本申请的主要目标是对算子注册接入深度学习框架实现标准化的实现,同时最大程度上减少AI开发者在硬件算子接入到深度学习框架的代码开发量,减少开发者对深度学习框架自身结构的掌握程度,便于开发者快速方便的将不同硬件的算子快速注册到深度学习框架中,供其在深度学习模型中使用。
下面结合附图3对本申请实施例的深度学习框架的算子注册方法进行详细介绍,如图3所示,该方法主要包括如下步骤:
S301获取待注册算子的信息,根据待注册算子的信息定义算子内核函数声明,算子内核函数声明中包括预设的形状输出函数。
算子内核函数的注册主要包括以下几个部分:检查内核函数是否符合框架算子要求,支持注册算子到框架,包括算子名称、硬件类型、张量布局、数据类型和算子内核函数,以及内核函数的注册。
在一个可选地实施例中,根据待注册算子的信息定义算子内核函数声明,包括:
获取待注册算子的名称OpName、输入张量input、输出张量output以及参数attr。
为了进一步减少后续计算量,本申请在算子声明中预先定义了一个形状输出函数ShapeFunc。shape是一种定义,就是tensor的形状,是算子中引入的一种基本概念,shape对算子计算做辅助作用,shape中包含大量的计算,所以利用好能起到帮助算子计算的功能,现有技术中,shape值输出是要经过一定计算的推导出来的。计算量大。本申请将张量tensor的形状shape函数化,对于已存在的算子,可以直接获取shape值,不用再进行推导一次增加计算量和复杂度。因此,本申请的方案预先构建了形状输出函数ShapeFunc。
进一步地,根据算子的名称、输入张量、输出张量、参数以及形状输出函数定义算子内核函数声明,算子内核函数声明包括算子名称、输入张量、输出张量、参数以及形状输出函数。
具体地,算子内核函数声明主要包括以下几部分:
内核函数名称定义了当前注册的算子函数名称;内核函数输入,输出,参数定义了算子函数的输入张量,输出张量,参数信息,其中张量可以是float,也可以是tensor类型等。Shape输出函数定义了算子内核获取输出shape的函数。在一种可能的实现方式中,具体地算子内核函数声明如下所示:
REGISTER_KERNEL_OP(“FuncName”)
.INPUT(“in1 float32”)
.OUTPUT(“out1 float32”)
.ATTR(“param1”)
.ATTR(“param2”)
.SHAPEFUNC([](DeviceContext *c){})
本申请实施例的算子内核函数声明中,输入张量INPUT,输出张量OUTPUT,参数ATTR都是可以有多个定义。通过SHAPEFUNC形状输出函数可以直接在下面的内核定义中直接获取输出Shape值,而不需要做进一步的推导获取。
S302调用算子内核函数声明中预设的形状输出函数,得到输出的形状值,根据形状值定义算子内核函数,算子内核函数为一个compute函数。
在一个实施例中,根据形状值定义算子内核函数,包括:
本申请实施例在定义算子内核函数时,仅定义一个compute函数即可, compute函数就是一个算子拿到输入怎么算输出的计算逻辑,就是拿到输入tensor怎么计算输出tensor,根据compute函数实现算子内核计算。
在定义compute函数时,需要继承自深度学习框架kernel基类,根据深度学习框架定义的基类,生成适用于该深度学习框架的compute函数。本申请实施例可以兼容现有框架的一些接口,比如kernel基类和计算函数,方便已有框架能够快速迁移。若迁移到其他框架,调用其他框架的基类接口,可以快速生成compute函数。
本申请实施例在Compute计算流程中通过GetOutShape函数,可以快速调用形状输出函数输出的形状值。避免还需要在Compute计算流程中通过推导来获取输出shape值。
具体地,算子内核函数定义了算子内核的实现,最主要是实现了内核的compute函数,算子内核定义如下:
class FuncOp : extends BaseOpKernel {
void Op_Compute(ExcutionContext *context)
{
//输入Tensor
Tensor *tensor1 = const_cast<Tensor*>(&context->input(0))
CHECK_VALID(tensor1);
…
//获取输出Shape
TensorShape out_shape = GetOutShape(context, “Y”)
//输出Tensor
Tensor *out = Allocate(context, “out”, out_shape.data(), out_shape.size());
CHECK_VALID(out);
//算子计算逻辑
}
}
本申请实施例提供的算子内核定义方法,操作十分简单,并大大降低了代码量。内核定义只需要实现一个compute函数就可以完成算子的所有操作,其中GetOutShape函数就是利用算子声明的SHAPEFUNC来快速获取已有算子输出shape值,避免还需要在Compute计算流程中通过推到来获取输出shape值。
进一步地,获取算子内核函数模块中需要用到的辅助函数;基于辅助函数构造全局的静态函数,由框架自动执行全局的静态函数。
本申请在算子内核函数定义中,仅定义了一个compute函数就可以完成算子的所有操作,在现有技术中,还需要定义其他辅助函数,例如初始化函数等。本申请的方案可以简化内核函数定义模块,降低开发者的使用复杂性。
具体地,本申请将内核函数定义中需要用到的其他辅助函数构造成全局的静态函数,由框架自动执行全局的静态函数。这样在设计时把一些处理隐藏起来由框架自动完成,大大降低了开发者的使用复杂度。
因此,本申请的方案定义的算子内核函数只需要实现一个compute函数就可以完成算子的所有操作,无需再定义其他辅助函数,也无需在Compute计算流程中通过推导来获取输出形状值,无需根据相关硬件特性实现内核函数,通过形状函数化,可以在下面的内核定义中直接获取输出形状值,大大减少了计算量。减少了开发者在算子接入深度学习框架的代码开发量,减少开发者对深度学习框架自身结构的掌握程度。
S303构造算子内核函数的多功能注册宏,根据多功能注册宏将待注册的算子内核函数注册到深度学习框架。
得到定义的算子内核函数之后,通过内核函数注册宏,将内核函数注册进入深度学学习框架中。本申请实施例提供的注册宏,是一种多功能注册宏。在注册宏中添加预设的初始化函数以及数据清理函数等其他功能的函数,可以得到多功能注册宏。具体添加哪些功能函数本申请实施例不做具体限定。其中,多功能注册宏为REG_KERNEL形式。
本申请实施例提供了一种多功能注册宏,集成了内核函数注册、初始化、数据清理等功能,通过将多功能注册宏预先定义,在后续使用过程中可以直接调用。
在一个可选地实施例中,根据多功能注册宏将待注册的算子内核函数注册到深度学习框架,包括:调用多功能注册宏;根据多功能注册宏执行数据初始化以及数据释放操作,并将待注册的算子内核函数注册到深度学习框架。
本领域技术人员通过调用预先定义的多功能注册宏,可以同时完成内核函数注册、初始化、数据释放等操作。例如对一些数据释放简称为cleankernel,在这个注册宏中实际操作完成后,增加一个cleankernel的操作,做一些数据清理的操作,比如释放一些变量,进一步减少了开发者在算子接入深度学习框架的代码开发量,降低了开发者的使用复杂度。
在一个可选地实施例中,根据多功能注册宏将待注册的算子内核函数注册到深度学习框架之后,还包括:通过更新配置框架的CMake文件将注册的算子内核函数编译到对应的算子动态库;或,通过更新配置框架的GCC命令将注册的算子内核函数编译到对应的算子动态库;或,通过更新配置框架的GXX命令将注册的算子内核函数编译到对应的算子动态库。在深度学习框架中,可以调用注册后的算子内核函数。
从上面的描述可以看到,本申请对算子接入深度学习框架进行标准化定义,简化了算子接入深度学习框架的操作,通过预先定义好的多功能注册宏以及预先定义的形状输出函数,大大减轻开发者接入不同硬件的新算子到深度学习框架的代码开发量,通过标准化的定义也使得开发者开发算子接入更方便。
同样的,通过该方案的标准化定义,对于不同的深度学习框架,可以采取同样的操作方式,根据不同的框架定义对应的标准化接口,最终可以通过宏判断框架采取对应框架的标准化流程。
且本申请屏蔽了现有框架的一些算子接入细节操作,例如,仅定义一个compute函数实现内核函数定义,将其他辅助函数构造成全局静态函数,减少了开发者开发算子接入深度学习框架的工作量;还可以兼容现有框架的一些接口,比如内核基类和计算函数,方便已有框架能够快速迁移。
本申请实施例提供的算子注册方法,有效降低了深度学习框架自定义算子的编码复杂度,减少了开发者开发算子接入深度学习框架的工作量,降低开发者的使用复杂性,便于在实际应用场景中通过该方法便利地扩展专用算子。得到一个算子丰富的深度学习框架。深度学习框架可以是量子计算中用到的深度学习框架、生物计算中用到的深度学习框架、人工智能机器人中用到的深度学习框架等。
在一个示例性场景中,本申请的深度学习框架为智能扫地机器人中的深度学习框架,硬件算子为智能扫地机器人中用到的硬件算子,解决了如何快速将智能扫地机器人中用到的硬件算子集成到框架的算子库的问题。通过本申请的方法,可以将自定义的硬件算子快速接入该框架中,得到一个算子丰富的深度学习框架。对智能扫地机器人的迭代升级有着积极的促进作用。
为了便于理解本申请实施例提供的深度学习框架的算子注册方法,下面结合附图4进行说明。如图4所示,该方法包括如下步骤。
本申请的技术方案是提供一套标准化算子内核函数注册接口,通过该接口的实现能将不同硬件的算子内核函数注册到深度学习框架汇总。
首先,定义算子函数声明Op,包括算子函数名称OpName,输入张量input,输出张量output,参数attr以及shape输出函数ShapeFunc;
进一步地,定义算子内核函数,算子内核函数仅需定义一个compute函数,定义的compute函数继承深度学习框架的基类。
进一步地,算子内核函数注册,通过内核函数注册宏定义将内核函数注册进入深度学学习框架中。
最后,算子内核编译,通过更新配置框架的CMake文件或GCC/GXX命令来编译需要注册的算子内核。
根据本申请实施例提供的深度学习框架的算子注册方法,提供了一套标准的算子内核函数注册接口,不同异构硬件的算子能够轻易的注册到深度学习框架中。本申请的注册方法,定义的算子内核函数只需要实现一个compute函数就可以完成算子的所有操作,无需再定义其他辅助函数,也无需在Compute计算流程中通过推导计算来获取输出形状值,通过形状函数化,可以在下面的内核定义中直接获取输出形状值,大大减少了计算量。无需根据相关硬件特性实现内核函数,减少了开发者在算子接入深度学习框架的代码开发量,减少开发者对深度学习框架自身结构的掌握程度。
本申请实施例还提供一种深度学习框架的算子注册装置,该装置用于执行上述实施例的深度学习框架的算子注册方法,如图5所示,该装置包括:
算子声明模块501,用于获取待注册算子的信息,根据待注册算子的信息定义算子内核函数声明,算子内核函数声明中包括预设的形状输出函数;
算子定义模块502,用于调用算子内核函数声明中预设的形状输出函数,得到输出的形状值,根据形状值定义算子内核函数,算子内核函数为一个compute函数;
算子注册模块503,用于构造算子内核函数的多功能注册宏,根据多功能注册宏将待注册的算子内核函数注册到深度学习框架。
需要说明的是,上述实施例提供的深度学习框架的算子注册装置在执行深度学习框架的算子注册方法时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的深度学习框架的算子注册装置与深度学习框架的算子注册方法实施例属于同一构思,其体现实现过程详见方法实施例,这里不再赘述。
本申请实施例还提供一种与前述实施例所提供的深度学习框架的算子注册方法对应的电子设备,以执行上述深度学习框架的算子注册方法。
请参考图6,其示出了本申请的一些实施例所提供的一种电子设备的示意图。如图6所示,电子设备包括:处理器600,存储器601,总线602和通信接口603,处理器600、通信接口603和存储器601通过总线602连接;存储器601中存储有可在处理器600上运行的计算机程序,处理器600运行计算机程序时执行本申请前述任一实施例所提供的深度学习框架的算子注册方法。
其中,存储器601可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口603(可以是有线或者无线)实现该***网元与至少一个其他网元之间的通信连接,可以使用互联网、广域网、本地网、城域网等。
总线602可以是ISA总线、PCI总线或EISA总线等。总线可以分为地址总线、数据总线、控制总线等。其中,存储器601用于存储程序,处理器600在接收到执行指令后,执行程序,前述本申请实施例任一实施方式揭示的深度学习框架的算子注册方法可以应用于处理器600中,或者由处理器600实现。
处理器600可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器600中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器600可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器601,处理器600读取存储器601中的信息,结合其硬件完成上述方法的步骤。
本申请实施例提供的电子设备与本申请实施例提供的深度学习框架的算子注册方法出于相同的发明构思,具有与其采用、运行或实现的方法相同的有益效果。
本申请实施例还提供一种与前述实施例所提供的深度学习框架的算子注册方法对应的计算机可读存储介质,其上存储有计算机程序(即程序产品),计算机程序在被处理器运行时,会执行前述任意实施例所提供的深度学习框架的算子注册方法。
需要说明的是,计算机可读存储介质的例子还可以包括,但不限于相变内存(PRAM)、静态随机存取存储器 (SRAM)、动态随机存取存储器 (DRAM)、其他类型的随机存取存储器 (RAM)、只读存储器 (ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他光学、磁性存储介质,在此不再一一赘述。
本申请的上述实施例提供的计算机可读存储介质与本申请实施例提供的深度学习框架的算子注册方法出于相同的发明构思,具有与其存储的应用程序所采用、运行或实现的方法相同的有益效果。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (9)
1.一种深度学习框架的算子注册方法,其特征在于,包括:
获取待注册算子的信息,根据所述待注册算子的信息定义算子内核函数声明,包括:获取待注册算子的名称、输入张量、输出张量以及参数;将张量的形状变量函数化,得到创建的形状输出函数;根据所述算子的名称、输入张量、输出张量、参数以及形状输出函数定义算子内核函数声明,所述算子内核函数声明包括算子名称、输入张量、输出张量、参数以及形状输出函数;
调用所述算子内核函数声明中预设的形状输出函数,得到输出的形状值,根据所述形状值定义所述算子内核函数,所述算子内核函数为一个compute函数;
构造所述算子内核函数的多功能注册宏,根据所述多功能注册宏将待注册的算子内核函数注册到深度学习框架。
2.根据权利要求1所述的方法,其特征在于,根据所述形状值定义所述算子内核函数之前,还包括:
获取所述算子内核函数模块中需要用到的辅助函数;
基于所述辅助函数构造全局的静态函数,由框架自动执行所述全局的静态函数。
3.根据权利要求1所述的方法,其特征在于,根据所述形状值定义所述算子内核函数,包括:
定义compute函数,根据所述compute函数实现算子内核计算;
在Compute计算流程中通过GetOutShape函数,调用所述形状输出函数输出的形状值。
4.根据权利要求1所述的方法,其特征在于,构造所述算子内核函数的多功能注册宏,包括:
构造注册宏,在所述注册宏中添加预设的初始化函数以及数据清理函数,得到所述多功能注册宏;
其中,所述多功能注册宏为REG_KERNEL形式。
5.根据权利要求1所述的方法,其特征在于,根据所述多功能注册宏将待注册的算子内核函数注册到深度学习框架,包括:
调用所述多功能注册宏;
根据所述多功能注册宏执行数据初始化以及数据释放操作,并将待注册的算子内核函数注册到深度学习框架。
6.根据权利要求1所述的方法,其特征在于,根据所述多功能注册宏将待注册的算子内核函数注册到深度学习框架之后,还包括:
通过更新配置框架的CMake文件将注册的算子内核函数编译到对应的算子动态库;或,
通过更新配置框架的GCC命令将注册的算子内核函数编译到对应的算子动态库;或,
通过更新配置框架的GXX命令将注册的算子内核函数编译到对应的算子动态库。
7.一种深度学习框架的算子注册装置,其特征在于,包括:
算子声明模块,用于获取待注册算子的信息,根据所述待注册算子的信息定义算子内核函数声明,包括:获取待注册算子的名称、输入张量、输出张量以及参数;将张量的形状变量函数化,得到创建的形状输出函数;根据所述算子的名称、输入张量、输出张量、参数以及形状输出函数定义算子内核函数声明,所述算子内核函数声明包括算子名称、输入张量、输出张量、参数以及形状输出函数;
算子定义模块,用于调用所述算子内核函数声明中预设的形状输出函数,得到输出的形状值,根据所述形状值定义所述算子内核函数,所述算子内核函数为一个compute函数;
算子注册模块,用于构造所述算子内核函数的多功能注册宏,根据所述多功能注册宏将待注册的算子内核函数注册到深度学习框架。
8.一种电子设备,其特征在于,包括处理器和存储有程序指令的存储器,所述处理器被配置为在执行所述程序指令时,执行如权利要求1至6任一项所述的一种深度学习框架的算子注册方法。
9.一种计算机可读介质,其特征在于,其上存储有计算机可读指令,所述计算机可读指令被处理器执行以实现如权利要求1至6任一项所述的一种深度学习框架的算子注册方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310400779.5A CN116107669B (zh) | 2023-04-14 | 2023-04-14 | 深度学习框架的算子注册方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310400779.5A CN116107669B (zh) | 2023-04-14 | 2023-04-14 | 深度学习框架的算子注册方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116107669A CN116107669A (zh) | 2023-05-12 |
CN116107669B true CN116107669B (zh) | 2023-08-18 |
Family
ID=86264183
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310400779.5A Active CN116107669B (zh) | 2023-04-14 | 2023-04-14 | 深度学习框架的算子注册方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116107669B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117389421B (zh) * | 2023-12-07 | 2024-05-14 | 浙江网商银行股份有限公司 | 一种可信接入处理方法、装置、存储介质及电子设备 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112270399A (zh) * | 2020-09-29 | 2021-01-26 | 北京百度网讯科技有限公司 | 基于深度学习的算子注册处理方法、装置及电子设备 |
CN112558942A (zh) * | 2020-12-22 | 2021-03-26 | 上海商汤智能科技有限公司 | 算子注册方法和相关产品 |
CN113342346A (zh) * | 2021-05-18 | 2021-09-03 | 北京百度网讯科技有限公司 | 深度学习框架的算子注册方法、装置、设备和存储介质 |
CN113703768A (zh) * | 2021-07-13 | 2021-11-26 | 清华大学 | 张量程序优化方法及装置 |
CN114911465A (zh) * | 2022-05-19 | 2022-08-16 | 北京百度网讯科技有限公司 | 算子的生成方法、装置、设备以及存储介质 |
CN115469864A (zh) * | 2022-08-23 | 2022-12-13 | 安世亚太科技股份有限公司 | 一种基于原子化封装命令的应用开发装置和方法 |
US11561826B1 (en) * | 2020-11-12 | 2023-01-24 | Xilinx, Inc. | Scheduling processing of machine learning tasks on heterogeneous compute circuits |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220092410A1 (en) * | 2020-09-24 | 2022-03-24 | Advanced Micro Devices, Inc. | Architected library interface for kernel fusion |
-
2023
- 2023-04-14 CN CN202310400779.5A patent/CN116107669B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112270399A (zh) * | 2020-09-29 | 2021-01-26 | 北京百度网讯科技有限公司 | 基于深度学习的算子注册处理方法、装置及电子设备 |
US11561826B1 (en) * | 2020-11-12 | 2023-01-24 | Xilinx, Inc. | Scheduling processing of machine learning tasks on heterogeneous compute circuits |
CN112558942A (zh) * | 2020-12-22 | 2021-03-26 | 上海商汤智能科技有限公司 | 算子注册方法和相关产品 |
CN113342346A (zh) * | 2021-05-18 | 2021-09-03 | 北京百度网讯科技有限公司 | 深度学习框架的算子注册方法、装置、设备和存储介质 |
CN113703768A (zh) * | 2021-07-13 | 2021-11-26 | 清华大学 | 张量程序优化方法及装置 |
CN114911465A (zh) * | 2022-05-19 | 2022-08-16 | 北京百度网讯科技有限公司 | 算子的生成方法、装置、设备以及存储介质 |
CN115469864A (zh) * | 2022-08-23 | 2022-12-13 | 安世亚太科技股份有限公司 | 一种基于原子化封装命令的应用开发装置和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN116107669A (zh) | 2023-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106155755B (zh) | 程序编译方法和程序编译器 | |
US9600411B2 (en) | System and method for determining an object's lifetime in an object oriented environment | |
US8869100B1 (en) | Data objects for model-based design | |
US8418134B2 (en) | Method for efficiently managing property types and constraints in a prototype based dynamic programming language | |
JP7350923B2 (ja) | ディープラーニングフレームワークのオペレータ登録方法、装置、デバイス及び記憶媒体 | |
CN116107669B (zh) | 深度学习框架的算子注册方法、装置、设备及存储介质 | |
CN112765023A (zh) | 测试用例生成方法、装置 | |
CN114580344A (zh) | 测试激励生成方法、验证方法、验证***及相关设备 | |
US9311111B2 (en) | Programming environment with support for handle and non-handle user-created classes | |
JP2022545489A (ja) | スマートコントラクトのクライアントプログラムの生成方法、システム、機器、及び媒体 | |
Parashar et al. | LEAP: A virtual platform architecture for FPGAs | |
Di Natale et al. | An MDA approach for the generation of communication adapters integrating SW and FW components from Simulink | |
CN109960709B (zh) | 一种数据库驱动的处理方法、装置、设备及存储介质 | |
CN112363714A (zh) | 一种服务组合模型的开发方法、装置、存储介质及设备 | |
CN116737117A (zh) | 基于Autosar架构的模型开发方法 | |
CN113656001A (zh) | 平台组件开发方法、装置、计算机设备及存储介质 | |
CN116521181B (zh) | 基于游戏***的脚本数据处理方法、装置、设备及介质 | |
CN110045997B (zh) | 基础功能模块的对象初始化方法、装置、设备和存储介质 | |
Amissah et al. | Towards a framework for executable systems modeling: an executable systems modeling language (ESysML) | |
US20090328020A1 (en) | Interface optimization in a closed system | |
Edwards et al. | UML for hardware and software object modeling | |
CN113971019A (zh) | 数据类型创建方法、装置、服务器及介质 | |
CN110333870B (zh) | Simulink模型变量分配的处理方法、装置及设备 | |
CN108334313A (zh) | 用于大型soc研发的持续集成方法、装置及代码管理*** | |
CN111198899B (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 |