CN114880147A - 一种显存共享方法、装置、设备及存储介质 - Google Patents
一种显存共享方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114880147A CN114880147A CN202210611090.2A CN202210611090A CN114880147A CN 114880147 A CN114880147 A CN 114880147A CN 202210611090 A CN202210611090 A CN 202210611090A CN 114880147 A CN114880147 A CN 114880147A
- Authority
- CN
- China
- Prior art keywords
- video memory
- memory
- task
- shared
- training
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000015654 memory Effects 0.000 title claims abstract description 406
- 238000000034 method Methods 0.000 title claims abstract description 81
- 238000012549 training Methods 0.000 claims abstract description 254
- 238000004891 communication Methods 0.000 claims abstract description 35
- 238000013135 deep learning Methods 0.000 claims abstract description 35
- 230000008569 process Effects 0.000 claims abstract description 34
- 238000004590 computer program Methods 0.000 claims description 16
- 238000005315 distribution function Methods 0.000 claims description 2
- 238000007726 management method Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
Abstract
本申请公开了一种显存共享方法、装置、设备及存储介质,涉及计算机控制技术领域,应用于显存管理器,该方法包括:获取深度学习框架中多个训练任务的无记忆显存的信息并基于无记忆显存的信息确定出共享显存;所述无记忆显存为执行训练任务时不需要在迭代间进行传递的显存;通过第一进程通信接口将共享显存的句柄与大小传递给当前训练任务,以便当前训练任务通过第二进程通信接口将共享显存挂载到深度学习框架;基于预设任务调度策略,控制当前训练任务执行目标次数的迭代操作;当前训练任务执行完目标次数的迭代操作后,将当前训练任务切换为其他训练任务,并根据共享显存执行其他训练任务。通过本申请的技术方案,可以实现多任务间显存的共享。
Description
技术领域
本发明涉及计算机控制技术领域,特别涉及一种显存共享方法、装置、设备及存储介质。
背景技术
在人工智能大数据时代,随着数据量的不断增大以及深度学习算法的发展,对计算力的需求也越来越高,随之出现多种类别的高性能设备,如通用GPU(GraphicsProcessing Unit,图形处理器)。在深度学习训练任务中,不同的训练模型对GPU显存资源的需求是不同的,但其所需显存的分配和管理各个框架却有一定的共性。就目前主流的深度学习训练框架而言,如TensorFlow(一个端到端开源机器学习平台)、PyTorch(一个开源的Python机器学习库),为了加快单个训练任务的速度,它们将首个iter(迭代,深度学习训练中一个批样本训练流程)分配的显存利用学习框架中的显存管理器进行管理,如TensorFlow框架中的BFC Allocator(TensorFlow中显存管理器),这样后续iter的执行不需要再调用显存分配函数,而是直接从学习框架中的显存管理器中获取显存,提升了训练速率。然而在获取显存时使用的nvidia-smi命令获取的任务显存是学习框架中的显存管理器和cuda context(一个容器)的显存总和,并非任务真正使用的显存大小。默认多任务共享GPU时,学习框架中的显存管理器会缓存所有训练任务的全部显存,因而多个训练任务在共享显存时的个数受到限制,不利于多用户的使用,并且任务间GPU资源的竞争以及GPU上下文的切换还产生性能损失。
综上,如何实现显存在多任务间的共享,避免GPU缓存所有任务的全部显存,在显存一定的情况下增加共享GPU任务的个数,可以同时让更多用户使用,以及如何避免多任务间GPU资源的竞争以及GPU上下文的频繁切换产生的性能损失,提高GPU集群计算资源的利用率是目前有待解决的问题。
发明内容
有鉴于此,本发明的目的在于提供一种显存共享方法、装置、设备及存储介质,能够实现显存在多任务间的共享,避免GPU缓存所有任务的全部显存,在显存一定的情况下增加共享GPU任务的个数,可以同时让更多用户使用,以及如何避免多任务间GPU资源的竞争以及GPU上下文的频繁切换产生的性能损失,提高GPU集群计算资源的利用率。其具体方案如下:
第一方面,本申请公开了一种显存共享方法,应用于显存管理器,包括:
获取深度学习框架中多个训练任务的无记忆显存的信息,并基于所述无记忆显存的信息确定出目标无记忆显存,以得到共享显存;其中,所述无记忆显存为执行所述训练任务时不需要在迭代间进行传递的显存;
生成所述共享显存的句柄,并通过第一进程通信接口将所述共享显存的句柄与所述共享显存的大小传递给所述多个训练任务中的当前训练任务,以便所述当前训练任务通过第二进程通信接口将所述共享显存挂载到所述深度学习框架;
基于预设任务调度策略,控制所述当前训练任务执行目标次数的迭代操作;其中,所述目标次数为根据预先为所述当前训练任务分配的时间片和所述当前训练任务执行完单次迭代所需的时间确定出的迭代次数;
当所述当前训练任务执行完所述目标次数的迭代操作,则将所述当前训练任务切换为所述多个训练任务中的其他训练任务,并根据所述共享显存执行所述其他训练任务。
可选的,所述基于所述无记忆显存的信息确定出目标无记忆显存,以得到共享显存,包括:
基于所述无记忆显存的信息确定出所述无记忆显存中最大的目标无记忆显存,以得到共享显存。
可选的,所述将所述当前训练任务切换为所述多个训练任务中的其他训练任务,并根据所述共享显存执行所述其他训练任务之后,还包括:
当有新任务创建时,根据所述新任务的无记忆显存调整所述共享显存。
可选的,所述根据所述新任务的无记忆显存调整所述共享显存,包括:
当所述新任务的无记忆显存大于所述共享显存时,利用显存分配函数为所述新任务分配显存;
判断所述显存是否分配成功,如果所述显存分配成功,则调整所述共享显存为所述新任务的无记忆显存大小,如果所述显存分配不成功,则剔除所述新任务,并回溯到所述新任务创建之前的状态,以保持所述共享缓存大小不变。
可选的,所述的显存共享方法,还包括:
在执行所述新任务的首个迭代之前,释放所述共享显存,并在所述首个迭代执行结束后释放所述首个迭代所占用的无记忆显存。
可选的,所述在执行所述新任务的首个迭代之前,释放所述共享显存,并在所述首个迭代执行结束后释放所述首个迭代所占用的无记忆显存,包括:
在执行所述新任务的首个迭代之前,调用统一计算设备架构的应用程序编程接口释放所述共享显存,并在所述首个迭代执行结束后调用自定义接口释放所述首个迭代所占用的无记忆显存。
可选的,所述当所述当前训练任务执行完所述目标次数的迭代操作,则将所述当前训练任务切换为所述多个训练任务中的其他训练任务,包括:
获取执行完所述目标次数的迭代操作后的所述当前训练任务的运行状态信息;
将所述运行状态信息上报给预设节点任务调度器,以便所述节点任务调度器删除所述当前训练任务的迭代信息,并通知所述显存管理器删除所述当前训练任务的无记忆显存。
第二方面,本申请公开了一种显存共享装置,应用于显存管理器,包括:
共享显存确定模块,用于获取深度学习框架中多个训练任务的无记忆显存的信息,并基于所述无记忆显存的信息确定出目标无记忆显存,以得到共享显存;其中,所述无记忆显存为执行所述训练任务时不需要在迭代间进行传递的显存;
训练任务执行模块,用于生成所述共享显存的句柄,并通过第一进程通信接口将所述共享显存的句柄与所述共享显存的大小传递给所述多个训练任务中的当前训练任务,以便所述当前训练任务通过第二进程通信接口将所述共享显存挂载到所述深度学习框架;
训练任务轮询模块,用于基于预设任务调度策略,控制所述当前训练任务执行目标次数的迭代操作;其中,所述目标次数为根据预先为所述当前训练任务分配的时间片和所述当前训练任务执行完单次迭代所需的时间确定出的迭代次数;
训练任务切换模块,用于当所述当前训练任务执行完所述目标次数的迭代操作,则将所述当前训练任务切换为所述多个训练任务中的其他训练任务,并根据所述共享显存执行所述其他训练任务。
第三方面,本申请公开了一种电子设备,所述电子设备包括处理器和存储器;其中,所述存储器用于存储计算机程序,所述计算机程序由所述处理器加载并执行以实现如前所述的显存共享方法。
第四方面,本申请公开了一种计算机可读存储介质,用于存储计算机程序;其中所述计算机程序被处理器执行时实现如前所述的显存共享方法。
本申请中,应用于显存管理器,首先获取深度学习框架中多个训练任务的无记忆显存的信息,并基于所述无记忆显存的信息确定出目标无记忆显存,以得到共享显存;其中,所述无记忆显存为执行所述训练任务时不需要在迭代间进行传递的显存;然后生成所述共享显存的句柄,并通过第一进程通信接口将所述共享显存的句柄与所述共享显存的大小传递给所述多个训练任务中的当前训练任务,以便所述当前训练任务通过第二进程通信接口将所述共享显存挂载到所述深度学习框架;基于预设任务调度策略,控制所述当前训练任务执行目标次数的迭代操作;其中,所述目标次数为根据预先为所述当前训练任务分配的时间片和所述当前训练任务执行完单次迭代所需的时间确定出的迭代次数;当所述当前训练任务执行完所述目标次数的迭代操作,则将所述当前训练任务切换为所述多个训练任务中的其他训练任务,并根据所述共享显存执行所述其他训练任务。由此可见,获取在执行训练任务时不需要在迭代间进行传递的无记忆显存的信息,通过将最大的无记忆显存作为多个训练任务间的共享显存,可以在多个训练任务共享显存时,避免GPU缓存所有训练任务的全部显存,实现了共享显存也可以被其他训练任务使用的情况,在显存一定情况下增加了共享GPU任务的个数使更多用户使用。另外,由于无记忆显存的数据信息不需要在迭代间传递,因此在任务切换时可以避免数据的保存和清理,加快了任务间切换速率。同时,为了弥补多个训练任务在共享显存时运行时间的差异性,利用时间片对训练任务进行迭代,使各个训练任务的运行时间尽可能公平,并且使用时间片和预设任务调度策略可以确保某时间片内只有唯一任务在使用GPU,也避免了多任务间资源的竞争,以及上下文的频繁切换产生的性能损失,提高了集群计算资源的利用率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请公开的一种显存共享方法流程图;
图2为本申请公开的一种与TensorFlow显存管理任务个数对比图;
图3为本申请公开的一种显存共享管理方法和策略图;
图4为本申请公开的一种具体的显存共享方法流程图;
图5为本申请公开的一种新任务创建流程图;
图6为本申请公开的一种显存共享和迭代执行流程图;
图7为本申请公开的一种显存共享装置结构示意图;
图8为本申请公开的一种电子设备结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
当前,在深度学习训练任务中,默认多任务共享GPU时,学习框架中的显存管理器会缓存所有训练任务的全部显存,因而多个训练任务在共享显存时的个数受到限制,不利于多用户的使用,并且任务间GPU资源的竞争以及GPU上下文的切换还产生性能损失。
为此,本申请提供了一种显存共享方案,能够实现显存在多任务间的共享,避免GPU缓存所有任务的全部显存,在显存一定的情况下增加共享GPU任务的个数,可以同时让更多用户使用,以及如何避免多任务间GPU资源的竞争以及GPU上下文的频繁切换产生的性能损失,提高GPU集群计算资源的利用率。
本发明实施例公开了一种显存共享方法,参见图1所示,应用于显存管理器,该方法包括:
步骤S11:获取深度学习框架中多个训练任务的无记忆显存的信息,并基于所述无记忆显存的信息确定出目标无记忆显存,以得到共享显存;其中,所述无记忆显存为执行所述训练任务时不需要在迭代间进行传递的显存。
本申请实施例中,由于传统的多个训练任务在共享GPU时,GPU会缓存所有任务的全部显存,因而共享任务的个数受到限制,不利于多用户的使用。所以通过分析该训练任务显存的分配特性,在深度学习框架中添加free regions(空闲区域,一段连续地址的显存空间)的获取接口,这样显存管理器(GPU Memory Coordinator)就可以通过该预设接口获取深度学习框架中多个训练任务的无记忆显存的信息。如此一来,相比分析运行图和kernel(核函数,被放置到GPU上的执行函数)的方式,实施更简单容易。
本申请实施例中,由于通常情况下无记忆显存占整个训练任务所需显存的一半以上,如resnet 50batch_size=32时,记忆显存只有1GB,无记忆显存为4GB(由于框架的显存分配机制,通常显示为8G)。所以,通过对无记忆显存的获取来分析深度学习框架对显存的管理机制可以更清晰的实现对显存的分析管理。根据显存在迭代(iter,深度学习训练中一个批样本训练流程)间的依赖关系,可以将训练任务的显存分为两类,1.无记忆显存,iter结束后被放回到显存管理器的空闲列表中;2.记忆显存,显存始终被tensor占用,直到任务的结束。也即,无记忆显存的数据信息不需要在iter间传递,因此在iter间具有无效性,任务切换时可以避免数据的保存和清理。
进一步的,基于所述无记忆显存的信息确定出所述无记忆显存中最大的目标无记忆显存,以得到共享显存。需要指出的是,在多任务共享GPU时,显存管理器用来记录各个任务的无记忆显存的信息,从中选取共享任务中无记忆显存最大的为共享显存的大小。例如,可以将各个任务的无记忆显存的信息记为jobi_temp,则shared_memory=MAX(jobi_temp)。
步骤S12:生成所述共享显存的句柄,并通过第一进程通信接口将所述共享显存的句柄与所述共享显存的大小传递给所述多个训练任务中的当前训练任务,以便所述当前训练任务通过第二进程通信接口将所述共享显存挂载到所述深度学习框架。
本申请实施例中,在确定出所述无记忆显存中最大的目标无记忆显存,以得到共享显存之后,生成所述共享显存的句柄,然后通过第一进程通信接口将所述共享显存的句柄与所述共享显存的大小传递给所述多个训练任务中的当前训练任务,如此一来,当前训练任务通过第二进程通信接口将所述共享显存挂载到所述深度学习框架,进而可以根据共享显存执行迭代,完成训练任务的调度。
在一种具体的实施方式中,当任务运行时,显存管理器通过linux IPC(Inter-Process Communication,进程间通信)将共享显存的句柄和大小传递给训练任务,这样训练任务就可以在接收后利用cuda IPC(Compute Unified Device Architecture,统一计算设备架构)等相应接口将共享显存映射和挂载到深度学习框架中。可以理解的是,由于在执行训练任务时,首个迭代结束后会释放执行首个迭代所占用的无记忆显存,因此再次执行迭代时需要扩充显存,理论上扩充显存的大小为释放执行首个迭代所占用的无记忆显存的大小,所以通过linux IPC和cuda IPC等接口实现了显存在任务间的传递、映射和使用,实现了多任务间共享显存使用的功能。
步骤S13:基于预设任务调度策略,控制所述当前训练任务执行目标次数的迭代操作;其中,所述目标次数为根据预先为所述当前训练任务分配的时间片和所述当前训练任务执行完单次迭代所需的时间确定出的迭代次数。
本申请实施例中,显存管理器基于预设任务调度策略控制任务的调度和显存共享的逻辑,例如,可以控制训练任务进行排队,采取“先来先服务”的策略。需要指出的是,默认GPU底层执行方式是基于时间片的轮转,其要求任务的所有显存数据都位于GPU上。为了弥补任务间迭代运行时间的差异,尽可能与默认GPU执行时间片轮询相一致,利用时间片和迭代相结合的轮询方式实现多任务间显存的共用,在保证各个任务训练的正确性和速度的前提下,增加了单GPU上可训练的任务个数。例如,假设一个训练任务所需的时间片时间为△T,任务的迭代运行时间为t,则调度到该任务时,运行的迭代数为△T/t,四舍五入最少为1个迭代。当一个训练任务的时间小于另一个训练任务的运行时间时,可以通过增加训练时间少的训练任务的迭代次数以尽可能的实现共享任务运行时间的公平性。
示例性的,如图2所示为在GPUv100 resnet50 batch_size=32的情况下,利用本申请实施例与TensorFlow显存管理之间的对比,(a)为本申请实施例可以执行的任务数量图,(b)为TensorFlow显存管理可以执行的任务数量图。可见,与TensorFlow显存管理相比,本申请实施例可以执行的训练任务数量更多,不仅可以实现任务间的快速切换,还可以增加共享GPU任务的个数使更多用户使用。
步骤S14:当所述当前训练任务执行完所述目标次数的迭代操作,则将所述当前训练任务切换为所述多个训练任务中的其他训练任务,并根据所述共享显存执行所述其他训练任务。
本申请实施例中,任务间的切换只发生在迭代结束时,这样在切换任务的时候就不需要保存该任务无记忆显存的数据。当所述当前训练任务执行完所述目标次数的迭代操作后,也即当训练任务运行结束后,训练任务会将自身的运行状态信息上报给预设节点任务调度器(local scheduler),预设节点任务调度器中记录了任务迭代的运行的信息,这样当预设节点任务调度器接收到当前训练任务的运行状态信息后,会删除当前训练任务的迭代信息,同时通知显存管理器删除当前训练任务的无记忆显存信息,保证了后续不再调度该任务。
示例性的,如图3所示为一种基于轮询的多任务GPU共享管理方法和策略,可以包括local scheduler(预设节点任务调度器)调度模块、GPU Memory Coordinator(显存管理器)模块、通信模块、训练框架控制模块。在具体实施时,启动预设节点任务调度器(localscheduler)和显存管理器(GPU Memory Coordinator),将记录节点上各个GPU的显存信息以及共享GPU任务的信息,如进程PID、无记忆显存信息、任务运行状态等,进一步的则可以根据调度策略控制任务调度和显存共享逻辑。由于local scheduler调度模块中记录了任务迭代的运行的信息,所以local scheduler调度模块可以收集各个任务迭代运行时间和任务的运行状态,上报迭代开始和结束的消息,完成任务的调度。GPU Memory coordinator模块,管理各个任务的无记忆显存信息,并对共享显存进行调整。另外,在深度学习框架中还可以添加同步和调度管理模块,同步执行逻辑和任务信息上报逻辑。
本申请中,应用于显存管理器,首先获取深度学习框架中多个训练任务的无记忆显存的信息,并基于所述无记忆显存的信息确定出目标无记忆显存,以得到共享显存;其中,所述无记忆显存为执行所述训练任务时不需要在迭代间进行传递的显存;然后生成所述共享显存的句柄,并通过第一进程通信接口将所述共享显存的句柄与所述共享显存的大小传递给所述多个训练任务中的当前训练任务,以便所述当前训练任务通过第二进程通信接口将所述共享显存挂载到所述深度学习框架;基于预设任务调度策略,控制所述当前训练任务执行目标次数的迭代操作;其中,所述目标次数为根据预先为所述当前训练任务分配的时间片和所述当前训练任务执行完单次迭代所需的时间确定出的迭代次数;当所述当前训练任务执行完所述目标次数的迭代操作,则将所述当前训练任务切换为所述多个训练任务中的其他训练任务,并根据所述共享显存执行所述其他训练任务。由此可见,获取在执行训练任务时不需要在迭代间进行传递的无记忆显存的信息,通过将最大的无记忆显存作为多个训练任务间的共享显存,可以在多个训练任务共享显存时,避免GPU缓存所有训练任务的全部显存,实现了共享显存也可以被其他训练任务使用的情况,在显存一定情况下增加了共享GPU任务的个数使更多用户使用。另外,由于无记忆显存的数据信息不需要在迭代间传递,因此在任务切换时可以避免数据的保存和清理,加快了任务间切换速率。同时,为了弥补多个训练任务在共享显存时运行时间的差异性,利用时间片对训练任务进行迭代,使各个训练任务的运行时间尽可能公平,并且使用时间片和预设任务调度策略可以确保某时间片内只有唯一任务在使用GPU,也避免了多任务间资源的竞争,以及上下文的频繁切换产生的性能损失,提高了集群计算资源的利用率。
本申请实施例公开了一种具体的显存共享方法,参见图4所示,该方法包括:
步骤S21:当有新任务创建时,根据所述新任务的无记忆显存调整所述共享显存。
本申请实施例中,当任务运行时显存管理器会通过第一进程通信接口将共享显存的句柄和大小传递给任务,接收后利用第二进程通信等相应的接口将共享显存映射和挂载到深度学习框架中。可以理解的是,如果后续共享显存没有发生变化,则只需要将共享显存映射和挂载一次即可,只有后续有新任务加入时才会重新映射。
本申请实施例中,当创建新任务时,如果新任务的无记忆显存大于当前的无记忆显存,则需要调整当前无记忆显存的大小为新任务的无记忆显存的大小。具体的,当所述新任务的无记忆显存大于所述共享显存时,利用显存分配函数为所述新任务分配显存;判断所述显存是否分配成功,如果所述显存分配成功,则调整所述共享显存为所述新任务的无记忆显存大小,如果所述显存分配不成功,则剔除所述新任务,并回溯到所述新任务创建之前的状态,以保持所述共享缓存大小不变。如此一来,通过回溯的方式判断训练任务是否可以加入,实现了新任务的创建,即判断引入的新任务是否引起先前任务的失败,如果创建成功,则需进一步调整共享显存的信息。该方法和策略是一种纯软架构,便于实现和应用。
如图5所示为新任务创建的流程图,需要指出的是,在执行所述新任务的首个迭代之前释放所述共享显存,其目的是为了确保新任务执行首个迭代时有足够的显存,并在所述首个迭代执行结束后释放所述首个迭代所占用的无记忆显存。在一种具体实施方式中,调用统一计算设备架构的应用程序编程接口(cuda API)释放所述共享显存,另外,共享显存的释放和申请都可以由显存管理器通过直接调用cuda API显示分配。在所述首个迭代执行结束后linux IPC接口将首个迭代所占用的无记忆显存的信息上报给显存管理器,同时调用自定义接口释放所述首个迭代所占用的无记忆显存。显存管理器在收到新任务的无记忆显存信息后,调整共享显存的大小,调用cuMemAlloc显存分配函数创建新的共享显存,分配成功则将该任务加入,如果分配失败,表明新任务将影响先前的运行任务,则kill该任务,并回溯到上一个状态。
如图6所示,为显存共享和迭代执行的流程图,当任务再次被调度并执行迭代时,由于首个迭代结束后释放了无记忆显存,因此再次运行迭代时,需要扩充显存,此时不直接调用显存分配函数来扩充,而是调用自定义的扩展函数,将linux IPC传递的共享显存的句柄和大小,通过cuda IPC等接口映射到该任务,同时将映射的共享显存挂载到框架的显存管理器中,从而完成后续迭代的执行。
步骤S22:生成所述共享显存的句柄,并通过第一进程通信接口将所述共享显存的句柄与所述共享显存的大小传递给所述多个训练任务中的当前训练任务,以便所述当前训练任务通过第二进程通信接口将所述共享显存挂载到所述深度学习框架。
步骤S23:基于预设任务调度策略,控制所述当前训练任务执行目标次数的迭代操作;其中,所述目标次数为根据预先为所述当前训练任务分配的时间片和所述当前训练任务执行完单次迭代所需的时间确定出的迭代次数。
步骤S24:当所述当前训练任务执行完所述目标次数的迭代操作,则将所述当前训练任务切换为所述多个训练任务中的其他训练任务,并根据所述共享显存执行所述其他训练任务。
其中,关于上述步骤S22、步骤S23和步骤S24更加具体的处理过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
本申请中,应用于显存管理器,当有新任务创建时,根据所述新任务的无记忆显存调整所述共享显存;然后生成所述共享显存的句柄,并通过第一进程通信接口将所述共享显存的句柄与所述共享显存的大小传递给所述多个训练任务中的当前训练任务,以便所述当前训练任务通过第二进程通信接口将所述共享显存挂载到所述深度学习框架;基于预设任务调度策略,控制所述当前训练任务执行目标次数的迭代操作;其中,所述目标次数为根据预先为所述当前训练任务分配的时间片和所述当前训练任务执行完单次迭代所需的时间确定出的迭代次数;当所述当前训练任务执行完所述目标次数的迭代操作,则将所述当前训练任务切换为所述多个训练任务中的其他训练任务,并根据所述共享显存执行所述其他训练任务。由此可见,获取在执行训练任务时不需要在迭代间进行传递的无记忆显存的信息,通过将最大的无记忆显存作为多个训练任务间的共享显存,可以在多个训练任务共享显存时,避免GPU缓存所有训练任务的全部显存,实现了共享显存也可以被其他训练任务使用,在显存一定情况下增加了共享GPU任务的个数使更多用户使用。另外,由于无记忆显存的数据信息不需要在迭代间传递,因此在任务切换时可以避免数据的保存和清理,加快了任务间切换速率。同时,为了弥补多个训练任务在共享显存时运行时间的差异性,利用时间片对训练任务进行迭代,使各个训练任务的运行时间尽可能公平,并且使用时间片和预设任务调度策略可以确保某时间片内只有唯一任务在使用GPU,也避免了多任务间资源的竞争,以及上下文的频繁切换产生的性能损失,提高了集群计算资源的利用率。
相应的,本申请实施例还公开了一种显存共享装置,参见图7所示,应用于显存管理器,该装置包括:
共享显存确定模块11,用于获取深度学习框架中多个训练任务的无记忆显存的信息,并基于所述无记忆显存的信息确定出目标无记忆显存,以得到共享显存;其中,所述无记忆显存为执行所述训练任务时不需要在迭代间进行传递的显存;
训练任务执行模块12,用于生成所述共享显存的句柄,并通过第一进程通信接口将所述共享显存的句柄与所述共享显存的大小传递给所述多个训练任务中的当前训练任务,以便所述当前训练任务通过第二进程通信接口将所述共享显存挂载到所述深度学习框架;
训练任务轮询模块13,用于基于预设任务调度策略,控制所述当前训练任务执行目标次数的迭代操作;其中,所述目标次数为根据预先为所述当前训练任务分配的时间片和所述当前训练任务执行完单次迭代所需的时间确定出的迭代次数;
训练任务切换模块14,用于当所述当前训练任务执行完所述目标次数的迭代操作,则将所述当前训练任务切换为所述多个训练任务中的其他训练任务,并根据所述共享显存执行所述其他训练任务。
其中,关于上述各个模块更加具体的工作过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
由此可见,通过本实施例的上述方案,应用于显存管理器,首先获取深度学习框架中多个训练任务的无记忆显存的信息,并基于所述无记忆显存的信息确定出目标无记忆显存,以得到共享显存;其中,所述无记忆显存为执行所述训练任务时不需要在迭代间进行传递的显存;然后生成所述共享显存的句柄,并通过第一进程通信接口将所述共享显存的句柄与所述共享显存的大小传递给所述多个训练任务中的当前训练任务,以便所述当前训练任务通过第二进程通信接口将所述共享显存挂载到所述深度学习框架;基于预设任务调度策略,控制所述当前训练任务执行目标次数的迭代操作;其中,所述目标次数为根据预先为所述当前训练任务分配的时间片和所述当前训练任务执行完单次迭代所需的时间确定出的迭代次数;当所述当前训练任务执行完所述目标次数的迭代操作,则将所述当前训练任务切换为所述多个训练任务中的其他训练任务,并根据所述共享显存执行所述其他训练任务。由此可见,获取在执行训练任务时不需要在迭代间进行传递的无记忆显存的信息,通过将最大的无记忆显存作为多个训练任务间的共享显存,可以在多个训练任务共享显存时,避免GPU缓存所有训练任务的全部显存,实现了共享显存也可以被其他训练任务使用,在显存一定情况下增加了共享GPU任务的个数使更多用户使用。另外,由于无记忆显存的数据信息不需要在迭代间传递,因此在任务切换时可以避免数据的保存和清理,加快了任务间切换速率。同时,为了弥补多个训练任务在共享显存时运行时间的差异性,利用时间片对训练任务进行迭代,使各个训练任务的运行时间尽可能公平,并且使用时间片和预设任务调度策略可以确保某时间片内只有唯一任务在使用GPU,也避免了多任务间资源的竞争,以及上下文的频繁切换产生的性能损失,提高了集群计算资源的利用率。
进一步的,本申请实施例还公开了一种电子设备,图8是根据一示例性实施例示出的电子设备20结构图,图中内容不能认为是对本申请的使用范围的任何限制。
图8为本申请实施例提供的一种电子设备20的结构示意图。该电子设备20,具体可以包括:至少一个处理器21、至少一个存储器22、电源23、通信接口24、输入输出接口25和通信总线26。其中,所述存储器22用于存储计算机程序,所述计算机程序由所述处理器21加载并执行,以实现前述任一实施例公开的显存共享方法中的相关步骤。另外,本实施例中的电子设备20具体可以为显存管理器。
本实施例中,电源23用于为电子设备20上的各硬件设备提供工作电压;通信接口24能够为电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本申请技术方案的任意通信协议,在此不对其进行具体限定;输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。
另外,存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,其上所存储的资源可以包括操作系统221、计算机程序222及数据223等,数据223可以包括各种各样的数据。存储方式可以是短暂存储或者永久存储。
其中,操作系统221用于管理与控制电子设备20上的各硬件设备以及计算机程序222,其可以是Windows Server、Netware、Unix、Linux等。计算机程序222除了包括能够用于完成前述任一实施例公开的由电子设备20执行的显存共享方法的计算机程序之外,还可以进一步包括能够用于完成其他特定工作的计算机程序。
进一步的,本申请实施例还公开了一种计算机可读存储介质,这里所说的计算机可读存储介质包括随机存取存储器(Random Access Memory,RAM)、内存、只读存储器(Read-Only Memory,ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、磁碟或者光盘或技术领域内所公知的任意其他形式的存储介质。其中,所述计算机程序被处理器执行时实现前述显存共享方法。关于该方法的具体步骤可以参考前述实施例中公开的相应内容,在此不再进行赘述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
结合本文中所公开的实施例描述的显存共享方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本发明所提供的一种显存共享方法、装置、设备及存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (10)
1.一种显存共享方法,其特征在于,应用于显存管理器,包括:
获取深度学习框架中多个训练任务的无记忆显存的信息,并基于所述无记忆显存的信息确定出目标无记忆显存,以得到共享显存;其中,所述无记忆显存为执行所述训练任务时不需要在迭代间进行传递的显存;
生成所述共享显存的句柄,并通过第一进程通信接口将所述共享显存的句柄与所述共享显存的大小传递给所述多个训练任务中的当前训练任务,以便所述当前训练任务通过第二进程通信接口将所述共享显存挂载到所述深度学习框架;
基于预设任务调度策略,控制所述当前训练任务执行目标次数的迭代操作;其中,所述目标次数为根据预先为所述当前训练任务分配的时间片和所述当前训练任务执行完单次迭代所需的时间确定出的迭代次数;
当所述当前训练任务执行完所述目标次数的迭代操作,则将所述当前训练任务切换为所述多个训练任务中的其他训练任务,并根据所述共享显存执行所述其他训练任务。
2.根据权利要求1所述的显存共享方法,其特征在于,所述基于所述无记忆显存的信息确定出目标无记忆显存,以得到共享显存,包括:
基于所述无记忆显存的信息确定出所述无记忆显存中最大的目标无记忆显存,以得到共享显存。
3.根据权利要求1所述的显存共享方法,其特征在于,所述将所述当前训练任务切换为所述多个训练任务中的其他训练任务,并根据所述共享显存执行所述其他训练任务之后,还包括:
当有新任务创建时,根据所述新任务的无记忆显存调整所述共享显存。
4.根据权利要求3所述的显存共享方法,其特征在于,所述根据所述新任务的无记忆显存调整所述共享显存,包括:
当所述新任务的无记忆显存大于所述共享显存时,利用显存分配函数为所述新任务分配显存;
判断所述显存是否分配成功,如果所述显存分配成功,则调整所述共享显存为所述新任务的无记忆显存大小,如果所述显存分配不成功,则剔除所述新任务,并回溯到所述新任务创建之前的状态,以保持所述共享缓存大小不变。
5.根据权利要求3所述的显存共享方法,其特征在于,还包括:
在执行所述新任务的首个迭代之前,释放所述共享显存,并在所述首个迭代执行结束后释放所述首个迭代所占用的无记忆显存。
6.根据权利要求5所述的显存共享方法,其特征在于,所述在执行所述新任务的首个迭代之前,释放所述共享显存,并在所述首个迭代执行结束后释放所述首个迭代所占用的无记忆显存,包括:
在执行所述新任务的首个迭代之前,调用统一计算设备架构的应用程序编程接口释放所述共享显存,并在所述首个迭代执行结束后调用自定义接口释放所述首个迭代所占用的无记忆显存。
7.根据权利要求1至6任一项所述的显存共享方法,其特征在于,所述当所述当前训练任务执行完所述目标次数的迭代操作,则将所述当前训练任务切换为所述多个训练任务中的其他训练任务,包括:
获取执行完所述目标次数的迭代操作后的所述当前训练任务的运行状态信息;
将所述运行状态信息上报给预设节点任务调度器,以便所述节点任务调度器删除所述当前训练任务的迭代信息,并通知所述显存管理器删除所述当前训练任务的无记忆显存。
8.一种显存共享装置,其特征在于,应用于显存管理器,包括:
共享显存确定模块,用于获取深度学习框架中多个训练任务的无记忆显存的信息,并基于所述无记忆显存的信息确定出目标无记忆显存,以得到共享显存;其中,所述无记忆显存为执行所述训练任务时不需要在迭代间进行传递的显存;
训练任务执行模块,用于生成所述共享显存的句柄,并通过第一进程通信接口将所述共享显存的句柄与所述共享显存的大小传递给所述多个训练任务中的当前训练任务,以便所述当前训练任务通过第二进程通信接口将所述共享显存挂载到所述深度学习框架;
训练任务轮询模块,用于基于预设任务调度策略,控制所述当前训练任务执行目标次数的迭代操作;其中,所述目标次数为根据预先为所述当前训练任务分配的时间片和所述当前训练任务执行完单次迭代所需的时间确定出的迭代次数;
训练任务切换模块,用于当所述当前训练任务执行完所述目标次数的迭代操作,则将所述当前训练任务切换为所述多个训练任务中的其他训练任务,并根据所述共享显存执行所述其他训练任务。
9.一种电子设备,其特征在于,所述电子设备包括处理器和存储器;其中,所述存储器用于存储计算机程序,所述计算机程序由所述处理器加载并执行以实现如权利要求1至7任一项所述的显存共享方法。
10.一种计算机可读存储介质,其特征在于,用于存储计算机程序;其中所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的显存共享方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210611090.2A CN114880147A (zh) | 2022-05-31 | 2022-05-31 | 一种显存共享方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210611090.2A CN114880147A (zh) | 2022-05-31 | 2022-05-31 | 一种显存共享方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114880147A true CN114880147A (zh) | 2022-08-09 |
Family
ID=82679602
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210611090.2A Pending CN114880147A (zh) | 2022-05-31 | 2022-05-31 | 一种显存共享方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114880147A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117251274A (zh) * | 2023-11-14 | 2023-12-19 | 苏州元脑智能科技有限公司 | 作业调度方法、装置、电子设备及存储介质 |
-
2022
- 2022-05-31 CN CN202210611090.2A patent/CN114880147A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117251274A (zh) * | 2023-11-14 | 2023-12-19 | 苏州元脑智能科技有限公司 | 作业调度方法、装置、电子设备及存储介质 |
CN117251274B (zh) * | 2023-11-14 | 2024-02-20 | 苏州元脑智能科技有限公司 | 作业调度方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110704186B (zh) | 基于混合分布架构的计算资源分配方法、装置和存储介质 | |
US10776164B2 (en) | Dynamic composition of data pipeline in accelerator-as-a-service computing environment | |
US11231955B1 (en) | Dynamically reallocating memory in an on-demand code execution system | |
CN110383764B (zh) | 无服务器系统中使用历史数据处理事件的系统和方法 | |
US10893120B2 (en) | Data caching and data-aware placement to accelerate machine learning applications | |
CN113641457B (zh) | 容器创建方法、装置、设备、介质及程序产品 | |
CN110069341B (zh) | 边缘计算中结合功能按需配置的有依赖关系任务的调度方法 | |
JP2006515690A (ja) | 複数のプロセッサを有するデータ処理システムと、複数のプロセッサを有するデータ処理システムのためのタスクスケジューラと、タスクスケジューリングの対応する方法 | |
CN110851285B (zh) | 一种基于gpu虚拟化的资源复用方法、装置及设备 | |
US11445004B2 (en) | Method for processing shared data, apparatus, and server | |
CN111427675B (zh) | 一种数据处理方法、装置以及计算机可读存储介质 | |
US20160156715A1 (en) | Optimal allocation of dynamically instantiated services among computation resources | |
US20210326161A1 (en) | Apparatus and method for multi-cloud service platform | |
CN113037794A (zh) | 计算资源配置调度方法、装置及系统 | |
US11645098B2 (en) | Systems and methods to pre-provision sockets for serverless functions | |
WO2023183057A9 (en) | Quantum computing service with quality of service (qos) enforcement via out-of-band prioritization of quantum tasks | |
CN111522622A (zh) | 一种基于云平台的k8s快速启动方法 | |
CN114880147A (zh) | 一种显存共享方法、装置、设备及存储介质 | |
US10540217B2 (en) | Message cache sizing | |
CN112424749A (zh) | 内存占用有限情况下的按需代码执行 | |
CN116366658B (zh) | 一种云计算负载均衡方法、系统 | |
WO2021210123A1 (ja) | スケジューリング方法、スケジューラ、gpuクラスタシステムおよびプログラム | |
US11868805B2 (en) | Scheduling workloads on partitioned resources of a host system in a container-orchestration system | |
CN115525425B (zh) | 基于云原生技术的联邦学习计算引擎编排方法及其设备 | |
US11755534B2 (en) | Data caching method and node based on hyper-converged infrastructure |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |