本发明涉及通信技术领域,尤其涉及一种训练模型的实现方法、设备以及计算机可读存储介质。
背景技术:
在团队协作过程中,由于训练工具版本众多,不同研发工程师拿到的训练工具版本可能不一样,不同的训练工具依赖的软件环境和硬件环境不同,在此种情况下,生成的训练模型对运行环境的软件环境和硬件环境也不一样,一旦在产品集成联调阶段把所有训练模型运行在同一个生产环境中,就会出现各种意想不到的异常。
技术实现要素:
有鉴于此,本发明实施例的目的在于提供一种训练模型的实现方法、设备以及计算机可读存储介质,以解决训练工具版本众多,导致在产品集成联调阶段把所有训练模型运行在同一个生产环境中出现的问题。
本发明实施例解决上述技术问题所采用的技术方案如下:
根据本发明实施例的一个方面,提供的一种训练模型的实现方法,所述方法包括:
训练程序加载业务算法逻辑层生成的动态库;
在前向传播和反向传播计算时,通过前向传播接口和反向传播接口调用所述动态库的前向传播程序和反向传播程序进行训练,得到训练模型。
根据本发明实施例的另一个方面,提供的一种训练模型的实现设备,所述设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的训练模型的实现程序,所述训练模型的实现程序被所述处理器执行时实现上述的训练模型的实现方法的步骤。
根据本发明实施例的另一个方面,提供的一种计算机可读存储介质,所述计算机可读存储介质上存储有训练模型的实现程序,所述训练模型的实现程序被处理器执行时实现上述的训练模型的实现方法的步骤。
本发明实施例的训练模型的实现方法、设备以及计算机可读存储介质,训练程序和业务算法逻辑层脱耦合,训练程序和业务算法逻辑层可以独立运行也可以由训练程序加载业务算法逻辑层运行,方便各自开发维护;编译运行只涉及业务算法逻辑层代码,节省编译时间,提升版本开发效率。
附图说明
图1为现有训练工具的内部框架结构示意图;
图2为现有训练工具的编译流程示意图;
图3为现有训练工具添加新层的编译流程示意图;
图4为本发明第一实施例的训练模型的实现方法流程示意图;
图5为本发明实施例的训练工具的内部框架结构示意图;
图6为本发明实施例的训练工具的算法逻辑层结构示意图;
图7为本发明实施例的训练工具的核心模块结构示意图;
图8为本发明实施例的算法迭代嵌入新算法层的流程示意图;
图9为本发明第二实施例的训练模型的实现设备结构示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
第一实施例
为了更好地理解本实施例,以下对现有训练工具添加新层的编译流程进行说明:
如图1所示为现有训练工具的内部框架结构示意图,训练工具包括核心层、底层依赖函数库和若干个新添加层,核心层包括卷积层、池化层、全连接层。
以caffe为例,caffe的版本编译流程如图2所示。caffe把所有层的配置项在编译之前先用protoc工具生成代码caffe.pb.cc和caffe.pb.h,caffe各个层的代码中把配置项代码用include包含进来,然后编译生成libcaffe.so,编译caffe.cpp把libcaffe.so链接进来生成可执行文件caffe。
请参考图3所示,如果要添加一个层(bn层为例),首先在caffe.proto中添加bn层的配置项,生成caffe.pb.h和caffe.pb.cc以后,把bn层的cpp、cu、h代码分别放至caffe的编译目录,例如:放至~/src/caffe/layers/目录和~/include/caffe/layers/目录,然后编译生成libcaffe.so,最后和caffe.cpp一起链接成新的caffe可执行文件。
上述的编译方式存在的问题是,新添加层和caffe的主版本耦合太紧密,不易剥离。
基于上述方式存在的问题,如图4所示,本发明第一实施例提供一种训练模型的实现方法,所述方法包括:
步骤s11:训练程序加载业务算法逻辑层生成的动态库。
在本实施例中,所述业务算法逻辑层生成动态库包括:
获取所述业务算法逻辑层的配置文件;
根据所述业务算法逻辑层的配置文件、依赖头文件和底层依赖函数库文件,按照所述业务算法逻辑层的算法逻辑编译生成所述动态库。
在本实施例中,所述配置文件为json格式的配置文件。作为示例地,json格式的配置文件如下所示:
{
"var_eps":1e-10,
"moving_average":1,
"decay":7,
"first_filler_type":"constant",
"first_filler_value":1,
"first_filler_lr_mult":1.00001,
"first_filler_decay_mult":0.1,
"second_filler_type":"constant",
"second_filler_value":1,
"second_filler_lr_mult":1.00001,
"second_filler_decay_mult":0.1
}
可选的,所述获取所述业务算法逻辑层的配置文件包括:
通过预设的解析函数,获取所述业务算法逻辑层的配置文件。
作为示例地,预设的解析函数可如下所示:
anygetvalue(char*paraname,constchar*layerparapath),其中,输入:查询字段,配置文件路径;输出:查询字段对应的数据(any可以保存任意类型)。调用该函数后,通过配置文件路径,找到对应的配置文件(例如bn.json),以查询”var_eps”字段为例,函数将返回1e-10。
可选的,所述根据所述业务算法逻辑层的配置文件、依赖头文件和底层依赖函数库文件,按照所述业务算法逻辑层的算法逻辑编译生成所述动态库之后还包括:
将所述动态库存储到所述训练程序的指定目录。
在一种实施方式中,所述训练程序加载业务算法逻辑层生成的动态库之前还包括:
通过初始化接口调用所述动态库的初始化程序,对所述业务算法逻辑层的参数进行初始化。
在另一种实施方式中,所述训练程序加载业务算法逻辑层生成的动态库之前还包括:
获取所述训练程序的评估结果,对所述训练程序的代码进行修改。
在该实施方式中,所述获取所述训练程序的评估结果,对所述训练程序的代码进行修改之前还包括:
获取所述业务算法逻辑层提交的代码修改需求;
根据所述代码修改需求,得到所述训练程序的评估结果。
步骤s12:在前向传播和反向传播计算时,通过前向传播接口和反向传播接口调用所述动态库的前向传播程序和反向传播程序进行训练,得到训练模型。
为了更好地阐述本实施例,以下结合图5-图8进行说明:
如图5所示,训练工具包括核心模块和业务算法逻辑层(图中虚线框所示),业务算法逻辑层可以独立编译运行调试。
如图6所示,业务算法逻辑层包括配置文件、算法逻辑、依赖头文件和底层依赖函数库文件以及api(applicationprogramminginterface,应用程序编程接口)。依赖头文件和底层依赖函数库文件来自核心模块提供和生成;算法逻辑即各层的算法逻辑;api主要是如下三个接口:
1、初始化接口:该接口在训练程序初始化的时候会根据配置文件逐层调用。初始化具体的实现由算法逻辑层调用,主要功能是实现各个业务逻辑算法的参数初始化读入内存。接口形式如下所示:
template<typenamedtype>
voidxxxlayer<dtype>::layersetup(constvector<blob<dtype>*>&bottom,
constvector<blob<dtype>*>&top);
2、前向传播接口:该接口在训练程序做前向传播计算的时候逐层调用。接口形式如下所示:
template<typenamedtype>
voidxxxlayer<dtype>::forward_cpu(constvector<blob<dtype>*>&bottom,
constvector<blob<dtype>*>&top);
3、反向传播接口:该接口在训练程序做反向传播计算的时候逐层调用。接口形式如下所示:
template<typenamedtype>
voidxxxlayer<dtype>::backward_cpu(constvector<blob<dtype>*>&top,
constvector<bool>&propagate_down,constvector<blob<dtype>*>&bottom);
支撑层提供底层库管理主要以动态库的形式,给业务算法逻辑层在编译时链接,然后可以被业务算法逻辑层直接调用。
如图7所示,核心模块包括核心层管理、初始化接口、前向传播接口、反向传播接口以及底层函数管理。核心层包括卷积层、全连接层、池化层等,核心模块在初始化阶段通过dlopen把新添加层生成的动态库加载,循环前向计算和反向计算的时候分别调用该层前向传播接口和反向传播接口。
图8为算法迭代嵌入新算法层流程示意图,如图所示,黑色框代表新添加层的算法,原来训练过程从上到下经过data、conv、norm、pool、fc、loss,添加新添加层后,经过pool运算后,调用new的前向运算和反向运算的api实现将新添加层嵌入到训练迭代过程。
本发明实施例的训练模型的实现方法,训练程序和业务算法逻辑层脱耦合,训练程序和业务算法逻辑层可以独立运行也可以由训练程序加载业务算法逻辑层运行,方便各自开发维护;编译运行只涉及业务算法逻辑层代码,节省编译时间,提升版本开发效率。
第二实施例
如图9所示,本发明第二实施例提供一种训练模型的实现设备,所述设备包括:存储器21、处理器22及存储在所述存储器21上并可在所述处理器22上运行的训练模型的实现程序,所述训练模型的实现程序被所述处理器22执行时,用于实现以下所述的训练模型的实现方法的步骤:
训练程序加载业务算法逻辑层生成的动态库;
在前向传播和反向传播计算时,通过前向传播接口和反向传播接口调用所述动态库的前向传播程序和反向传播程序进行训练,得到训练模型。
所述训练模型的实现程序被所述处理器22执行时,还用于实现以下所述的训练模型的实现方法的步骤:
通过初始化接口调用所述动态库的初始化程序,对所述业务算法逻辑层的参数进行初始化。
所述训练模型的实现程序被所述处理器22执行时,还用于实现以下所述的训练模型的实现方法的步骤:
获取所述业务算法逻辑层的配置文件;
根据所述业务算法逻辑层的配置文件、依赖头文件和底层依赖函数库文件,按照所述业务算法逻辑层的算法逻辑编译生成所述动态库。
所述训练模型的实现程序被所述处理器22执行时,还用于实现以下所述的训练模型的实现方法的步骤:
通过预设的解析函数,获取所述业务算法逻辑层的配置文件。
所述训练模型的实现程序被所述处理器22执行时,还用于实现以下所述的训练模型的实现方法的步骤:
所述配置文件为json格式的配置文件。
所述训练模型的实现程序被所述处理器22执行时,还用于实现以下所述的训练模型的实现方法的步骤:
将所述动态库存储到所述训练程序的指定目录。
所述训练模型的实现程序被所述处理器22执行时,还用于实现以下所述的训练模型的实现方法的步骤:
获取所述训练程序的评估结果,对所述训练程序的代码进行修改。
所述训练模型的实现程序被所述处理器22执行时,还用于实现以下所述的训练模型的实现方法的步骤:
获取所述业务算法逻辑层提交的代码修改需求;
根据所述代码修改需求,得到所述训练程序的评估结果。
本发明实施例的训练模型的实现设备,训练程序和业务算法逻辑层脱耦合,训练程序和业务算法逻辑层可以独立运行也可以由训练程序加载业务算法逻辑层运行,方便各自开发维护;编译运行只涉及业务算法逻辑层代码,节省编译时间,提升版本开发效率。
第三实施例
本发明第三实施例提供一种计算机可读存储介质,所述计算机可读存储介质上存储有训练模型的实现程序,所述训练模型的实现程序被处理器执行时用于实现第一实施例所述的训练模型的实现方法的步骤。
需要说明的是,本实施例的计算机可读存储介质,与第一实施例的方法属于同一构思,其具体实现过程详细见方法实施例,且方法实施例中的技术特征在本实施例中均对应适用,这里不再赘述。
本发明实施例的计算机可读存储介质,训练程序和业务算法逻辑层脱耦合,训练程序和业务算法逻辑层可以独立运行也可以由训练程序加载业务算法逻辑层运行,方便各自开发维护;编译运行只涉及业务算法逻辑层代码,节省编译时间,提升版本开发效率。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
以上参照附图说明了本发明的优选实施例,并非因此局限本发明的权利范围。本领域技术人员不脱离本发明的范围和实质内所作的任何修改、等同替换和改进,均应在本发明的权利范围之内。