CN112445465B - 基于c代码生成的神经网络模型推理和训练方法 - Google Patents
基于c代码生成的神经网络模型推理和训练方法 Download PDFInfo
- Publication number
- CN112445465B CN112445465B CN201910799245.8A CN201910799245A CN112445465B CN 112445465 B CN112445465 B CN 112445465B CN 201910799245 A CN201910799245 A CN 201910799245A CN 112445465 B CN112445465 B CN 112445465B
- Authority
- CN
- China
- Prior art keywords
- code generation
- compiler
- neural network
- training
- 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.)
- Active
Links
Images
Classifications
-
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/10—Interfaces, programming languages or software development kits, e.g. for simulating neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/04—Inference or reasoning models
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Artificial Intelligence (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开一种基于C代码生成的神经网络模型推理和训练方法,包括以下步骤:S1、以通过各种AI编程框架开发的模型作为输入,AI框架编译器识别各种模型格式并转化为统一的计算图,将输入的模型转化为底层IR;S2、将S1中生成的计算图输入C代码生成模块,输出总控函数;S3、C代码生成模块针对不同的底层IR,生成对应的C代码;S4、将生成的总控函数、各IR对应的C代码以及C‑基础算子库,输入到支持C语言和相应硬件平台的基础编译器,通过基础编译器的优化过程转化为运行程序,并在对应硬件平台上执行推理过程、训练过程。本发明实现了AI框架编译器在LLVM不支持的硬件平台上的快速移植,能够快速实现神经网络模型在LLVM不支持的特定硬件平台上的训练和推理过程。
Description
技术领域
本发明涉及一种基于C代码生成的神经网络模型推理和训练方法,属于计算机技术领域。
背景技术
在深度学习领域,训练和推理应用的开发往往依赖于AI编程框架,AI编程框架是深度学习领域的重要开发工具,能够支撑用户在各种硬件平台开发出高能效的深度学习应用,而不需要对深度学习领域知识有非常深入和细节的了解。但当前,AI编程框架和后端硬件平台都存在多样化的特点,AI框架编译器作为一种端到端的编译系统,将多种框架开发的模型转化为统一的计算图,并进行层次化的lower和优化,转化为在不同硬件平台的可执行代码,具有非常广阔的应用前景。
AI框架编译器负责读取基于AI框架开发的神经网络模型,进行编译和优化后输出可执行程序。AI框架编译器底层依赖于基础编译器,目前几乎所有的开源框架编译器项目都依赖于LLVM编译器,即目前几乎所有AI框架编译器都依赖于LLVM编译器,在CPU端输出LLVM IR,在GPU端生成CUDA或OPENCL代码,不支持直接输出C代码,这对于LLVM不支持的非GPU处理器架构提出了挑战。
目前神经网络模型往往首先被转化为计算图,而后通过层次化的lower和优化,生成底层IR,底层IR转化为LLVM的中间表示进而通过LLVM编译器生成可执行程序。这一流程与LLVM编译器紧耦合,不可拆分。对于一些LLVM尚不支持的硬件平台,框架编译器就无法使用,而对于多样化的AI编程框架来说,如果逐个针对特定硬件平台做移植和优化,又是一件工作量和难度都很大的事。
发明内容
本发明的目的是提供一种基于C代码生成的神经网络模型推理和训练方法,该基于C代码生成的神经网络模型推理和训练方法实现了AI框架编译器在LLVM不支持的硬件平台上的快速移植,能够快速实现神经网络模型在LLVM不支持的特定硬件平台上的训练和推理过程。
为达到上述目的,本发明采用的技术方案是:一种基于C代码生成的神经网络模型推理和训练方法,包括以下步骤:
S1、以通过各种AI编程框架开发的模型作为输入,AI框架编译器识别各种模型格式并转化为统一的计算图,然后,AI框架编译器通过lower和优化流程,将输入的模型转化为底层IR;
S2、将S1中生成的计算图输入C代码生成模块,输出总控函数,此总控函数为训练、推理计算过程的主函数,负责调用各个底层IR生成的对应子函数,并准备各IR的参数;
S3、C代码生成模块针对不同的底层IR,生成对应的C代码,具体如下:
S31、对于对应于基础算子库的底层IR,生成基础算子的函数接口声明,由总控函数负责调用,对于AI框架编译器自定义的底层IR,C代码生成模块根据该IR的含义,输出对应的C代码;
S32、将基础算子库转化为C语言实现的C-基础算子库,并根据目标硬件平台完成初步优化;
S4、将生成的总控函数、各IR对应的C代码以及C-基础算子库,输入到支持C语言和相应硬件平台的基础编译器,通过基础编译器的优化过程转化为运行程序,并在对应硬件平台上执行推理过程、训练过程。
上述技术方案中进一步改进的方案如下:
1. 上述方案中,在S3中,所述AI框架编译器自定义的底层IR为规则循环kernelIR、细粒度基础运算IR。
2. 上述方案中,当所述AI框架编译器自定义的底层IR为规则循环kernel IR时,通过循环优化技术对kernel进行优化。
3. 上述方案中,所述C代码生成模块通过动态空间管理接口完成整个计算过程的统一内存申请和管理,计算过程中的各变量都使用动态申请的统一内存的一部分,以C指针的方式来表示。
由于上述技术方案的运用,本发明与现有技术相比具有下列优点:
本发明基于C代码生成的神经网络模型推理和训练方法,其实现了AI框架编译器在LLVM不支持的硬件平台上的快速移植,能够充分利用AI框架编译器的优化能力,快速实现神经网络模型在LLVM不支持的特定硬件平台上的训练和推理过程,从而实现在各种处理器或加速器上的深度学习应用开发和优化,且输出的C代码与LLVM IR相比,具有更强的可读性,也给了用户进一步深度优化的空间。
附图说明
附图1为本发明基于C代码生成的神经网络模型推理和训练方法流程图。
具体实施方式
实施例:一种基于C代码生成的神经网络模型推理和训练方法,包括以下步骤:
S1、以通过各种AI编程框架开发的模型作为输入,AI框架编译器识别各种模型格式并转化为统一的计算图,然后,AI框架编译器通过lower和优化流程,将输入的模型转化为底层IR;
S2、将S1中生成的计算图输入C代码生成模块,输出总控函数,此总控函数为训练、推理计算过程的主函数,负责调用各个底层IR生成的对应子函数,并准备各IR的参数;
S3、C代码生成模块针对不同的底层IR,生成对应的C代码,具体如下:
S31、对于对应于基础算子库的底层IR,生成基础算子的函数接口声明,由总控函数负责调用,对于AI框架编译器自定义的底层IR,C代码生成模块根据该IR的含义,输出对应的C代码;
S32、将基础算子库转化为C语言实现的C-基础算子库,并根据目标硬件平台完成初步优化;
S4、将生成的总控函数、各IR对应的C代码以及C-基础算子库,输入到支持C语言和相应硬件平台的基础编译器,通过基础编译器的优化过程转化为运行程序,并在对应硬件平台上执行推理过程、训练过程。
上述C代码生成模块通过动态空间管理接口完成整个计算过程的统一内存申请和管理,计算过程中的各变量都使用动态申请的统一内存的一部分,以C指针的方式来表示。
实施例进一步解释如下:
C代码是所有编程语言中最高效的,也是所有硬件平台都支持的基础编程语言,结合相应硬件平台的C编译器,本发明技术方案能帮助用户在特定硬件平台快速实现各种神经网络模型的移植和优化。
本发明方案支持将基于多种AI编程框架开发的模型,通过统一的代码生成模块,自动转换为等价的C代码实现,结合相应硬件平台的基础编译器和DNN库,能够快速实现神经网络模型在各种架构处理器或加速器上的训练和推理过程,从而帮助用户实现在各种处理器或加速器上的深度学习应用开发和优化,具体流程如图1所示:
(1)首先,以通过各种AI编程框架开发的模型作为输入,AI框架编译器识别各种模型格式并转化为统一的计算图。然而,AI编译器通过常规的lower和优化流程,将模型转化为底层IR。
(2)C代码生成模块以计算图为输入,输出总控函数,该函数为训练或推理计算过程的主函数,负责调用各个底层IR生成的对应子函数,并准备各IR的参数。
(3)C代码生成模块针对不同的底层IR,生成对应的C代码,具体如下:
a. 对于对应于基础算子库的底层IR,如卷积等基础操作,生成基础算子的函数接口声明,由总控函数负责调用。
b. 对于AI框架编译器自定义的底层IR,如规则循环kernel和细粒度的基础运算等,C代码生成模块根据该IR的含义,输出对应的C代码,并通过循环优化技术对kernel进行优化。
c. 将基础算子库转化为C语言实现的C-基础算子库,并根据目标硬件平台完成初步优化。
d. C代码生成模块通过动态空间管理接口完成整个计算过程的统一内存申请和管理,计算过程中的各变量都使用该内存空间的一部分,以C指针的方式来表示。
(4)最后,生成的总控函数、各IR对应的C代码以及C-基础算子库,都输入到支持C语言和相应硬件平台的基础编译器,通过编译器的优化过程转化为运行程序,并在对应硬件平台上执行推理过程或训练过程。
采用上述基于C代码生成的神经网络模型推理和训练方法时,其实现了AI框架编译器在LLVM不支持的硬件平台上的快速移植,能够充分利用AI框架编译器的优化能力,快速实现神经网络模型在LLVM不支持的特定硬件平台上的训练和推理过程,从而实现在各种处理器或加速器上的深度学习应用开发和优化,且输出的C代码与LLVM IR相比,具有更强的可读性,也给了用户进一步深度优化的空间。
为了便于更好的理解本发明,下面将对本文中使用的术语进行简要的解释:
神经网络:是由大量的、简单的处理单元(神经元)广泛地相互连接而形成的复杂网络系统,是一个高度复杂的非线性动力学习系统。
神经网络模型:以神经元的数学模型为基础,用以描述神经网络的拓扑结构、节点特点和学习规则。
AI框架编译器:以利用AI编程框架开发的模型或用户自定义模型为输入、在不同硬件平台上生成相应的训练或推理代码、并直接运行得到结果的编译系统。
IR:AI框架编译器处理神经网络模型在不同层次生成的数据结构,一般可分为高层IR和底层IR,在高层IR进行体系结构无关优化,在底层IR进行体系结构相关优化。
上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。
Claims (5)
1.一种基于C代码生成的神经网络模型推理和训练方法,其特征在于:包括以下步骤:
S1、以通过各种AI编程框架开发的模型作为输入,AI框架编译器识别各种模型格式并转化为统一的计算图,然后,AI框架编译器通过lower和优化流程,将输入的模型转化为底层IR;
S2、将S1中生成的计算图输入C代码生成模块,输出总控函数,此总控函数为训练、推理计算过程的主函数,负责调用各个底层IR生成的对应子函数,并准备各IR的参数;
S3、C代码生成模块针对不同的底层IR,生成对应的C代码,具体如下:
S31、对于对应于基础算子库的底层IR,生成基础算子的函数接口声明,由总控函数负责调用,对于AI框架编译器自定义的底层IR,C代码生成模块根据该IR的含义,输出对应的C代码;
S32、将基础算子库转化为C语言实现的C-基础算子库,并根据目标硬件平台完成初步优化;
S4、将生成的总控函数、各IR对应的C代码以及C-基础算子库,输入到支持C语言和相应硬件平台的基础编译器,通过基础编译器的优化过程转化为运行程序,并在对应硬件平台上执行推理过程、训练过程。
2.根据权利要求1所述的基于C代码生成的神经网络模型推理和训练方法,其特征在于:在S3中,所述对应于基础算子库的底层IR为卷积操作IR。
3.根据权利要求1所述的基于C代码生成的神经网络模型推理和训练方法,其特征在于:在S3中,所述AI框架编译器自定义的底层IR为规则循环kernel IR、细粒度基础运算IR。
4.根据权利要求3所述的基于C代码生成的神经网络模型推理和训练方法,其特征在于:当所述AI框架编译器自定义的底层IR为规则循环kernel IR时,通过循环优化技术对kernel进行优化。
5.根据权利要求1所述的基于C代码生成的神经网络模型推理和训练方法,其特征在于:所述C代码生成模块通过动态空间管理接口完成整个计算过程的统一内存申请和管理,计算过程中的各变量都使用动态申请的统一内存的一部分,以C指针的方式来表示。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910799245.8A CN112445465B (zh) | 2019-08-28 | 2019-08-28 | 基于c代码生成的神经网络模型推理和训练方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910799245.8A CN112445465B (zh) | 2019-08-28 | 2019-08-28 | 基于c代码生成的神经网络模型推理和训练方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112445465A CN112445465A (zh) | 2021-03-05 |
CN112445465B true CN112445465B (zh) | 2022-09-13 |
Family
ID=74741811
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910799245.8A Active CN112445465B (zh) | 2019-08-28 | 2019-08-28 | 基于c代码生成的神经网络模型推理和训练方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112445465B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113467783B (zh) * | 2021-07-19 | 2023-09-12 | 中科曙光国际信息产业有限公司 | 一种人工智能加速器的核函数编译方法和装置 |
CN114153447B (zh) * | 2021-11-22 | 2024-04-30 | 厦门深度赋智科技有限公司 | 一种自动化生成ai训练代码的方法 |
CN113902112A (zh) * | 2021-12-10 | 2022-01-07 | 深圳鲲云信息科技有限公司 | 硬件计算模拟方法、系统及计算机可读存储介质 |
CN117669683A (zh) * | 2023-12-21 | 2024-03-08 | 摩尔线程智能科技(北京)有限责任公司 | 计算图处理方法、装置和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106371887A (zh) * | 2016-11-08 | 2017-02-01 | 西安电子科技大学 | 一种msvl语言的编译系统及方法 |
CN109858204A (zh) * | 2019-01-03 | 2019-06-07 | 武汉极意网络科技有限公司 | 一种基于llvm的程序代码保护方法及装置 |
-
2019
- 2019-08-28 CN CN201910799245.8A patent/CN112445465B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106371887A (zh) * | 2016-11-08 | 2017-02-01 | 西安电子科技大学 | 一种msvl语言的编译系统及方法 |
CN109858204A (zh) * | 2019-01-03 | 2019-06-07 | 武汉极意网络科技有限公司 | 一种基于llvm的程序代码保护方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112445465A (zh) | 2021-03-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112445465B (zh) | 基于c代码生成的神经网络模型推理和训练方法 | |
US20100037213A1 (en) | Grammar-based generation of types and extensions | |
CN113031966B (zh) | 一种智能选择编译加速库的深度学习编译优化方法 | |
Ozik et al. | The ReLogo agent-based modeling language | |
US8046202B1 (en) | Generation of intermediate representations based on user specified elements in a graphical model that enable simulation, propagation and code generation | |
Jain et al. | Efficient execution of quantized deep learning models: A compiler approach | |
EP3403221A1 (en) | Systems and methods for automatically generating code for deep learning systems | |
CN114461221A (zh) | 编译方法、编译装置、电子设备、存储介质 | |
CN112734040A (zh) | 一种嵌入式人工智能计算框架及应用方法 | |
Coullon et al. | The SIPSim implicit parallelism model and the SkelGIS library | |
Zheng et al. | Neoflow: A flexible framework for enabling efficient compilation for high performance dnn training | |
Li et al. | Development and application of intelligent system modeling and simulation platform | |
Huang et al. | OpenArray v1. 0: a simple operator library for the decoupling of ocean modeling and parallel computing | |
CN111831285A (zh) | 一种面向内存计算平台的代码转换方法、系统及应用 | |
Nabi et al. | Automatic pipelining and vectorization of scientific code for FPGAs | |
EP4091107A1 (en) | Using compiler optimization to enable automatic generation of combinational circuits from high-level programs | |
Swift et al. | Live programming in scientific simulation | |
CN108710488B (zh) | 网格应用程序在众核体系结构上的性能优化框架及方法 | |
WO2020211074A1 (zh) | 一种多方安全计算数据处理方法、装置及系统 | |
Macioł et al. | Application of metaprogramming and generic programming in multiscale modeling | |
US8843906B1 (en) | Inferring data types from compiler call site | |
Djukić et al. | Model variations and automated refinement of domain-specific modeling languages for robot-motion control | |
Gazzarri et al. | A tool to support FastFlow program design | |
CN112445488B (zh) | 异构平台下宽度非对称向量兼容性的编译处理方法和装置 | |
Patade et al. | AUTOMATIC CODE GENERATION FOR C AND C++ PROGRAMMING |
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 |