CN112612613B - 用于在虚拟分布式异构环境下实现多gpu调度的方法和系统 - Google Patents

用于在虚拟分布式异构环境下实现多gpu调度的方法和系统 Download PDF

Info

Publication number
CN112612613B
CN112612613B CN202011574923.XA CN202011574923A CN112612613B CN 112612613 B CN112612613 B CN 112612613B CN 202011574923 A CN202011574923 A CN 202011574923A CN 112612613 B CN112612613 B CN 112612613B
Authority
CN
China
Prior art keywords
gpu
computing
node
module
data
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.)
Active
Application number
CN202011574923.XA
Other languages
English (en)
Other versions
CN112612613A (zh
Inventor
李肯立
刘园春
唐卓
郭耀莲
宋莹洁
罗文明
阳王东
曹嵘晖
肖国庆
刘楚波
周旭
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hunan University
Original Assignee
Hunan University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hunan University filed Critical Hunan University
Priority to CN202011574923.XA priority Critical patent/CN112612613B/zh
Publication of CN112612613A publication Critical patent/CN112612613A/zh
Application granted granted Critical
Publication of CN112612613B publication Critical patent/CN112612613B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5072Grid computing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明公开了一种虚拟分布式异构环境下实现多GPU调度的方法,其根据OpenStack创建的虚拟环境下的GPU集群,将GPU本地任务划分为更细粒度的GPU本地子任务,然后根据数据本地性以及从节点上所有GPU的流状态和内存资源状态将GPU本地子任务调度到指定GPU上执行,并对超过GPU硬件工作队列数量的CUDA流进一步调整主机调度任务的顺序消除“虚假依赖”,以及对机器学习/深度学习每次迭代产生的中间数据进一步处理来提高GPU内存利用率从而充分平衡各个GPU上的工作负载,降低OpenStack创建的虚拟环境下GPU应用程序的执行时间。本发明能解决现有分布式异构OpenStack处理框架创建的多GPU环境中存在的吞吐量低、无法有效利用多个GPU、以及由于缺乏有效GPU负载均衡策略导致时间开销大的技术问题。

Description

用于在虚拟分布式异构环境下实现多GPU调度的方法和系统
技术领域
本发明属于分布式、高性能计算技术领域,更具体地,涉及一种用于在虚拟分布式环境下实现多GPU调度的方法和系统。
背景技术
OpenStack是分布式应用程序,其具有丰富的数据并行性和任务并行性,也适用于GPU加速。因此,将GPU集成到OpenStack分布式处理框架中可以大大提高性能。
目前,开源版本的OpenStack应用程序虽然支持通过配置相关文件来使用GPU,但是由于OpenStack架构的原因,GPU不能被完全虚拟化,这导致GPU在云端的利用率极低。有鉴于此,吴博强在《基于OpenStack的GPU调度技术研究与实现》一文中提出了一种基于OpenStack的GPU调度方案,其在云端通过根据GPU工作状态和用户请求实现GPU负载均衡,有效地提高GPU的利用率和GPU工作的稳定性,进而实现了基于GPU加速OpenStack分布式处理框架。
然而,上述方法仍存在一些不可忽略的缺陷:第一,由于其没有考虑单节点多GPU的情况以及通过细粒度的计算资源来调度GPU,因此无法充分利用多个GPU的计算资源来降低整个处理框架的运行时间,进而限制了整个OpenStack分布式处理框架的吞吐量;第二,由于其没有考虑对GPU内存的合理利用,因此会导致GPU的内存利用率低;第三,由于其没有考虑OpenStack分布式处理框架中数据传输带宽对各个节点负载均衡的影响,因此该方法会增加负载均衡的时间开销。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种用于在虚拟分布式环境下实现多GPU调度的方法和系统,其目的在于,解决现有基于OpenStack的GPU调度方案由于没有考虑单节点多GPU的情况以及通过细粒度的计算资源来调度GPU,导致无法充分利用多个GPU的计算资源来降低整个处理框架的运行时间,进而限制了整个OpenStack分布式处理框架的吞吐量的技术问题,以及由于没有考虑对GPU内存的合理利用,导致GPU的内存利用率低的技术问题,以及由于没有考虑OpenStack分布式处理框架中数据传输带宽对各个节点负载均衡的影响,导致会增加负载均衡的时间开销的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种用于在虚拟分布式异构环境下实现多GPU调度的方法,其是应用在包括一个控制节点和多个计算节点的OpenStack虚拟环境中,所述方法包括以下步骤:
(1)计算节点接收用户创建的GPU任务;
(2)控制节点设置计数器i=1;
(3)控制节点判断i是否大于迭代次数阈值N,如果是则过程结束,否则进入步骤(4);
(4)控制节点判断用户创建GPU任务的计算节点自身是否带有GPU,如果是转入步骤(5),否则转入步骤(6);
(5)控制节点判断接收到GPU任务的计算节点是否拥有多个GPU,如果是转入步骤(7),否则直接以拥有单个GPU的计算节点的方式运行一次该GPU任务,然后转入步骤(14);
(6)接收到GPU任务的计算节点将GPU任务发送到OpenStack环境中所有拥有GPU的计算节点,然后转入步骤(8);
(7)计算节点对GPU任务对应的数据进行分块处理,并为每个数据分块创建对应的GPU子任务,对于对应的数据分块已经被存储在该计算节点拥有的GPU的内存缓冲区中的GPU子任务,直接向该GPU申请计算资源,对于对应的数据分块还未被存储在GPU的内存缓冲区中的GPU子任务,向其它空闲内存多的GPU申请存储资源,并向其它空闲计算资源多的GPU申请计算资源,然后转入步骤(9);
(8)控制节点判断接收GPU任务的计算节点自身是否拥有多个GPU,如果是则返回步骤(7),否则转入步骤(10);
(9)计算节点判断是否有其他GPU任务占用其自身所拥有的GPU,导致该GPU中的CUDA流数量大于该GPU中的硬件工作队列总数,如果是则转入步骤(11),否则转入步骤(12);
(10)控制节点判断接收GPU任务的计算节点是否有多个,如果是转入步骤(13),否则直接在单个GPU上运行一次GPU程序,然后转入步骤(14);
(11)计算节点使用广度优先算法对步骤(9)中存在被其他GPU任务占用的每个GPU的硬件工作队列进行调整,以得到每个GPU更新后的硬件工作队列;
(12)计算节点根据步骤(11)得到的每个GPU更新后的硬件工作队列对GPU任务进行处理,以生成处理后的数据,将处理后的数据中类型为临时数据的数据清除,以得到最终的数据;
(13)控制节点根据接收GPU任务的每个计算节点所拥有的GPU的内存状态列表信息对接收GPU任务的所有计算节点进行排序,并根据接收GPU任务的每个计算节点所拥有的GPU的CUDA流列表信息对接收GPU任务的所有计算节点进行排序,并基于两个排序的结果为接收GPU任务的所有计算节点分配数据传输带宽,完成一次GPU任务的运行,然后转入步骤(14);
(14)控制节点设置计数器i=i+1,并返回步骤(3)。
优选地,步骤(7)包括以下子步骤:
(7-1)计算节点对GPU任务对应的数据进行分块处理,并为每个数据分块创建对应的GPU子任务;
(7-2)计算节点设置计数器c=1;
(7-3)计算节点判断c是否大于所有GPU子任务的数量C,如果是则过程结束,否则转入步骤(7-4);
(7-4)计算节点判断第c个GPU子任务对应的数据分块是否已经被存储在GPU的内存缓冲区中,如果是转入步骤(7-5),否则转入步骤(7-6);
(7-5)计算节点直接向步骤(7-4)中存储数据分块的GPU申请计算资源(即CUDA流),设置计数器c=c+1,并返回步骤(7-3);
(7-6)计算节点向空闲内存多的GPU申请存储资源,向空闲CUDA流多的GPU申请计算资源,设置计数器c=c+1,并返回步骤(7-3)。
优选地,步骤(11)具体包括以下子步骤:
(11-1)计算节点设置计数器j=1;
(11-2)计算节点判断j是否大于其自身拥有的GPU的数量M,如果是则过程结束,否则转入步骤(11-3);
(11-3)计算节点设置计数器k=1;
(11-4)计算节点判断k是否大于其拥有的第j个GPU中的硬件工作队列总数Gj_num,如果是转入步骤(11-8),否则转入步骤(11-5);
(11-5)计算节点判断第j个GPU的第k个硬件工作队列中的CUDA流数量是否大于1,如果是则转入步骤(11-6),否则转入步骤(11-7);
(11-6)计算节点使用广度优先算法对第j个GPU的第k个硬件工作队列中的所有CUDA流进行处理,以得到更新后的第k个硬件工作队列;
(11-7)计算节点设置计数器k=k+1,并返回步骤(11-4);
(11-8)计算节点设置计数器j=j+1,并返回步骤(11-2)。
优选地,步骤(12)中,数据类型分为两种,临时数据和持久数据,其中临时数据指的是仅在计算期间需要、并且可以在迭代之间释放的数据;剩余类型的数据都是持久数据。
优选地,在筛选出临时数据和持久数据之后,计算节点还使用经典的堆栈和堆内存管理技术将动态分配与静态分配分开,即将GPU的内存空间划分为临时区域和持久区域,其中临时数据被暂存在临时区域中,最终的数据被存储在持久区域中。
优选地,步骤(13)包括以下子步骤:
(13-1)控制节点设置计数器g=1;
(13-2)控制节点判断g是否大于接收GPU任务的计算节点的数量X,如果是转入步骤(13-4),否则转入步骤(13-3);
(13-3)控制节点获取接收GPU任务的第g个计算节点所拥有的GPU的内存状态列表信息(其用于表示空闲GPU内存状态)以及CUDA流列表信息(其用于表示计算资源状态),设置计数器g=g+1,并返回步骤(13-2);
(13-4)控制节点根据获取的所有接收GPU任务的计算节点所拥有的GPU的内存状态列表信息中GPU的空闲GPU内存大小、并按照降序对所有接收GPU任务的计算节点进行排序,然后进入步骤(13-5);
(13-5)控制节点根据获取的所有接收GPU任务的计算节点所拥有的GPU的CUDA流列表信息中GPU的空闲CUDA流数量、并按照降序对所有接收GPU任务的计算节点进行排序,然后进入步骤(13-6);
(13-6)控制节点根据步骤(13-4)和步骤(13-5)的排序结果为所有接收GPU任务的计算节点分配数据传输带宽。
按照本发明的另一方面,提供了一种用于在虚拟分布式异构环境下实现多GPU调度的系统,其是应用在包括一个控制节点和多个计算节点的OpenStack虚拟环境中,所述系统包括:
第一模块,其设置于计算节点中,用于接收用户创建的GPU任务;
第二模块,其设置于控制节点中,用于设置计数器i=1;
第三模块,其设置于控制节点中,用于判断i是否大于迭代次数阈值N,如果是则过程结束,否则进入第四模块;
第四模块,其设置于控制节点中,用于判断用户创建GPU任务的计算节点自身是否带有GPU,如果是转入第五模块,否则转入第六模块;
第五模块,其设置于控制节点中,用于判断接收到GPU任务的计算节点是否拥有多个GPU,如果是转入第七模块,否则直接以拥有单个GPU的计算节点的方式运行一次该GPU任务,然后转入第十四模块;
第六模块,其设置于接收到GPU任务的计算节点中,用于将GPU任务发送到OpenStack环境中所有拥有GPU的计算节点,然后转入第八模块;
第七模块,其设置于计算节点中,用于对GPU任务对应的数据进行分块处理,并为每个数据分块创建对应的GPU子任务,对于对应的数据分块已经被存储在该计算节点拥有的GPU的内存缓冲区中的GPU子任务,直接向该GPU申请计算资源,对于对应的数据分块还未被存储在GPU的内存缓冲区中的GPU子任务,向其它空闲内存多的GPU申请存储资源,并向其它空闲计算资源多的GPU申请计算资源,然后转入第九模块;
第八模块,其设置于控制节点中,用于判断接收GPU任务的计算节点自身是否拥有多个GPU,如果是则返回第七模块,否则转入第十模块;
第九模块,其设置于计算节点中,用于判断是否有其他GPU任务占用其自身所拥有的GPU,导致该GPU中的CUDA流数量大于该GPU中的硬件工作队列总数,如果是则转入第十一模块,否则转入第十二模块;
第十模块,其设置于控制节点中,用于判断接收GPU任务的计算节点是否有多个,如果是转入第十三模块,否则直接在单个GPU上运行一次GPU程序,然后转入第十四模块;
第十一模块,其设置于计算节点中,用于使用广度优先算法对第九模块中存在被其他GPU任务占用的每个GPU的硬件工作队列进行调整,以得到每个GPU更新后的硬件工作队列;
第十二模块,其设置于计算节点中,用于根据第十一模块得到的每个GPU更新后的硬件工作队列对GPU任务进行处理,以生成处理后的数据,将处理后的数据中类型为临时数据的数据清除,以得到最终的数据,并转入第十四模块;
第十三模块,其设置于控制节点中,用于根据接收GPU任务的每个计算节点所拥有的GPU的内存状态列表信息对接收GPU任务的所有计算节点进行排序,并根据接收GPU任务的每个计算节点所拥有的GPU的CUDA流列表信息对接收GPU任务的所有计算节点进行排序,并基于两个排序的结果为接收GPU任务的所有计算节点分配数据传输带宽,完成一次GPU任务的运行,并转入第十四模块;
第十四模块,其设置于控制节点中,用于设置计数器i=i+1,并返回第三模块。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
(1)由于本发明采用了步骤(7)到步骤(11),其将GPU任务划分为一系列GPU子任务,然后通过这些GPU子任务申请CUDA流计算资源,实现GPU资源的细粒度调用。同时考虑到CUDA流数量多于GPU硬件工作队列的情况,使用广度优先算法对GPU的硬件工作队列进行调整,使工作队列中相邻的任务(比如GPU子任务中的主机和GPU之间的数据传输、内核启动等,这些操作就是这里所说的这些任务)来自不同的CUDA流,从而消除虚假依赖关系,减少了执行时间,从而提高了整个GPU集群的吞吐量;
(2)由于本发明采用了步骤(12),对于每次迭代产生的数据划分为临时数据(诸如中间层数据)和持久数据(诸如网络模型参数),清除临时数据,并将清除后的多个GPU内存信息反馈,动态调整GPU内存,因此增加了GPU利用率;
(3)由于本发明采用了步骤(13),感知这些带GPU的计算节点的负载均衡状态,对于工作负载大的计算节点增大数据传输带宽,对工作负载小的计算节点减小带宽,因此能够进一步实现负载均衡,降低了时间开销;
(4)由于本发明充分利用了计算节点上GPU计算资源,从而能够减轻计算节点上CPU的工作负载。
附图说明
图1是发明用于在虚拟分布式环境下实现多GPU调度的方法的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明的具体思路在于,使用OpenStack创建的虚拟机和多GPU环境,创建GPU本地计算任务,并通过数据分块和任务分解,将GPU本地任务划分为更细粒度的GPU本地子任务,然后根据数据本地性以及计算节点上所有GPU的流状态和内存资源状态将GPU本地子任务调度到指定GPU上执行,从而充分平衡各个GPU上的工作负载,降低GPU应用程序的执行时间。此处拥有GPU的虚拟机是通过直通的方式实现对GPU的使用;未拥有GPU的虚拟机要使用虚拟机,此处是通过在开源的技术GVirtuS的基础上,通过一种客户端与服务端的形式来实现对GPU资源的使用。
如图1所示,本发明提供了一种用于在虚拟分布式异构环境下实现多图形处理器(Graphic processing unit,简称GPU)调度的方法,其是应用在包括一个控制节点和多个计算节点的OpenStack虚拟环境中,该方法包括以下步骤:
(1)计算节点接收用户创建的GPU任务;
具体而言,用户创建的需要在GPU上运行的应用程序(诸如机器学习、矩阵乘法等)统称为GPU任务。
(2)控制节点设置计数器i=1;
(3)控制节点判断i是否大于迭代次数阈值N,如果是则过程结束,否则进入步骤(4);
在本步骤中,迭代次数阈值N的取值范围是大于或等于1,迭代次数是由用户在创建GPU任务时设定,比如用户想在GPU上跑个矩阵相乘的任务,那就是1次;如果用户想跑机器学习的任务,那他可以设置为10次或100次;N的默认值为1。
(4)控制节点判断用户创建GPU任务的计算节点自身是否带有GPU,如果是转入步骤(5),否则转入步骤(6);
(5)控制节点判断接收到GPU任务的计算节点是否拥有多个GPU(即大于或等于2个),如果是转入步骤(7),否则直接以拥有单个GPU的计算节点的方式运行一次该GPU任务,然后转入步骤(14);
(6)接收到GPU任务的计算节点将GPU任务发送到OpenStack环境中所有拥有GPU(无论是拥有一个GPU还是多个GPU)的计算节点,然后转入步骤(8);
(7)计算节点对GPU任务对应的数据进行分块处理,并为每个数据分块创建对应的GPU子任务,对于对应的数据分块已经被存储在该计算节点拥有的GPU的内存缓冲区中的GPU子任务,直接向该GPU申请计算资源,对于对应的数据分块还未被存储在GPU的内存缓冲区中的GPU子任务,向其它空闲内存多的GPU申请存储资源,并向其它空闲计算资源多的GPU申请计算资源,然后转入步骤(9);
具体而言,空闲内存多的GPU指的是较其他GPU而言,空闲内存更多的GPU,比如有两个GPU,分别为A和B在运行,它们一开始都有24G的运行内存,由于有任务在它们上面运行,所以要占用它们的内存,假设此时GPUA空闲内存还剩8G,而GPU B空闲内存还剩10G,那么此时空闲内存多的GPU指的就是GPU B。
空闲计算资源多的GPU指的是较其他GPU而言,空闲并行计算架构(ComputeUnified DeviceArchitecture,简称CUDA)流更多的GPU,比如有两个GPU,分别为A和B在运行,它们一开始都初始化了32个CUDA流,由于有任务在它们上面运行,所以要占用它们的CUDA流,假设此时GPUA空闲CUDA流还有10个,而GPU B空闲CUDA流还有8个,那么此时空闲计算资源多的GPU指的就是GPUA。
本步骤的优点在于,细化了计算资源的调度粒度,提高了GPU的利用率,更有利于负载均衡。
本步骤具体包括以下子步骤:
(7-1)计算节点对GPU任务对应的数据进行分块处理,并为每个数据分块创建对应的GPU子任务;
具体而言,每个数据分块的大小是1M到2M之间。
(7-2)计算节点设置计数器c=1;
(7-3)计算节点判断c是否大于所有GPU子任务的数量C,如果是则过程结束,否则转入步骤(7-4);
(7-4)计算节点判断第c个GPU子任务对应的数据分块是否已经被存储在GPU的内存缓冲区中,如果是转入步骤(7-5),否则转入步骤(7-6);
(7-5)计算节点直接向步骤(7-4)中存储数据分块的GPU申请计算资源(即CUDA流),设置计数器c=c+1,并返回步骤(7-3);
(7-6)计算节点向空闲内存多的GPU申请存储资源,向空闲CUDA流多的GPU申请计算资源,设置计数器c=c+1,并返回步骤(7-3);
(8)控制节点判断接收GPU任务的计算节点自身是否拥有多个GPU(即大于等于2),如果是则返回步骤(7),否则转入步骤(10);
(9)计算节点判断是否有其他GPU任务占用其自身所拥有的GPU,导致该GPU中的CUDA流数量大于该GPU中的硬件工作队列总数,如果是则转入步骤(11),否则转入步骤(12);
(10)控制节点判断接收GPU任务的计算节点是否有多个(个数大于等于2),如果是转入步骤(13),否则直接在单个GPU上运行一次GPU程序,然后转入步骤(14);
(11)计算节点使用广度优先算法对步骤(9)中存在被其他GPU任务占用的每个GPU的硬件工作队列进行调整,以得到每个GPU更新后的硬件工作队列;
本步骤的目的,是使GPU硬件工作队列中的相邻任务来自不同的流,从而消除虚假依赖关系。
步骤(11)具体包括以下子步骤:
(11-1)计算节点设置计数器j=1;
(11-2)计算节点判断j是否大于其自身拥有的GPU的数量M,如果是则过程结束,否则转入步骤(11-3);
(11-3)计算节点设置计数器k=1;
(11-4)计算节点判断k是否大于其拥有的第j个GPU中的硬件工作队列总数Gj_num,如果是转入步骤(11-8),否则转入步骤(11-5);
(11-5)计算节点判断第j个GPU的第k个硬件工作队列中的CUDA流数量是否大于1,如果是则转入步骤(11-6),否则转入步骤(11-7);
(11-6)计算节点使用广度优先算法对第j个GPU的第k个硬件工作队列中的所有CUDA流进行处理,以得到更新后的第k个硬件工作队列;
本步骤的优点在于,使得相邻的任务(相当于GPU子任务中包含的一系列操作,比如主机和GPU之间的数据传输、内核启动等,即这些操作也就是这里所说的这些任务)来自于不同的CUDA流。因此,任何相邻的任务对之间都不会再有虚假的依赖关系,从而得以实现并发内核执行。
(11-7)计算节点设置计数器k=k+1,并返回步骤(11-4);
(11-8)计算节点设置计数器j=j+1,并返回步骤(11-2);
(12)计算节点根据步骤(11)得到的每个GPU更新后的硬件工作队列对GPU任务进行处理,以生成处理后的数据,将处理后的数据中类型为临时数据的数据清除,以得到最终的数据,并转入步骤(14);
在本步骤中,数据类型分为两种,即临时数据和持久数据,其中临时数据指的是仅在计算期间需要,并且可以在迭代之间释放的数据,其可以是例如中间层的输出数据、算法本身生成的临时数据,剩余类型的数据就都是持久数据,例如机器学习模型的相关参数、深度学习模型的相关参数等。
在本发明筛选出临时数据和持久数据之后,本发明的计算节点还使用经典的堆栈和堆内存管理技术将动态分配与静态分配分开,即分别将GPU的内存空间划分为临时区域和持久区域,其中临时数据被暂存在临时区域中,最终的数据被存储在持久区域中。
(13)控制节点根据接收GPU任务的每个计算节点所拥有的GPU的内存状态列表信息对接收GPU任务的所有计算节点进行排序,并根据接收GPU任务的每个计算节点所拥有的GPU的CUDA流列表信息对接收GPU任务的所有计算节点进行排序,并基于两个排序的结果为接收GPU任务的所有计算节点分配数据传输带宽,完成一次GPU任务的运行,并转入步骤(14);
本步骤的优点在于,控制了数据传输带宽对节点负载均衡的影响,减少了因计算节点间数据传输带宽不均衡造成的时间开销。
步骤(13)包括以下子步骤:
(13-1)控制节点设置计数器g=1;
(13-2)控制节点判断g是否大于接收GPU任务的计算节点的数量X,如果是转入步骤(13-4),否则转入步骤(13-3);
(13-3)控制节点获取接收GPU任务的第g个计算节点所拥有的GPU的内存状态列表信息(其用于表示空闲GPU内存状态)以及CUDA流列表信息(其用于表示计算资源状态),设置计数器g=g+1,并返回步骤(13-2);
(13-4)控制节点根据获取的所有接收GPU任务的计算节点所拥有的GPU的内存状态列表信息中GPU的空闲GPU内存大小、并按照降序对所有接收GPU任务的计算节点进行排序,然后进入步骤(13-5);
(13-5)控制节点根据获取的所有接收GPU任务的计算节点所拥有的GPU的CUDA流列表信息中GPU的空闲CUDA流数量、并按照降序对所有接收GPU任务的计算节点进行排序,然后进入步骤(13-6);
(13-6)控制节点根据步骤(13-4)和步骤(13-5)的排序结果为所有接收GPU任务的计算节点分配数据传输带宽;
具体而言,假如总的可用于分配的数据传输带宽为100Mbps,有两个计算节点B和C,计算节点B中GPU空闲内存为4GB,空闲CUDA流数量为10;计算节点C中GPU空闲内存为6GB,空闲CUDA流数量为5;那么分给计算节点B的数据传输带宽为100*[1-(4+10)/(4+10+6+5)]=44Mbps,分给计算节点C的数据传输带宽为100*[1-(6+5)/(4+10+6+5)]=56Mbps。其他情况依此类推。
(14)控制节点设置计数器i=i+1,并返回步骤(3)。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (7)

1.一种用于在虚拟分布式异构环境下实现多GPU调度的方法,其是应用在包括一个控制节点和多个计算节点的OpenStack虚拟环境中,其特征在于,所述方法包括以下步骤:
(1)计算节点接收用户创建的GPU任务;
(2)控制节点设置计数器i=1;
(3)控制节点判断i是否大于迭代次数阈值N,如果是则过程结束,否则进入步骤(4);
(4)控制节点判断用户创建GPU任务的计算节点自身是否带有GPU,如果是转入步骤(5),否则转入步骤(6);
(5)控制节点判断接收到GPU任务的计算节点是否拥有多个GPU,如果是转入步骤(7),否则直接以拥有单个GPU的计算节点的方式运行一次该GPU任务,然后转入步骤(14);
(6)接收到GPU任务的计算节点将GPU任务发送到OpenStack环境中所有拥有GPU的计算节点,然后转入步骤(8);
(7)计算节点对GPU任务对应的数据进行分块处理,并为每个数据分块创建对应的GPU子任务,对于对应的数据分块已经被存储在该计算节点拥有的GPU的内存缓冲区中的GPU子任务,直接向该GPU申请计算资源,对于对应的数据分块还未被存储在GPU的内存缓冲区中的GPU子任务,向其它空闲内存多的GPU申请存储资源,并向其它空闲计算资源多的GPU申请计算资源,然后转入步骤(9);
(8)控制节点判断接收GPU任务的计算节点自身是否拥有多个GPU,如果是则返回步骤(7),否则转入步骤(10);
(9)计算节点判断是否有其他GPU任务占用其自身所拥有的GPU,导致该GPU中的CUDA流数量大于该GPU中的硬件工作队列总数,如果是则转入步骤(11),否则转入步骤(12);
(10)控制节点判断接收GPU任务的计算节点是否有多个,如果是转入步骤(13),否则直接在单个GPU上运行一次GPU程序,然后转入步骤(14);
(11)计算节点使用广度优先算法对步骤(9)中存在被其他GPU任务占用的每个GPU的硬件工作队列进行调整,以得到每个GPU更新后的硬件工作队列;
(12)计算节点根据步骤(11)得到的每个GPU更新后的硬件工作队列对GPU任务进行处理,以生成处理后的数据,将处理后的数据中类型为临时数据的数据清除,以得到最终的数据,然后转入步骤(14);
(13)控制节点根据接收GPU任务的每个计算节点所拥有的GPU的内存状态列表信息对接收GPU任务的所有计算节点进行排序,并根据接收GPU任务的每个计算节点所拥有的GPU的CUDA流列表信息对接收GPU任务的所有计算节点进行排序,并基于两个排序的结果为接收GPU任务的所有计算节点分配数据传输带宽,完成一次GPU任务的运行,然后转入步骤(14);
(14)控制节点设置计数器i=i+1,并返回步骤(3)。
2.根据权利要求1所述的用于在虚拟分布式异构环境下实现多GPU调度的方法,其特征在于,步骤(7)包括以下子步骤:
(7-1)计算节点对GPU任务对应的数据进行分块处理,并为每个数据分块创建对应的GPU子任务;
(7-2)计算节点设置计数器c=1;
(7-3)计算节点判断c是否大于所有GPU子任务的数量C,如果是则过程结束,否则转入步骤(7-4);
(7-4)计算节点判断第c个GPU子任务对应的数据分块是否已经被存储在GPU的内存缓冲区中,如果是转入步骤(7-5),否则转入步骤(7-6);
(7-5)计算节点直接向步骤(7-4)中存储数据分块的GPU申请计算资源(即CUDA流),设置计数器c=c+1,并返回步骤(7-3);
(7-6)计算节点向空闲内存多的GPU申请存储资源,向空闲CUDA流多的GPU申请计算资源,设置计数器c=c+1,并返回步骤(7-3)。
3.根据权利要求1或2所述的用于在虚拟分布式异构环境下实现多GPU调度的方法,其特征在于,步骤(11)具体包括以下子步骤:
(11-1)计算节点设置计数器j=1;
(11-2)计算节点判断j是否大于其自身拥有的GPU的数量M,如果是则过程结束,否则转入步骤(11-3);
(11-3)计算节点设置计数器k=1;
(11-4)计算节点判断k是否大于其拥有的第j个GPU中的硬件工作队列总数Gj_num,如果是转入步骤(11-8),否则转入步骤(11-5);
(11-5)计算节点判断第j个GPU的第k个硬件工作队列中的CUDA流数量是否大于1,如果是则转入步骤(11-6),否则转入步骤(11-7);
(11-6)计算节点使用广度优先算法对第j个GPU的第k个硬件工作队列中的所有CUDA流进行处理,以得到更新后的第k个硬件工作队列;
(11-7)计算节点设置计数器k=k+1,并返回步骤(11-4);
(11-8)计算节点设置计数器j=j+1,并返回步骤(11-2)。
4.根据权利要求1至3中任意一项所述的用于在虚拟分布式异构环境下实现多GPU调度的方法,其特征在于,步骤(12)中,数据类型分为两种,临时数据和持久数据,其中临时数据指的是仅在计算期间需要、并且可以在迭代之间释放的数据;剩余类型的数据都是持久数据。
5.根据权利要求4所述的用于在虚拟分布式异构环境下实现多GPU调度的方法,其特征在于,在筛选出临时数据和持久数据之后,计算节点还使用经典的堆栈和堆内存管理技术将动态分配与静态分配分开,即将GPU的内存空间划分为临时区域和持久区域,其中临时数据被暂存在临时区域中,最终的数据被存储在持久区域中。
6.根据权利要求1所述的用于在虚拟分布式异构环境下实现多GPU调度的方法,其特征在于,步骤(13)包括以下子步骤:
(13-1)控制节点设置计数器g=1;
(13-2)控制节点判断g是否大于接收GPU任务的计算节点的数量X,如果是转入步骤(13-4),否则转入步骤(13-3);
(13-3)控制节点获取接收GPU任务的第g个计算节点所拥有的GPU的内存状态列表信息(其用于表示空闲GPU内存状态)以及CUDA流列表信息(其用于表示计算资源状态),设置计数器g=g+1,并返回步骤(13-2);
(13-4)控制节点根据获取的所有接收GPU任务的计算节点所拥有的GPU的内存状态列表信息中GPU的空闲GPU内存大小、并按照降序对所有接收GPU任务的计算节点进行排序,然后进入步骤(13-5);
(13-5)控制节点根据获取的所有接收GPU任务的计算节点所拥有的GPU的CUDA流列表信息中GPU的空闲CUDA流数量、并按照降序对所有接收GPU任务的计算节点进行排序,然后进入步骤(13-6);
(13-6)控制节点根据步骤(13-4)和步骤(13-5)的排序结果为所有接收GPU任务的计算节点分配数据传输带宽。
7.一种用于在虚拟分布式异构环境下实现多GPU调度的系统,其是应用在包括一个控制节点和多个计算节点的OpenStack虚拟环境中,其特征在于,所述系统包括:
第一模块,其设置于计算节点中,用于接收用户创建的GPU任务;
第二模块,其设置于控制节点中,用于设置计数器i=1;
第三模块,其设置于控制节点中,用于判断i是否大于迭代次数阈值N,如果是则过程结束,否则进入第四模块;
第四模块,其设置于控制节点中,用于判断用户创建GPU任务的计算节点自身是否带有GPU,如果是转入第五模块,否则转入第六模块;
第五模块,其设置于控制节点中,用于判断接收到GPU任务的计算节点是否拥有多个GPU,如果是转入第七模块,否则直接以拥有单个GPU的计算节点的方式运行一次该GPU任务,然后转入第十四模块;
第六模块,其设置于接收到GPU任务的计算节点中,用于将GPU任务发送到OpenStack环境中所有拥有GPU的计算节点,然后转入第八模块;
第七模块,其设置于计算节点中,用于对GPU任务对应的数据进行分块处理,并为每个数据分块创建对应的GPU子任务,对于对应的数据分块已经被存储在该计算节点拥有的GPU的内存缓冲区中的GPU子任务,直接向该GPU申请计算资源,对于对应的数据分块还未被存储在GPU的内存缓冲区中的GPU子任务,向其它空闲内存多的GPU申请存储资源,并向其它空闲计算资源多的GPU申请计算资源,然后转入第九模块;
第八模块,其设置于控制节点中,用于判断接收GPU任务的计算节点自身是否拥有多个GPU,如果是则返回第七模块,否则转入第十模块;
第九模块,其设置于计算节点中,用于判断是否有其他GPU任务占用其自身所拥有的GPU,导致该GPU中的CUDA流数量大于该GPU中的硬件工作队列总数,如果是则转入第十一模块,否则转入第十二模块;
第十模块,其设置于控制节点中,用于判断接收GPU任务的计算节点是否有多个,如果是转入第十三模块,否则直接在单个GPU上运行一次GPU程序,然后转入第十四模块;
第十一模块,其设置于计算节点中,用于使用广度优先算法对第九模块中存在被其他GPU任务占用的每个GPU的硬件工作队列进行调整,以得到每个GPU更新后的硬件工作队列;
第十二模块,其设置于计算节点中,用于根据第十一模块得到的每个GPU更新后的硬件工作队列对GPU任务进行处理,以生成处理后的数据,将处理后的数据中类型为临时数据的数据清除,以得到最终的数据,并转入步骤(14);
第十三模块,其设置于控制节点中,用于根据接收GPU任务的每个计算节点所拥有的GPU的内存状态列表信息对接收GPU任务的所有计算节点进行排序,并根据接收GPU任务的每个计算节点所拥有的GPU的CUDA流列表信息对接收GPU任务的所有计算节点进行排序,并基于两个排序的结果为接收GPU任务的所有计算节点分配数据传输带宽,完成一次GPU任务的运行,并转入第十四模块;
第十四模块,其设置于控制节点中,用于设置计数器i=i+1,并返回第三模块。
CN202011574923.XA 2020-12-28 2020-12-28 用于在虚拟分布式异构环境下实现多gpu调度的方法和系统 Active CN112612613B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011574923.XA CN112612613B (zh) 2020-12-28 2020-12-28 用于在虚拟分布式异构环境下实现多gpu调度的方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011574923.XA CN112612613B (zh) 2020-12-28 2020-12-28 用于在虚拟分布式异构环境下实现多gpu调度的方法和系统

Publications (2)

Publication Number Publication Date
CN112612613A CN112612613A (zh) 2021-04-06
CN112612613B true CN112612613B (zh) 2023-06-23

Family

ID=75248082

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011574923.XA Active CN112612613B (zh) 2020-12-28 2020-12-28 用于在虚拟分布式异构环境下实现多gpu调度的方法和系统

Country Status (1)

Country Link
CN (1) CN112612613B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116777730B (zh) * 2023-08-25 2023-10-31 湖南马栏山视频先进技术研究院有限公司 一种基于资源调度的gpu效能提高方法
CN117215802B (zh) * 2023-11-07 2024-02-09 四川并济科技有限公司 一种针对虚拟化网络功能的gpu管理及调用方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016078008A1 (zh) * 2014-11-19 2016-05-26 华为技术有限公司 调度数据流任务的方法和装置
CN110955526A (zh) * 2019-12-16 2020-04-03 湖南大学 一种用于在分布式异构环境下实现多gpu调度的方法和系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10728091B2 (en) * 2018-04-04 2020-07-28 EMC IP Holding Company LLC Topology-aware provisioning of hardware accelerator resources in a distributed environment

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016078008A1 (zh) * 2014-11-19 2016-05-26 华为技术有限公司 调度数据流任务的方法和装置
CN110955526A (zh) * 2019-12-16 2020-04-03 湖南大学 一种用于在分布式异构环境下实现多gpu调度的方法和系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Apache funk: Stream and batch processing in a single engine;Carbone P,et al.;《Bulletin of the IEEE Computer Society Technical Committee on Data Engineering》;全文 *
基于CPU/GPU异构资源协同调度的改进H-Storm平台;严健康;陈更生;;计算机工程(第04期);全文 *

Also Published As

Publication number Publication date
CN112612613A (zh) 2021-04-06

Similar Documents

Publication Publication Date Title
CN107038069B (zh) Hadoop平台下动态标签匹配DLMS调度方法
US8261281B2 (en) Optimizing allocation of resources on partitions of a data processing system
GB2357863A (en) Workload management in a distributed processing environment
CN112612613B (zh) 用于在虚拟分布式异构环境下实现多gpu调度的方法和系统
WO2008025761A2 (en) Parallel application load balancing and distributed work management
US20210216375A1 (en) Workload placement for virtual gpu enabled systems
US20210390405A1 (en) Microservice-based training systems in heterogeneous graphic processor unit (gpu) cluster and operating method thereof
Bucur et al. The influence of the structure and sizes of jobs on the performance of co-allocation
Han et al. Scalable loop self-scheduling schemes for large-scale clusters and cloud systems
CN110955526B (zh) 一种用于在分布式异构环境下实现多gpu调度的方法和系统
Senger Improving scalability of Bag-of-Tasks applications running on master–slave platforms
Qu et al. Improving the energy efficiency and performance of data-intensive workflows in virtualized clouds
CN112346852A (zh) 矩阵求和运算的分布式物理处理
Rahman et al. Group based resource management and pricing model in cloud computing
Kumar et al. Multi criteria based task scheduling in cloud environment
Huang et al. Hestia: A Cost-Effective Multi-dimensional Resource Utilization for Microservices Execution in the Cloud
Lakshmi et al. Scheduling of parallel applications using map reduce on cloud: A literature survey
Zhao et al. Multitask oriented GPU resource sharing and virtualization in cloud environment
Sandokji et al. Communication and computation aware task scheduling framework toward exascale computing
Vinutha et al. Node Performance Load Balancing Algorithm for Hadoop Cluster
US10630957B2 (en) Scalable distributed computation framework for data-intensive computer vision workloads
Maheriya et al. Improve Makespan in Job Allocation using Modified Hungarian Algorithm in Cloud Computing
Wang et al. A New Schedule Strategy for Heterogenous Workload-aware in Hadoop
Wang A Distributed Implementation of Continuous-MapReduce Stream Processing Framework
Bagchi Admission control and scheduling of remote processes in loosely-coupled distributed systems

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
CB03 Change of inventor or designer information
CB03 Change of inventor or designer information

Inventor after: Li Kenli

Inventor after: Liu Chubo

Inventor after: Zhou Xu

Inventor after: Liu Yuanchun

Inventor after: Tang Zhuo

Inventor after: Guo Yaolian

Inventor after: Song Yingjie

Inventor after: Luo Wenming

Inventor after: Yang Wangdong

Inventor after: Cao Ronghui

Inventor after: Xiao Guoqing

Inventor before: Tang Zhuo

Inventor before: Liu Chubo

Inventor before: Zhou Xu

Inventor before: Liu Yuanchun

Inventor before: Li Kenli

Inventor before: Guo Yaolian

Inventor before: Song Yingjie

Inventor before: Luo Wenming

Inventor before: Yang Wangdong

Inventor before: Cao Ronghui

Inventor before: Xiao Guoqing

GR01 Patent grant
GR01 Patent grant