模型训练方法、服务器和计算机可读存储介质与流程

文档序号:18464460发布日期:2019-08-17 02:19阅读:153来源:国知局
模型训练方法、服务器和计算机可读存储介质与流程

本发明涉及人工智能计算领域,特别涉及一种模型训练方法、服务器和计算机可读存储介质。



背景技术:

深度学习模型的训练需要消耗庞大的计算资源,完成一次训练的耗时可达数天乃至数月。为加快模型训练,往往需要使用大规模gpu(graphicprocessingunit,图形处理器)集群进行并行训练,同时,深度学习训练任务常采用一些并行算法将训练任务分配到多个计算节点上同时运行,其中包括数据并行和模型并行两大类并行算法,以数据并行较为常用。

在数据并行算法中,如图1所示,通常使用ps-worker(parameter

server-worker,参数服务器-计算节点)架构部署在gpu集群上,其中ps用于存储模型参数,worker持有cpu、gpu资源并负责模型训练计算任务,ps与worker间以及各worker之间常需进行大数据量交互,主要包括:每个深度学习的迭代中,每个worker与ps间都需要完成一次参数梯度传输和参数的更新。由于交互数据量很大,ps-worker间带宽和cpu处理能力常因此成为瓶颈,worker上的gpu的强大并行计算能力无从发挥,导致系统加速比低、可扩展性差,硬件资源浪费。



技术实现要素:

有鉴于此,本发明的目的在于提供一种模型训练方法、装置、服务器和存储介质。以在不增加硬件投资的前提下,消除计算节点间的带宽瓶颈和计算能力瓶颈,从而提高模型训练加速比。

本发明解决上述技术问题所采用的技术方案如下:

根据本发明的一个方面,提供的一种模型训练方法包括:

接收到训练作业后,获取作业信息;其中,所述作业信息包括模型、样本数据和迭代次数;

将所述模型复制到每个gpu,并同步所述每个gpu的模型参数的初始值;

每次迭代提取一部分样本数据,将所述提取的样本数据拆分后分发给不同的gpu进行训练,对所有gpu的训练得到的参数梯度进行全局规约操作,并在各gpu上根据规约之后的参数梯度更新所述模型参数;

完成所述迭代次数的迭代后,选择任意一个gpu的模型参数保存为模型训练结果。

根据本发明的另一个方面,提供的一种模型训练服务器包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述模型训练方法的步骤。

根据本发明的又一个方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现上述模型训练方法的步骤。

本发明实施例提供的模型训练方法、服务器和计算机可读存储介质,在不显著增加硬件投资的前提下,通过优化系统部署和算法,充分利用gpu-gpu高速数据传输带宽,减少cpu-gpu间通讯需求,消除计算节点间的带宽瓶颈和计算能力瓶颈,从而提高模型训练加速比。

附图说明

图1为本发明相关技术中ps-worker分布式系统的架构示意图;

图2为本发明实施例提供的一种无ps的分布式训练系统的架构示意图;

图3为本发明实施例提供的模型训练方法的流程图;

图4为本发明实施例提供的一种聚合优化的全局规约方法的流程图;

图5为本发明实施例提供的一种分组全局规约方法的流程图;

图6为本发明实施例提供的一种分组多级全局规约方法的流程图;

图7为本发明实施例提供的一种gpu加速的全局规约方法的流程图;

图8为本发明优选实施例提供的一种优选的模型训练方法的流程图;

图9为本发明实施例提供的一种模型训练装置的模块结构图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅以解释本发明,并不用于限定本发明。

如图2所示,本发明实施例提供的分布式模型训练系统对图1的ps-worker架构进行了优化部署。ps-worker架构部署在gpu集群上,其中ps用于存储模型参数,worker持有cpu、gpu资源并负责模型训练计算任务,ps与worker间以及各worker之间常需进行大数据量交互,主要包括:每个深度学习的迭代中,每个worker与ps间都需要完成一次参数梯度传输和参数的更新。各个节点间、节点内通讯可能经过nvlink、pcie((peripheralcomponentinterconnect-express,外部设备互连总线)、ib(infiniband,无限带宽技术)、eth(ethernet网线)等多种传输媒介,nvlink(nvlinktm,英伟达公司gpu间告诉互联网络)是英伟达公司开发的一种高带宽的互联技术,能够在cpu-gpu和gpu-gpu之间实现超高速的数据传输。这项技术的数据传输速度是传统pcie3.0速度的5到12倍。由于交互数据量很大,ps-worker间带宽和cpu处理能力常因此成为瓶颈,worker上的gpu的强大并行计算能力无从发挥,导致系统加速比低、可扩展性差,硬件资源浪费。优化部署后的无ps分布式模型训练系统,节点内gpu间采用带宽较高媒介(比如nvlink/pcie),去除了中心化ps,训练初始化时在每一个gpu上复制一个参数副本,各gpu上的模型就近引用模型参数。充分利用了gpu-gpu高速数据传输带宽,避免了ps-worker之间的进程间通信开销,减少了gpu-cpu之间的数据传输开销,从而提升了并行训练效率。

基于上述分布式训练系统架构,提出本发明方法各个实施例。

实施例一

如图3所示,本发明实施例提供一种模型训练方法,该方法包括:

s301、接收到训练作业后,获取作业信息;其中,作业信息包括模型、样本数据和迭代次数。

具体的,任务管理系统接收到用户提交的训练作业后,从中提取作业信息。作业信息可以包含深度学习的模型、样本数据、资源需求和训练迭代次数等信息。其中,模型一般形式是计算机编程语言写成的程序代码,训练系统是指管理gpu集群和通用训练平台(如矩阵数组tensorflow、caffe2等)的任务管理系统。

s302、将模型复制到每个gpu,并同步每个gpu的模型参数的初始值。

具体的,训练系统为用户作业分配软硬件资源,主要包括cpu、gpu等计算资源,将模型复制到每个gpu,并开辟单独显存空间保存一套完整的模型参数,使得每块gpu的显存上都保存完整参数集副本。其中,模型可以是保持在gpu集群服务器可以访问到的nfs(网络文件服务器)上,也可以是gpu集群服务器本地硬盘上,由训练管理系统从预设的路径复制到上述nfs或本地硬盘,再由训练任务读取、复制到gpu上。

同步每个gpu的模型参数的初始值可以通过参数同步消息将其中一个gpu的模型参数的初始值同步到其他gpu上。其中,参数同步消息包括但不限于:mpi(message-passing-interface,接口传递)消息、ipc通信进程消息或nvlink消息。如果预设了哪个gpu的模型参数作为初始化值,则将预设的gpu中的模型参数同步到其他gpu,如果没有预设,则可以将第1个gpu的模型参数复制到其他gpu。

s303、每次迭代提取一部分样本数据,将提取的样本数据拆分后分发给不同的gpu进行训练,对所有gpu训练得到的参数梯度进行全局规约操作,并在各gpu上根据规约之后的参数梯度更新模型参数。

具体的,训练过程中,每次迭代从样本数据取出一部分样本数据并平均拆分为k份(假设使用k个gpu),分别发送给不同的gpu进行训练,训练获得参数梯度gradn,gradn表示第n个gpu计算出的参数梯度数据,每份参数梯度数据又包含n个多维矩阵数组。

每次迭代结束后,对所有gpu计算的参数梯度进行全局规约操作,并将全局规约后的参数梯度分发到所有的gpu上。随后每个gpu根据全局规约后的参数梯度更新模型参数。需要说明的是,全局规约是大规模并行计算经常用到的通用算法,要求将所有进程间的数据集逐个元素进行规约操作,再将操作结果分发到所有进程。深度学习的分布式训练过程中,每个worker计算出的参数梯度或参数就需要经过全局规约操作,以保证训练过程中各个计算节点间的模型同步。全局规约操作包括但不限于:全局求和、全局取最大值、全局取最小值或全局取平均值等。

s304、完成迭代次数的迭代后,选择任意一个gpu的模型参数保存为模型训练结果。

本发明实施例中,通过去除现有技术中常用的中心化ps,训练初始化时将模型复制到每一个gpu上,并在每一个gpu上开辟单独显存空间保存一套完整的模型参数,各gpu上的模型就近引用模型参数,充分利用了gpu-gpu高速数据传输带宽,避免了ps-worker之间的进程间通信开销,减少了gpu-cpu之间的数据传输开销,从而提升了并行训练效率。

实施例二

上述发明实施例一实施后,gpu间参数梯度全局规约需要在所有gpu之间完成,典型深度学习模型具有百万、千万或上亿数量级的参数,这些参数梯度通常是由大量多维矩阵数组形式组织的,参数梯度多维矩阵数组的全局规约操作都需要逐个在所有gpu间进行,额外开销也很大。为了解决这个问题,本发明实施例二利用各类通讯协议处理长消息开销小的特点,在参数梯度全局规约操作之前和之后各增加聚合和拆分操作,使初始n个小的参数梯度多维矩阵数组合并为m个(1≤m<n)较大的一维矩阵数组,使得在全局规约阶段需要处理的举证数量和通讯消息数量大幅度减少,从而大幅降低全局规约各环节处理开销。如图4所示,本发明实施例二提供一种聚合优化的全局规约方法包括:

s401、所有gpu均按照相同的顺序,将各自的参数梯度多维矩阵数组前后连接为连续存储的至少一个一维矩阵数组,并按顺序保存参数梯度多维矩阵数组的尺寸信息。

具体的,多个计算设备间(包括节点间和节点内的gpu、cpu等任何计算机处理器)全局规约操作开始前,在各个计算设备上按照相同顺序将分散的、小的n个多维矩阵数组,聚合为物理上或逻辑上连续的相对较大的m(1≤m≤n)个连续存储的一维矩阵数组,并按顺序保存n个参数梯度矩阵数组的尺寸信息为集合s。

s402、对合并后的一维矩阵数组逐个进行全局规约操作。

具体的,假设系统分配缓存k字节,聚合前总矩阵数组数为n,聚合后个数为m,第i次聚合的矩阵数组数为di,即则聚合过程中可动态控制di大小,使聚合后每个新矩阵数组占用缓存均不大于k字节,即以此控制算法对缓存资源的消耗。

全局规约操作是针对这m个聚合后的矩阵数组进行的,全局规约操作包括但不限于mpi的全局规约操作,也可以是其他等价操作,得到全局规约后的m个一维矩阵数组。

s403、所有gpu各自根据参数梯度多维矩阵数组的尺寸信息,将全局规约后的一维矩阵数组恢复为原始尺寸的多维矩阵数组。

具体的,对m个一维矩阵数组全局规约操作完成后,需要在各计算设备上按照聚合前的大小和顺序拆分、将全局规约后m个一维矩阵数组恢复为原尺寸的n个小的多维矩阵数组。

s404、所有gpu各自根据恢复后的参数梯度多维矩阵数组更新各自的模型参数。

本发明实施例中,参数梯度矩阵数组由多个小矩阵数组合并为若干数量更少的大矩阵数组,减少了全局规约过程中消息发送请求次数,大幅度降低了传输开销,更充分的利用网络带宽,从而在实施例一的基础上进一步提高了训练加速比。

实施例三

在单节点或多节点gpu集群上作参数梯度全局规约操作时,各个节点间、节点内通讯可能经过nvlink/pcie/ib/eth等多种传输媒介,一般情况下,节点内gpu间媒介(如nvlink/pcie)带宽较高,而节点间的带宽较低,直接同步所有节点间和节点内的参数梯度会使带宽较低的媒介(如ib/eth)成为瓶颈。为了解决这个问题,为了解决这个问题,本发明实施例三将参数梯度全局规约过程拆分为多步进行,将节点内高带宽互联的gpu间划分为逻辑上的全局规约组,首先在全局规约组内gpu做一次全局规约操作,再通过在组内选出的“代表”进行组间同步,使得全局规约降低某些带宽较小连接上的网络负载,优化总体时延。如图5所示,本发明实施例提供分组全局规约方法包括:

s501、根据预设的分组规则将所有gpu划分为多个规约组。

具体的,多计算设备(包括节点间和节点内的gpu、cpu等任何计算机处理器)之间全局规约操作前,根据预设的分组规则将所有gpu在逻辑上划分为多个规约组。本步骤包括但不限于:根据各gpu的邻近关系、互联介质的带宽大小、通讯时延或通讯距离等一种或任意几种组合将所有gpu划分为多个规约组。比如根据带宽划分规约组,将高带宽的gpu划分为一组(一般是节点内gpu间)。

s502、对各gpu在规约组内进行组内的全局规约操作,并从每一个规约组内推选一个gpu作为代表gpu。

s503、对各规约组的代表gpu进行组间的全局规约操作。

其中,全局规约操作包括但不限于:全局求和、全局取最大值、全局取最小值或全局取平均值等。

s504、各代表gpu将组间的全局规约之后的参数梯度向组内其他gpu进行广播。

本发明实施例的方法既充分利用节点内gpu高带宽互联,首先进行组内的全局规约,再采取代表gpu+广播算法减少了低带宽的网络的传输压力,从而降低参数梯度全局规约阶段总时延。

实施例四

图6为本发明实施例提供的一种分组多级全局规约方法的流程图。该方法包括:

s601、根据预设的分组规则将所有gpu划分为多个规约组。

具体的。本步骤包括但不限于:根据各gpu的邻近关系、互联介质的带宽大小、通讯时延或通讯距离等将所有gpu在逻辑上划分为多个规约组。比如根据带宽划分规约组,将高带宽的gpu划分为一组(一般是节点内gpu间)。

s602、对多个规约组按按预设的分级规则进行分级。

具体的,各规约组之间可进一步根据组间临近关系、带宽大小、通讯时延、或通讯距离中的一种或任意几种组合)进行分级。在逻辑上划分高一级的全局规约组。

s603、对各gpu在多个规约组内进行组内的全局规约操作,并从每一个规约组内推选至少一个gpu作为规约组的代表gpu。

具体的,每组均选择k个代表(k≤组内成员数,一般k=1)用于本级的规约组之间的全局规约操作。

s604、对每级内的各规约组的代表gpu进行全局规约操作,并选出至少一个代表gpu作为本级代表gpu参与下一级同步。

s605、按分级级别由高到低逐级对每级的代表gpu进行全局规约操作。

s606、按级别由低向高,每级代表gpu向本级内的规约组代表gpu广播规约结果。

s607、各代表gpu将组间的全局规约之后的参数梯度向组内其他gpu进行广播。

在一些实施例中,适用于多种互联方式下的大规模gpu集群间的多级全局规约。比如:首先按照带宽由高到低逐级作全局规约操作,其次,每级进行全局规约之后均“选出”若干代表参与下一级全局规约操作,最后,反向的,带宽由低向高,逐级代表向本规约组其他gpu广播全局规约结果。

需要说明的是,先按分级级别由高到低逐级进行全局规约操作,然后反向的,按分级级别由低到高低逐级广播规约结果,是一种为了更好的减低总体时延的优选实施例。而在具体实施中,各个级别的代表gpu之间也可以不按级别逐级进行,同样也能达到减低总体时延的效果。

在本实施例中,在上述实施例三的基础上,通过分级全局规约降低某些带宽较小连接上的网络负载,能优化总体时延。

实施例五

全局规约操作在规约数据量较大时,操作时延主要包含:进程间数据传输时间和规约算子执行时间。目前节点间全局规约常使用mpi库完成,而主流mpi实现中,规约算子均使用cpu完成,这导致计算时间较长。为此本发明实施例利用gpu并行计算能力,将规约算子部署于gpu上执行。如图7所示,本发明实施例提供一种gpu加速的全局规约方法包括:

s701、使用全局收集操作,使得每个gpu都收集到其他gpu训练得到的参数梯度。

具体的,全局收集是大规模并行计算经常用到的通用算法,将从所有进程中收集数据,然后再将数据分发给所有进程。

本实施例中,数据全局收集可以采用但不限于mpi全局收集来完成,主流mpi一般能支持gpu显存访问和gdr(gpudirectrdma,gpu直接远程显存访问)技术,但未充分利用gpu并行计算能力,导致收集通讯时延不够理想。在同数据量前提下,mpi收集处理时间比mpi全局规约低一个数量级。我们可以通过cuda改造了mpi计算接口,实现了显存读写+显卡就地计算。在进程或gpu数量较少时,本发明推荐使用点对点通信如:mpi_sendrecv接口实现。

s702、每个gpu各自对收集到的所有gpu的参数梯度进行全局规约操作,并根据规约后参数梯度更新模型参数。

具体的,使用gpu并行程序进行加速计算,全局规约传输方式包括但不限于mpi。计算设备或进程总数较少时,也可以使用mpi点对点通信完成各节点间的数据收集过程。点对点通信使用mpi标准所定义的mpi_sendrecv操作,也可以使用其他等价操作,以此可能获得更高加速性能。

本发明实施例中,通过将全局规约算子从cpu转移至各计算节点gpu上,充分利用了gpu并行计算能力,大幅度减少了全局规约总时延,在一些支持gdr技术的系统上,还可减少主存和显存之间的多次memorycopy操作,实测部分集群上可以降低全局规约时延一个数量级。

实施例六

如图8所示,本发明优选实施例提供的一种模型训练方法包括:

s801、接收到训练作业后,获取作业信息。

s802、为训练作业分配软硬件资源。

s803、将模型复制到每个gpu,并同步各gpu的模型参数的初始值。

s804、每次迭代从样本数据取出一部分样本数据并平均拆分后,分别发送给不同的gpu进行训练,获得参数梯度。

s805、将各gpu上的各n个参数梯度的多维矩阵数组聚合为m个一维矩阵数组。

s806、将m个一维矩阵数组在gpu集群内各gpu间进行全局规约操作。

s807、根据尺寸信息将m个一维矩阵数组拆分复原为原始结构的n个多维矩阵数组。

s808、将n个多维矩阵数组用于各个gpu的参数更新,完成一个迭代的训练。

s809、确定是否达到预设的训练次数,如果是,执行步骤s709,否则返回步骤s804。

s810、选任意一个gpu的参数保存为模型最终训练结果,并收回训练任务所占用的软硬件资源。

本发明实施例中,在不显著增加硬件投资的前提下,通过优化的部署方式和算法,大幅提升学习模型在gpu集群上的同步训练效率和系统可扩展性。

实施例七

如图9所示,本发明实施例提供的一种模型训练装置包括:

接收模块10,用于接收到训练作业后,获取作业信息;其中,作业信息包括模型、样本数据和迭代次数。

初始化模块20,用于将模型复制到每个gpu图形处理器,并同步每个gpu的模型参数的初始值。

具体的,初始化模块20,通过参数同步消息将其中一个gpu的参数初始值同步到其他gpu上。参数同步消息包括但不限于:mpi消息传递接口消息、ipc进程间通信消息或nvlink消息。

训练模块30,用于每次迭代提取一部分样本数据,将提取的样本数据拆分后分发给不同的gpu进行训练,对所有gpu的训练得到的参数梯度进行全局规约操作,并在各gpu上根据规约之后的参数梯度更新所述模型参数。

存储模块40,用于完成迭代次数的迭代后,选择任意一个gpu的模型参数保存为模型训练结果。

在一些实施例中,训练模块30具体用于:所有gpu均按照相同的顺序,将参数梯度的多维矩阵数组前后连接为连续存储的至少一个一维矩阵数组,并按顺序保存参数梯度多维矩阵数组的尺寸信息;对合并后的所述一维矩阵数组逐个进行全局规约操作;所有gpu各自根据参数梯度多维矩阵数组的尺寸信息,将全局规约后的所述一维矩阵数组恢复为原始尺寸的多维矩阵数组;所有gpu用各自用恢复后的参数梯度多维矩阵数组更新各自的模型参数。

在一些实施例中,训练模块30具体用于:根据预设的分组规则将所有gpu划分为多个规约组;对各gpu在所述规约组内进行组内的全局规约操作,并从每一个所述规约组内分别推选一个gpu作为代表gpu;对各规约组的代表gpu之间进行组间的全局规约操作;各代表gpu将组间的全局规约之后的参数梯度向组内其他gpu进行广播。

其中,所述根据预设的分组规则将所有gpu划分为多个规约组包括:根据各gpu的邻近关系、互联介质的带宽大小、通讯时延或通讯距离中的一种或任意组合将所有gpu划分为多个规约组。

在一些实施例中,训练模块30具体用于:对所述规约组按带宽进行分级;对各gpu在所述规约组内进行组内的全局规约操作,并从每一个所述规约组内分别推选一个gpu作为代表gpu包括:按照带宽由高到低逐级进行本级的组内的全局规约操作;每级全局规约之后均选出至少一个代表参与下一级同步;各代表gpu将组间的全局规约之后的参数梯度向组内其他gpu进行广播包括:按带宽由低向高,逐级代表向本组其他gpu广播全局规约结果。

在一些实施例中,训练模块30具体用于:使用全局收集操作,使得每个gpu都收集到其他gpu的参数梯度;每个gpu各自对收集到的参数梯度进行规约操作,并用规约后的参数梯度更新所述模型参数。

其中,上述全局规约操作包括但不限于:全局求和、全局取最大值、全局取最小值或全局取平均值等。

另外,本发明实施例还提供了一种模型训练服务器包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,计算机程序被处理器执行时实现上述模型训练方法的步骤。

此外,本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时,实现如上述模型训练方法的步骤。

需要说明的是,上述模型训练装置、模型训练服务器和计算机可读存储介质,与模型训练方法实施例属于同一构思,其具体实现过程详细见方法实施例,且方法实施例中的技术特征在装置实施例中均对应适用,这里不再赘述。

本发明实施例提供的模型训练方法、装置、服务器和存储介质,在不显著增加硬件投资的前提下,通过优化系统部署和算法,充分利用gpu-gpu高速数据传输带宽,减少cpu-gpu间通讯需求,消除计算节点间的带宽瓶颈和计算能力瓶颈,从而提高模型训练加速比。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件来实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

以上参照附图说明了本发明的优选实施例,并非因此局限本发明的权利范围。本领域技术人员不脱离本发明的范围和实质内所作的任何修改、等同替换和改进,均应在本发明的权利范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1