gpu设备间高效内存置换的方法、系统、设备及存储介质
技术领域
1.本发明涉及gpu设备内存置换技术领域,尤其涉及一种gpu设备间高效内存置换的方法、系统、设备及存储介质。
背景技术:2.2020年美国纽约大学深度学习团队在asplos(architectural support for programming languages and operating systems)会议上发表深度学习并行训练内存压缩系统swapadvisor(swapadvisor:push deep learning beyond the gpumemory limit via smart swapping),其中提出了把空闲数据置换到cpu(中央处理器)内存,下次需要时再从cpu内存置换到gpu(图形处理器)内存。但是cpu和gpu之间经过pcie gen3x16链路置换数据的带宽为16gb/s,仅为一条gpu间直连链路nvlink2.0带宽的60%,导致在dgx-1上,置换数据上限速度仅为系统可用聚合带宽的10.7%;其中,dgx-1是一款由英伟达发布的专门针对机器学习任务的高性能服务器,内含8块tesla v100(gpu设备),gpu设备之间有nvlink高速互联。此外,在并行训练场景下,系统中每个gpu为了实现与cpu的数据置换,导致cpu内存成为负载瓶颈,在dgx-1上,cpu和共享pcie的链接数为4:1,数据置换开销随着gpu数量的增加而线性增长;特别地,对于流水线并行训练场景,流水线阶段被设计为计算负载平衡,但这种流水线对各阶段的内存要求是不平衡的,与尾部相比,流水线的头部必须储存更多的中间数据用于反向计算,导致在1台有8张nvidia 1080ti gpu设备的服务器上进行批处理量大于128的resnet152模型训练,和参数量大于6.4亿的bert模型训练时都出现了内存不足的错误,而此时整个模型内存消耗仅占8个gpu内存总和的68.9%和88.7%,因此,有必要研发新的内存置换技术来提升数据交换性能。
技术实现要素:3.本发明的目的是提供一种gpu设备间高效内存置换的方法、系统、设备及存储介质,通过在gpu设备间实现内存置换以减轻内存限制,该方法在不引入计算开销的前提下,聚合gpu间多条直连高速链路,获得高倍速通信带宽,快速把内存占用高的gpu设备上的非活跃数据交换(卸载或取回)到多个低内存占用的gpu设备的空闲空间里。从而使得引入的内存压缩性能开销最小,又能减轻内存对模型训练的限制,进而提高深度学习并行训练的效率。
4.本发明的目的是通过以下技术方案实现的:一种gpu设备间高效内存置换的方法,包括:为参与交换工作的gpu设备分配工作组件,包括:建议者、内存管理者、协调者与传输者;当前gpu设备的协调者接收到数据交换请求时,若数据交换请求的类型为数据卸载,则通过建议者确定相关的数据交换方案,并由内存管理者根据数据交换方案在目的gpu设备中分配对应大小的内存,生成目的空间信息表;之后,协调者结合所述目的空间信息表
生成相应的传输任务,并添加到相应传输队列上,由所述传输者实现传输任务与模型训练的并行执行。
5.一种gpu设备间高效内存置换的系统,包括:工作组件分配单元,用于为参与交换工作的gpu设备分配工作组件,包括:建议者、内存管理者、协调者与传输者;内存置换单元,用于通过工作组件实现gpu设备间的内存置换,步骤包括:当前gpu设备的协调者接收到数据交换请求时,若数据交换请求的类型为数据卸载,则通过建议者确定相关的数据交换方案,并由内存管理者根据数据交换方案在目的gpu设备中分配对应大小的内存,生成目的空间信息表;之后,协调者结合所述目的空间信息表生成相应的传输任务,并添加到相应传输队列上,由所述传输者实现传输任务与模型训练的并行执行。
6.一种处理设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序;其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现前述的方法。
7.一种可读存储介质,存储有计算机程序,当计算机程序被处理器执行时实现前述的方法。
8.由上述本发明提供的技术方案可以看出,首先,在有效减轻内存限制的前提下,本发明将数据交换操作(卸载、取回)与模型训练并行,既不引入计算开销,又能隐藏传输时间;其次,高内存负载的gpu设备上的非活跃数据卸载到其他gpu设备上,需要时再取回,既充分利用系统中设备空闲内存空间,又聚合gpu间多条直连高速链路,获得了高倍速通信带宽,使得更快的降低内存,更及时的取回数据。结合以上两点,本发明能大大降低由内存压缩引入的性能开销,又能有效的降低内存对模型训练的限制,进而加快模型训练效率。
附图说明
9.为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。
10.图1为本发明实施例提供的一种gpu设备间高效内存置换的方法的架构及运行流程图;图2为本发明实施例提供的传输者的工作示意图;图3为本发明实施例提供的模型训练的流程示意图;图4为本发明实施例提供的一种gpu设备间高效内存置换的系统的示意图;图5为本发明实施例提供的一种处理设备的示意图。
具体实施方式
11.下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。
12.首先对本文中可能使用的术语进行如下说明:术语“包括”、“包含”、“含有”、“具有”或其它类似语义的描述,应被解释为非排它性的包括。例如:包括某技术特征要素(如原料、组分、成分、载体、剂型、材料、尺寸、零件、部件、机构、装置、步骤、工序、方法、反应条件、加工条件、参数、算法、信号、数据、产品或制品等),应被解释为不仅包括明确列出的某技术特征要素,还可以包括未明确列出的本领域公知的其它技术特征要素。
13.下面对本发明所提供的一种gpu设备间高效内存置换的方法、系统、设备及存储介质进行详细描述。本发明实施例中未作详细描述的内容属于本领域专业技术人员公知的现有技术。本发明实施例中未注明具体条件者,按照本领域常规条件或制造商建议的条件进行。本发明实施例中所用试剂或仪器未注明生产厂商者,均为可以通过市售购买获得的常规产品。
14.实施例一本发明实施例提供一种gpu设备间高效内存置换的方法,它是一种应用于流水线并行场景下,在gpu设备间高效内存置换以减轻内存限制的方法。主要包括如下步骤:1、为参与交换工作的gpu设备分配工作组件。
15.本发明实施例中,工作组件主要包括:建议者(advisor)、内存管理者(memory manager)、协调者(coordinator)与传输者(transmission)。如图1所示,展示了单个gpu设备中的上述四个工作组件构成的架构。
16.本发明实施例中,参与工作的gpu是包含高内存负载gpu设备其他gpu设备,高内存负载gpu设备是指内存负载超过了设定阈值的gpu设备,其他gpu设备是指非高内存负载gpu设备。每个参与交换工作的gpu设备(称为工作者)上有以上四类工作组件各一个,并且这些工作组件都是全局角色。其中除了传输者工作在另外的通信进程外,其他工作组件都在相同的计算进程中,传输者置于传输进程中。不需要卸载数据的gpu设备不需要分配工作组件。
17.2、生成数据交换方案。
18.当前gpu设备的协调者接收到数据交换请求时,若数据交换请求的类型为数据卸载(swap out类型),则通过建议者确定相关的数据交换方案。本发明实施例中,主要考虑的数据类型为:张量数据(tensor),即当前训练模型(目标模型)从输入图像中提取出的张量数据。
19.本发明实施例中,建议者确定相关的数据交换方案的方式包括:建议者跟踪系统中的以下硬件信息:各gpu设备上可用内存容量,gpu设备间是否有直连链路,以及gpu设备间链路带宽信息;建议者根据硬件使用信息,数据的大小,数据使用的间隔,权衡数据卸载前后的内存收益和传输开销,生成一个最快速的(卸载或取回)数据交换方案;数据交换方案包括,数据是否应该被卸载;数据应该被卸载时,数据应该被卸载到具体的一个或多个目的gpu设备,以及各目的gpu设备所需承担的数据量。取回时,为了不影响gpu任务性能,建议者生成的数据交换方案能够做到“预取回”,可以根据数据使用时间、数据量以及传输速度,提前取回,减少性能的损失。
20.如图1中的第1步,coordinator收到用户发出的tensor卸载请求(swap request);如图1中的第2步,coordinator携带tensor信息,包括tensor大小,使用时间间隔,询问
advisor该数据的交换方案(request swap policy);如图1中的第3步,advisor会跟踪当前系统中相关硬件信息,根据硬件信息,数据的大小,数据使用的间隔,为该数据生成一个最快速的数据交换方案;之后,如图1中的第4步,advisor回复给coordinator该tensor的数据交换方案(swap policy)。
21.3、内存管理者根据交换方案分配内存。
22.协调者收到卸载方案后,发送给内存管理者,向其申请可用内存,内存管理者根据数据交换方案在目的gpu设备中分配对应大小的内存,生成目的空间信息表。具体的:为了避免内存申请与开辟产生高额开销,内存管理者使用pytorch(一种开源的机器学习库)中cuda(统一计算设备架构)内存管理器,在同一个进程内,根据数据交换方案,在各目的gpu设备中分配对应大小的内存;内存分配完毕后,生成并维护一个目的空间信息表,空间信息表包括:各目的gpu设备上新分配的内存地址和内存大小。
23.如图1中的第5步,coordinator收到交换策略后,向memory manager请求卸载或取回该tensor所需要的内存(memory requirement);如图1中的如第6步,memory manager使用pytorch 中cuda内存管理器,在目的gpu设备上分配内存;待所需内存全部分配完毕后,memory manager记录各新分配的内存的唯一物理地址指针data_ptr以及对应大小,如第7步;如图1中的第8步,memory manager通知coordinator所需内存已经可用以及提供对应的内存地址(memory allocation completed)。
24.4、协调者生成和管理传输任务。
25.协调者结合所述目的空间信息表生成相应的传输任务。具体的:所述协调者结合数据所在的内存地址和大小(也即当前gpu设备中的内存地址和大小)、目的空间信息表以及传输类型生成相应的传输任务;所述传输类型与所述数据交换请求的类型相对应,传输类型是用于区分该数据是要被卸载还是取回,即数据交换请求的类型为数据卸载时,通过传输任务传输相应数据;按照数据类型将传输任务添加到相应类型的传输队列上,等待被实际传输。另外协调者会维护一张全局映射表,记录每个被卸载的数据的交换方案,用于后续需要把数据取回时,指导协调者从何处取回。
26.如图1所示,coordinator根据数据交换请求(swap request)的类型来确定传输任务的类型,如果是swap out类型(即数据卸载类型),则coordinator 需要保存下该数据的交换方案到swap record(交换记录)中,如果是swap in类型(数据取回类型),coordinator 会在swap record中查找该tensor如何被卸载的,将要再按照相反的链路取回(具体在后文进行介绍)。如图1中的第9步,coordinator结合收集到的交换所需要的信息,打包成一个传输任务(task),传输任务按照传输类型加入到对应的传输队列上,等待被实际传输。然后如图1中的第10步,在该传输任务在队列中等待,还未开始被执行时,更新该数据的状态为swapping(交换中,即正在卸载、正在被取回)。
27.5、传输者实现传输任务与模型训练的并行执行。
28.为了使数据的传输与模型训练并行,将传输者与计算进程隔离,并由传输者额外维护两个传输进程,分别用于发送和接收数据;其中,对应于数据卸载类型的传输任务,相应传输进程用于发送数据,对应于数据取回类型的传输任务,相应传输进程用于接收数据;每个传输进程维护一个传输队列以及一组与目的gpu设备通信的cuda stream(cuda流,即gpu设备中的一条任务执行队列),用于实现传输者能同时向多个目的gpu设备发送数据,或
者接收来自对多个目的gpu设备的数据,以此获得高倍速的传输。传输者不断地从传输队列中取出传输任务,根据目的空间映射表,把数据切成数据片段,拷贝到对应目的gpu设备新分配的空间上,或者,将接收的数据片段合并为完整数据,并放置于当前gpu设备用于装载取回数据的内存位置中;根据传输类型,数据传输完成或数据接收完成后更新相应数据的状态,例如,已被卸载或者驻留内存。
29.如图2所示,为传输者的工作示意图,左右两侧各自表示有个传输进程,左侧表示对应于数据取回类型的传输任务,相应传输进程用于接收数据;右侧对应于数据卸载类型的传输任务,相应传输进程用于发送数据。
30.图3所示,为目标模型训练示意图;其中,l是layer的简写,表示构成目标模型的一个计算层,l后面的数字表示计算层的标号,体现计算顺序,w是weight的简写表示计算层中的模型参数,w
lj
表示第j个计算层中的模型参数;w’lj
表示在update计算更新后的模型参数;右下角other gpu表示,把当前gpu上的模型参数交换到其他gpu内存上。
31.6、数据的预取和状态检查。
32.当前gpu设备的协调者接收到类型为数据取回的数据交换请求时,封装一个取回任务,并将取回任务推入对应的传输队列。例如,被卸载的数据将要在有限步训练内被用到时,协调者会封装一个取回任务,推入取回传输队列。或者,协调者检测到用户指定了数据取回的时刻,例如反向计算的开始等,协调者也会封装一个取回任务。
33.如之前所述,数据卸载时,协调者会通过交换记录记载相应数据的卸载记录,因此,进行数据取回时,协调者从请求记录中查找相应数据的卸载记录,按照与卸载记录相反的链路构建数据取回方案,并向内存管理者申请当前gpu设备中用于装载取回数据的内存后,封装取回任务,并推入到相应的传输队列。
34.本发明实施例中,数据用于计算时,协调者检查数据的状态;数据的状态包括:驻留内存、正在卸载、已被卸载与正在被取回;数据在传输队列中等待传输和对应传输任务正在被执行时,数据状态被更新为正在卸载或正在被取回,传输完毕后,状态被更新为驻留内存或已被卸载;若数据的状态为驻留内存,则正常进行计算;若数据状态为正在取回,则等待其状态更新为驻留内存后,进行计算。
35.本发明实施例提供的上述方案主要获得如下有益效果:(1)在有效减轻内存限制的前提下,本发明将数据交换操作(卸载、取回)与模型训练并行,既不引入计算开销,又能与已有计算进行重叠从而隐藏传输时间.(2)其次,高内存负载的gpu设备上的非活跃数据卸载到其他gpu设备上,需要时再取回,既充分利用系统里设备空闲内存空间,又聚合gpu间多条直连高速链路,获得了高倍速通信带宽,使得更快的降低内存,更及时的取回数据。结合以上两点,本发明能大大降低由内存压缩引入的性能开销,又能有效地减少内存对模型训练的限制,进而提高模型训练效率。
36.实施例二本发明还提供一种gpu设备间高效内存置换的系统,其主要基于前述实施例提供的方法实现,如图4所示,该系统主要包括:工作组件分配单元,用于为参与交换工作的gpu设备分配工作组件,包括:建议者、内存管理者、协调者与传输者;
内存置换单元,用于通过工作组件实现gpu设备间的内存置换,步骤包括:当前gpu设备的协调者接收到数据交换请求时,若数据交换请求的类型为数据卸载,则通过建议者确定相关的数据交换方案,并由内存管理者根据数据交换方案在目的gpu设备中分配对应大小的内存,生成目的空间信息表;之后,协调者结合所述目的空间信息表生成相应的传输任务,并添加到相应传输队列上,由所述传输者实现传输任务与模型训练的并行执行。
37.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
38.实施例三本发明还提供一种处理设备,如图5所示,其主要包括:一个或多个处理器;存储器,用于存储一个或多个程序;其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现前述实施例提供的方法。
39.进一步的,所述处理设备还包括至少一个输入设备与至少一个输出设备;在所述处理设备中,处理器、存储器、输入设备、输出设备之间通过总线连接。
40.本发明实施例中,所述存储器、输入设备与输出设备的具体类型不做限定;例如:输入设备可以为触摸屏、图像采集设备、物理按键或者鼠标等;输出设备可以为显示终端;存储器可以为随机存取存储器(random access memory,ram),也可为非不稳定的存储器(non-volatile memory),例如磁盘存储器。
41.实施例四本发明还提供一种可读存储介质,存储有计算机程序,当计算机程序被处理器执行时实现前述实施例提供的方法。
42.本发明实施例中可读存储介质作为计算机可读存储介质,可以设置于前述处理设备中,例如,作为处理设备中的存储器。此外,所述可读存储介质也可以是u盘、移动硬盘、只读存储器(read-only memory,rom)、磁碟或者光盘等各种可以存储程序代码的介质。
43.以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。