CN115993973A - 深度学习模型的编译方法、电子设备及存储介质 - Google Patents
深度学习模型的编译方法、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115993973A CN115993973A CN202211404506.XA CN202211404506A CN115993973A CN 115993973 A CN115993973 A CN 115993973A CN 202211404506 A CN202211404506 A CN 202211404506A CN 115993973 A CN115993973 A CN 115993973A
- Authority
- CN
- China
- Prior art keywords
- deep learning
- learning model
- target language
- fragment
- fragments
- 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
Images
Classifications
-
- 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
- Image Analysis (AREA)
Abstract
本申请实施例提供一种深度学习模型的编译方法、电子设备及存储介质。方法包括:将深度学习模型转换为计算图;按照计算图中的计算节点的顺序将计算节点包含的各原始算子转换为目标语言片段,获得初始片段集合;至少针对初始片段集合,将多个相同的目标语言片段过滤为单一的目标语言片段,获得经过滤的片段集合;导出编译后的深度学习模型,编译后的深度学习模型包括深度学习模型的运行环境和经过滤的片段集合,其中,运行环境包括深度学习模型的原始算子以及各原始算子与经过滤的片段集合中的各目标语言片段之间的映射关系。编译后的深度学习模型在运行时能够在较少存储,例如KB(千字节)级别的运行环境中运行。
Description
技术领域
本申请涉及深度学习领域,更具体地涉及一种深度学习模型的编译方法、电子设备、存储介质及计算机程序产品。
背景技术
在现有技术中,流行的深度学习推理框架主要使用C++编写,在编写的过程中需要提供预先写好的高性能算子。但现有框架无论怎么裁剪始终需要MB(百万字节)级别的运行环境才能完整执行业务依赖的所有模型。这就导致深度学习推理很难在存储空间受限或者C++/C基础库支持欠佳的运行环境下部署。而且,传统框架还存在初始化时间较长的问题,在不能永驻内存的场景下用户会感受到明显卡顿。
综上所述,需要一种新的深度学习模型的编译方法来解决上述问题。
发明内容
考虑到上述问题而提出了本申请。本申请提供了一种深度学习模型的编译方法、电子设备、存储介质及计算机程序产品。
根据本申请一方面,提供了一种深度学习模型的编译方法,包括:将深度学习模型转换为计算图;按照计算图中的计算节点的顺序将计算节点包含的各原始算子转换为目标语言片段,获得初始片段集合;至少针对初始片段集合,将多个相同的目标语言片段过滤为单一的目标语言片段,获得经过滤的片段集合;导出编译后的深度学习模型,编译后的深度学习模型包括深度学习模型的运行环境和经过滤的片段集合,其中,运行环境包括深度学习模型的原始算子以及各原始算子与经过滤的片段集合中的各目标语言片段之间的映射关系。
示例性地,按照计算图中的计算节点的顺序将计算节点包含的各原始算子转换为目标语言片段包括:利用预设算法将任一原始算子拆分为一个或多个程序片段;将一个或多个程序片段一一对应地转换为一个或多个采用目标语言描述的新程序片段;将一个或多个新程序片段拼接在一起,获得与该原始算子相对应的目标语言片段。
示例性地,在按照计算图中的计算节点的顺序将计算节点包含的各原始算子转换为目标语言片段,获得初始片段集合之前,方法还包括:针对计算图中的各计算节点所需的内存空间进行内存空间规划。
示例性地,在导出编译后的深度学习模型之前,方法还包括:统计初始片段集合运行所需要的所有内存空间;基于统计结果为每个原始算子的输入数据、输出数据和中间结果分配内存空间,获得内存分配信息,其中,运行环境还包括内存分配信息。
示例性地,在导出编译后的深度学习模型之前,方法还包括:按照经过滤的片段集合中的各目标语言片段的调用顺序,将深度学习模型的原始算子以及映射关系进行序列化,获得运行环境。
示例性地,在导出编译后的深度学习模型之后,方法还包括:将运行环境和经过滤的片段集合封装成软件工具包。
示例性地,在至少针对初始片段集合,将多个相同的目标语言片段过滤为单一的目标语言片段,获得经过滤的片段集合之前,方法还包括:将串联两个深度学习模型的串联算子转换为目标语言片段;至少针对初始片段集合,将多个相同的目标语言片段过滤为单一的目标语言片段,获得经过滤的片段集合包括:针对串联算子所对应的目标语言片段以及初始片段集合,将多个相同的目标语言片段过滤为单一的目标语言片段,获得经过滤的片段集合。
根据本申请另一方面,提供了一种电子设备,包括处理器和存储器,其中,所述存储器中存储有计算机程序指令,所述计算机程序指令被所述处理器运行时用于执行上述的深度学习模型的编译方法。
根据本申请另一方面,提供了一种存储介质,在所述存储介质上存储了程序指令,所述程序指令在运行时用于执行上述的深度学习模型的编译方法。
根据本申请另一方面,提供了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序在运行时用于执行上述的深度学习模型的编译方法。
根据本申请实施例的深度学习模型的编译方法、电子设备、存储介质及计算机程序产品,该方法中通过将计算图中计算节点所包括的各原始算子转化成目标语言片段并进行过滤的方式获得采用目标语言片段描述的算子,进而获得编译后的深度学习模型。这样获得的编译后的深度学习模型包含按需生成的算子,其不依赖第三方库、基础库就可以执行业务,所需的存储空间也较少,因此使得编译后的深度学习模型在运行时能够在较少存储,例如KB(千字节)级别的运行环境中运行。
附图说明
通过结合附图对本申请实施例进行更详细的描述,本申请的上述以及其它目的、特征和优势将变得更加明显。附图用来提供对本申请实施例的进一步理解,并且构成说明书的一部分,与本申请实施例一起用于解释本申请,并不构成对本申请的限制。在附图中,相同的参考标号通常代表相同部件或步骤。
图1示出用于实现根据本申请实施例的深度学习模型的编译方法和装置的示例电子设备的示意性框图;
图2示出了根据本申请一个实施例的深度学习模型的编译方法的示意流程图;
图3示出了根据本申请一个实施例的计算图的部分示意图;
图4示出根据本申请一个实施例的电子设备的示意性框图。
具体实施方式
近年来,基于人工智能的计算机视觉、深度学习、机器学习、图像处理、图像识别等技术研究取得了重要进展。人工智能(Artificial Intelligence,AI)是研究、开发用于模拟、延伸人的智能的理论、方法、技术及应用系统的新兴科学技术。人工智能学科是一门综合性学科,涉及芯片、大数据、云计算、物联网、分布式存储、深度学习、机器学习、神经网络等诸多技术种类。计算机视觉作为人工智能的一个重要分支,具体是让机器识别世界,计算机视觉技术通常包括人脸识别、活体检测、指纹识别与防伪验证、生物特征识别、人脸检测、行人检测、目标检测、行人识别、图像处理、图像识别、图像语义理解、图像检索、文字识别、视频处理、视频内容识别、三维重建、虚拟现实、增强现实、同步定位与地图构建(SLAM)、计算摄影、机器人导航与定位等技术。随着人工智能技术的研究和进步,该项技术在众多领域展开了应用,例如安全防控、城市管理、交通管理、楼宇管理、园区管理、人脸通行、人脸考勤、物流管理、仓储管理、机器人、智能营销、计算摄影、手机影像、云服务、智能家居、穿戴设备、无人驾驶、自动驾驶、智能医疗、人脸支付、人脸解锁、指纹解锁、人证核验、智慧屏、智能电视、摄像机、移动互联网、网络直播、美颜、美妆、医疗美容、智能测温等领域。
为了使得本申请的目的、技术方案和优点更为明显,下面将参照附图详细描述根据本申请的示例实施例。显然,所描述的实施例仅仅是本申请的一部分实施例,而不是本申请的全部实施例,应理解,本申请不受这里描述的示例实施例的限制。基于本申请中描述的本申请实施例,本领域技术人员在没有付出创造性劳动的情况下所得到的所有其它实施例都应落入本申请的保护范围之内。
为了至少部分地解决上述技术问题,本申请实施例提供了一种深度学习模型的编译方法、电子设备、存储介质及计算机程序产品。根据本申请实施例的深度学习模型的编译方法,通过将计算图中计算节点所包括的各原始算子转化成目标语言片段并进行过滤,使得编译后的深度学习模型不依赖第三方库、基础库就可以执行业务,所需的存储空间较少,进而能够在较少存储,例如KB(千字节)级别的运行环境中运行。上述深度学习模型的编译方法可以应用于任何与深度学习模型的应用相关的领域,包括但不限于基于静态图像或动态视频的人脸识别、目标检测、身份认证、视频直播等领域。
首先,参照图1来描述用于实现根据本申请实施例的深度学习模型的编译方法和装置的示例电子设备100。
如图1所示,电子设备100包括一个或多个处理器102、一个或多个存储装置104。可选地,电子设备100还可以包括输入装置106、输出装置108、以及图像拍摄装置110,这些组件通过总线系统112和/或其它形式的连接机构(未示出)互连。应当注意,图1所示的电子设备100的组件和结构只是示例性的,而非限制性的,根据需要,所述电子设备也可以具有其他组件和结构。
所述处理器102可以采用数字信号处理器(DSP)、现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、微处理器中的至少一种硬件形式来实现,所述处理器102可以是中央处理单元(CPU)、图像处理器(GPU)、专用的集成电路(ASIC)或者具有数据处理能力和/或指令执行能力的其它形式的处理单元中的一种或几种的组合,并且可以控制所述电子设备100中的其它组件以执行期望的功能。
所述存储装置104可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器102可以运行所述程序指令,以实现下文所述的本申请实施例中(由处理器实现)的客户端功能以及/或者其它期望的功能。在所述计算机可读存储介质中还可以存储各种应用程序和各种数据,例如所述应用程序使用和/或产生的各种数据等。
所述输入装置106可以是用户用来输入指令的装置,并且可以包括键盘、鼠标、麦克风和触摸屏等中的一个或多个。
所述输出装置108可以向外部(例如用户)输出各种信息(例如图像和/或声音),并且可以包括显示器、扬声器等中的一个或多个。可选地,所述输入装置106和所述输出装置108可以集成在一起,采用同一交互装置(例如触摸屏)实现。
所述图像拍摄装置110可以采集图像,并且将所采集的图像存储在所述存储装置104中以供其它组件使用。图像拍摄装置110可以是单独的相机或移动终端中的摄像头等。应当理解,图像拍摄装置110仅是示例,电子设备100可以不包括图像拍摄装置110。在这种情况下,可以利用其他具有图像采集能力的器件采集图像,并将采集的图像发送给电子设备100。
示例性地,用于实现根据本申请实施例的深度学习模型的编译方法的示例电子设备可以在诸如个人计算机、终端设备或远程服务器等的设备上实现。其中,终端设备包括但不限于:平板电脑、手机、PDA(Personal Digital Assistant,个人数字助理)、可触屏一体机等。
下面,将参考图2描述根据本申请实施例的深度学习模型的编译方法。图2示出根据本申请一个实施例的深度学习模型的编译方法200的示意性流程图。如图2所示,深度学习模型的编译方法200包括步骤S210、S220、S230和S240。
步骤S210,将深度学习模型转换为计算图。
示例性地,深度学习模型,例如卷积神经网络(CNN)可以包括输入层、隐藏层和输出层。每种网络层可以用一个或多个算子表示。将一个深度学习模型转换为计算图后,计算图中可以包括输入、多个算子以及每个算子所对应的偏置和权重、以及标签等。计算图中的算子可以是任意类型的算子,例如,计算图中的算子可以包括损失函数算子、激活函数算子、矩阵乘算子、池化算子等。图3示出了根据本申请一个实施例的计算图的部分示意图。如图3所示,X可以表示输入,w可以表示权重,b可以表示偏置,y可以表示标签。在图3中,示出矩阵乘算子、激活函数算子、损失函数算子这几种算子。
步骤S220,按照计算图中的计算节点的顺序将计算节点包含的各原始算子转换为目标语言片段,获得初始片段集合。
示例性地,在上述步骤S210获得的计算图中,每个计算节点中可以包括一个或多个原始算子。例如,对于某个卷积计算节点来说,为了实现其卷积功能,可能需要前处理、核心处理、后处理三种处理模块,每个模块采用一个计算函数(即一个算子)实现。
按照计算图中计算节点的顺序,可以将各个计算节点中包括的各原始算子转化为目标语言片段。目标语言片段可以是用目标语言编写的程序片段,本文所述的目标语言可以是任意合适的轻量化的语言,例如C语言、汇编语言等。目标语言可以根据需要预先设定好。一个原始算子可以转换成一个或多个目标语言片段,每个目标语言片段可以是预先编写好的C语言程序片段或汇编语言程序片段等。示例性地,在目标语言是C语言的情况下,每个目标语言片段可以是一个核函数(kernel)。示例性地,在目标语言是C语言的情况下,每个目标语言片段可以表示为“XXX.C”。基于一个或多个计算节点所包含的各原始算子所转换的目标语言片段,可以获得初始片段集合。
步骤S230,至少针对初始片段集合,将多个相同的目标语言片段过滤为单一的目标语言片段,获得经过滤的片段集合。
示例性地,任意两个原始算子所对应的目标语言片段可以是完全相同、完全不同、或者部分相同部分不同的,因此初始片段集合中有可能包括多个相同的目标语言片段。在一个示例中,可以仅针对初始片段集合,将其中的相同的目标语言片段进行过滤,使得这些相同的目标语言片段中仅剩余其中的一个目标语言片段。在另一个示例中,还可以将初始片段集合与其他目标语言片段(例如下文描述的由串联算子转换的目标语言片段)放在一起形成新的片段集合,对新的片段集合中的相同的目标语言片段进行过滤,使得这些相同的目标语言片段中仅剩余其中的一个目标语言片段。基于经过过滤后的目标语言片段,可以获得经过滤的片段集合。
步骤S240,导出编译后的深度学习模型,编译后的深度学习模型包括深度学习模型的运行环境和经过滤的片段集合,其中,运行环境包括深度学习模型的原始算子以及各原始算子与经过滤的片段集合中的各目标语言片段之间的映射关系。
示例性地,将上述步骤S230获得的经过滤的片段集合和深度学习模型的运行环境导出,例如,存储在计算机硬盘的文件夹中。运行环境可以包括深度学习模型的原始算子,例如,矩阵乘算子、激活函数算子和损失函数算子。示例性地,原始算子可以采用一种抽象的方式描述和存储,例如卷积算子可以用“卷积”这样的字符描述,而非用真正的能够运行的程序语言描述。运行环境还可以包括各个原始算子与经过滤的片段集合中的各个目标语言片段之间的映射关系,例如,矩阵乘算子对应目标语言片段“1111.C”和“2222.C”、激活函数算子对应目标语言片段“3333.C”、损失函数算子对应目标语言片段“4444.C”和“5555.C”。
根据本申请实施例的深度学习模型的编译方法、电子设备、存储介质及计算机程序产品,该方法中通过将计算图中计算节点所包括的各原始算子转化成目标语言片段并进行过滤的方式获得采用目标语言片段描述的算子,进而获得编译后的深度学习模型。这样获得的编译后的深度学习模型包含按需生成的算子,其不依赖第三方库、基础库就可以执行业务,所需的存储空间也较少,因此使得编译后的深度学习模型在运行时能够在较少存储,例如KB(千字节)级别的运行环境中运行。此外,编译时绑定在模型中的运行时信息(运行环境中包含的信息)有助于减少模型运行时初始化的计算量,使得保证最小的运行时内存占用成为可能。由此,使得编译获得的深度学习模型能够在裸系统中部署,非常适用于嵌入式场景、存储受限场景、不能永驻内存场景下的深度学习推理。
根据本申请实施例的深度学习模型的编译方法可以部署在终端处,例如,可以部署在个人终端或服务器端处。
替代地,根据本申请实施例的深度学习模型的编译方法还可以分布地部署在服务器端(或云端)和客户端处。例如,可以在客户端获取深度学习模型的各项参数,客户端将深度学习模型的参数传送给服务器端(或云端),由服务器端(或云端)进行深度学习模型的编译。示例性地,上述深度学习模型的参数可以包括各网络层的权重、偏置、深度学习模型的输入图像的尺寸信息等中的一种或多种。
示例性地,按照计算图中的计算节点的顺序将计算节点包含的各原始算子转换为目标语言片段可以包括:利用预设算法将任一原始算子拆分为一个或多个程序片段;将一个或多个程序片段一一对应地转换为一个或多个采用目标语言描述的新程序片段;将一个或多个新程序片段拼接在一起,获得与该原始算子相对应的目标语言片段。
在一个实施例中,可以利用预设算法,将一个原始算子拆分成一个或者多个程序片段。预设算法可以是任何合适的算法,在一个示例中,预设算法可以是用C++语言编写的算法。例如,利用预先编写好的C++程序,可以将某一原始算子拆成4个for循环。然后将这4个for循环转换成多个采用目标语言描述的新程序片段,例如每个新程序片段可以是C语言中的一个字符串。最后再将所获得的多个新程序片段,即多个字符串,拼接在一起,即可以获得与上述原始算子相对应的目标语言片段。如上所述,原始算子,例如卷积,可以用一种抽象的方式描述,例如用“卷积”这两个字符描述。而将原始算子转换成的字符串是真正能进行卷积计算的函数,是用诸如C语言的目标语言编写的函数。
通过预设算法,可以简单快速地将各计算节点包含的各原始算子转换为目标语言片段。这种转换方式效率和准确率比较高。
示例性地,在按照计算图中的计算节点的顺序将计算节点包含的各原始算子转换为目标语言片段,获得初始片段集合之前,方法还可以包括:针对计算图中的各计算节点所需的内存空间进行内存空间规划。
在一个实施例中,获得初始片段集合之前,还可以包括针对计算图中各个计算节点所需的内存空间进行规划。示例性地,对内存空间进行规划可以包括将不同算子配置为交替共享同一内存空间。例如,某一计算节点中一共包括三个算子。第一个算子运行时使用的内存为5G,在第三个算子运行的时候,第一个算子使用的内存空间已经释放,那么这5G的内存空间就可以用来存储第三个算子所涉及的数据,任一算子涉及的数据可以包括输入数据、输出数据、中间结果中的一项或多项。
在模型的离线编译期完成内存规划,这样有助于减少模型运行时的计算开销和运行时代码量,使得编译后的模型能够更好地适应存储空间受限的环境。
示例性地,在导出编译后的深度学习模型之前,方法还可以包括:统计初始片段集合运行所需要的所有内存空间;基于统计结果为每个原始算子的输入数据、输出数据和中间结果分配内存空间,获得内存分配信息,其中,运行环境还包括内存分配信息。
在一个实施例中,如前文所述的初始片段集合中可以包括目标语言片段“1111.C”、“2222.C”、“3333.C”、“4444.C”和“5555.C”。经过统计获得该初始片段集合运行时所需要的所有内存空间为10G,则可以生成如下内存分配信息:将5G内存空间分配给矩阵乘算子,其中,输入数据占1G、输出数据2G、中间结果占2G;将2G内存空间分配给激活函数算子,其中,输入数据占0.5G、输出数据1G、中间结果占0.5G;将3G内存空间分配给损失函数算子,其中,输入数据占1G、输出数据0.5G、中间结果占1.5G。
在上述技术方案中,基于统计的初始片段集合所需的所有内存空间为每个原始算子的输入数据、输出数据和中间结果分配内存空间,由此可以更加合理地规划内存空间的分配,减少过多的内存空间消耗。这种方案有助于减少模型运行时的计算开销和运行时代码量,使得编译后的模型能够更好地适应存储空间受限的环境。
示例性地,统计初始片段集合运行所需要的所有内存空间可以包括:获取深度学习模型处理的图像的尺寸信息;基于尺寸信息和初始片段集合中的所有目标语言片段,统计所有内存空间。
深度学习模型可以应用于对任意类型的输入数据的处理。例如,输入数据可以是图像或音频等。在一个实施例中,深度学习模型处理的图像可以是静态图像,也可以是动态视频中的任一视频帧。图像可以是图像采集装置(例如相机中的图像传感器)采集到的原始图像,也可以是对原始图像进行预处理(诸如数字化、归一化、平滑等)之后获得的图像。图像的尺寸信息可以包括图像的宽W、图像的高H、以及图像的通道数C,图像的尺寸信息可以表示为[H,W,C]。
深度学习模型处理的图像的尺寸信息与初始片段集合运行所需要的所有内存空间相关,对于同一深度学习模型来说,尺寸相同的图像所需的内存空间也相同。此外,任一目标语言片段可能涉及到输入数据、输出数据和中间结果中的一种或多种,每种数据的大小和所需的内存空间是固定的。因此,可以结合图像的尺寸信息以及上述步骤S220获得的初始片段集合中的所有目标语言片段的需求,统计所需的所有内存空间。
上述深度学习模型处理的图像可以由外部设备(例如云端服务器)发送到电子设备100以由电子设备100的处理器102进行处理,还可以由电子设备100包括的图像采集装置110(例如摄像头)采集并传送到处理器102进行处理,还可以由电子设备100包括的存储装置104存储并传送到处理器102进行处理。
在上述技术方案中,基于深度学习模型处理的图像的尺寸信息和初始片段集合中的所有目标语言片段统计所有内存空间,可以更准确地确定内存空间的大小。
示例性地,在导出编译后的深度学习模型之前,方法还可以包括:按照经过滤的片段集合中的各目标语言片段的调用顺序,将深度学习模型的原始算子以及映射关系进行序列化,获得运行环境。
在一个实施例中,在通过深度学习模型的编译流程导出深度学习模型的运行环境和经过滤的片段集合之前,还可以调用序列化工具(FlatBuffers,FBS)打包工具对深度学习模型的原始算子以及映射关系进行序列化,以获得运行环境。序列化之后的信息可以按照特定的格式存储在预设存储器的文件中,因此,可以更方便地调用。上述预设存储器可以是固定硬盘或移动硬盘等。
示例性地,在导出编译后的深度学习模型之后,方法还可以包括:将运行环境和经过滤的片段集合封装成软件工具包。
在实施例中,可以采用预设的编译工具对导出的经过滤的片段集合和运行环境一起编译,得到用于部署的深度学习模型的软件开发工具包(Software Development Kit,SDK)。预设的编译工具可以由SDK的部署平台提供。SDK可以存储在任意合适的存储空间,例如计算机的固定硬盘或者移动硬盘中,移动硬盘可以是例如U盘。由于算子是根据用户的需求生成,并经过过滤,因此,SDK的体积非常小,非常适用于存储空间受限或嵌入式场景。
示例性地,在深度学习模型部署好之后,经过滤的片段集合可以存储在文件夹中,作为运行库存在。当调用深度学习模型的运行环境之后,可以在需要时自动调用运行库中的各目标语言片段。
示例性地,在至少针对初始片段集合,将多个相同的目标语言片段过滤为单一的目标语言片段,获得经过滤的片段集合之前,方法还可以包括:将串联两个深度学习模型的串联算子转换为目标语言片段;针对初始片段集合,将多个相同的目标语言片段过滤为单一的目标语言片段,获得经过滤的片段集合可以包括:针对串联算子所对应的目标语言片段以及初始片段集合,将多个相同的目标语言片段过滤为单一的目标语言片段,获得经过滤的片段集合。
在一个实施例中,深度学习模型的数量是多个,在任意两个深度学习模型之间还可以包括串联算子。对于多个深度模型的情况,每个深度模型均可以通过上述步骤S210-S240的流程进行处理。此外,串联算子也可以一并加入到步骤S220、S230和S240中进行处理。
例如,在人脸识别的场景中,人脸识别分两步:1、检测是否有人脸;2、识别人脸身份。这两步可以分别采用人脸检测模型和人脸比对模型来实现。第一步通过人脸检测模型检测到有人脸后,可以识别出人脸所在的人脸检测框。人脸检测模型可以将人脸检测框的信息输出给后续的人脸比对模型。不过为了方便对比,通常需要将人脸检测框进行放大之后再输入给人脸比对模型。因此,人脸检测模型和人脸比对模型之间还存在放大算子。中间的放大算子(resize)就属于串联算子。可以采用步骤S220的方式将该串联算子转换成一个或多个目标语言片段。随后,将串联算子转换成的目标语言片段与深度学习模型转换成的初始片段集合放在一起进行过滤,获得经过滤的片段集合。“将多个相同的目标语言片段过滤为单一的目标语言片段,获得经过滤的片段集合”前文已经详细描述,为了简洁,在此不再赘述。在串联算子所对应的目标语言片段与深度学习模型所对应的目标语言片段之间存在重复的情况下,也可以将它们综合在一起进行过滤,由此,可以进一步节省内存空间,适应内存空间受限的场景。
串联算子的具体功能需要根据深度学习模型实际执行的业务及业务的应用环境来决定。相同的多个深度学习模型应用于不同的业务(例如有的用于人脸识别,有的用于证件识别),所需的串联算子可能是不同的。而相同的多个深度学习模型应用于相同的业务,但是应用环境不同(例如都是用于人脸识别,但是有的用于银行,有的用于商场),所需的串联算子也可能是不同的。总之,串联算子可以是任意形式的、能够实现任意功能的、用来串联两个深度学习模型的算子,本申请不对其具体形式及功能进行限定。
示例性地,在按照计算图中的计算节点的顺序将计算节点包含的各原始算子转换为目标语言片段,获得初始片段集合之前,方法还可以包括:对计算图进行优化。
在实施例中,前文步骤S210所述的将深度学习模型转换成计算图,计算图中可以包括多个计算节点以及每个计算节点中包括的各个原始算子。计算图的优化可以采用任何现有的或将来可能出现的优化方式实现。例如,可以通过将各个原始算子中相同的原始算子合并为单一算子等方式对计算图进行优化。例如,可以将矩阵乘算子和矩阵加算子合并成一个矩阵乘加的算子。对计算图进行优化有利于程序加速,能够有效提高深度学习模型的计算性能。
示例性地,可以采用多级中间表示(Multi-Level IntermediateRepresentation,MLIR)工具离线编译上述深度学习模型。MLIR工具适用范围广,有助于扩展深度学习模型的可移植性。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
图4示出了根据本申请一个实施例的电子设备400的示意性框图。电子设备400包括存储器410和处理器420。
存储器410存储用于实现根据本申请实施例的深度学习模型的编译方法中的相应步骤的计算机程序指令。
处理器420用于运行存储器410中存储的计算机程序指令,以执行根据本申请实施例的深度学习模型的编译方法的相应步骤。
在一个实施例中,计算机程序指令被处理器420运行时用于执行以下步骤:将深度学习模型转换为计算图;按照计算图中的计算节点的顺序将计算节点包含的各原始算子转换为目标语言片段,获得初始片段集合;至少针对初始片段集合,将多个相同的目标语言片段过滤为单一的目标语言片段,获得经过滤的片段集合;导出编译后的深度学习模型,编译后的深度学习模型包括深度学习模型的运行环境和经过滤的片段集合,其中,运行环境包括深度学习模型的原始算子以及各原始算子与经过滤的片段集合中的各目标语言片段之间的映射关系。
示例性地,电子设备400还可以包括图像采集装置430。图像采集装置430用于采集深度学习模型处理的图像。图像采集装置430是可选的,电子设备400也可以不包括图像采集装置430。此时处理器420可以通过其他方式获取深度学习模型处理的图像,例如从外部设备或从存储器410中获取深度学习模型处理的图像。
此外,根据本申请实施例,还提供了一种存储介质,在存储介质上存储了程序指令,在程序指令被计算机或处理器运行时用于执行本申请实施例的深度学习模型的编译方法的相应步骤。存储介质例如可以包括智能电话的存储卡、平板电脑的存储部件、个人计算机的硬盘、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、或者上述存储介质的任意组合。
在一个实施例中,程序指令在被计算机或处理器运行时可以使得计算机或处理器可以执行根据本申请实施例的深度学习模型的编译方法。
在一个实施例中,程序指令在运行时用于执行以下步骤:将深度学习模型转换为计算图;按照计算图中的计算节点的顺序将计算节点包含的各原始算子转换为目标语言片段,获得初始片段集合;至少针对初始片段集合,将多个相同的目标语言片段过滤为单一的目标语言片段,获得经过滤的片段集合;导出编译后的深度学习模型,编译后的深度学习模型包括深度学习模型的运行环境和经过滤的片段集合,其中,运行环境包括深度学习模型的原始算子以及各原始算子与经过滤的片段集合中的各目标语言片段之间的映射关系。
此外,根据本申请实施例,还提供了一种计算机程序产品,计算机程序产品包括计算机程序,计算机程序在运行时用于执行上述深度学习模型的编译方法200。
根据本申请实施例的电子设备中的各模块可以通过根据本申请实施例的实施深度学习模型的编译的电子设备的处理器运行在存储器中存储的计算机程序指令来实现,或者可以在根据本申请实施例的计算机程序产品的计算机可读存储介质中存储的计算机指令被计算机运行时实现。
尽管这里已经参考附图描述了示例实施例,应理解上述示例实施例仅仅是示例性的,并且不意图将本申请的范围限制于此。本领域普通技术人员可以在其中进行各种改变和修改,而不偏离本申请的范围和精神。所有这些改变和修改意在被包括在所附权利要求所要求的本申请的范围之内。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个设备,或一些特征可以忽略,或不执行。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本申请的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本申请并帮助理解各个申请方面中的一个或多个,在对本申请的示例性实施例的描述中,本申请的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该本申请的方法解释成反映如下意图:即所要求保护的本申请要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如相应的权利要求书所反映的那样,其发明点在于可以用少于某个公开的单个实施例的所有特征的特征来解决相应的技术问题。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本申请的单独实施例。
本领域的技术人员可以理解,除了特征之间相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本申请的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本申请的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本申请实施例的深度学习模型的编译装置中的一些模块的一些或者全部功能。本申请还可以实现为用于执行这里所描述的方法的一部分或者全部的装置程序(例如,计算机程序和计算机程序产品)。这样的实现本申请的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本申请进行说明而不是对本申请进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本申请可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
以上,仅为本申请的具体实施方式或对具体实施方式的说明,本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。本申请的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种深度学习模型的编译方法,包括:
将深度学习模型转换为计算图;
按照所述计算图中的计算节点的顺序将所述计算节点包含的各原始算子转换为目标语言片段,获得初始片段集合;
至少针对所述初始片段集合,将多个相同的目标语言片段过滤为单一的目标语言片段,获得经过滤的片段集合;
导出编译后的深度学习模型,所述编译后的深度学习模型包括所述深度学习模型的运行环境和所述经过滤的片段集合,其中,所述运行环境包括所述深度学习模型的原始算子以及各原始算子与所述经过滤的片段集合中的各目标语言片段之间的映射关系。
2.如权利要求1所述的方法,其中,所述按照所述计算图中的计算节点的顺序将所述计算节点包含的各原始算子转换为目标语言片段包括:
利用预设算法将任一原始算子拆分为一个或多个程序片段;
将所述一个或多个程序片段一一对应地转换为一个或多个采用目标语言描述的新程序片段;
将所述一个或多个新程序片段拼接在一起,获得与该原始算子相对应的目标语言片段。
3.如权利要求1所述的方法,其中,在所述按照所述计算图中的计算节点的顺序将所述计算节点包含的各原始算子转换为目标语言片段,获得初始片段集合之前,所述方法还包括:
针对所述计算图中的各计算节点所需的内存空间进行内存空间规划。
4.如权利要求1-3任一项所述的方法,其中,在所述导出编译后的深度学习模型之前,所述方法还包括:
统计所述初始片段集合运行所需要的所有内存空间;
基于统计结果为每个原始算子的输入数据、输出数据和中间结果分配内存空间,获得内存分配信息,其中,所述运行环境还包括所述内存分配信息。
5.如权利要求1-3任一项所述的方法,其中,在所述导出编译后的深度学习模型之前,所述方法还包括:
按照所述经过滤的片段集合中的各目标语言片段的调用顺序,将所述深度学习模型的原始算子以及所述映射关系进行序列化,获得所述运行环境。
6.如权利要求1-3任一项所述的方法,其中,在所述导出编译后的深度学习模型之后,所述方法还包括:
将所述运行环境和所述经过滤的片段集合封装成软件工具包。
7.如权利要求1-3任一项所述的方法,其中,
在所述至少针对所述初始片段集合,将多个相同的目标语言片段过滤为单一的目标语言片段,获得经过滤的片段集合之前,所述方法还包括:
将串联两个深度学习模型的串联算子转换为目标语言片段;
所述至少针对所述初始片段集合,将多个相同的目标语言片段过滤为单一的目标语言片段,获得经过滤的片段集合包括:
针对所述串联算子所对应的目标语言片段以及所述初始片段集合,将多个相同的目标语言片段过滤为单一的目标语言片段,获得所述经过滤的片段集合。
8.一种电子设备,包括处理器和存储器,其特征在于,所述存储器中存储有计算机程序指令,所述计算机程序指令被所述处理器运行时用于执行如权利要求1至7任一项所述的深度学习模型的编译方法。
9.一种存储介质,在所述存储介质上存储了程序指令,其特征在于,所述程序指令在运行时用于执行如权利要求1至7任一项所述的深度学习模型的编译方法。
10.一种计算机程序产品,所述计算机程序产品包括计算机程序,其特征在于,所述计算机程序在运行时用于执行如权利要求1至7任一项所述的深度学习模型的编译方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211404506.XA CN115993973A (zh) | 2022-11-10 | 2022-11-10 | 深度学习模型的编译方法、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211404506.XA CN115993973A (zh) | 2022-11-10 | 2022-11-10 | 深度学习模型的编译方法、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115993973A true CN115993973A (zh) | 2023-04-21 |
Family
ID=85994481
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211404506.XA Pending CN115993973A (zh) | 2022-11-10 | 2022-11-10 | 深度学习模型的编译方法、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115993973A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117971251A (zh) * | 2024-04-01 | 2024-05-03 | 深圳市卓驭科技有限公司 | 软件部署方法、设备、存储介质及产品 |
-
2022
- 2022-11-10 CN CN202211404506.XA patent/CN115993973A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117971251A (zh) * | 2024-04-01 | 2024-05-03 | 深圳市卓驭科技有限公司 | 软件部署方法、设备、存储介质及产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3612990B1 (en) | Power-efficient deep neural network module configured for layer and operation fencing and dependency management | |
CN108010112B (zh) | 动画处理方法、装置及存储介质 | |
US20200228137A1 (en) | Methods, systems, articles of manufacture, and apparatus to decode zero-value-compression data vectors | |
Martinez-Alpiste et al. | Smartphone-based real-time object recognition architecture for portable and constrained systems | |
CN109241888B (zh) | 神经网络训练与对象识别方法、装置和系统及存储介质 | |
US11144291B1 (en) | Loop-oriented neural network compilation | |
CN112099882B (zh) | 一种业务处理方法、装置及设备 | |
CN110889439A (zh) | 一种图像特征提取方法、装置及电子设备和存储介质 | |
CN114238904A (zh) | 身份识别方法、双通道超分模型的训练方法及装置 | |
CN109598250A (zh) | 特征提取方法、装置、电子设备和计算机可读介质 | |
Huu et al. | Proposing a Recognition System of Gestures Using MobilenetV2 Combining Single Shot Detector Network for Smart‐Home Applications | |
CN115993973A (zh) | 深度学习模型的编译方法、电子设备及存储介质 | |
CN109982088B (zh) | 图像处理方法及装置 | |
Giduthuri et al. | OpenVX: a framework for accelerating computer vision | |
CN116597260A (zh) | 图像处理方法、电子设备、存储介质及计算机程序产品 | |
CN113628221B (zh) | 图像处理方法、图像分割模型训练方法及相关装置 | |
CN113762331A (zh) | 关系型自蒸馏方法、装置和系统及存储介质 | |
Yan et al. | Computing OpenSURF on OpenCL and general purpose GPU | |
CN116977804A (zh) | 图像融合方法、电子设备、存储介质及计算机程序产品 | |
CN115374304A (zh) | 数据处理方法、电子设备、存储介质及计算机程序产品 | |
CN112905792A (zh) | 基于非文本场景的文本聚类方法、装置、设备及存储介质 | |
Kushsairy et al. | Embedded vision: Enhancing embedded platform for face detection system | |
US11809849B1 (en) | Global modulo allocation in neural network compilation | |
McDonagh et al. | Applying semi-synchronised task farming to large-scale computer vision problems | |
US11782706B1 (en) | Reconfigurable neural network processing based on subgraph recognition |
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 |