一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于工业质检领域机器学习模型的产品缺陷检测方法与流程

2022-12-07 18:11:35 来源:中国专利 TAG:


1.本发明属于测量测试技术领域,具体涉及缺陷检测技术领域,具体地,尤其是基于工业质检领域机器学习模型的产品缺陷检测方法,可以应用于高端装备、新能源汽车的零部件制造过程中的

背景技术:
质检环节。
背景技术
2.随着数据量越来越多以及模型层数的越来越复杂,训练深度学习模型需要的资源也越来越多,单台机器的单张显卡或多张显卡已经不能满足日益增长的资源需求,迫切需要一种技术能够将多台机器上的多张显卡整合起来实现模型训练速度的提高;在使用单台机器进行模型训练的方式下,分散在多台机器上的少量显卡资源无法启动需要大规模资源的训练任务,用户提交的训练任务只能在队列中处于等待状态,这意味着在没有足够资源启动训练任务的机器上,少量显卡资源出现空闲,造成机器显卡资源的浪费;集群规模在不断扩大,集群中任意时刻出现任意一台机器故障的概率也在增加,当节点出现故障时,缺乏容错机制的训练任务往往只能判定失败,需要人为在其他机器上重新启动任务。在深度学习的训练中,根据训练数据的量级和算力规模大小,多个轮次的模型训练有可能耗时几小时甚至几天,如果用户没有实时监控任务的训练状态,当用户发现训练任务失败时,只能被迫接受最近训练结果丢失的事实,并承受重新进行任务调度的时间成本,模型的迭代周期也有变长的风险;基于硬件厂商在产品定价时对于边际效应的熟练使用,顶级显卡的采购价格是次顶级显卡的两倍以上,但顶级显卡带来的性能提升却只有20%-30%左右,成本上升并未带来对应的性能提升,这就需要有方法使用成本更低的非顶级显卡进行组合,使其达到硬件综合性能的提升,来满足日益增长的训练资源需求。
3.基于以上需求,迫切需要一种技术既能使用多台服务器快速提高算力来满足模型训练的要求,又能在增加硬件服务器的同时提高硬件的使用率降低硬件使用成本。
4.专利文献cn111814968b(申请号:202010957906.8)公开了一种用于机器学习模型的分布式训练的方法和装置。该方法包括:在分布式训练的预设数量次迭代步骤中,获取当前迭代步骤的次序;所述预设数量与所述n成对数关系;基于次序,从n个节点中获取一个节点作为当前节点在当前迭代步骤中的目标节点;与目标节点通信,获取目标节点共享的模型信息;根据当前节点的模型信息和目标节点的模型信息更新当前节点的机器学习模型,以在完成预设数量次迭代步骤后各节点的机器学习模型同步获得所述n个节点的模型信息。
5.本发明通过分布式训练方法提高了算法模型的训练速度和硬件资源的利用率,降低了缺陷检测的成本和时间。


技术实现要素:

6.针对现有技术中的缺陷,本发明的目的是提供一种基于工业质检领域机器学习模型的产品缺陷检测方法。
7.根据本发明提供的一种基于工业质检领域机器学习模型的产品缺陷检测方法,包括:步骤1:将分布式训练模型存储至分布式存储服务器中;步骤2:将训练数据集和验证数据集存储至分布式存储服务器中;步骤3:利用训练数据集对分布式训练模型分别进行训练,并利用验证数据集进行验证;步骤4:利用训练后的分布式机器学习模型对产品缺陷进行检测。
8.优选地,包括:步骤s1:根据当前训练任务id生成yaml参数文件存储路径,将yaml参数文件保存至分布式存储服务器对应的存储路径中;步骤s2:将yaml参数文件在分布式存储服务器对应的存储路径写入分布式训练容器的环境变量中,每个分布式训练容器启动后,根据分布式训练容器环境变量中的yaml参数文件路径获取当前训练任务所需要的参数;步骤s3:将训练数据集和验证数据集存储至分布式存储服务器中,根据yaml参数文件解析训练数据集和验证数据集的位置,获取所需要的训练数据集;步骤s4:根据yaml参数文件获取预训练模型在分布式服务器中的存储路径,并根据存储路径加载预训练模型为单机训练模型,将单机训练模型转换为分布式训练任务所需要的分布式训练模型,将分布式训练模型分配至相应的分布式训练容器中;步骤s5:将获取的训练数据集采用分布式数据采样器给每个分布式训练容器分配当前训练数据集的子集;步骤s6:利用训练数据集的子集对每个分布式训练容器中的分布式训练模型进行训练;步骤s7:利用验证数据集对训练后的分布式训练模型进行验证。
9.优选地,所述yaml参数文件包括:通过web页面设置可自主调节的参数,并利用设置的可自主调节的参数在springboot后端服务中对相应的默认值进行覆盖,结合参数服务器中的其他参数,生成完成的参数列表,并将完整参数列表写入yaml参数文件中。
10.优选地,所述步骤s3采用:步骤s3.1:将所要标注的图片存储至分布式存储服务器上,通过web页面逐张加载分布式存储服务器上的图片,并进行质检缺陷标注,将图片以及标注json文件上传至分布式存储服务器中;步骤s3.2:将分布式存储服务器中标注好的图片按照预设比例进行划分,得到训练数据集和验证数据集,并将训练数据集和验证数据集分开存储,将训练数据集和验证数据集的存储路径保存至yaml参数文件中;步骤s3.3:将分布式存储服务器中已经标注好质检缺陷图片所在的路径挂载到分布式训练容器启动后所在的物理服务器上,使得分布式训练启动的每个容器都能访问到训练所需要的训练数据集和验证数据集,并对分布式存储服务器的文件进行缓存,加快训练
加载图片速度;步骤s3.4:根据yaml参数文件解析训练数据集和验证数据集的位置,获取训练数据集。
11.优选地,所述步骤s4采用:单机训练模型根据不同机器学习训练框架对应的方法转换为分布式训练模型,实现模型间梯度数据交换。
12.优选地,基于不同训练速度要求,自定义使用gpu的数量以及资源的自动调度;所述自定义使用gpu的数量采用:根据不同训练速度要求,通过web页面设置gpu数量,通过请求参数传给后端,并利用设置的gpu数量对参数文件中默认的gpu数量进行覆盖;所述资源的自动调度采用:在kubernetes集群中部署kubeflow,将分布式训练代码打包到docker镜像中,使用kubernetes的自定义资源pytrochjob来启动镜像,实现质检模型训练的部署,利用kubernetes的容器自动调度、自动编排技术,将质检模型训练任务自动调度到有空闲资源的多台机器上,实现分布式训练资源的自动调度。
13.优选地,将分布式训练任务的容器ip和端口以及当前容器的序号写入环境变量中实现容器间的动态发现和数据传递、主进程容器的模型保存;所述将分布式训练任务的容器ip和端口以及当前容器的序号写入环境变量中实现容器间的动态发现和数据传递采用:将分布式训练任务的容器ip和端口写入环境变量中,使得分布式训练的主进程和从属工作进程能够互相发现,从而判断当前任务整体的执行情况来决定是否要终止当前任务,以及在每一阶段训练完成后,主进程和从属工作进程能够进行数据传递,保证不同容器间梯度参数的一致性;所述将分布式训练任务的容器ip和端口以及当前容器的序号写入环境变量实现主进程容器的模型保存采用:在分布式训练启动后,初始化分布式训练的进程组,在进程组中给主进程分配序号rank为0,从属工作进程的rank序号为1,其他从属工作进程的rank序号依次增加,使得当前进程判断序号rank是否为0,判断自己是否是主进程,若是主进程,通过判断,在相应位置执行相关代码。
14.优选地,在容器启动之前,给分布式训练的每一个容器设置共享内存,当某一个进程从分布式存储中加载数据到内存中后,其他进程则不必再次加载数据到内存,而是直接加载共享内存中的数据,减少加载数据的次数和内存间数据拷贝的次数,从而加快数据加载速度。
15.优选地,保存训练过程数据并使用数据可视化工具对训练损失和训练准确性进行展示;加载参数文件,并解析保存训练过程数据的文件路径,在训练过程,通过训练过程数据衡量训练损失和训练准确度的指标,并保存到分布式存储系统提供的文件路径中;在分布式训练开始之前,启动用于数据可视化展示训练指标的服务,生成访问服务的路径,并给服务设置所需要读取的训练过程文件所在的目录参数,在web页面,通过浏览器跳转到可视化服务启动后自动生成的访问路径,实时查看训练指标,判断训练情况。
16.优选地,发送训练通知,实时监控训练进度;每个进程通过获取当前容器的环境变量来获取当前进程的rank序号,并给kafka消息中间件发送当前进程启动和停止的消息,主进程在训练过程中发送当前训练的轮次到对应的kafkatopic中;
springboot服务通过消费任务结果topic中的消息,将当前分布式训练任务的所有进程的启动情况写入数据库,通过消费任务进度topic中的消息,将当前分布式训练任务正在进行的轮次写入数据库,在web页面通过接口从数据库查询当前训练任务,在web页面实时展示容器的状态和训练的轮次,从而综合判断当前分布式训练任务的运行情况和实时监控分布式训练任务训练进度。
17.与现有技术相比,本发明具有如下的有益效果:1、本发明基于分布式训练降低了缺陷检测的成本和时间;2、本发明通过工业质检领域机器学习模型的分布式训练,满足模型训练日益增长的算力需求,提高算法模型的训练速度,提高硬件资源的利用率,解决训练任务的容错性,节省硬件资源的使用成本,界面化操作提高实施人员工作效率;3、本发明完成一种基于工业质检领域机器学习模型的分布式训练的实现,解决了工业现场标注数据集的分布式存储和提取、基于训练集和验证集的分布式训练、训练过程的指标监控和故障监控的问题,降低工业现场实施工程师操作数据集,训练质检模型和监控训练过程的实施门槛,节省了质检模型训练所需要的人工成本、时间成本,提高了质检模型的训练速度、质检产品的检测效率。
附图说明
18.通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:图1为基于工业质检领域机器学习模型的分布式训练方法。
具体实施方式
19.下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
20.实施例1根据本发明提供的一种基于工业质检领域机器学习模型的产品缺陷检测方法,包括:步骤1:将分布式训练模型存储至分布式存储服务器中;步骤2:将训练数据集和验证数据集存储至分布式存储服务器中;步骤3:利用训练数据集对分布式训练模型分别进行训练,并利用验证数据集进行验证;步骤4:利用训练后的分布式机器学习模型对产品缺陷进行检测。
21.其中,基于工业质检领域机器学习模型的分布式训练方法,如图1所示,包括:步骤s1:根据当前训练任务id生成yaml参数文件存储路径,将yaml参数文件保存至分布式存储服务器对应的存储路径中;具体地,设置自定义参数,对默认参数进行覆盖,生成完整参数列表保存yaml文件,将yaml文件保存到分布式存储服务器,具体为:
通过web页面设置实时工程师可自主调节的参数,并在springboot后端服务中对默认参数进行覆盖,结合参数服务器中的其他参数,生成完成的参数列表,并将完整参数列表写入yaml参数文件中,根据当前训练任务id生成存储路径,将yaml参数文件保存到分布式存储服务器对应的路径中。
22.步骤s2:将yaml参数文件在分布式存储服务器对应的存储路径写入分布式训练容器的环境变量中,每个分布式训练容器启动后,根据分布式训练容器环境变量中的yaml参数文件路径获取当前训练任务所需要的参数;具体地,在分布式训练容器的dockerfile中,将参数文件在分布式存储服务器中的路径写入到当前容器的环境变量中,每个容器启动后,通过对应的key去获取环境变量中对应的参数文件路径值,通过文件路径加载参数文件,并对文件进行解析,获取到当前任务所需要的完整参数。
23.步骤s3:将训练数据集和验证数据集存储至分布式存储服务器中,根据yaml参数文件解析训练数据集和验证数据集的位置,获取所需要的训练数据集;具体地,使用分布式存储服务器的连接客户端上传所要标注的图片到分布式存储服务器上,在本发明的web页面逐张加载上传好的图片,并对图片进行质检缺陷标注,或者实施工程师先在本地使用labelme等工具对图片进行缺陷标注,之后使用分布式存储服务器的连接客户端上传图片和标注json文件;将分布式存储服务器中标注好的图片按照一定的比例进行划分,整理为训练数据集和验证数据集,并将对应的数据集分开存储,将训练数据集和验证数据集生成的路径保存到yaml参数文件中;将分布式存储服务器中已经标注好质检缺陷图片所在的路径挂载到容器启动后所在的物理服务器上,使得分布式训练启动的每个容器都能访问到训练所需要的训练数据集和验证数据集,并对分布式存储服务器的文件进行缓存,加快训练加载图片速度;在容器中根据环境变量获取到参数文件在分布式存储服务器中的存储路径,并加载参数文件,解析到训练数据集和验证数据集的位置,下载训练所需要的数据。
24.步骤s4:根据yaml参数文件获取预训练模型在分布式服务器中的存储路径,并根据存储路径加载预训练模型为单机训练模型,将加载好的单机训练模型根据不同机器学习训练框架对应的方法转换为分布式训练模型,实现模型间梯度数据交换,将分布式训练模型分配至相应的分布式训练容器中;步骤s5:将获取的训练数据集采用分布式数据采样器给每个分布式训练容器分配当前训练数据集的子集;具体地,通过解析参数文件获取到训练数据集的路径,并将训练数据集加载为data_set,创建分布式的数据采样器(distributedsampler),根据随机种子设置采样初始位置,使用分布式采样器给训练的每个容器分配一个当前训练数据集的子集,这些数据子集间数据互不重叠互不交叉,降低每张显卡加载的图片数量,又确保所有显卡加载了所有图片,加快训练的速度,提高训练效率,在每一轮训练完之后,将当前轮的序号作为随机种子设置到分布式的数据采样器中,实现每一轮的随机种子不同,从而实现每一轮分布式采样器初始采样位置的不同,提高训练的代表性,从而提高训练模型的准确度。
25.步骤s6:利用训练数据集的子集对每个分布式训练容器中的分布式训练模型进行
训练;步骤s7:利用验证数据集对训练后的分布式训练模型进行验证。
26.还包括:基于不同训练速度要求自定义使用gpu的数量以及资源的自动调度;所述基于不同训练速度要求自定义使用gpu的数量以及资源的自动调度,包括:实施工程师可根据当前质检模型训练的具体情况,例如训练当前模型的时间长度要求,训练当前模型的数据集的大小,分布式集群中可使用的资源数量等指标,自行定义当前质检模型的训练需要的gpu的数量,并在本发明的web页面对gpu的数量进行设定,通过请求参数传给后端,便会在参数文件中对默认gpu数量进行覆盖,实现质检模型训练gpu数量的自定义分布式训练资源的自动调度包括:在kubernetes集群中部署kubeflow,将分布式训练代码打包到docker镜像中,使用kubernetes的自定义资源pytrochjob来启动镜像,实现质检模型训练的部署,利用kubernetes的容器自动调度、自动编排技术,将质检模型训练任务自动调度到有空闲资源的多台机器上,实现分布式训练资源的自动调度还包括将分布式训练任务的容器ip和端口以及当前容器的序号写入环境变量中,实现容器间的动态发现和数据传递、主进程容器的模型保存;其中,将分布式训练任务的容器ip和端口写入环境变量中实现容器间的动态发现和数据传递,具体为:将分布式训练任务的容器ip和端口写入环境变量中,使得分布式训练的主进程和从属工作进程能够互相发现,从而判断当前任务整体的执行情况来决定是否要终止当前任务,以及在每一阶段训练完成后,主进程和从属工作进程能够进行数据传递,保证不同容器间梯度参数的一致性。
27.将分布式训练任务的容器的序号写入环境变量中实现主进程容器的模型保存,具体为:在分布式训练启动后,初始化分布式训练的进程组,在进程组中给主进程分配序号rank为0,从属工作进程的rank序号为1,其他从属工作进程的rank序号依次增加,使得当前进程判断序号rank是否为0,判断自己是否是主进程,若是主进程,通过判断,在相应位置执行相关代码,例如发送通知消息和保存模型。
28.还包括使用内存共享加快数据加载到gpu,包括:在容器启动之前,给分布式训练的每一个容器设置共享内存,当某一个进程从从分布式存储中加到数据到内存中后,其他进程则不必再次加载数据到内存,而是直接加载内存中的数据,减少加载数据的次数和内存间数据拷贝的次数,从而加快数据加载速度还包括保存训练过程数据并使用数据可视化工具对训练损失和训练准确性等模型进行展示;所述模型的分布式转换和数据的分布式抽样加载,包括如下步骤:保存训练过程数据,具体为:加载参数文件,并解析保存训练过程数据的文件路径,在训练过程,将实施工程师用来判断训练趋势,衡量训练损失和训练准确度的指标保存到分布式存储系统提供的文件路径中。
29.使用数据可视化工具对训练损失和训练准确性等模型进行展示,具体为:在分布式训练开始之前,启动用于数据可视化展示训练指标的服务,生成访问服务的路径,并给服务设置所需要读取的训练过程文件所在的目录参数,在本发明的web页面,通过浏览器跳转
到可视化服务启动后自动生成的访问路径,使得实施工程师可实时查看训练指标,判断训练情况。
30.还包括发送训练通知,实时监控训练进度:所述发送训练通知,实时监控训练进度,包括如下步骤:发送训练通知,具体为:每个进程通过获取当前容器的环境变量来获取当前进程的rank序号,并给kafka消息中间件发送当前进程启动和停止的消息,这些进程中的主进程在训练过程中发送当前训练的轮次到对应的kafkatopic中。
31.实时监控训练进度,具体为:springboot服务通过消费任务结果topic中的消息,将当前分布式训练任务的所有进程的启动情况写入数据库,通过消费任务进度topic中的消息,将当前分布式训练任务正在进行的轮次写入数据库,在本发明的web页面通过接口从数据库查询当前训练任务,在web页面实时展示容器的状态和训练的轮次,从而综合判断当前分布式训练任务的运行情况和实时监控分布式训练任务训练进度。
32.根据本发明提供的一种基于工业质检领域机器学习模型的产品缺陷检测系统,包括:模块1:将分布式训练模型存储至分布式存储服务器中;模块2:将训练数据集和验证数据集存储至分布式存储服务器中;模块3:利用训练数据集对分布式训练模型分别进行训练,并利用验证数据集进行验证;模块4:利用训练后的分布式机器学习模型对产品缺陷进行检测。
33.其中,基于工业质检领域机器学习模型的分布式训练系统,包括:模块m1:根据当前训练任务id生成yaml参数文件存储路径,将yaml参数文件保存至分布式存储服务器对应的存储路径中;具体地,设置自定义参数,对默认参数进行覆盖,生成完整参数列表保存yaml文件,将yaml文件保存到分布式存储服务器,具体为:通过web页面设置实时工程师可自主调节的参数,并在springboot后端服务中对默认参数进行覆盖,结合参数服务器中的其他参数,生成完成的参数列表,并将完整参数列表写入yaml参数文件中,根据当前训练任务id生成存储路径,将yaml参数文件保存到分布式存储服务器对应的路径中。
34.模块m2:将yaml参数文件在分布式存储服务器对应的存储路径写入分布式训练容器的环境变量中,每个分布式训练容器启动后,根据分布式训练容器环境变量中的yaml参数文件路径获取当前训练任务所需要的参数;具体地,在分布式训练容器的dockerfile中,将参数文件在分布式存储服务器中的路径写入到当前容器的环境变量中,每个容器启动后,通过对应的key去获取环境变量中对应的参数文件路径值,通过文件路径加载参数文件,并对文件进行解析,获取到当前任务所需要的完整参数。
35.模块m3:将训练数据集和验证数据集存储至分布式存储服务器中,根据yaml参数文件解析训练数据集和验证数据集的位置,获取所需要的训练数据集;具体地,使用分布式存储服务器的连接客户端上传所要标注的图片到分布式存储服务器上,在本发明的web页面逐张加载上传好的图片,并对图片进行质检缺陷标注,或者
实施工程师先在本地使用labelme等工具对图片进行缺陷标注,之后使用分布式存储服务器的连接客户端上传图片和标注json文件;将分布式存储服务器中标注好的图片按照一定的比例进行划分,整理为训练数据集和验证数据集,并将对应的数据集分开存储,将训练数据集和验证数据集生成的路径保存到yaml参数文件中;将分布式存储服务器中已经标注好质检缺陷图片所在的路径挂载到容器启动后所在的物理服务器上,使得分布式训练启动的每个容器都能访问到训练所需要的训练数据集和验证数据集,并对分布式存储服务器的文件进行缓存,加快训练加载图片速度;在容器中根据环境变量获取到参数文件在分布式存储服务器中的存储路径,并加载参数文件,解析到训练数据集和验证数据集的位置,下载训练所需要的数据。
36.模块m4:根据yaml参数文件获取预训练模型在分布式服务器中的存储路径,并根据存储路径加载预训练模型为单机训练模型,将加载好的单机训练模型根据不同机器学习训练框架对应的方法转换为分布式训练模型,实现模型间梯度数据交换,将分布式训练模型分配至相应的分布式训练容器中;模块m5:将获取的训练数据集采用分布式数据采样器给每个分布式训练容器分配当前训练数据集的子集;具体地,通过解析参数文件获取到训练数据集的路径,并将训练数据集加载为data_set,创建分布式的数据采样器(distributedsampler),根据随机种子设置采样初始位置,使用分布式采样器给训练的每个容器分配一个当前训练数据集的子集,这些数据子集间数据互不重叠互不交叉,降低每张显卡加载的图片数量,又确保所有显卡加载了所有图片,加快训练的速度,提高训练效率,在每一轮训练完之后,将当前轮的序号作为随机种子设置到分布式的数据采样器中,实现每一轮的随机种子不同,从而实现每一轮分布式采样器初始采样位置的不同,提高训练的代表性,从而提高训练模型的准确度。
37.模块m6:利用训练数据集的子集对每个分布式训练容器中的分布式训练模型进行训练;模块m7:利用验证数据集对训练后的分布式训练模型进行验证。
38.还包括:基于不同训练速度要求自定义使用gpu的数量以及资源的自动调度;所述基于不同训练速度要求自定义使用gpu的数量以及资源的自动调度,包括:实施工程师可根据当前质检模型训练的具体情况,例如训练当前模型的时间长度要求,训练当前模型的数据集的大小,分布式集群中可使用的资源数量等指标,自行定义当前质检模型的训练需要的gpu的数量,并在本发明的web页面对gpu的数量进行设定,通过请求参数传给后端,便会在参数文件中对默认gpu数量进行覆盖,实现质检模型训练gpu数量的自定义分布式训练资源的自动调度包括:在kubernetes集群中部署kubeflow,将分布式训练代码打包到docker镜像中,使用kubernetes的自定义资源pytrochjob来启动镜像,实现质检模型训练的部署,利用kubernetes的容器自动调度、自动编排技术,将质检模型训练任务自动调度到有空闲资源的多台机器上,实现分布式训练资源的自动调度还包括将分布式训练任务的容器ip和端口以及当前容器的序号写入环境变量中,
实现容器间的动态发现和数据传递、主进程容器的模型保存;其中,将分布式训练任务的容器ip和端口写入环境变量中实现容器间的动态发现和数据传递,具体为:将分布式训练任务的容器ip和端口写入环境变量中,使得分布式训练的主进程和从属工作进程能够互相发现,从而判断当前任务整体的执行情况来决定是否要终止当前任务,以及在每一阶段训练完成后,主进程和从属工作进程能够进行数据传递,保证不同容器间梯度参数的一致性。
39.将分布式训练任务的容器的序号写入环境变量中实现主进程容器的模型保存,具体为:在分布式训练启动后,初始化分布式训练的进程组,在进程组中给主进程分配序号rank为0,从属工作进程的rank序号为1,其他从属工作进程的rank序号依次增加,使得当前进程判断序号rank是否为0,判断自己是否是主进程,若是主进程,通过判断,在相应位置执行相关代码,例如发送通知消息和保存模型。
40.还包括使用内存共享加快数据加载到gpu,包括:在容器启动之前,给分布式训练的每一个容器设置共享内存,当某一个进程从从分布式存储中加到数据到内存中后,其他进程则不必再次加载数据到内存,而是直接加载内存中的数据,减少加载数据的次数和内存间数据拷贝的次数,从而加快数据加载速度还包括保存训练过程数据并使用数据可视化工具对训练损失和训练准确性等模型进行展示;所述模型的分布式转换和数据的分布式抽样加载,包括如下步骤:保存训练过程数据,具体为:加载参数文件,并解析保存训练过程数据的文件路径,在训练过程,将实施工程师用来判断训练趋势,衡量训练损失和训练准确度的指标保存到分布式存储系统提供的文件路径中。
41.使用数据可视化工具对训练损失和训练准确性等模型进行展示,具体为:在分布式训练开始之前,启动用于数据可视化展示训练指标的服务,生成访问服务的路径,并给服务设置所需要读取的训练过程文件所在的目录参数,在本发明的web页面,通过浏览器跳转到可视化服务启动后自动生成的访问路径,使得实施工程师可实时查看训练指标,判断训练情况。
42.还包括发送训练通知,实时监控训练进度:所述发送训练通知,实时监控训练进度,包括如下步骤:发送训练通知,具体为:每个进程通过获取当前容器的环境变量来获取当前进程的rank序号,并给kafka消息中间件发送当前进程启动和停止的消息,这些进程中的主进程在训练过程中发送当前训练的轮次到对应的kafkatopic中。
43.实时监控训练进度,具体为:springboot服务通过消费任务结果topic中的消息,将当前分布式训练任务的所有进程的启动情况写入数据库,通过消费任务进度topic中的消息,将当前分布式训练任务正在进行的轮次写入数据库,在本发明的web页面通过接口从数据库查询当前训练任务,在web页面实时展示容器的状态和训练的轮次,从而综合判断当前分布式训练任务的运行情况和实时监控分布式训练任务训练进度。
44.实施例2实施例2是实施例2的优选例根据本发明提供的一种基于工业质检领域机器学习模型的分布式训练方法,包
括:参数获取:所有显卡资源加载分布式存储中的相同参数文件,实现参数传递,保持参数一致;在web页面获取可由实施工程自主调节的参数,并在springboot服务中对默认参数进行覆盖,结合参数服务器中的其他参数,生成最终完整的参数列表,将完整参数列表写入yaml参数文件中,并将当前任务所对应的yaml参数文件上传到分布式存储服务器s3当中,将s3中对应yaml参数文件的路径写入使用当前显卡的kubernetes的pod的环境变量中,每张显卡根据环境变量的key各自动态获取yaml参数文件的路径,通过路径自主到s3服务器下载yaml参数文件,并在代码中进行解析,解析完成后,获取到当前任务所需要的完整参数。
45.质检图像训练数据集和验证数据集的分布式存储:由于分布式训练的显卡资源分布在不同的物理机器上,所有显卡要获取相同的训练数据集和验证数据集的图片,简单方法是将训练数据集和验证数据集在所有机器上存储一份,但为了节省存储资源,我们将数据集存放在了分布式存储服务s3,解决数据集存储问题,所以使用分布式存储服务s3的客户端上传所要进行缺陷标注的图片,并在web页面浏览加载s3上的每一张图片,在图片上对缺陷进行人工标注,或者在其他工具进行本地标注,例如labelme,之后将标注好的图片以及其对应的标注json信息一并批量上传到s3上,对已标注图片进行整理,划分训练数据集和验证数据集,之后将整理好的训练集和验证集移动到指定的s3位置,并获取到图片存储的路径,将路径保存到数据库中,在生成参数文件时,将路径从数据库提取写入yaml参数文件中。
46.质检图像训练数据集和验证数据集的分布式存储和提取:解决分布式存储后,还要分布式加载数据,解决方案是将分布式存储服务挂载到显卡资源所在的每台服务器上,在分布式训练任务启动时,给kubernetes的每个pod挂载当前物理机上的分布式存储目录,实现所有机器的所有显卡资源都能读取到分布式存储服务的相同数据。
47.基于不同训练提高速度要求的不同,使用者自行设定使用显卡的型号以及数量,将任务提交到k8s的master,自动获取集群中可用资源,进行分布式资源调度实时工程师可通过web页面获取到当前分布式集群中可使用的显卡资源数量,对于不同的工业质量项目,实施工程师可根据项目的紧急程度、训练数据集中图片数量的多少、当前分布式集群中可使用的显卡资源数量,综合判断训练任务所需要的时间,从而决定当前训练任务需要的显卡型号以及数量,在决定好使用的显卡数量后,实施工程师在web页面填写显卡数量以及当前训练每张显卡加载的图片数量,springboot服务对默认参数进行覆盖,当任务提交到分布式集群中后,分布式集群资源管理器master根据显卡型号和数量,自动寻找可调度的服务器,进行资源调度,从而启动训练任务。
48.将任务master和worker的服务器ip和端口写入环境变量中,实现显卡资源间的动态发现,从而实现显卡间的数据传递;区别于普通的需要指定使用服务器ip和显卡序号的分布式,使用k8s调度的分布式训练会根据资源的空闲情况综合判断,自动将训练任务调度到有空闲显卡的服务器上,基于此原因,我们无法确定使用显卡的容器被k8s自动分配的在及集群中的ip以及显卡序号,从而判断分布式训练的master所在的位置,解决方案是将当
前容器的ip和显卡序号rank写入容器的环境变量中,在初始化当前训练的进程组后,自动从环境变量中获取ip,实现任务master和worker的互相动态发现以及训练过程中数据的动态交换,在代码中获取当前显卡的序号,判断当前显卡是否是当前任务的master,从而在master显卡上进行模型保存等任务;转换模型为分布式模型,使用distributedsampler分布式采样器加载数据,实现每张显卡各自训练子数据集,加快训练速度;将模型转换为分布式模型,从而在训练过程中实现模型梯度数据的交换,对于训练集,在加载完数据生成data_set之后,创建分布式的数据采样器(distributedsampler),根据随机种子,每张显卡获取到当前数据集的一个子集,这些数据子集间数据互不重叠互不交叉,降低每张显卡加载的图片数量,有确保所有显卡加载了所有图片,加快训练的速度,提高训练效率,在每一轮训练完之后,将当前轮的序号作为随机种子设置到分布式的数据采样器中,实现每一轮的随机种子不同,从而实现每一轮数据集的划分方式的不同,提高训练的代表性,从而提高训练模型的准确度。
49.加快数据加载:由于目前gpu计算性能远大于cpu,当显卡从内存中读取不到数据时,会出现显卡等待cpu加载数据的情况,即gpu利用率会间歇性降为0,解决方案是增大容器间共享内存的大小,增加加载数据的进程,使得cpu加快将数据从存储加载到内存的速度,提高训练的速度。
50.保存训练过程数据,使用tensorboard数据可视化的工具,跟踪模型指标,如损失和准确性等;结合分布式存储服务,在训练开始前指定一个分布式存储的路径,在训练中,将训练过程的指标信息使用tensorboard的相关工具类写入到tensorboard支持格式的文件,并将文件保存到指定的分布式存储路径,并启动当前训练对应tensorboard服务,读取分布式存储路径下的文件,将tensorboard服务启动后生成的链接通过相应的方式,提供给web页面,这样实施工程师即可实时查看训练过程中的指标变化情况,从而判断模型训练的情况,从而决定是否继续训练,或者给下一次训练提供参数调节参考。
51.发送训练通知,实时监控训练进度:结合消息中间件服务kafka,在每一轮训练过程中,发送训练的当前轮次消息到kafka中,springboot服务实时消费kafka中的消息,将当前任务的轮次信息写入到数据库中,并提供数据库轮次信息查询接口,web服务定时查询信息,实现训练进度信息的实时展示发送容器启动和停止通知,判断分布式训练的状态:在容器启动和停止时,通过运行脚本的方式发送消息到kafka中,然后综合判断master容器和所有worker容器的状态来决定整个分布式训练任务的状态,实现分布式训练的管理。
52.本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
53.以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述
特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本技术的实施例和实施例中的特征可以任意相互组合。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献