发明内容
本发明的目的之一在于提供一种用于分布式训练的通信方法,能够简化集合通信步骤。
为了解决上述技术问题,本申请提供如下技术方案:
一种用于分布式训练的通信方法,包括如下步骤:
参数计算步骤,计算集合通信中涉及的参数;
请求集合通信步骤,对数据进行逻辑分块形成若干数据段,将数据段打包为网络包,向网卡模块发送网络包和包括参数的控制信号;
数据段提取步骤,网卡模块根据控制信号将网络包中的数据段存储至数据缓冲区;
聚合计算步骤,网卡模块从数据缓冲区取出数据段,执行聚合计算操作;将聚合计算操作后的数据段按照预设的格式打包为网络包发送出网卡模块。
基础方案原理及有益效果如下:
本方案中,通过计算集合通信中涉及的参数,便于后续网卡模块根据参数准确执行聚合计算。通过将数据分为若干数据段,可以减小每次聚合计算处理的数据量,以降低对网卡运算性能的需求。网卡模块将网络包中的数据段存储至数据缓冲区,便于后续计算时的调用。在现有的集合通信中,主要由服务器内的各个GPU之间依次进行聚合计算,网卡主要用于服务器之间的聚合计算结果的传输,导致一次完整的聚合计算需要所有的GPU都参与进来,GPU越多,整个集合通信的步骤也就越长。本方案中,由网卡模块进行聚合计算,多个网卡模块之间可以进行环形集合通信,能有效简化集合通信步骤,从而降低集合通信的延时。
进一步,所述请求集合通信步骤,具体包括:
S1,对数据进行逻辑分块形成若干数据段,数据段的数量为:N=S/Sa,其中S为数据的总大小,Sa为网卡模块一次数据传输的量;初始化循环变量i=1;
S2,向网卡模块发送包括参数的控制信号,参数包括应用ID和数据ID;
S3,将第i个数据段打包为网络包并发送;
S4,每发送一个数据段,i递增1,判断i是否小于或等于N,若是则返回步骤S2,否则转跳至步骤S5;
S5,结束数据段的发送。
将数据段的大小限制在Sa,可以确保网卡模块能够接收。每发送一个数据段,都进行计数,可以确保最后所有的数据段都被发送,避免出现漏发的情况。
进一步,还包括控制信号接收步骤,网卡模块接收控制信号;根据控制信号判断网络包的类型,若是正常网络包,则跳转至正常处理步骤,否则跳转至集合通信处理步骤;
正常处理步骤,网卡模块接收网络包,并按照正常流程处理网络包;
集合通信处理步骤,网卡模块接收网络包,并按照集合通信的流程处理网络包。
网卡模块能兼顾正常网络包,以及集合通信网络包的处理。
进一步,所述数据缓冲区包括若干数据缓冲单元,数据缓冲单元包括机内状态位、机间状态位和数据位;机内状态位,用于记录机内处理的状态,机间状态位,用于记录机间环形集合通信的状态,数据位,用于记录需要通信或计算的数据段。
可以利用硬件资源即数据缓冲单元,快速有效检测数据段状态,可以提高聚合计算的效率。
进一步,所述数据段提取步骤中,还从控制信号中提取应用ID和数据ID,缓存至网卡模块的控制信息存储中;再将网络包中的数据段存储至数据缓冲单元中,并将各存储位的缓冲单元地址信息缓存至控制信息存储中。
将各存储位的缓冲单元地址信息缓存至控制信息存储中,便于后续聚合计算时准确调用数据。
进一步,所述聚合计算步骤中,还根据控制信息存储中的各存储位的缓冲单元地址信息,取出相应的数据缓冲单元的数据位中的数据段,以及机内状态位的信息和机间状态位的信息,执行聚合计算操作。
通过机内状态位的信息和机间状态位的信息,可以了解数据段当前在机内的处理情况,以及是否涉及机间的处理。
进一步,所述聚合计算步骤中,网卡模块将应用ID位、数据ID位、机内状态位、机间状态位和数据位添加到网络包中。
到达了在数据段传输中添加部分控制信息的目的,从而使得的普通的网络包可以在本方案的网卡模块中进行聚合计算处理。
进一步,还包括过程监控步骤,判断是否不存在需要处理的数据缓冲单元,若不存在则跳转至结束步骤,否则跳转至数据段提取步骤;
结束步骤,结束本次网络包处理流程,发送包含完成信息的控制信号。
进一步,还包括检测步骤,根据网卡模块传回的控制信号判断集合通信是否完成,若完成,结束集合通信。
通过参数计算步骤、请求集合通信步骤和检测步骤可以构建针对网络模块的通信原语,从而实现集合通信功能。
本发明的目的之二在于,提供一种用于分布式训练的通信系统,包括若干一一对应的服务器模块和网卡模块,服务器模块包括若干异构计算单元或处理单元;处理单元或异构计算单元用于执行上述参数计算步骤和请求集合通信步骤;网卡模块用于执行上述数据段提取步骤和聚合计算步骤。
本方案中,处理单元或异构计算单元计算集合通信中涉及的参数,便于调用网卡模块根据参数执行聚合计算。多个网卡模块之间可以进行环形集合通信,能有效简化集合通信步骤,从而降低集合通信的延时。
具体实施方式
下面通过具体实施方式进一步详细说明:
说明书附图中的标记包括:数据缓冲单元110、服务器模块210、传统网卡220、机内通信流程230、机间通信流程240、网卡模块310。
实施例一
名称解释:
Kernel:GPU执行任务的一个任务调度单元。
buffer:内存缓冲区。
reduce:集合操作中的聚合计算,通常是累加、平均、累乘、亦或等。
burst:机内向网卡模块发送数据的一次传输。
如图1所示,本实施例的一种用于分布式训练的通信方法,包括如下步骤:
集合通信启动步骤:调用者开始执行集合通信,调用者为一个通信对象,可以是处理单元或异构计算单元,本实施例中,处理单元为CPU,异构计算单元为GPU,通信对象例如为CPU的一个进程或GPU的一个Kernel(任务调度单元)。本实施例中为GPU的一个Kernel。
参数计算步骤:计算集合通信中涉及的参数;参数包括发送buffer(内存缓冲区)的起始地址、接收buffer的起始地址、buffer的总长度、下一通信对象的地址、本地通信对象数目、本地通信对象序号、全局通信对象数目、reduce类型、应用ID、数据ID、接收数量位等。
本实施例中,通信对象为异构计算单元,即GPU。本地通信对象即同一服务器模块(一台主机或一台服务器)下的异构计算单元的地址;全局通信对象数目即所有服务器模块中异构计算单元的总数目。接收数量位指需要接收到的数据段数量,例如,服务器模块下包含4个异构计算单元,即4个GPU,需要接收到4个GPU发送的数据段后,才满足条件进行下一步操作。
请求集合通信步骤:请求发送集合通信。如图2所示,具体步骤包括:
S1,对数据进行逻辑分块形成若干数据段,以便实现分批次的数据传输。
数据段的数量为N=S/Sa,其中N取整数,S为数据的总大小,Sa为网卡模块一次burst传输的量。同时初始化循环变量i=1。
S2,向网卡模块发送控制信号,控制信号包括参数。
S3,根据参数中发送buffer的起始地址将第i个数据段打包为网络包并发送。本实施例中通过数据总线发送。每个数据段大小为Sa。本实施例中,当第i个数据段的大小不足Sa时,将大小不足Sa的信息添加到控制信号中,达到通知网卡模块的目的。
S4,每发送一个数据段,i递增1,然后判断i是否小于或等于N,若是则返回步骤S2,否则转跳至步骤S5。
S5,结束数据段的发送。
检测步骤,通过循环检测网卡模块传回的控制信号判断集合通信是否完成,若完成,结束集合通信。本实施例中,网卡模块在完成集合通信后,将完成信息添加到控制信号中发送至GPU。
如图3所示,本实施例中,网卡模块处理集合通信的流程,具体包括如下步骤:
初始化步骤,初始化网卡模块;
控制信号接收步骤,网卡模块接收控制信号,根据控制信号判断数据总线中传输的网络包的类型,若是正常网络包,则跳转正常处理步骤,否则跳转集合通信处理步骤。
正常处理步骤,网卡模块从数据总线收取网络包,并按照正常流程处理网络包。
集合通信处理步骤,网卡模块从数据总线收取网络包,并按照集合通信的流程处理网络包。
数据段提取步骤,从控制信号中提取应用ID和数据ID,缓存至网卡模块的控制信息存储中;再将网络包中的数据段存储到数据缓冲单元中,并将各存储位的缓冲单元地址信息缓存至控制信息存储中;
数据缓冲区具体如图4所示,数据缓存区包括若干数据缓冲单元。
数据缓冲单元如图5所示,包括机内状态位、机间状态位和数据位;
本实施例中,机内状态位,大小为2bit,用于记录机内处理的状态,例如是否做过reduce操作,是否涉及到机外等。机内,即同一服务器模块内。
机间状态位,大小为16bit,用于记录机间环形集合通信的状态步骤。
数据位,用于记录需要通信或计算的数据段。
数据段大小判断步骤,判断数据段是否满足MTU(最大传输单元)条件,如果满足条件,跳转至聚合计算步骤,否则跳转至数据段提取步骤。本实施例中MTU为1024Byte。
聚合计算步骤,根据控制信息存储中的各存储位的缓冲单元地址信息,取出相应的数据缓冲单元的数据位中的数据段,以及机内状态位和机间状态位的信息,在网卡模块的计算区做reduce操作。本实施例中,reduce操作为多个数据缓冲单元同时执行。
将reduce操作后的数据段按照预设的格式打包为网络包发送出网卡模块。
如图6所示,本实施例中,网卡模块打包的网络包包括应用ID位、数据ID位、机内状态位、机间状态位和数据位。应用ID位,大小为4bit。用于记录该数据为哪个应用的标志位,不同应用通过该位区分彼此。
数据ID位,大小为10bit。用于记录数据段的ID,避免不同数据段做计算。
过程监控步骤,判断是否不存在需要处理的数据缓冲单元,如果不存在则跳转至结束步骤,否则跳转至数据段提取步骤。
结束步骤,结束本次网络包处理流程,发送包含完成信息的控制信号,等待下次控制信号下发。
基于用于分布式训练的通信方法,本实施例还提供一种用于分布式训练的通信方法,包括若干一一对应的服务器模块和网卡模块。其中服务器模块代表一台主机或一台服务器,服务器模块包括若干异构计算单元或处理单元。
处理单元或异构计算单元用于执行上述集合通信启动步骤、参数计算步骤、请求集合通信步骤和检测步骤。本实施例中,异构计算单元用于执行上述集合通信启动步骤、参数计算步骤、请求集合通信步骤和检测步骤。
网卡模块用于执行上述初始化步骤、控制信号接收步骤、正常处理步骤、集合通信处理步骤、数据段提取步骤、数据段大小判断步骤、聚合计算步骤、过程监控步骤和结束步骤。
为了执行上述步骤,相比与传统网卡,本方案中的网卡模块内增加了处理模块,形成计算区,以进行reduce操作。
实施例二
本实施例以多机多卡环境说明,一个数据段的完整通信流程。
传统集合通信在多机多卡状态下的处理流程,如图7所示。传统集合通信中,传统网卡220采用以太网卡或高性能网卡。
机内通信流程230,指reduce计算的通信流程,具体为GPU之间先进行通信传输,然后接收方收到网络包之后再做reduce计算。
机间通信流程240,即传统网络或数据总线的数据传输,通过传统网卡220将一服务器模块210的reduce计算结果发送至另一服务器模块210对应的传统网卡220。
即各个GPU之间依次进行reduce计算,传统网卡220用于服务器模块之间的reduce计算结果的传输。
本方案集合通信的处理流程,如图8所示,A、B、C、D四个服务器模块内4个GPU均将第i个数据段打包为网络包,将网络包和控制信息发送至对应的网卡模块310。即服务器模块A内的GPU将网络包和控制信息发送至网卡模块A。
4个网卡模块310分别进行reduce操作,生成reduce操作后的数据段,按照预设的格式打包为网络包发送出网卡模块310。
其中网卡模块A将reduce操作后的数据段,按照预设的格式打包为网络包发送至网卡模块B,网卡模块B将网卡模块A的网络包中数据段与自身reduce操作后的数据段再次进行reduce操作,得到新的数据段,按照预设的格式打包为网络包发送至网卡模块C。网卡模块C和网卡模块D的操作同理,如此循环,直至所有GPU的数据段reduce操作完成,本实施例中在网卡模块D处所有GPU的数据段reduce操作完成。
网卡模块D将reduce操作完成后的数据段打包为网络包发送至网卡模块A,如此循环,直至所有网卡模块310接收到包含reduce操作完成后数据段的网络包,本实施例中,在网卡模块C处,循环结束。所有网卡模块310再将包含reduce操作完成后数据段的网络包发送至对应服务器模块内所有的GPU。
例如,采用数据并行的分布式训练中,通过上述操作,可以将不同GPU得到不同训练数据后,训练得到的权重值等数据进行汇总,再更新至每一个GPU,以保证每一次迭代后,每个GPU上的神经网络模型完全一致。
需说明的是,图8仅为多机多卡环境下的一个典型示例,本发明涉及的方法不仅限于该示例。
以上的仅是本发明的实施例,该发明不限于此实施案例涉及的领域,方案中公知的具体结构及特性等常识在此未作过多描述,所属领域普通技术人员知晓申请日或者优先权日之前发明所属技术领域所有的普通技术知识,能够获知该领域中所有的现有技术,并且具有应用该日期之前常规实验手段的能力,所属领域普通技术人员可以在本申请给出的启示下,结合自身能力完善并实施本方案,一些典型的公知结构或者公知方法不应当成为所属领域普通技术人员实施本申请的障碍。应当指出,对于本领域的技术人员来说,在不脱离本发明结构的前提下,还可以作出若干变形和改进,这些也应该视为本发明的保护范围,这些都不会影响本发明实施的效果和专利的实用性。本申请要求的保护范围应当以其权利要求的内容为准,说明书中的具体实施方式等记载可以用于解释权利要求的内容。