掌桥专利:专业的专利平台
掌桥专利
首页

自动编程控制系统、方法、装置、电子设备及存储介质

文献发布时间:2023-06-19 09:29:07


自动编程控制系统、方法、装置、电子设备及存储介质

技术领域

本公开涉及计算机技术领域,尤其涉及一种自动编程控制系统、方法、装置、电子设备及存储介质。

背景技术

随着AI(Artificial Intelligence,人工智能)在工业领域得到广泛应用,如何快速将算法模型应用到工程领域,同时提供快捷的AI模型算法代码的生成,提供高效的系统性能,以此满足业务的快速迭代和广泛应用面临着巨大挑战。

相关技术中的建模算子组件及执行方法,虽然可以部分解决大数据分析领域的建模任务,但是该方法主要强调特定场景和集群下的执行计算部署,在进行建模任务时采用的是固化的算子。但是,由于AI领域中真实场景对数据处理具有非常个性化的要求,基于固化的算子建模时难以广泛应用,灵活性不足。

发明内容

本公开提供一种自动编程控制系统、方法、装置、电子设备及存储介质,以至少解决相关技术中的建模方法灵活性不足的问题。本公开的技术方案如下:

根据本公开实施例的第一方面,提供一种自动编程控制系统,该系统包括:

算子管理组件和自动编程组件;

所述算子管理组件,用于提供人机交互界面,根据通过所述人机交互界面触发的算子选择指令选取用于实现目标业务所需的目标算子,并显示各个目标算子对应的配置描述信息;接收通过所述人机交互界面输入的各个目标算子的参数配置信息,以及各个目标算子之间的上下游连接信息,其中所述参数配置信息以及所述上下游连接信息是基于所述配置描述信息以及所述目标业务的处理逻辑确定的;

所述自动编程组件,用于调用API(Application Programming Interface,应用程序编程接口),根据所述算子管理组件基于所述人机交互界面获取到的各个目标算子的参数配置信息,以及预先配置的代码转换模板,生成各个目标算子对应的代码段;以及,基于各个目标算子之间的上下游连接信息,将各个代码段进行拼接以生成用于实现所述目标业务的目标代码。

可选的,所述算子管理组件还用于:

在显示与各个目标算子对应的配置描述信息之前,对预先配置的各个目标算子的json(JavaScript Object Notation,脚本语言对象简谱)文件进行解析,获取各个目标算子对应的配置描述信息;或

基于预先建立的算子与配置描述信息之间的对应关系,获取与各个目标算子对应的配置描述信息。

可选的,所述自动编程组件具体用于:

分别基于各个目标算子对应的代码转换模板,将各个目标算子的参数配置信息进行数据转换处理,生成各个目标算子对应的代码段。

可选的,所述自动编程组件还用于:

在所述将各个代码段进行拼接以生成用于实现所述目标业务的目标代码之后,检测所述目标代码的代码运行环境;基于检测到的代码运行环境,运行所述目标代码。

可选的,所述代码运行环境为分布式集群;所述自动编程组件具体用于:

基于检测到的代码运行环境构建分布式环境,并在构建的分布式环境中运行所述目标代码。

可选的,所述代码运行环境为单机;所述自动编程组件具体用于:

在检测到的代码运行环境对应的单机设备上运行所述目标代码。

可选的,所述目标代码为Notebook(笔记本,本质是一个Web应用程序)文档格式或python(蟒蛇,一种计算机程序编程语言)格式。

可选的,所述目标代码为Notebook文档格式;所述自动编程组件还用于:

在运行所述目标代码之前,基于Notebook编辑器对所述目标代码进行调试。

可选的,所述目标代码还包括用于引入运行各个目标算子所需算子运行环境的环境依赖信息,和/或用于引入运行各个目标算子所需代码库的代码库依赖信息。

可选的,所述目标代码包括所述环境依赖信息;所述自动编程组件还用于:

根据各个目标算子的参数配置信息,检测运行各个目标算子所需的算子运行环境;

将检测到的各个算子运行环境进行合并去重后,生成用于引入运行各个目标算子所需算子运行环境的环境依赖信息;

将所述环境依赖信息添加到所述目标代码的顶部。

可选的,所述目标代码包括所述代码库依赖信息;所述自动编程组件还用于:

根据各个目标算子的参数配置信息,检测运行各个目标算子所需的代码库;

将检测到的各个代码库进行合并去重后,生成用于引入运行各个目标算子所需代码库的代码库依赖信息;

将所述代码库依赖信息添加到所述目标代码的顶部。

根据本公开实施例的第二方面,提供一种自动编程控制方法,包括:

选取用于实现目标业务所需的目标算子,并显示各个目标算子对应的配置描述信息;

接收输入的各个目标算子的参数配置信息,以及各个目标算子之间的上下游连接信息,其中所述参数配置信息以及所述上下游连接信息是基于所述配置描述信息以及所述目标业务的处理逻辑确定的;

基于各个目标算子的参数配置信息以及预先配置的代码转换模板,生成各个目标算子对应的代码段;以及

基于各个目标算子之间的上下游连接信息,将各个代码段进行拼接以生成用于实现所述目标业务的目标代码。

在一种可选的实施方式中,在所述显示与各个目标算子对应的配置描述信息之前,还包括:

对预先配置的各个目标算子的json文件进行解析,获取各个目标算子对应的配置描述信息;或

基于预先建立的算子与配置描述信息之间的对应关系,获取与各个目标算子对应的配置描述信息。

在一种可选的实施方式中,所述基于各个目标算子的参数配置信息以及预先配置的代码转换模板,生成各个目标算子对应的代码段,具体包括:

分别基于各个目标算子对应的代码转换模板,将各个目标算子的参数配置信息进行数据转换处理,生成各个目标算子对应的代码段。

在一种可选的实施方式中,在所述将各个代码段进行拼接以生成用于实现所述目标业务的目标代码之后,还包括:

检测所述目标代码的代码运行环境;

基于检测到的代码运行环境,运行所述目标代码。

在一种可选的实施方式中,所述代码运行环境为分布式集群;所述基于检测到的代码运行环境,运行所述目标代码,具体包括:

基于检测到的代码运行环境构建分布式环境,并在构建的分布式环境中运行所述目标代码。

在一种可选的实施方式中,所述代码运行环境为单机;所述基于检测到的代码运行环境,运行所述目标代码,具体包括:

在检测到的代码运行环境对应的单机设备上运行所述目标代码。

在一种可选的实施方式中,所述目标代码为Notebook文档格式或python格式。

在一种可选的实施方式中,所述目标代码为Notebook文档格式;所述方法还包括:

在运行所述目标代码之前,基于Notebook编辑器对所述目标代码进行调试。

在一种可选的实施方式中,所述目标代码还包括用于引入运行各个目标算子所需算子运行环境的环境依赖信息,和/或用于引入运行各个目标算子所需代码库的代码库依赖信息。

在一种可选的实施方式中,所述目标代码包括所述环境依赖信息;所述将各个代码段进行拼接以生成用于实现所述目标业务的目标代码,还包括:

根据各个目标算子的参数配置信息,检测运行各个目标算子所需的算子运行环境;

将检测到的各个算子运行环境进行合并去重后,生成用于引入运行各个目标算子所需算子运行环境的环境依赖信息;

将所述环境依赖信息添加到所述目标代码的顶部。

在一种可选的实施方式中,所述目标代码包括所述代码库依赖信息;所述将各个代码段进行拼接以生成用于实现所述目标业务的目标代码,还包括:

根据各个目标算子的参数配置信息,检测运行各个目标算子所需的代码库;

将检测到的各个代码库进行合并去重后,生成用于引入运行各个目标算子所需代码库的代码库依赖信息;

将所述代码库依赖信息添加到所述目标代码的顶部。

根据本公开实施例的第三方面,提供一种自动编程控制装置,包括:

算子选取单元,被配置为执行选取用于实现目标业务所需的目标算子,并显示各个目标算子对应的配置描述信息;

参数配置单元,被配置为执行接收输入的各个目标算子的参数配置信息,以及各个目标算子之间的上下游连接信息,其中所述参数配置信息以及所述上下游连接信息是基于所述配置描述信息以及所述目标业务的处理逻辑确定的;

代码转换单元,被配置为执行基于各个目标算子的参数配置信息以及预先配置的代码转换模板,生成各个目标算子对应的代码段;以及

基于各个目标算子之间的上下游连接信息,将各个代码段进行拼接以生成用于实现所述目标业务的目标代码。

可选的,所述算子选取单元还被配置为执行:

在显示与各个目标算子对应的配置描述信息之前,对预先配置的各个目标算子的json文件进行解析,获取各个目标算子对应的配置描述信息;或

基于预先建立的算子与配置描述信息之间的对应关系,获取与各个目标算子对应的配置描述信息。

可选的,所述代码转换单元具体用于:

分别基于各个目标算子对应的代码转换模板,将各个目标算子的参数配置信息进行数据转换处理,生成各个目标算子对应的代码段。

可选的,所述装置还包括:

代码执行单元,被配置为执行检测所述目标代码的代码运行环境;

基于检测到的代码运行环境,运行所述目标代码。

可选的,所述代码运行环境为分布式集群;所述代码执行单元被配置为执行:

基于检测到的代码运行环境构建分布式环境,并在构建的分布式环境中运行所述目标代码。

可选的,所述代码运行环境为单机;所述代码执行单元被配置为执行:

在检测到的代码运行环境对应的单机设备上运行所述目标代码。

可选的,所述目标代码为Notebook文档格式或python格式。

可选的,所述目标代码为Notebook文档格式;所述装置还包括:

调试单元,被配置为执行在运行所述目标代码之前,基于Notebook编辑器对所述目标代码进行调试。

可选的,所述目标代码还包括用于引入运行各个目标算子所需算子运行环境的环境依赖信息,和/或用于引入运行各个目标算子所需代码库的代码库依赖信息。

可选的,所述目标代码包括所述环境依赖信息;所述代码转换单元还被配置为执行:

根据各个目标算子的参数配置信息,检测运行各个目标算子所需的算子运行环境;

将检测到的各个算子运行环境进行合并去重后,生成用于引入运行各个目标算子所需算子运行环境的环境依赖信息;

将所述环境依赖信息添加到所述目标代码的顶部。

可选的,所述目标代码包括所述代码库依赖信息;所述代码转换单元还被配置为执行:

根据各个目标算子的参数配置信息,检测运行各个目标算子所需的代码库;

将检测到的各个代码库进行合并去重后,生成用于引入运行各个目标算子所需代码库的代码库依赖信息;

将所述代码库依赖信息添加到所述目标代码的顶部。

根据本公开实施例的第四方面,提供一种电子设备,包括:

处理器;

用于存储所述处理器可执行指令的存储器;

其中,所述处理器被配置为执行所述指令,以实现本公开实施例第二方面中任一项所述的自动编程控制方法。

根据本公开实施例的第五方面,提供一种非易失性可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行本公开实施例第二方面中任一项所述的自动编程控制方法。

根据本公开实施例的第六方面,提供一种计算机程序产品,当所述计算机程序产品在电子设备上运行时,使得所述电子设备执行实现本公开实施例上述第二方面以及第二方面任一可能涉及的方法。

本公开的实施例提供的技术方案至少带来以下有益效果:

由于本公开实施例提供了基于可视化技术的AI自动编程控制方法及系统,通过拖拽等方式选取目标算子后,用户可根据目标业务的需求设置目标算子的参数配置信息,相比于相关技术中所采用的固化的算子,本公开实施例中的目标算子是透明的,用户可基于目标算子的配置描述信息实现灵活地参数配置;并且,通过配置各个目标算子之间的上下游连接信息,可以实现pipeline(流水线作业),进而通过调用API即可生成可直接运行的高质量的目标代码,大大提升了AI任务的编码开发过程的效率,做到了效率与灵活性的兼容。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。

图1是根据一示例性实施例示出的一种自动编程控制系统的组成结构框图;

图2是根据一示例性实施例示出的一种目标算子上下游连接关系示意图;

图3是根据一示例性实施例示出的一种自动编程控制系统的结构示意图;

图4是根据一示例性实施例示出的一种自动编程控制方法的流程图;

图5是根据一示例性实施例示出的一种自动编程控制的完整方法的流程图;

图6是根据一示例性实施例示出的一种自动编程控制装置的框图;

图7是根据一示例性实施例示出的一种电子设备的框图。

具体实施方式

为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。

需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

下面对文中出现的一些词语进行解释:

1、本公开实施例中术语“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。

2、本公开实施例中术语“电子设备”可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。

3、本公开实施例中术语“OP(Operator,操作)算子”是一个算法的计算单元,属于本公开实施例中的一种目标算子,OP算子可以是指神经网络计算的基本单元,包括conv(卷积)、pooling(池化)、activation(激活)、normalization(标准化)等。

4、本公开实施例中术语“配置描述信息”是与算子的各项配置相关的描述信息,用于描述算子的各项配置的相关规则或定义等,例如某一算子具体是什么类型,名称是什么,别名是什么,包含有哪些参数,这些参数支持哪些属性等。

5、本公开实施例中术语“上下游连接信息”是用于算子与算子之间的连接关系的。在本公开实施例中,用户可通过上下游连线,设置算子的输入输出接口中的type属性等来配置上下游连接信息。

6、本公开实施例中术语“参数配置信息”是算子涉及的参数的具体配置信息,比如读算子对应有读取的表格的名称,读取的列数等。再比如算法算子对应有算法的任务类型,算法涉及的各项参数等等。

7、本公开实施例中术语“Notebook编辑器”一个非常流行的代码编辑器,适合做AI开发及数据分析与代码展示。具体是指JupyterNotebook(Jupyter笔记本),是一个交互式笔记本,支持运行40多种编程语言。JupyterNotebook的本质是一个Web(World Wide Web,万维网)应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和markdown(一种轻量级标记语言)。用途包括:数据清理和转换,数值模拟,统计建模,机器学习等等。在本公开实施例中,用户可通过Notebook编辑器来对生成的目标代码进行个性化修改,实现目标代码的二次开发。

8、本公开实施例中的术语“算子运行环境”指一种把半编译的运行码在目标机器上运行的环境。算子运行环境是一种介乎编译器及直译器的运行方式。例如本公开实施例中所列举的“TensorFlow算子运行环境”,其中TensorFlow是一个端到端开源机器学习平台。它拥有一个全面而灵活的生态系统,其中包含各种工具、库和社区资源,可助力研究人员推动先进机器学习技术的发展,并使开发者能够轻松地构建和部署由机器学习提供支持的应用。

9、本公开实施例中的属于“代码运行环境”是指在运行目标代码时,运行设备的环境,在本公开实施例中主要分为单机和分布式集群这两种代码运行环境。

10、本公开时候实施例中术语“Numpy”是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。Numpy提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于处理多维数组(矩阵)的库。用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多。本身是由C语言开发,是个很基础的扩展,Python其余的科学计算扩展大部分都是以此为基础。

11、本公开时候实施例中术语“Pandas”是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。在Python中,pandas是基于NumPy数组构建的,使数据预处理、清洗、分析工作变得更快更简单。pandas是专门为处理表格和混杂数据设计的,而NumPy更适合处理统一的数值数组数据。可使用下面格式约定,引入pandas包:import pandas as pd。pandas,它可以对数据进行导入、清洗、处理、统计和输出。pandas是基于Numpy库的,可以说,pandas库就是为数据分析而生的。

12、本公开时候实施例中术语“Hive”是基于Hadoop(海杜普,一种分布式系统基础架构)的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql(Structured Query Language,结构化查询语言)查询功能,可以将sql语句转换为MapReduce(映射归约,一种编程模型)任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。另外一个是Windows注册表文件。

13、本公开时候实施例中术语“json”是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得json成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

本公开实施例涉及人工智能和机器学习(MachineLearning,ML)技术,基于人工智能中的计算机视觉技术和机器学习而设计。

人工智能是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。

人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。人工智能技术主要包括计算机视觉技术、自然语言处理技术、以及机器学习/深度学习等几大方向。随着人工智能技术研究和进步,人工智能在多个领域展开研究和应用,例如常见的智能家居、智能客服、虚拟助理、智能音箱、智能营销、无人驾驶、自动驾驶、机器人、智能医疗等,相信随着技术的发展,人工智能将在更多的领域得到应用,并发挥越来越重要的价值。

机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

机器学习是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。机器学习和深度学习通常包括人工神经网络、置信网络、强化学习、迁移学习、归纳学习等技术。

基于本公开实施例中所列举的自动编程控制方法,可自动化生成高质量的AI模型训练、预测的代码。在运行代码之后可产出模型,例如机器学习模型,之后即可将产出的模型存储到model db(模型数据库)中。

本公开实施例描述的应用场景是为了更加清楚的说明本公开实施例的技术方案,并不构成对于本公开实施例提供的技术方案的限定,本领域普通技术人员可知,随着新应用场景的出现,本公开实施例提供的技术方案对于类似的技术问题,同样适用。其中,在本公开的描述中,除非另有说明,“多个”的含义。

图1是根据一示例性实施例示出的一种自动编程控制系统100的组成结构示意图,如图1所示,包括算子管理组件101和自动编程组件102;

算子管理组件101,用于提供人机交互界面,根据通过人机交互界面触发的算子选择指令选取用于实现目标业务所需的目标算子,并显示各个目标算子对应的配置描述信息;接收通过人机交互界面输入的各个目标算子的参数配置信息,以及各个目标算子之间的上下游连接信息,其中参数配置信息以及上下游连接信息是基于配置描述信息以及目标业务的处理逻辑确定的;

自动编程组件102,用于调用API,根据算子管理组件基于人机交互界面获取到的各个目标算子的参数配置信息,以及预先配置的代码转换模板,生成各个目标算子对应的代码段;以及,基于各个目标算子之间的上下游连接信息,将各个代码段进行拼接以生成用于实现目标业务的目标代码。

在本公开实施例中,用户可通过拖拽等方式从预先构建的OP算子库中来选择执行目标业务流程所需的目标算子,下文中都是以目标算子为OP算子为例进行举例说明的。

需要说明的是,本公开实施例中的OP算子库是预先构建的,其中的OP算子并非是固化的算子,而是透明的。在用户通过UI(User Interface)界面从OP算子库中选取好算子进行拖拽时,即可触发算子选择指令,随后可在UI界面中显示OP算子的配置描述信息。下文中的UI界面即本公开实施例中的人机交互界面。

之后,用户可参考UI界面中所显示的配置描述信息,结合目标业务的需求,对各个OP算子的参数进行配置,输入参数配置信息;此外,还需要对各个OP算子之间的上下游连接关系进行配置,输入上下游连接信息。

其中,UI界面中显示的OP算子的配置描述信息可以是算子管理组件通过如下方式获得的:

获取方式一、对预先配置的各个目标算子的json文件进行解析,获取各个目标算子对应的配置描述信息。

该方式下,本公开实施例中的每个目标算子都是通过相对应的json文件来定义的,通过解析json可以获取到json描述条件,也就是目标算子的配置描述信息。

获取方式二、基于预先建立的算子与配置描述信息之间的对应关系,获取与各个目标算子对应的配置描述信息。

其中,本公开实施例中可通过预先对算子的json文件进行解析以获取到各个算子的配置描述信息,还可将各个算子的配置描述信息以文档等形式进行保存,然后,预先建立好各个目标算子和算子对应的配置描述信息之间的对应关系,这样在用户拖拽目标算子后,可以直接根据预先建立好的对应关系来确定出对应的配置描述信息,不需要再对目标算子的json文件进行解析,可以有效提高工作效率。

需要说明的是,本公开实施例中的OP算子可通过json文件进行定义,当然也可通过其它文件进行定义,在此不做具体限定。以json文件定义为例,上述实施例中所列举的两种获取目标算子的配置描述信息的方式都是举例说明,除了上述实施例中所列举的获取目标算子的配置描述信息的方式之外,其它获取方式也同样适用于本公开实施例,在此也不做具体限定。

在上述实施方式中,通过UI界面向用户显示目标算子的配置描述信息,以提示用户根据这些配置描述信息以及目标业务的业务需求来配置相应的参数和上下游连接关系等,以实现目标算子的灵活配置和pipeline。

具体的,本公开实施例中的OP算子的配置描述信息具体包括:算子属性信息,算子参数列表和算子输入输出接口等部分。

其中,属性信息用于描述OP算子的属性,包括但不限于下列的部分或全部:

op_id(算子序号),op_name(算子名称),op_alias(算子别名),op_type(算子类型)。

其中,对算子进行类型定义时,包括但不限于以下几种类型:

read_data(读数据源),write_data(写数据源),preprocessing(数据预处理),feature_extraction(特征提取),train(训练),predict(预测),custom(自定义)。

需要说明的是,算子的属性信息中的部分或全部可以在构建OP算子库的时候预先配置好,在UI界面中显示OP算子的配置描述信息时,可直接显示给用户,不需要用户再进行配置。而本公开实施例中的参数列表和输入输出接口这几部分需要由用户根据描述信息来配置具体数值等等。

下面首先对参数列表进行介绍,用户可参考参数列表配置参数的具体参数配置信息。

在本公开实施例中,参数列表用于介绍OP算子所涉及的各个参数项。具体的,参数列表使用parameters关键字,每个参数均支持下列的部分或全部:

Name(参数名称),Description(参数描述),Label(参数提示信息),type(参数类型),require(必填项(Y),可选(N)),default(默认值,一般默认为空),depend(依赖项,比如depend="jobtype='XGBRegressor'"),options(备选项列表)。

其中,参数类型包括但不限于下列的部分或全部:

string(字符串),比如表名(da.table_name_demo)、hdfs地址(/home/reco/test_path);

bool(布尔值),值为:是(True)、否(False);

list(列表),比如字段列表([col1,col2,col3])。

用户可参考上述配置描述信息来对OP算子的参数本身进行配置,示例如下:

-parameters:[

{"type":"string","description":"hive表名称","name":"table_name",label="hive表名",require=“Y”,default="",},

{"type":"list","description":"任务类型","name":"jobtype",label="任务类型",options=['XGBClassifier':'分类',"XGBRegressor":'回归']},

......]

上述示例表示的是一个参数的具体配置,即参数配置信息,由上述示例可知:

第一个参数的参数类型为:字符串类型,参数描述为:hive表名称,参数名称为:table_name(表名),参数提示信息为:hive表名,该参数默认值为空。此外由require这一项可知该参数为必填项,即用户参考UI界面中的配置描述信息来对输入参数配置信息时,一个OP算子可能会涉及多个参数,其中该参数是必填项。

接下来的另一个参数的参数类型为:列表类型,参数描述为:任务类型,参数名称为:jobtype(任务类型),参数提示信息为:任务类型,参数备选列表为:'XGBClassifier':'分类',"XGBRegressor":'回归'。

其中,参数备选列表是提供给用户的可供选择的任务类型,是预先配置好的,比如上述示例表示可供用户选择的任务类型可以是XGB分类,或者是XGB回归,用户可通过选择的方式,从这两种任务类型中选择一种进行配置。

需要说明的是,XGBoost是boosting算法的其中一种。Boosting算法的思想是将许多弱分类器集成在一起形成一个强分类器。因为XGBoost是一种提升树模型,所以它是将许多树模型集成在一起,形成一个很强的分类器。除了上述所列举的配置任务类型这一参数之外,用户还可配置XGBoost这一树集成模型包括几棵树,每棵树的深度等超参数,在此不再一一列举。

在本公开实施例中,算子的parameters需要由用户在UI侧来进行配置,算子的json文件中就有这些参数,解析出这些参数之后,用户可通过上述所列举的方式对这些参数进行配置。

下面对输入输出接口进行介绍,在本公开实施例中,用户可参考输入输出接口的描述信息,通过对OP算子的输入输出接口进行定义,来建立OP算子之间的上下游连接关系。

其中,输入接口Inputs和输出接口outputs均为列表数组,支持以下属性:

alias(接口名称,具体可以是输入或输出),types(定义可支持上下游链接的OP算子类型),name(接口名称,用于通过改名称获取值),value(值表达式)。

下面列举一种关于OP算子的输入接口和输出接口的配置示例:

示例1:输入接口Inputs:

[{"alias":"输入","types":["read_data","preprocessing","feature_extraction"],"name":"train"},...]

上述示例中配置了一种输入接口,该输入接口的alias为“输入”,可与该输入接口连接的有以下几种类型的OP算子,分别为:read_data(读数据源),preprocessing(数据预处理),feature_extraction(特征提取),表示这几种类型的OP算子的输出可以作为该OP算子的输入,这几种类型的OP算子可与该OP算子连接。该输入接口的name为:train(训练)。

示例2:输出接口outputs:

[{"alias":"输出","types":['preprocessing','feature_extraction','train','predict','custom'],"name":"df","value":"df_{{node_id}}"}]

上述示例中配置了一种输出接口,该输出接口的alias为“输出”,可支持连接的OP算子的类型有:Preprocessing(数据预处理),feature_extraction(特征提取),train(训练),predict(预测),custom(自定义),表示该OP算子的输出可以作为这几种类型的OP算子的输入,该OP算子连接可与这几种类型的OP算子连接。该输出接口的name为:df,值表达式为:df_{{node_id}}。

由上述实施例可知,在本公开实施例中,用户可通过配置OP算子的输入接口或输出接口中的type这一属性,来建立OP算子之间的上下游连接关系,基于type这一属性的配置即可确定用户输入的OP算子之间的上下游连接信息。

参阅图2所示,其为本公开实施例示出的一种OP算子之间的上下游连接关系示意图,其中第一个OP算子为读hive表数据的读数据源算子,对于该OP算子而言,只需要配置该OP算子的输出接口的type属性即可,具体的,读hive表数据这一OP算子的输出连接缺失值填充这一OP算子的输入,缺失值填充这一OP算子的输出连接标准化OP算子的输入,标准化OP算子的输出连接XGBoost训练这一OP算子的输入,XGBoost训练这一OP算子的输出连接写hdfs(Hadoop Distributed File System,Hadoop分布式文件系统)数据这一OP算子的输入。

在本公开实施例中,基于算子管理组件获取各个OP算子的参数配置信息,以及OP算子之间的上下游连接信息之后,即可通过自动编程组件调用API接口,来生成目标代码。

需要说明的是,在本公开实施例中还预先配置好了不同OP算子对应的代码转换模板。具体的,在生成目标代码时,需要根据OP算子对应的代码转换模板,结合OP算子的参数配置信息来进行代码转换,得到OP算子对应的代码段,并依据OP算子之间的上下游连接信息来进行拼接以生成目标业务对应的目标代码。

可选的,自动编程组件具体用于基于目标算子对应的代码转换模板,将目标算子的参数配置信息进行数据转换处理,生成目标算子对应的代码段。在得到一个目标算子对应的代码段之后,即可基于算子之间的上下游连接信息。将该代码段输出到下游节点,继续再对下一个目标算子的参数配置信息进行数据转换处理,获得对应的代码段,并输出给下一个下游节点。最终即可基于各个目标算子之间的上下游连接关系,将各个目标算子对应的代码段进行拼接以获得目标代码。

下面列举一种读hive表数据的OP算子对应的代码转换模板(templates):

其中,isinstance()函数来判断一个对象是否是一个已知的类型,类似type()。isinstance()方法的语法为:isinstance(object,classinfo)。

其中,参数一object表示实例对象,参数二classinfo可以是直接或间接类名、基本类型或者由它们组成的元组、返回值。如果对象的类型与参数二的类型(classinfo)相同,则返回True,否则返回False。

上述模板所实现的功能为读hive表,首先需要判断hive链接是不是一个有效的Hive链接;如果不是,则连一下数据库,生成一个hive的有效链接。之后,用户在UI侧会选择在数据表中读取哪些列(partition_cols),基于用户选择的列名,把用户选择的列的分区选进来,把需要读哪个hive表的表名(table_name)加载进来;之后即可依据partition_cols读取数据,limit_num表示读取的时候要获取所有的输出量;cached表示是否缓存读取的数据;op_id表示算子的ID(算子编号),通过算子编号对算子进行唯一标识,避免同一类型的OP算子之间的数据被覆盖掉。比如一个算子在pipeline中可能会用到两次,训练的时候一次,使用的时候一次,为了防止算子生成的变量发生冲突,被覆盖掉,可通过op_id来保证变量的唯一性。

在上述所列举的代码转换模板中{}内的变量表示在进行代码转换时需要填充的变量,在一键生成代码时,用户可基于UI侧配置的参数配置信息,填充到代码转换模板中,生成对应的代码段。

转后代码如下:

其中,用户选择的列名partition_cols为'p_date'=20200710,表名table_name为db.demo_table,读取的数据的个数为前2000个,op_id为1,cached=True表示缓存读取的数据。上述的列名、表名等就是由用户设置的参数配置信息。

在上述实施方式中,根据用户的灵活配置自动化地生成代码段,并且算子间代码输入输出可自动拼接,以形成目标代码,基于代码转换模板直接进行转换即可,效率极高。

考虑到在相关技术中,用户不清楚任务执行底层的过程,AI算法模型研究探索阶段与执行阶段是割裂的,很难保证一致性。本公开实施例中通过将生成的目标代码直接提供给用户,可以使用户清楚的了解任务执行底层的过程。此外,自动编程组件还用于:在将各个代码段进行拼接以生成用于实现目标业务的目标代码之后,检测目标代码的代码运行环境;基于检测到的代码运行环境,运行目标代码。其中代码运行环境包括:分布式集群或单机。

具体的,自动编程组件具体用于:在代码运行环境为分布式集群,基于检测到的代码运行环境构建分布式环境,并在构建的分布式环境中运行目标代码。在代码运行环境为单机时,在检测到的代码运行环境对应的单机设备上运行目标代码。

也就是说,本公开实施例通过交互式建模产生的AI任务代码,可以同时运行在单机和分布式场景下,例如可以首先在单机上对小的数据集进行探索应用,验证可行后,再放到大的分布式的任务下,保持探索阶段和分布式工业部署的一致性,无需代码任何修改,屏蔽了分布式任务代码开发门槛,提供一致的算法调试与工程应用方法,大大缩短了AI模型开发到上线的工程化时间。

可选的,目标代码为Notebook文档格式或python格式。其中,python格式可表示为run.py脚本,run.py是直接可以运行的python脚本;Notebook文档格式可表示为run.ipynb脚本,run.ipynb是交互式的探索格式的,用户可以在Notebook中对这些代码块去单行执行,去探索。因而,在目标代码为Notebook文档格式时,自动编程组件还用于在运行目标代码之前,基于Notebook编辑器对目标代码进行调试。

在上述实施方式中,本公开实施例的输出除了python代码外,还支持jupyternotebook文档格式的输出,方便数据科学家进行修改和调试,进行目标代码的个性化修改,提高灵活性。

此外需要说明的是,算子对算子运行环境有依赖,但是系统一般都会提供一个通用的算子运行环境,对特定版本算子库统一支持。若还需要引入一些特定的算子运行环境或代码库时,本公开实施例中的目标代码还可包括算子依赖信息,具体包括用于引入运行各个目标算子所需算子运行环境的环境依赖信息,和/或于引入运行各个目标算子所需代码库的代码库依赖信息。

下面分别对环境依赖信息以及代码库依赖信息的获取方式进行介绍:

在目标代码包括环境依赖信息时,自动编程组件还用于:根据各个目标算子的参数配置信息,检测运行各个目标算子所需的算子运行环境;将检测到的各个算子运行环境进行合并去重后,生成用于引入运行各个目标算子所需算子运行环境的环境依赖信息;将环境依赖信息添加到目标代码的顶部。

同样地,在目标代码包括代码库依赖信息时,自动编程组件还用于根据各个目标算子的参数配置信息,检测运行各个目标算子所需的代码库;将检测到的各个代码库进行合并去重后,生成用于引入运行各个目标算子所需代码库的代码库依赖信息;将代码库依赖信息添加到目标代码的顶部。

在本公开实施例中,无论是单机任务,还是分布式任务,都需要在运行之前先检测算子运行环境是否存在,不存在时需要先基于目标代码顶部的算子运行环境依赖信息引入相应的算子运行环境。在目标算子中有用到numpy时,先把代码包导入进来,添加到目标代码的顶部,在运行目标代码的时候,按照顶部的代码库依赖信息序列导入对应的代码包。

下面列举一种算子运行环境依赖信息和代码库依赖信息,示例如下:

算子运行环境依赖信息-requires:[”numpy==1.18.1","tenesorflow==1.14.1"];

代码库依赖信息-imports:["import numpy as np","import pandas as pd"]。

在本公开实施例中,requires用于检测和记录算子运行环境,之后可以通过pip或conda等安装算子运行环境,1.18.1是指numpy的版本号,而1.14.1是指tenesorflow的版本号。其中,Pip代表Pip Installs Packages,是Python包的通用管理器;conda是一个与语言无关的跨平台环境管理器。

此外,imports执行前需要提前导入代码库(也成代码包),在本公开实施例中,若检测到的代码库存在重复的情况下,在代码生成时可将所有imports进行合并去重后再导入目标代码的顶部。同理,对于算子运行环境依赖信息也可如此。

在本公开实施例中,算子通过json文件进行定义时,可以结算算子依赖的环境问题,此外算子代码内通过对属性及接口值调用,算子间代码输入输出也可自动拼接,可以大大提升AI任务的编码开发过程,可以在几分钟内完成对经典AI应用的代码产出,并且算法人员可以对代码进行二次开发,做到了效率与灵活性的兼容。

参阅图3所示,其为本公开实施例示出的一种自动编程控制系统的架构示意图,具体包括UI和API两部分,其中UI这一部分即对应图1所示的算子管理组件101,该组件可提供人机交互界面,即UI界面,API这一部分即对应图1所示的自动编程组件102。

具体的,用户通过UI界面,从OP算子库中拖拽实现目标业务所需的OP算子,其中这些OP算子都是基于json文件定义的,可通过解析json文件后的OP算子的配置描述信息并显示,通过与用户的交互对算子进行增删改查,及参数配置,上下游连接关系配置等,通过交互完成pipeline。之后,即可通过API将参数配置信息、上下游连接信息等请求到自动编程组件侧,把算子更新到数据库中,实现算子的增删改查。也就是通过UI调API进行增删改查、算子库的管理。进而通过调用API,生成run.py或run.ipynb。

比如一个数据科学家来用算子时,在UI界面拖拽一个读取数据源的算子,一个数据预处理的算子,一个填充值的算子(比如填充值为空),一个训练算子,一个写算子等,之后通过配置各个算子之间的上下游连接信息,把算子连起来,生成并保存pipeline。之后即可调用API进行算子管理,具体包括增删改查等,管理pipeline,手动或自动启动目标代码run.py或run.ipynb,调度执行作业,生成单机jobs(作业)或分布式jobs,执行目标代码。此外,在执行目标代码时,用户可通过UI界面选择立即执行,或者是定时执行等。

例如,用户点击UI界面中的运行按钮之后,通过API生成run.py,之后代码库会新建一个训练作业,来运行run.py,运行完之后自动把模型放到模型数据库中。当算子不一定满足模型指标,或者是用户对数据有一些独特的理解时,可先不点运行按钮,通过一键转换生成run.ipynb的文件,并默认在Notebook服务中打开目标代码文件,进行代码的调试,例如代码的修改、探索等。在探索完之后,点保存,生成个性化的目标代码;最后再通过新建训练作业来运行调试后的新的目标代码。

其中,在运行目标代码时,还可调用Util工具包。本公开时候实施例中的Util工具包是指包含集合框架、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组、日期Date类、堆栈Stack类、向量Vector类等)。集合类、时间处理模式、日期时间工具等各类常用工具包。

通过上述方案,与相关技术中的固化的算子相比,本公开实施例中的OP算子对用户来说不是黑盒,对用户可见的,可以转换成代码,用户可以看到具体的算子处理,还可以进行个性化修改。

基于相同的发明构思,本公开实施例还提供一种自动编程控制方法。如图4所示,其为本公开实施例根据一示例性实施例示出的一种自动编程控制方法的流程图,包括以下步骤。

在步骤S41中,选取用于实现目标业务所需的目标算子,并显示各个目标算子对应的配置描述信息;

在步骤S42中,接收输入的各个目标算子的参数配置信息,以及各个目标算子之间的上下游连接信息,其中参数配置信息以及上下游连接信息是基于配置描述信息以及目标业务的处理逻辑确定的;

在步骤S43中,基于各个目标算子的参数配置信息以及预先配置的代码转换模板,生成各个目标算子对应的代码段;以及,基于各个目标算子之间的上下游连接信息,将各个代码段进行拼接以生成用于实现目标业务的目标代码。

通过上述方案,提供了一种基于可视化技术的AI自动编程控制方法,通过拖拽等方式选取目标算子后,用户可根据目标业务的需求设置目标算子的参数配置信息,相比于相关技术中所采用的固化的算子,本公开实施例中的目标算子是透明的,用户可基于目标算子的配置描述信息实现灵活地参数配置;并且,通过配置各个目标算子之间的上下游连接信息,可以实现pipeline,进而通过调用API即可生成可直接运行的高质量的目标代码,大大提升了AI任务的编码开发过程的效率,做到了效率与灵活性的兼容。

在一种可选的实施方式中,在显示与各个目标算子对应的配置描述信息之前,还包括:

对预先配置的各个目标算子的json文件进行解析,获取各个目标算子对应的配置描述信息;或

基于预先建立的算子与配置描述信息之间的对应关系,获取与各个目标算子对应的配置描述信息。

在一种可选的实施方式中,基于各个目标算子的参数配置信息以及预先配置的代码转换模板,生成各个目标算子对应的代码段,具体包括:

分别基于各个目标算子对应的代码转换模板,将各个目标算子的参数配置信息进行数据转换处理,生成各个目标算子对应的代码段。

在一种可选的实施方式中,在将各个代码段进行拼接以生成用于实现目标业务的目标代码之后,还包括:

检测目标代码的代码运行环境;

基于检测到的代码运行环境,运行目标代码。

在一种可选的实施方式中,代码运行环境为分布式集群;基于检测到的代码运行环境,运行目标代码,具体包括:

基于检测到的代码运行环境构建分布式环境,并在构建的分布式环境中运行目标代码。

在一种可选的实施方式中,代码运行环境为单机;基于检测到的代码运行环境,运行目标代码,具体包括:

在检测到的代码运行环境对应的单机设备上运行目标代码。

在一种可选的实施方式中,目标代码为Notebook文档格式或python格式。

在一种可选的实施方式中,目标代码为Notebook文档格式;方法还包括:

在运行目标代码之前,基于Notebook编辑器对目标代码进行调试。

在一种可选的实施方式中,目标代码还包括用于引入运行各个目标算子所需算子运行环境的环境依赖信息,和/或用于引入运行各个目标算子所需代码库的代码库依赖信息。

在一种可选的实施方式中,目标代码包括环境依赖信息;将各个代码段进行拼接以生成用于实现目标业务的目标代码,还包括:

根据各个目标算子的参数配置信息,检测运行各个目标算子所需的算子运行环境;

将检测到的各个算子运行环境进行合并去重后,生成用于引入运行各个目标算子所需算子运行环境的环境依赖信息;

将环境依赖信息添加到目标代码的顶部。

在一种可选的实施方式中,目标代码包括代码库依赖信息;将各个代码段进行拼接以生成用于实现目标业务的目标代码,还包括:

根据各个目标算子的参数配置信息,检测运行各个目标算子所需的代码库;

将检测到的各个代码库进行合并去重后,生成用于引入运行各个目标算子所需代码库的代码库依赖信息;

将代码库依赖信息添加到目标代码的顶部。

图5是根据一示例性实施例示出的一种自动编程控制的完整方法流程图,具体包括以下步骤:

S51:选取用于实现目标业务所需的目标算子,对预先配置的各个目标算子的json文件进行解析,获取各个目标算子对应的配置描述信息,并显示各个目标算子对应的配置描述信息;

S52:接收输入的各个目标算子的参数配置信息,以及各个目标算子之间的上下游连接信息;

S53:根据各个目标算子的参数配置信息,检测运行各个目标算子所需的算子运行环境和代码库;

S54:将检测到的各个算子运行环境进行合并去重后,生成用于引入运行各个目标算子所需算子运行环境的环境依赖信息,以及,将检测到的各个代码库进行合并去重后,生成用于引入运行各个目标算子所需代码库的代码库依赖信息;

S55:基于各个目标算子的参数配置信息以及预先配置的代码转换模板,生成各个目标算子对应的代码段,以及,基于各个目标算子之间的上下游连接信息,将各个代码段进行拼接以生成用于实现目标业务的目标代码;

S56:将环境依赖信息和代码库依赖信息添加到目标代码的顶部;

S57:检测目标代码的代码运行环境,并基于检测到的代码运行环境,运行目标代码。

基于相同的发明构思,本公开实施例还提出了一种自动编程控制装置。图6是根据一示例性实施例示出的一种自动编程控制装置600的框图。参照图6,该装置包括:

算子选取单元601,被配置为执行选取用于实现目标业务所需的目标算子,并显示各个目标算子对应的配置描述信息;

参数配置单元602,被配置为执行接收输入的各个目标算子的参数配置信息,以及各个目标算子之间的上下游连接信息,其中参数配置信息以及上下游连接信息是基于配置描述信息以及目标业务的处理逻辑确定的;

代码转换单元603,被配置为执行基于各个目标算子的参数配置信息以及预先配置的代码转换模板,生成各个目标算子对应的代码段;以及

基于各个目标算子之间的上下游连接信息,将各个代码段进行拼接以生成用于实现目标业务的目标代码。

可选的,算子选取单元601还被配置为执行:

在显示与各个目标算子对应的配置描述信息之前,对预先配置的各个目标算子的json文件进行解析,获取各个目标算子对应的配置描述信息;或

基于预先建立的算子与配置描述信息之间的对应关系,获取与各个目标算子对应的配置描述信息。

可选的,代码转换单元603具体用于:

分别基于各个目标算子对应的代码转换模板,将各个目标算子的参数配置信息进行数据转换处理,生成各个目标算子对应的代码段。

可选的,装置还包括:

代码执行单元604,被配置为执行检测目标代码的代码运行环境;

基于检测到的代码运行环境,运行目标代码。

可选的,代码运行环境为分布式集群;代码执行单元604被配置为执行:

基于检测到的代码运行环境构建分布式环境,并在构建的分布式环境中运行目标代码。

可选的,代码运行环境为单机;代码执行单元604被配置为执行:

在检测到的代码运行环境对应的单机设备上运行目标代码。

可选的,目标代码为Notebook文档格式或python格式。

可选的,目标代码为Notebook文档格式;装置还包括:

调试单元605,被配置为执行在运行目标代码之前,基于Notebook编辑器对目标代码进行调试。

可选的,目标代码还包括用于引入运行各个目标算子所需算子运行环境的环境依赖信息,和/或用于引入运行各个目标算子所需代码库的代码库依赖信息。

可选的,目标代码包括环境依赖信息;代码转换单元603还被配置为执行:

根据各个目标算子的参数配置信息,检测运行各个目标算子所需的算子运行环境;

将检测到的各个算子运行环境进行合并去重后,生成用于引入运行各个目标算子所需算子运行环境的环境依赖信息;

将环境依赖信息添加到目标代码的顶部。

可选的,目标代码包括代码库依赖信息;代码转换单元603还被配置为执行:

根据各个目标算子的参数配置信息,检测运行各个目标算子所需的代码库;

将检测到的各个代码库进行合并去重后,生成用于引入运行各个目标算子所需代码库的代码库依赖信息;

将代码库依赖信息添加到目标代码的顶部。

关于上述实施例中的装置,其中各个单元执行请求的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

图7是根据一示例性实施例示出的一种电子设备700的框图,该装置包括:

处理器710;

用于存储处理器710可执行指令的存储器720;

其中,处理器710被配置为执行指令,以实现本公开实施例中的自动编程控制方法。

在示例性实施例中,还提供了一种包括指令的存储介质,例如包括指令的存储器720,上述指令可由电子设备700的处理器710执行以完成上述方法。可选地,存储介质可以是非临时性计算机可读存储介质,例如,非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。

本公开实施例还提供一种计算机程序产品,当计算机程序产品在电子设备上运行时,使得电子设备执行实现本公开实施例上述任意一项自动编程控制方法或任意一项自动编程控制方法任一可能涉及的方法。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由上面的权利要求指出。

应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

相关技术
  • 自动编程控制系统、方法、装置、电子设备及存储介质
  • 应用程序编程接口调用方法、装置、电子设备和存储介质
技术分类

06120112185545