基于深度学习开发IDE的深度学习模型构建方法及系统
文献发布时间:2023-06-19 10:38:35
技术领域
该发明创造属于深度学习领域,具体涉及一种面向深度学习开发的IDE框架实现方法及系统。
背景技术
随着深度学习领域的发展,当前深度学习框架层出不穷,当前流行的框架主要包括Tensorflow、Pytorch、Caffe2、Mxnet等。在不同框架下实现的模型,其模型的表达算子以及支持的存储格式等各不相同,且绝大部分模型只能在当前框架中执行训练与推断任务,然而多数情况下需要不同框架模型之间的复用以及利用这些不同框架各自的优点。因此,如何在一个平台上屏蔽框架间差异以支持多种深度学习框架的模型是当前的研究热点之一。目前类似Amazon Sagemaker的主流实现方法是将不同的框架置于容器中服务化,即一种深度学习框架对应一种容器。在统一实现平台上,可以并发运行多种不同的容器,即支持不同的深度学习框架。在需要不同的框架训练或推断模型时选择相应的容器来执行该任务。这类方法的优势在于平台统一,可以支持不同的深度学习模型的训练与推断。其劣势在于通过容器化的方法也比较耗资源,同时操作繁琐:首先需要将某一框架服务容器化,而该容器化过程本身就需要一定的工作量,其次需要根据相应的任务提前启动该服务。
在处理深度学习任务时,用户可以自行构建新的模型结构进行训练,一般在初训练阶段,用户需要查看模型结构以确定结构与预期的一致性;同时也可以采用主流的模型结构如Inception,Resnet,Denset,ImageNet等,若将一个预训练好的模型迁移学习到其他小数据集或新的任务上,需要查看模型结构并进行fine tuning对模型进行小范围的编辑。此外,在对模型计算图进行性能调优如进行算子融合操作时,也希望能够查看模型结构图,方便快速的定位到可以优化的算子。当前针对上述查看模型结构的方法一般分两种:方法一是通过解析不同框架下的模型结构以文本的方式查看;方法二是通过可视化的方法查看不同的模型结构。针对方法一,当模型结构复杂或模型层数达到上百层时,以文本方式查看不够清晰,难以全局概览整体结构。针对方法二,当前模型的可视化方法主要针对某一具体的深度学习框架,如针对tensorflow模型的tensorboard系统,针对pytorch模型的torchviz等,此类可视化工具的缺点在于只支持某一框架下的模型,无法支撑多种不同的框架。同时模型结构的可视化展示是只读的,可以查看结构、各个算子的参数,但无法进行编辑操作。类似微调(fine tuing)只能基于文本编辑实现。两者无法很好的结合以达到互补的效果。
最后,深度学习模型开发过程包括:模型的构建、训练、调试、推断以及各个过程的可视化展现。当前针对不同的步骤,业内已有一些现成的系统来支持其中的某个流程。如模型的构建方法一般分为两种:第一种方法是基于不同深度学习模型框架进行文本编辑,依据不同框架提供的算子集以及算子间的数据传输接口来构造模型结构。该方法的特点在于高效性,但需对当前框架有一定的了解,因此门槛较高。第二种方法是通过拖拽式构建专门针对某一框架下的模型,该方法的优势在于易用性,使用者无需对某一框架特别熟悉,其缺点在于只能针对某一框架。如旷世科技的megastudio基于notebook实现了对模型的训练和推断,即文本编辑的方式来实现,但缺少可视化部分。总的来说,当前还没有一种以简单的方式支持多种模型框架并支持可视化的统一一站式IDE(集成开发环境)供用户进行模型开发。
当前开发深度学习模型存在以下问题:
1)存在多种主流的深度学习框架,在同一平台上采用容器化的方式实现对不同框架下的模型开发使用方法繁琐,同时需要对容器进行额外的管理,并且这将消耗额外的系统资源。
2)在模型可视化方法,现有技术基本上都只支持针对一种框架下的模型进行可视化,不支持不同框架下的模型。且该可视化是只读的,无法进行模型编辑操作。
3)在开发模型的过程中,包括模型构建、训练、推断、调试等,几乎涉及到多种不同的系统或工具,缺乏一个统一的IDE共开发者方便的使用。
发明内容
本发明的目的是解决上述现有技术的:
1)支持不同深度学习框架下的模型存在的使用流程繁琐、资源消耗大的问题;
2)现有可视化技术不支持多种框架且对模型的编辑操作只能以文本方式进行的问题;
3)缺乏一站式的支持模型全流程开发的IDE环境的问题。
本发明提出的技术通过提供一套支持模型全流程开发的IDE,在该IDE中,设计kernel接口来实现对不同深度学习框架的支持,此外,通过一个模型转换层支持对不同框架下模型的可视化展现并支持其与文本联调的方式实现对模型的编辑。
kernel是不同深度学习框架的运行环境的封装,如图1所示,参考ipython的kernel设计方法。IDE前端利用网络通信机制ZMQ可以同时跟不同的后端kernel交互沟通。原生的kernel直接实现对应的前后端通信机制,python封装的kernel方法依托于python的运行环境。前后端的前端是指与用户交互的界面,后端是后台启动的服务,一般用户是看不到的,只有开发者或者运维人员才能看到。
针对现有技术的不足,本发明提出一种基于深度学习开发IDE的深度学习模型构建方法,其中包括:
步骤1、获取源框架下构建的深度学习模型,将该深度学习模型的每个源算子转换为模型中间表示层对应的中间算子,根据该中间算子之间的输入输出关系构建该深度学习模型的树形结构,通过编辑该中间算子和/或该树形结构得到待训练模型;
步骤2、以python脚本为基础,构建用于运行指定执行引擎的虚拟环境,通过构建该源框架的python包,形成可运行的虚拟环境,并将其安装于此IDE中,从而得到在该源框架下用于模型训练和推断的运行环境,针对该运行环境的接口编写模型处理程序,将该待训练模型和训练数据输入至该模型处理程序完成对该待训练模型的训练,得到最终模型,并通过该处理程序将该最终模型运行于该运行环境进行推断,以执行相应深度学习任务。
所述的基于深度学习开发IDE的深度学习模型构建方法,其中该步骤1包括:同时显示该中间算子和该树形结构,当编辑修改该中间算子和该树形结构其中之一者后,同步更新另一者的文本或结构。
所述的基于深度学习开发IDE的深度学习模型构建方法,其中该步骤2包括:通过在多个执行框架中选择目标框架,得到该目标框架对应的python虚拟环境用于执行训练或推断任务,同时针对在该指定执行引擎执行训练和推断任务的程序生成相应的python程序,得到python执行包,将该python执行包在该python虚拟环境中运行安装,从而构成用于运行指定执行引擎的虚拟环境。
所述的基于深度学习开发IDE的深度学习模型构建方法,其中该步骤1包括:
根据中间算子的参数,得到各个算子之间的数据流信息,以得到该深度学习模型结构的可视化参数,将该中间算子表示为节点并根据该可视化参数,构成用于展示的该树形结构。
本发明还提出了一种基于深度学习开发IDE的深度学习模型构建系统,其中包括:
模块1,用于获取源框架下构建的深度学习模型,将该深度学习模型的每个源算子转换为模型中间表示层对应的中间算子,根据该中间算子之间的输入输出关系构建该深度学习模型的树形结构,通过编辑该中间算子和/或该树形结构得到待训练模型;
模块2,用于以python脚本为基础,构建用于运行指定执行引擎的虚拟环境,通过将该源框架的python包在该虚拟环境中运行安装,得到在该源框架下用于模型训练和推断的运行环境,针对该运行环境的接口编写模型处理程序,将该待训练模型和训练数据输入至该模型处理程序完成对该待训练模型的训练,得到最终模型,并通过该处理程序将该最终模型运行于该运行环境,以执行相应深度学习任务。
所述的基于深度学习开发IDE的深度学习模型构建系统,其中该模块1包括:同时以文本的形式显示各个中间算子和以图的形式展示该树形结构,当编辑修改该文本结构和图结构其中之一者后,同步更新另一者的模型结构。
所述的基于深度学习开发IDE的深度学习模型构建系统,其中该模块2包括:通过在多个执行框架中选择目标框架,得到该目标框架对应的python虚拟环境用于执行训练或推断任务,同时针对在该指定执行引擎执行训练和推断任务的程序生成相应的python程序,得到python执行包,将该python执行包在该python虚拟环境中运行安装,从而构成用于运行指定执行引擎的虚拟环境。
所述的基于深度学习开发IDE的深度学习模型构建系统,其中该模块1包括:
根据中间算子的参数,得到各个算子之间的数据流信息,以得到该深度学习模型结构的可视化参数,将该中间算子表示为节点并根据该可视化参数,构成用于展示的该树形结构。
由以上方案可知,本发明的优点在于:
本发明与现有技术相比,提供了一套支持不同深度学习框架的全流程模型开发的IDE。该IDE提供模型的构建、编辑、训练、推断以及调试等模型开发全流程,方便用户在一个平台完成模型的所有开发任务,降低了原先需要多个系统或工具上的操作的复杂性、提高了平台的易用性。本发明使用统一的kernel执行引擎实现对不同深度学习框架的支持。其效果为用户编写相同的一段训练或推断的任务,通过选择不同的kernel即执行引擎便可实现在不同框架上的执行。本发明提供的模型可视化功能其效果一方面是支持对模型结构的可视化方便用户查看,另一方面是支持与本文联调的方式实现对模型计算图的实时编辑。
附图说明
图1为python和原生kernel的封装图;
图2为本发明IDE支持的模型开发流程图;
图3为模型结构可视化支持多框架示意图;
图4为模型转换层流程示意图;
图5为树形结构展示效果示意图;
图6为模型结构可视化示例图;
图7为选择模型执行引擎框架下拉菜单示意图;
图8为选择kernel执行引擎示意图;
图9为本发明实施例中可视化树形结构展示图。
具体实施方式
发明人在针对深度学习模型开发包括构建、训练、调试、推断的过程进行研究时,发现要进行这一系列模型操作需要涉及不同的专用系统或工具,其过程繁琐、耗时,且整个过程涉及到不同的深度学习框架,涉及安装使用不同的工具或将不同的框架进行容器化,在执行任务时,将任务分发到对应的容器中执行,此方法易用性差,门槛也较高。同时,若要对模型进行编辑时,需要对模型文件进行解析得到模型结构以文本的方式进行,当前的模型可视化工具不支持多种不同的框架且是只读的。因此发明人经过对以上问题的分析,设计了一种面向深度学习框架的全流程开发的IDE。该IDE不仅支持多种不同的深度学习框架,可以让用户以简单的方式选择不同的框架进行训练或推断而不引入额外的类似启动容器的开销;同时通过提供模型转换测过以支持不同框架模型的可视化,并支持以文本和可视化联调的方式实现实施可视化计算图的编辑。本发明的IDE较现有方法提供了更简单、方便且全面的开发环境。
本发明申请包括以下关键点:
关键点1,针对不同的深度学习框架,设计了一种通用的kernel机制以实现不同框架下模型的训练、推断任务。技术效果是首先按照提供的kernel机制的接口提供相关模型框架的执行环境,然后用户选择不同的kernel,编写对应深度学习框架下的模型训练或推断任务代码,即可将任务跑在不同的框架上。该kernel的选择相当于是选择执行任务的引擎也即运行时环境。当需要扩展不同的框架时,扩展该kernel机制即可而无需启动类似docker这种额外的服务。总的来说,该关键点提供的操作无需额外的运行开销,同时提供了良好的可扩展性,从而简化了支持多框架的流程。
在本关键点技术的补充说明:当进行模型训练或推断时,需要指定模型以及输入数据集。并通过执行引擎来具体运行。kernel机制为不同的深度学习模型框架提供了统一的调度接口。通过kernel机制以实现对不同运行环境的选择,从来来支持不同框架下模型的训练与推断任务。该技术的优势在于一方面无需启动类似docker这种负载较大的服务来支持不同的框架,另一方面是提供了良好的模型框架可扩展性:当需要支持新的框架时,通过kernel机制构建新框架对应的运行时环境即可。
关键点2,在对不同框架下的模型进行可视化展现时,本发明提供一个模型转换层,将不同框架下的模型转为内部的统一表示,并针对该统一表示实现模型结构的可视化。此外将模型结构的文本方式与可视化相结合,提供联调的方式实现对模型计算图的实时编辑。
关键点3,将关键点1与关键点2结合,提供了一套面向深度学习的全流程开发IDE。包括模型的构建、编辑、训练、推断、调试与部署等一站式的开发环境。方便用户进行模型的全流程开发。
为让本发明的上述特征和效果能阐述的更明确易懂,下文特举实施例,并配合说明书附图作详细说明如下。
阶段一:模型结构编辑与可视化
对于阶段一适用的场景包括按需构建一个新的模型或在已有模型的基础上进行微调fine tuning,一般情况下,无论是构建新模型或对现有模型进行编辑,若能可视化的查看模型结构,将有助于判断模型结构是否与预期一致,同时也可快速的定位某些算子以及算子的参数,尤其是当进行算子融合得计算图优化操作时,可视化能提高此类操作的效率。由于不同框架下的模型存储格式各不相同,所支持的算子也有所差异,因此本发明首要解决的第一个关键点在于支持不同框架下模型的可视化。本发明在具体实施时,设计了一个模型转换层以支持不同的框架的模型转换为统一的内部表示。再针对这统一的内部表示实现模型的结构可视化,如图3所示。具体地,在将模型进行统一表示时,本发明针对不同的框架识别出算子、算子的各个参数以及算子间的数据流。将源框架下的算子按照一个映射表转为内部的模型中间表示层对应的算子,通过这种方式来支持不同的框架下的模型转为统一的表达形式,如果原模型的算子和中间层一致,则无需转换,若不一致,则需要转换。具体流程如图4所示。
随后通过前端的技术构建出一个树形结构来表示整个模型结构,效果如图5所示。用树状图代表模型结构,其中节点表示模型的各个算子如conv,fc,relu,bn等,而节点之间的表表示各个算子之间的输入输出关系。当点击某一节点时,可显示该节点算子的类型、名称、参数以及相关的输入输出节点信息。模型的可视化信息包括对模型结构的概览以及对各个节点详细信息的查询。
具体的结构可视化实施流程为:
1)构造模型结构图graph:针对模型中间表示层生成的模型结构内部表示文件,该文件是一个protobuf类型,具体做法是遍历文件的每一行,识别出各个算子node的类型、名称、输入输出以及其他的参数。构成一个包含所有相关参数的算子集列表。
2)构建图层次结构graphHierarchy:根据步骤1)得到的graph各个算子的参数分离出边的信息即各个算子之间的数据流。在此基础上设置模型结构可视化图的一些参数,如rankdir:BT/TB/LR/RL等
3)根据构建好的graphHierarchy,处理其结构,生成html标签用于展示。总的效果是用现有的graphlib、d3等javascipt包将算子信息表示为节点,算子之间的数据流edge表示为节点之间的边,构成一个如图4所示的树状图嵌入到html的svg标签中用于展示。具体地,在svg标签中,添加子标签
此外,除了以上可显示模型结构以外,还可支持对算子的编辑,即可视化图中对节点和边的增删改操作。例如,点击树状图中的节点,获取该节点对应的算子的参数及输入输出等信息,并进行展示,在此基础上,支持对展示信息的可编辑,例如参数值的修改,输入输出的修改。修改完成后,模型结构的可视化随之改变以达到实时更新的效果。这种编辑方法适合更新粒度较小的情况,当需要添加或删除大量算子时,使用文本编辑的方式更加高效。具体实施方式为打开模型文件,以可读写的方式展示结构信息从而支持文本化的编写。当既需要大力度更该模型结构信息有需要小粒度进程参数调整时,我们以同时支持文本和图可视化的方式支持模型计算图的实时更新。具体实施方式是:打开一个模型文件,同时显示模型结构的文本信息和结构图(例如树形结构图)。当修改文本或图其中之一进行保存后,点击另一个可视化模型的刷新操作,即可实时的同步模型结构图,如图6所示。
阶段二:基于kernel的模型训练、推断执行
对于阶段二,实现模型的训练、推断等任务的执行。执行此类任务有两个步骤。步骤一首先新建训练或推断任务前,需确认该任务在哪个框架上执行如pytorch或者tensorflow等,确保该框架已经实现了内核(kernel)机制,kernel机制是本IDE提供的一套通用模型执行引擎框架。接下来选择kernel如下图7所示,并下拉kernel选择选择具体的kernel作为本次训练、推断任务的执行引擎,如图8所示。
执行引擎的确定保证了步骤二的运行时环境。本发明中提出的Kernel机制是一套通用的模型执行引擎框架。可以很方便的用于扩展新的模型框架。涉及kernel的具体实现方案如下:
Kernel管理。Kernel管理包括新增和删除kernel。一个kernel具体的实现对应一个python虚拟环境。本发明采用python脚本为基础,以虚拟环境表示一个kernel。采用python语言是由于其可方便的构建一个新的虚拟环境。虚拟环境的优势在于:
1)多个虚拟环境中的操作隔离性好,互不影响。
2)可以方便的新建、切换虚拟环境,也可以很容易的管理多个不同的虚拟环境。其资源消耗代价较docker等其他启动方式可以忽略不计。
Kernel机制提供的是一种具有良好可扩展性的深度学习执行框架。当需要扩展一种新的模型框架时,首先新建一个新的python虚拟环境,然后将该模型的python包准备好,包括把在新框架下执行训练和推断任务的程序给打包成python程序,随后将该python执行包在该虚拟环境中运行安装,从而构成一个完备的可运行该框架下模型训练或推断的运行时环境。若要删除一个kernel,则在对应的虚拟环境下卸载某框架的python安装包。每个kernel都有一个kernel.json文件,文件内容包括argv,display_name,language等。argv用于启动运行时环境,display_name是在IDE中显示kernel选项的名字。因此,在IDE中显示所有的kernel时,是通过查找各个kernel.json文件的display_name。例如图4,就有3个kernel.json文件,其中的display_name分别为Pytorch、Tensorflow、Caffe2。当用户选择某个kernel时,执行对应kernel.json中的argv命令来启动该虚拟环境也即模型运行时环境。
本发明的IDE提供了对kernel列表的查看,kernel启动以外,还提供了kernel的shutdown操作。该操作在启动以后必须手动执行。而kernel的启动是随着我们执行模型的训练推断任务自动启动的。开发者可以选择shutdown一个或多个kernel运行时环境,也可以shutdown所有的kernel运行时环境。此外当我们在需要在同一框架下执行多个不同的任务时,如用pytorch框架执行模型model1、model2、model3等多个模型的训练任务,那么在选择kernel环境时会先判断当前pytorch的运行时环境是否已存在,若不存在则新建一个,否则在已有运行时环境上直接执行本次训练/推断任务。这种方式可以简化多种不同框架对应的运行时环境的管理。
Kernel的执行。
当我们选择不同的kernel时也就是在选择执行这段程序的执行引擎。当确定了用哪种kernel来作为执行引擎时,便可进入到步骤二。步骤二针对选定的kernel提供的python接口来编写训练和推断的程序。该程序的输入包括数据集和模型结构。由于针对不同框架,处理其模型结构的python接口不同,因此需要选确定框架,再针对不同的框架的接口编写相应的模型处理程序。
对于编写好的模型处理程序,本发明的IDE提供了运行、调试、关闭等多种操作。其中最关键的是运行操作,运行操作是将用户编辑的python程序发送给后台运行在其指定的kernel虚拟环境上,并等待结果的返回。
示例说明:本文以对Tensorflow模型进行微调并在Pytorch框架下进行训练的过程为例,来阐述本开发环境具体解决的问题。
首先,已有在Tensorflow框架下训练好的模型model_x,将其加载导入到本发明的IDE系统中,系统会通过文件后缀识别出模型框架,然后对其进行模型算子库比对,将model_x中的各个算子分别转为本系统内部的算子统一表示,从而将整个模型结构转为本系统内的模型表示,并在前端构建该模型的树状图结构进行展示,如图9所示。同时通过文本信息展示该模型结构。
以上模型结构树状图和文本信息均描述的是model_x的模型结构。用户可以选择文本或者对树状图进行编辑的方式对模型model_x进行微调或者编辑等操作。当修改完毕时,点击系统的“保存为”按钮,并选择下来菜单中的模型框架列表中的一种,如本次选择“Pytorch”,则就可以将修改后的model_x保持为Pytorch框架下的模型,形成predict_model.py文件。在将编辑过的模型可视化结构即树状结构保存为predict_model.py文件时,该该步骤用到了系统内的代码自动生成技术将图结构转为python文件,里面存储的就是模型结构信息。
随后对predict_model.py文件保存的模型进行训练/推断:首先点击“加载”按钮,将模型结构predict_model.py文件到系统中;随后选择训练/推断的框架“Pytorch”,点击“确认”。点击“训练”/“推断”按钮即可进行新模型的执行任务。该过程无需安装任何Tensorflow、Pytorch相关的框架,也无需安装模型结构可视化工具便可在本系统中加载多种框架下的模型进行可视化编辑模型,并选择指定框架进行训练和推断。
以下为与上述方法实施例对应的系统实施例,本实施方式可与上述实施方式互相配合实施。上述实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在上述实施方式中。
本发明还提出了一种基于深度学习开发IDE的深度学习模型构建系统,其中包括:
模块1,用于获取源框架下构建的深度学习模型,将该深度学习模型的每个源算子转换为模型中间表示层对应的中间算子,根据该中间算子之间的输入输出关系构建该深度学习模型的树形结构,通过编辑该中间算子和/或该树形结构得到待训练模型;
模块2,用于以python脚本为基础,构建用于运行指定执行引擎的虚拟环境,通过将该源框架的python包在该虚拟环境中运行安装,得到在该源框架下用于模型训练和推断的运行环境,针对该运行环境的接口编写模型处理程序,将该待训练模型和训练数据输入至该模型处理程序完成对该待训练模型的训练,得到最终模型,并通过该处理程序将该最终模型运行于该运行环境,以执行相应深度学习任务。
所述的基于深度学习开发IDE的深度学习模型构建系统,其中该模块1包括:同时以文本的形式显示各个中间算子和以图的形式展示该树形结构,当编辑修改该文本结构和图结构其中之一者后,同步更新另一者的模型结构。
所述的基于深度学习开发IDE的深度学习模型构建系统,其中该模块2包括:通过在多个执行框架中选择目标框架,得到该目标框架对应的python虚拟环境用于执行训练或推断任务,同时针对在该指定执行引擎执行训练和推断任务的程序生成相应的python程序,得到python执行包,将该python执行包在该python虚拟环境中运行安装,从而构成用于运行指定执行引擎的虚拟环境。
所述的基于深度学习开发IDE的深度学习模型构建系统,其中该模块1包括:
根据中间算子的参数,得到各个算子之间的数据流信息,以得到该深度学习模型结构的可视化参数,将该中间算子表示为节点并根据该可视化参数,构成用于展示的该树形结构。
- 基于深度学习开发IDE的深度学习模型构建方法及系统
- 基于深度学习模型构建智能聊天平台的方法及系统