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

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

Info

Publication number
CN110955526A
CN110955526A CN201911296432.0A CN201911296432A CN110955526A CN 110955526 A CN110955526 A CN 110955526A CN 201911296432 A CN201911296432 A CN 201911296432A CN 110955526 A CN110955526 A CN 110955526A
Authority
CN
China
Prior art keywords
gpu
subtask
node
memory
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.)
Granted
Application number
CN201911296432.0A
Other languages
English (en)
Other versions
CN110955526B (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 CN201911296432.0A priority Critical patent/CN110955526B/zh
Publication of CN110955526A publication Critical patent/CN110955526A/zh
Application granted granted Critical
Publication of CN110955526B publication Critical patent/CN110955526B/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
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明公开了一种用于在分布式异构环境下实现多GPU调度的方法,其根据Java计算任务创建对应的GPU本地计算任务,并通过数据分块和任务分解,将GPU本地任务划分为更细粒度的GPU本地子任务,然后根据数据本地性以及从节点上所有GPU的流资源状态和内存资源状态将GPU本地子任务调度到指定GPU上执行,从而充分平衡各个GPU上的工作负载,降低Spark应用程序的执行时间。本发明能够解决现有分布式异构Spark处理框架中存在的吞吐量低、无法有效利用多个GPU、以及由于缺乏有效的GPU负载均衡策略导致的时间开销大的技术问题。

Description

一种用于在分布式异构环境下实现多GPU调度的方法和系统
技术领域
本发明属于分布式、高性能计算技术领域,更具体地,涉及一种用于在分布式异构环境下实现多GPU调度的方法和系统。
背景技术
Spark框架是基于内存的分布式处理框架,其非常适合解决迭代计算任务,同时,迭代计算任务也同样适合被GPU处理。因此,理论上将GPU整合到Spark框架中可以极大地提高Spark框架的性能。
目前,开源版本的Spark应用程序并不支持GPU加速,而只能运行在CPU上。M.Grossman等人提出了一种分布式异构Spark处理框架,其将GPU整合到Spark框架中,利用GPU的并行计算能力来加速Spark框架。
然而,上述分布式异构处理框架存在一些不可忽略的缺陷:第一、其没有考虑使用异步流资源来并发任务到GPU上执行,这会导致所有的计算任务都被发布到默认的流并且严格按照顺序执行,因此GPU的任务并行能力并没有被有效利用,从而限制了整个处理框架的吞吐量;第二、其没有考虑从节点上配置有多个GPU的硬件情况,从而无法有效利用多个GPU来降低整个处理框架的运行时间;第三、其缺乏多GPU之间有效的负载均衡策略,多个GPU的工作负载失衡会导致整个Spark应用程序的运行时间过长,从而增加了时间开销。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种用于在分布式异构环境下实现多GPU调度的方法和系统,其目的在于,解决现有分布式异构Spark处理框架中存在的吞吐量低、无法有效利用多个GPU、以及由于缺乏有效的GPU负载均衡策略导致的时间开销大的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种用于在分布式异构环境下实现多GPU调度的方法,其是应用在包括一个主节点、以及多个从节点的Spark环境中,所述方法包括以下步骤:
(1)主节点接收用户发送的Spark应用程序,对该Spark应用程序进行解析,以得到DAG图;
(2)主节点设置计数器i=1;
(3)主节点判断i是否大于DAG图中调度阶段(即Stage)的总数,如果是则过程结束,否则进入步骤(4)。
(4)主节点将该DAG图中的第i个调度阶段划分为多个可并发执行的任务,并获取当前Spark环境中所有从节点的计算资源,并根据所有从节点的计算资源使用Spark任务调度机制将所有任务调度到对应从节点的JAVA虚拟机执行;
(5)从节点对其JVM中的任务进行数据格式转换,以将该任务对应的数据映射到堆外内存上,并使用Java本地访问库对该数据在堆外内存中的地址进行调整,以得到物理位置连续的数据;
(6)从节点调用JNA本地接口,以获取步骤(5)JVM中的任务所对应的数据在堆外内存中的起始地址、以及步骤(5)中得到的物理位置连续的数据的偏移量,并根据该起始地址和偏移量创建GPU本地任务;
(7)从节点将步骤(6)创建的GPU本地任务对应的数据进行分块处理,并为每个数据分块创建对应的GPU本地子任务;
(8)从节点判断步骤(7)创建的每个GPU本地子任务是数据缓存子任务,还是流处理子任务,如果是数据缓存子任务,则进入步骤(9),如果是流处理子任务,则进入步骤(10);
(9)从节点基于其所有GPU的空闲设备内存大小、以及设备内存使用率对该数据缓存子任务进行调度,然后进入步骤(11);
(10)从节点基于其所有GPU的数据本地性、并发流的数量、以及空闲设备内存大小对该流处理子任务进行调度;
(11)从节点设置计数器i=i+1,并返回步骤(3)。
优选地,步骤(4)中主节点是用任务调度器组件执行任务的划分,从节点的计算资源包括从节点的可用内存大小、以及空闲CPU数量。
优选地,步骤(5)中对任务进行数据格式转换这一过程,首先是利用JNA创建GPU支持的Java对象格式,然后将任务对应的数据转换成该Java对象格式,并将转换后的Java对象格式的数据映射到该堆外内存中。
优选地,步骤(9)包括以下子步骤:
(9-1)从节点获取表示其所有GPU空闲设备内存状态的内存状态列表;
(9-2)从节点根据内存状态列表中所有GPU的空闲设备内存大小对内存状态列表进行降序排列;
(9-3)从节点设置计数器j=1;
(9-4)从节点判断计数器j是否大于内存状态列表的大小(即GPU的总数),如果是则过程结束,否则进入步骤(9-5);
(9-5)从节点获取内存状态列表中第i行中的空闲设备内存大小,并判断该空闲设备内存大小是否大于等于步骤(7)中的分块大小,如果是则进入步骤(9-6),否则过程结束;
(9-6)从节点获取内存状态列表中第i行中的设备内存使用率,并判断该设备内存使用率是否小于等于预设阈值,如果是则进入步骤(9-7),否则转入步骤(9-8);
(9-7)从节点获取内存状态列表中第i行中GPU的编号,并在该编号对应的GPU上分配与步骤(7)中的分块大小相同的GPU缓存区,将堆外内存中的数据传输到GPU缓存区,然后过程结束;
(9-8)从节点设置j=j+1,并返回步骤(9-4)。
优选地,GPU的空闲设备内存状态包括GPU的编号、总设备内存大小、空闲设备内存大小、已使用设备内存大小、以及设备内存使用率。
优选地,步骤(10)包括以下子步骤:
(10-1)从节点获取表示其所有GPU空闲设备内存状态的内存状态列表,以及表示其所有GPU流资源状态的流资源列表;
(10-2)从节点根据流资源列表中空闲流的数量对流资源列表进行降序排列;
(10-3)从节点判断该流处理子任务对应的数据是否已经被缓存在其中的一个GPU上,如果是则进入步骤(10-4),否则进入步骤(10-7);
(10-4)从节点根据该GPU从内存状态列表中获取对应的GPU的编号,根据该GPU的编号在流资源列表中获取对应的空闲流的数量,并根据该空闲流的数量判断该GPU中是否有空闲的流,如果是则进入步骤(10-5),否则进入步骤(10-6);
(10-5)从节点在该GPU上为该流处理子任务分配一个空闲流,并调用该GPU的内核程序执行流处理子任务,然后过程结束;
(10-6)从节点从流资源列表中获取空闲流的数量最多的GPU所对应的GPU的编号,并在该GPU编号对应的GPU上为该流处理子任务对应的数据分配一个空闲流,然后过程结束;
(10-7)从节点设置计数器k=1;
(10-8)从节点判断计数器k是否大于流资源列表的大小(即GPU的总数),如果是则过程结束,否则转入步骤(10-9);
(10-9)从节点获取流资源列表中第k行中的空闲流的数量,并判断该空闲流的数量是否大于0,如果是则进入步骤(10-10),否则过程结束;
(10-10)从节点获取流资源列表中第k行中的GPU的编号,使用该GPU的编号获取内存状态列表中对应的空闲设备内存大小,并判断该空闲设备内存大小是否大于等于该流处理子任务对应的数据的大小,如果是则进入步骤(10-11),否则进入步骤(10-12);
(10-11)从节点使用该GPU的编号所对应的GPU为该流处理子任务分配流和设备内存,并调用该GPU的内核程序执行流处理子任务,该过程结束;
(10-12)从节点设置计数器k=k+1,并返回步骤(10-8)。
优选地,GPU空闲设备内存状态包括GPU的编号、以及空闲设备内存大小;GPU流资源状态包括GPU的编号、全部流数量、空闲流的数量、以及正在使用的流数量。
按照本发明的另一方面,提供了一种用于在分布式异构环境下实现多GPU调度的系统,其是应用在包括一个主节点、以及多个从节点的Spark环境中,所述系统包括:
第一模块,其设置于主节点中,用于接收用户发送的Spark应用程序,对该Spark应用程序进行解析,以得到DAG图;
第二模块,其设置于主节点中,用于设置计数器i=1;
第三模块,其设置于主节点中,用于判断i是否大于DAG图中调度阶段的总数,如果是则过程结束,否则进入第四模块;
第四模块,其设置于主节点中,用于将该DAG图中的第i个调度阶段划分为多个可并发执行的任务,并获取当前Spark环境中所有从节点的计算资源,并根据所有从节点的计算资源使用Spark任务调度机制将所有任务调度到对应从节点的JAVA虚拟机执行;
第五模块,其设置于从节点中,用于对其JVM中的任务进行数据格式转换,以将该任务对应的数据映射到堆外内存上,并使用Java本地访问库对该数据在堆外内存中的地址进行调整,以得到物理位置连续的数据;
第六模块,其设置于从节点中,用于调用JNA本地接口,以获取第五模块JVM中的任务所对应的数据在堆外内存中的起始地址、以及第五模块中得到的物理位置连续的数据的偏移量,并根据该起始地址和偏移量创建GPU本地任务;
第七模块,其设置于从节点中,用于将第六模块创建的GPU本地任务对应的数据进行分块处理,并为每个数据分块创建对应的GPU本地子任务;
第八模块,其设置于从节点中,用于判断第七模块创建的每个GPU本地子任务是数据缓存子任务,还是流处理子任务,如果是数据缓存子任务,则进入第九模块,如果是流处理子任务,则第十模块;
第九模块,其设置于从节点中,用于基于其所有GPU的空闲设备内存大小、以及设备内存使用率对该数据缓存子任务进行调度,然后进入第十一模块;
第十模块,其设置于从节点中,用于基于其所有GPU的数据本地性、并发流的数量、以及空闲设备内存大小对该流处理子任务进行调度;
第十一模块,其设置于从节点中,用于设置计数器i=i+1,并返回第三模块。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
(1)由于本发明采用了步骤(6)到(10),其使用多个流实现任务的并发执行,从而提高了整个Spark框架的吞吐量;
(2)由于本发明采用了步骤(6)到(10),其为每个GPU都创建了一定数量的流,从而多任务可以被并发调度到多个GPU上执行,进而提高了整个Spark框架的吞吐量,降低了整个处理框架的运行时间;
(3)由于本发明采用了步骤(9)和(10),其通过利用负载均衡策略有效平衡了各个GPU上的工作负载,从而缩短了可并发执行的任务的执行时间,降低了时间开销;
(4)由于本发明充分利用了计算节点上GPU计算资源,从而能够减轻计算节点上CPU的工作负载。
附图说明
图1是发明用于在分布式异构环境下实现多GPU调度的方法的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明的具体思路在于,根据Java计算任务创建对应的GPU本地计算任务,并通过数据分块和任务分解,将GPU本地任务划分为更细粒度的GPU本地子任务,然后根据数据本地性以及从节点上所有GPU的流资源状态和内存资源状态将GPU本地子任务调度到指定GPU上执行,从而充分平衡各个GPU上的工作负载,降低Spark应用程序的执行时间。
如图1所示,本发明提供了一种用于在分布式异构环境下实现多GPU调度的方法,其是应用在包括一个主节点(Master)、以及多个从节点(Worker)的Spark环境中,该方法包括以下步骤:
(1)主节点接收用户发送的Spark应用程序,对该Spark应用程序进行解析,以得到有向无环图(Directed Acyclic Graph,简称DAG图);
(2)主节点设置计数器i=1;
(3)主节点判断i是否大于DAG图中调度阶段(Stage)的总数,如果是则过程结束,否则进入步骤(4);
(4)主节点将该DAG图中的第i个调度阶段划分为多个可并发执行的任务(Task),并获取当前Spark环境中所有从节点的计算资源,并根据所有从节点的计算资源使用Spark任务调度机制将所有任务调度到对应从节点的JAVA虚拟机(Java virtual machine,简称JVM)执行;
具体而言,主节点是用任务调度器组件(Taskscheduler)执行任务的划分。
本步骤中提到的从节点的计算资源,包括从节点的可用内存大小、以及空闲CPU数量。
(5)从节点对其JVM中的任务进行数据格式转换,以将该任务对应的数据映射到该从节点JVM之外的内存(即堆外内存,Off-heap memory)上,并使用Java本地访问库(JavaNative Access,简称JNA)对该数据在堆外内存中的地址进行调整,以得到物理位置连续的数据;
具体而言,本步骤中对任务进行数据格式转换这一过程,首先是利用JNA创建GPU支持的Java对象格式,然后将任务对应的数据转换成该Java对象格式,并将转换后的Java对象格式的数据映射到该堆外内存中。
本步骤的目的在于,将任务对应的数据格式转换为可以被GPU支持的数据格式。
(6)从节点调用JNA本地接口,以获取步骤(5)JVM中的任务所对应的数据在堆外内存中的起始地址、以及步骤(5)中得到的物理位置连续的数据的偏移量(Shift),并根据该起始地址和偏移量创建GPU本地任务;
(7)从节点将步骤(6)创建的GPU本地任务对应的数据进行分块处理(每个分块的大小是64Kb到16Mb,优选为1Mb),并为每个数据分块创建对应的GPU本地子任务;
(8)从节点判断步骤(7)创建的每个GPU本地子任务是数据缓存(Buffer)子任务,还是流处理(Streaming)子任务,如果是数据缓存子任务,则进入步骤(9),如果是流处理子任务,则进入步骤(10);
具体而言,如果某个GPU本地子任务中的任务类型参数为0,则该GPU本地子任务是数据缓存子任务,如果为1,则该GPU本地子任务是流处理子任务。
(9)从节点基于其所有GPU的空闲设备内存大小、以及设备内存使用率对该数据缓存子任务进行调度,然后进入步骤(11);
本步骤包括以下子步骤:
(9-1)从节点获取表示其所有GPU空闲设备内存状态的内存状态列表;
具体而言,GPU的空闲设备内存状态包括GPU的编号、总设备内存大小、空闲设备内存大小、已使用设备内存大小、以及设备内存使用率;
(9-2)从节点根据内存状态列表中所有GPU的空闲设备内存大小对内存状态列表进行降序排列;
(9-3)从节点设置计数器j=1;
(9-4)从节点判断计数器j是否大于内存状态列表的大小(即GPU的总数),如果是则过程结束,否则进入步骤(9-5);
(9-5)从节点获取内存状态列表中第i行中的空闲设备内存大小,并判断该空闲设备内存大小是否大于等于步骤(7)中的分块大小,如果是则进入步骤(9-6),否则过程结束;
(9-6)从节点获取内存状态列表中第i行中的设备内存使用率,并判断该设备内存使用率是否小于等于预设阈值,如果是则进入步骤(9-7),否则转入步骤(9-8);
具体而言,阈值的取值范围是0.7到0.9之间,优选值为0.8。
(9-7)从节点获取内存状态列表中第i行中GPU的编号,并在该编号对应的GPU上分配与步骤(7)中的分块大小相同的GPU缓存区,将堆外内存中的数据传输到GPU缓存区,然后过程结束;
(9-8)从节点设置j=j+1,并返回步骤(9-4)。
(10)从节点基于其所有GPU的数据本地性、并发流的数量、以及空闲设备内存大小对该流处理子任务进行调度;
本步骤包括以下子步骤:
(10-1)从节点获取表示其所有GPU空闲设备内存状态的内存状态列表,以及表示其所有GPU流资源状态的流资源列表;
具体而言,GPU空闲设备内存状态包括GPU的编号、以及空闲设备内存大小;
GPU流资源状态包括GPU的编号、全部流数量、空闲流的数量、以及正在使用的流数量;
(10-2)从节点根据流资源列表中空闲流的数量对流资源列表进行降序排列;
(10-3)从节点判断该流处理子任务对应的数据是否已经被缓存在其中的一个GPU上,如果是则进入步骤(10-4),否则进入步骤(10-7);
(10-4)从节点根据该GPU从内存状态列表中获取对应的GPU的编号,根据该GPU的编号在流资源列表中获取对应的空闲流的数量,并根据该空闲流的数量判断该GPU中是否有空闲的流,如果是则进入步骤(10-5),否则进入步骤(10-6);
(10-5)从节点在该GPU上为该流处理子任务分配一个空闲流,并调用该GPU的内核程序执行流处理子任务,然后过程结束;
(10-6)从节点从流资源列表中获取空闲流的数量最多的GPU所对应的GPU的编号,并在该GPU编号对应的GPU上为该流处理子任务对应的数据分配一个空闲流,然后过程结束;
(10-7)从节点设置计数器k=1;
(10-8)从节点判断计数器k是否大于流资源列表的大小(即GPU的总数),如果是则过程结束,否则转入步骤(10-9);
(10-9)从节点获取流资源列表中第k行中的空闲流的数量,并判断该空闲流的数量是否大于0,如果是则进入步骤(10-10),否则过程结束;
(10-10)从节点获取流资源列表中第k行中的GPU的编号,使用该GPU的编号获取内存状态列表中对应的空闲设备内存大小,并判断该空闲设备内存大小是否大于等于该流处理子任务对应的数据的大小,如果是则进入步骤(10-11),否则进入步骤(10-12);
(10-11)从节点使用该GPU的编号所对应的GPU为该流处理子任务分配流和设备内存,并调用该GPU的内核程序执行流处理子任务,该过程结束;
(10-12)从节点设置计数器k=k+1,并返回步骤(10-8)。
(11)设置计数器i=i+1,并返回步骤(3)。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (8)

1.一种用于在分布式异构环境下实现多GPU调度的方法,其是应用在包括一个主节点、以及多个从节点的Spark环境中,其特征在于,所述方法包括以下步骤:
(1)主节点接收用户发送的Spark应用程序,对该Spark应用程序进行解析,以得到DAG图;
(2)主节点设置计数器i=1;
(3)主节点判断i是否大于DAG图中调度阶段(即Stage)的总数,如果是则过程结束,否则进入步骤(4)。
(4)主节点将该DAG图中的第i个调度阶段划分为多个可并发执行的任务,并获取当前Spark环境中所有从节点的计算资源,并根据所有从节点的计算资源使用Spark任务调度机制将所有任务调度到对应从节点的JAVA虚拟机执行;
(5)从节点对其JVM中的任务进行数据格式转换,以将该任务对应的数据映射到堆外内存上,并使用Java本地访问库对该数据在堆外内存中的地址进行调整,以得到物理位置连续的数据;
(6)从节点调用JNA本地接口,以获取步骤(5)JVM中的任务所对应的数据在堆外内存中的起始地址、以及步骤(5)中得到的物理位置连续的数据的偏移量,并根据该起始地址和偏移量创建GPU本地任务;
(7)从节点将步骤(6)创建的GPU本地任务对应的数据进行分块处理,并为每个数据分块创建对应的GPU本地子任务;
(8)从节点判断步骤(7)创建的每个GPU本地子任务是数据缓存子任务,还是流处理子任务,如果是数据缓存子任务,则进入步骤(9),如果是流处理子任务,则进入步骤(10);
(9)从节点基于其所有GPU的空闲设备内存大小、以及设备内存使用率对该数据缓存子任务进行调度,然后进入步骤(11);
(10)从节点基于其所有GPU的数据本地性、并发流的数量、以及空闲设备内存大小对该流处理子任务进行调度;
(11)从节点设置计数器i=i+1,并返回步骤(3)。
2.根据权利要求1所述的方法,其特征在于,步骤(4)中主节点是用任务调度器组件执行任务的划分,从节点的计算资源包括从节点的可用内存大小、以及空闲CPU数量。
3.根据权利要求1所述的方法,其特征在于,步骤(5)中对任务进行数据格式转换这一过程,首先是利用JNA创建GPU支持的Java对象格式,然后将任务对应的数据转换成该Java对象格式,并将转换后的Java对象格式的数据映射到该堆外内存中。
4.根据权利要求1所述的方法,其特征在于,步骤(9)包括以下子步骤:
(9-1)从节点获取表示其所有GPU空闲设备内存状态的内存状态列表;
(9-2)从节点根据内存状态列表中所有GPU的空闲设备内存大小对内存状态列表进行降序排列;
(9-3)从节点设置计数器j=1;
(9-4)从节点判断计数器j是否大于内存状态列表的大小(即GPU的总数),如果是则过程结束,否则进入步骤(9-5);
(9-5)从节点获取内存状态列表中第i行中的空闲设备内存大小,并判断该空闲设备内存大小是否大于等于步骤(7)中的分块大小,如果是则进入步骤(9-6),否则过程结束;
(9-6)从节点获取内存状态列表中第i行中的设备内存使用率,并判断该设备内存使用率是否小于等于预设阈值,如果是则进入步骤(9-7),否则转入步骤(9-8);
(9-7)从节点获取内存状态列表中第i行中GPU的编号,并在该编号对应的GPU上分配与步骤(7)中的分块大小相同的GPU缓存区,将堆外内存中的数据传输到GPU缓存区,然后过程结束;
(9-8)从节点设置j=j+1,并返回步骤(9-4)。
5.根据权利要求4所述的方法,其特征在于,GPU的空闲设备内存状态包括GPU的编号、总设备内存大小、空闲设备内存大小、已使用设备内存大小、以及设备内存使用率。
6.根据权利要求1所述的方法,其特征在于,步骤(10)包括以下子步骤:
(10-1)从节点获取表示其所有GPU空闲设备内存状态的内存状态列表,以及表示其所有GPU流资源状态的流资源列表;
(10-2)从节点根据流资源列表中空闲流的数量对流资源列表进行降序排列;
(10-3)从节点判断该流处理子任务对应的数据是否已经被缓存在其中的一个GPU上,如果是则进入步骤(10-4),否则进入步骤(10-7);
(10-4)从节点根据该GPU从内存状态列表中获取对应的GPU的编号,根据该GPU的编号在流资源列表中获取对应的空闲流的数量,并根据该空闲流的数量判断该GPU中是否有空闲的流,如果是则进入步骤(10-5),否则进入步骤(10-6);
(10-5)从节点在该GPU上为该流处理子任务分配一个空闲流,并调用该GPU的内核程序执行流处理子任务,然后过程结束;
(10-6)从节点从流资源列表中获取空闲流的数量最多的GPU所对应的GPU的编号,并在该GPU编号对应的GPU上为该流处理子任务对应的数据分配一个空闲流,然后过程结束;
(10-7)从节点设置计数器k=1;
(10-8)从节点判断计数器k是否大于流资源列表的大小(即GPU的总数),如果是则过程结束,否则转入步骤(10-9);
(10-9)从节点获取流资源列表中第k行中的空闲流的数量,并判断该空闲流的数量是否大于0,如果是则进入步骤(10-10),否则过程结束;
(10-10)从节点获取流资源列表中第k行中的GPU的编号,使用该GPU的编号获取内存状态列表中对应的空闲设备内存大小,并判断该空闲设备内存大小是否大于等于该流处理子任务对应的数据的大小,如果是则进入步骤(10-11),否则进入步骤(10-12);
(10-11)从节点使用该GPU的编号所对应的GPU为该流处理子任务分配流和设备内存,并调用该GPU的内核程序执行流处理子任务,该过程结束;
(10-12)从节点设置计数器k=k+1,并返回步骤(10-8)。
7.根据权利要求6所述的方法,其特征在于,
GPU空闲设备内存状态包括GPU的编号、以及空闲设备内存大小;
GPU流资源状态包括GPU的编号、全部流数量、空闲流的数量、以及正在使用的流数量。
8.一种用于在分布式异构环境下实现多GPU调度的系统,其是应用在包括一个主节点、以及多个从节点的Spark环境中,其特征在于,所述系统包括:
第一模块,其设置于主节点中,用于接收用户发送的Spark应用程序,对该Spark应用程序进行解析,以得到DAG图;
第二模块,其设置于主节点中,用于设置计数器i=1;
第三模块,其设置于主节点中,用于判断i是否大于DAG图中调度阶段的总数,如果是则过程结束,否则进入第四模块;
第四模块,其设置于主节点中,用于将该DAG图中的第i个调度阶段划分为多个可并发执行的任务,并获取当前Spark环境中所有从节点的计算资源,并根据所有从节点的计算资源使用Spark任务调度机制将所有任务调度到对应从节点的JAVA虚拟机执行;
第五模块,其设置于从节点中,用于对其JVM中的任务进行数据格式转换,以将该任务对应的数据映射到堆外内存上,并使用Java本地访问库对该数据在堆外内存中的地址进行调整,以得到物理位置连续的数据;
第六模块,其设置于从节点中,用于调用JNA本地接口,以获取第五模块JVM中的任务所对应的数据在堆外内存中的起始地址、以及第五模块中得到的物理位置连续的数据的偏移量,并根据该起始地址和偏移量创建GPU本地任务;
第七模块,其设置于从节点中,用于将第六模块创建的GPU本地任务对应的数据进行分块处理,并为每个数据分块创建对应的GPU本地子任务;
第八模块,其设置于从节点中,用于判断第七模块创建的每个GPU本地子任务是数据缓存子任务,还是流处理子任务,如果是数据缓存子任务,则进入第九模块,如果是流处理子任务,则第十模块;
第九模块,其设置于从节点中,用于基于其所有GPU的空闲设备内存大小、以及设备内存使用率对该数据缓存子任务进行调度,然后进入第十一模块;
第十模块,其设置于从节点中,用于基于其所有GPU的数据本地性、并发流的数量、以及空闲设备内存大小对该流处理子任务进行调度;
第十一模块,其设置于从节点中,用于设置计数器i=i+1,并返回第三模块。
CN201911296432.0A 2019-12-16 2019-12-16 一种用于在分布式异构环境下实现多gpu调度的方法和系统 Active CN110955526B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911296432.0A CN110955526B (zh) 2019-12-16 2019-12-16 一种用于在分布式异构环境下实现多gpu调度的方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911296432.0A CN110955526B (zh) 2019-12-16 2019-12-16 一种用于在分布式异构环境下实现多gpu调度的方法和系统

Publications (2)

Publication Number Publication Date
CN110955526A true CN110955526A (zh) 2020-04-03
CN110955526B CN110955526B (zh) 2022-10-21

Family

ID=69981980

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911296432.0A Active CN110955526B (zh) 2019-12-16 2019-12-16 一种用于在分布式异构环境下实现多gpu调度的方法和系统

Country Status (1)

Country Link
CN (1) CN110955526B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111831330A (zh) * 2020-07-10 2020-10-27 深圳致星科技有限公司 用于联邦学习的异构计算系统设备交互方案
CN112612613A (zh) * 2020-12-28 2021-04-06 湖南大学 用于在虚拟分布式异构环境下实现多gpu调度的方法和系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105022670A (zh) * 2015-07-17 2015-11-04 中国海洋大学 一种云计算平台中的异构分布式任务处理系统及其处理方法
CN107168782A (zh) * 2017-04-24 2017-09-15 复旦大学 一种基于Spark与GPU的并行计算系统
KR20190041707A (ko) * 2017-10-13 2019-04-23 인천대학교 산학협력단 Gpu를 사용한 실시간 빅 데이터 스트림 처리 장치 및 방법
CN109918199A (zh) * 2019-02-28 2019-06-21 中国科学技术大学苏州研究院 基于gpu的分布式图处理系统
CN110347489A (zh) * 2019-07-12 2019-10-18 之江实验室 一种基于Spark的多中心数据协同计算的流处理方法
CN110413389A (zh) * 2019-07-24 2019-11-05 浙江工业大学 一种资源不均衡Spark环境下的任务调度优化方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105022670A (zh) * 2015-07-17 2015-11-04 中国海洋大学 一种云计算平台中的异构分布式任务处理系统及其处理方法
CN107168782A (zh) * 2017-04-24 2017-09-15 复旦大学 一种基于Spark与GPU的并行计算系统
KR20190041707A (ko) * 2017-10-13 2019-04-23 인천대학교 산학협력단 Gpu를 사용한 실시간 빅 데이터 스트림 처리 장치 및 방법
CN109918199A (zh) * 2019-02-28 2019-06-21 中国科学技术大学苏州研究院 基于gpu的分布式图处理系统
CN110347489A (zh) * 2019-07-12 2019-10-18 之江实验室 一种基于Spark的多中心数据协同计算的流处理方法
CN110413389A (zh) * 2019-07-24 2019-11-05 浙江工业大学 一种资源不均衡Spark环境下的任务调度优化方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
杨志伟等: "异构Spark集群下自适应任务调度策略", 《计算机工程》 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111831330A (zh) * 2020-07-10 2020-10-27 深圳致星科技有限公司 用于联邦学习的异构计算系统设备交互方案
CN112612613A (zh) * 2020-12-28 2021-04-06 湖南大学 用于在虚拟分布式异构环境下实现多gpu调度的方法和系统
CN112612613B (zh) * 2020-12-28 2023-06-23 湖南大学 用于在虚拟分布式异构环境下实现多gpu调度的方法和系统

Also Published As

Publication number Publication date
CN110955526B (zh) 2022-10-21

Similar Documents

Publication Publication Date Title
Kato et al. Gdev:{First-Class}{GPU} Resource Management in the Operating System
Wang et al. Efficient and fair multi-programming in GPUs via effective bandwidth management
Zhang et al. Improving distributed workload performance by sharing both CPU and memory resources
Shirahata et al. Hybrid map task scheduling for GPU-based heterogeneous clusters
Srinivasan et al. The case for fair multiprocessor scheduling
Sanchez et al. Dynamic fine-grain scheduling of pipeline parallelism
Sengupta et al. Scheduling multi-tenant cloud workloads on accelerator-based systems
Chandra et al. Deadline fair scheduling: bridging the theory and practice of proportionate pair scheduling in multiprocessor systems
CN111367630A (zh) 一种基于云计算的多用户多优先级的分布式协同处理方法
CN109445565B (zh) 一种基于流多处理器内核独占和预留的gpu服务质量保障方法
Sajjapongse et al. A preemption-based runtime to efficiently schedule multi-process applications on heterogeneous clusters with gpus
CN110955526B (zh) 一种用于在分布式异构环境下实现多gpu调度的方法和系统
Siavashi et al. GPUCloudSim: an extension of CloudSim for modeling and simulation of GPUs in cloud data centers
Lin et al. A heuristic task scheduling algorithm for heterogeneous virtual clusters
Goswami et al. GPUShare: Fair-sharing middleware for GPU clouds
CN112612613B (zh) 用于在虚拟分布式异构环境下实现多gpu调度的方法和系统
Lee et al. METERG: Measurement-based end-to-end performance estimation technique in QoS-capable multiprocessors
Sundar et al. Communication augmented latest possible scheduling for cloud computing with delay constraint and task dependency
Markthub et al. Using rcuda to reduce gpu resource-assignment fragmentation caused by job scheduler
Strazdins et al. A comparison of local and gang scheduling on a beowulf cluster
CN109656716A (zh) 一种Slurm作业调度方法及系统
Liu et al. Mind the gap: Broken promises of CPU reservations in containerized multi-tenant clouds
Zhu et al. Gost: Enabling efficient spatio-temporal GPU sharing for network function virtualization
Muneeswari et al. Agent based load balancing scheme using affinity processor scheduling for multicore architectures
Wang et al. Can pdes scale in environments with heterogeneous delays?

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: Cao Ronghui

Inventor after: Du Lifan

Inventor after: Tang Zhuo

Inventor after: He Kailin

Inventor after: Liu Xiang

Inventor after: Zhang Xuedong

Inventor after: Yang Wangdong

Inventor after: Zhou Xu

Inventor after: Liu Chubo

Inventor before: Tang Zhuo

Inventor before: Cao Ronghui

Inventor before: Du Lifan

Inventor before: Li Kenli

Inventor before: He Kailin

Inventor before: Liu Xiang

Inventor before: Zhang Xuedong

Inventor before: Yang Wangdong

Inventor before: Zhou Xu

Inventor before: Liu Chubo

GR01 Patent grant
GR01 Patent grant