CN114090219A - 调度系统、方法、装置、芯片、计算机设备及存储介质 - Google Patents
调度系统、方法、装置、芯片、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN114090219A CN114090219A CN202111443775.2A CN202111443775A CN114090219A CN 114090219 A CN114090219 A CN 114090219A CN 202111443775 A CN202111443775 A CN 202111443775A CN 114090219 A CN114090219 A CN 114090219A
- Authority
- CN
- China
- Prior art keywords
- operator
- operators
- execution
- scheduling
- task block
- 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
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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Medical Informatics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Supply And Distribution Of Alternating Current (AREA)
Abstract
本公开提供了一种调度系统、调度方法、装置、计算机设备及存储介质,其中,该调度系统包括:所述主机,用于对深度学习模型进行解析,得到所述深度学习模型中的多个算子;基于多个所述算子分别对应的运算信息以及算子执行设备的算力信息,确定在执行多个所述算子时对所述算子执行设备中的运算单元的调度策略;所述算子执行设备,用于基于所述主机的调度执行多个所述算子。
Description
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种调度系统、调度方法、装置、芯片、计算机设备及存储介质。
背景技术
在深度学习领域,计算机设备在运行深度学习模型时,部署在计算机设备上的深度学习框架对深度学习模型进行解析,得到深度学习模型中的算子,并将算子发送至人工智能(Artificial Intelligence,AI)加速卡、图形处理器(Graphics Processing Unit,GPU)等执行设备,执行设备在接收到深度学习框架发送的算子后,负责算力的调度和算子执行。该种算力的调度方式存在算力利用率较低的问题。
发明内容
本公开实施例至少提供一种调度系统、调度方法、装置、芯片、计算机设备及存储介质。
第一方面,本公开实施例提供了一种调度系统,包括:包括:主机以及算子执行设备;所述主机,用于对深度学习模型进行解析,得到所述深度学习模型中的多个算子;基于多个所述算子分别对应的运算信息以及算子执行设备的算力信息,确定在执行多个所述算子时对所述算子执行设备中的运算单元的调度策略;所述算子执行设备,用于基于所述主机的调度策略执行多个所述算子。
这样,主机通过基于深度学习模型中的多个算子分别对应的运算信息以及执行设备的算力信息,确定在执行算子时对运算单元的调度策略,并基于该调度策略调度运算单元执行算子,从而能够根据预先对执行设备执行算子的具体过程进行规划,控制算子的下发,提升对执行设备中计算资源的利用率。
一种可能的实施方式中,所述多个算子分别对应的运算信息包括多个所述算子分别对应的任务块的执行时长、及多个所述算子之间的并行度;其中,每个任务块包括对应算子中的多个子任务。
一种可能的实施方式中,所述主机,在获取多个所述算子分别对应的任务块的执行时长时,用于:基于所述任务块在执行时需要占用的内存、以及所述运算单元的算力信息,估算执行所述任务块所需要的执行时长。
这样,可以估算得到各个任务块所需要的执行时长,估算效率较高。
一种可能的实施方式中,所述主机,在基于所述任务块在执行时需要占用的内存、以及所述运算单元的算力信息,估算执行所述任务块所需要的执行时长时,用于:基于所述算子在执行时所需要占用的内存、以及所述运算单元对所述内存的访存带宽,确定访存时长;以及基于所述任务块中的每个子任务中的各计算步骤所需要的算力信息,以及所述每个运算单元的算力信息,确定所述任务块的计算时长;基于所述访存时长以及所述计算时长,确定执行所述任务块所需要的执行时长。
一种可能的实施方式中,所述主机,在获取多个所述算子分别对应的任务块的执行时长时,用于:基于所述算子,确定与所述算子对应的仿真模型;运行所述仿真模型,并基于所述仿真模型的运行时长,确定所述算子的各个任务块所需要的执行时长。
一种可能的实施方式中,所述主机,在基于所述仿真模型的运行时长,确定所述算子的各个任务块所需要的执行时长时,用于:根据运行所述仿真模型的算子执行设备中运算单元的尺寸、以及所述算子在执行时需要处理的数据量,确定在仿真过程中将所述算子划分得到的任务块的数量;根据仿真过程中将所述算子划分得到的任务块的数量、以及运行所述仿真模型的算子执行设备中运算单元的数量,确定需要处理的批次;基于所述批次、以及所述仿真模型的运行时长,确定多个所述算子分别对应的任务块的执行时长。
这样,可以通过仿真得到各个任务块所需要的执行时长,准确度较高。
一种可能的实施方式中,所述主机,在基于多个所述算子分别对应的运算信息以及算子执行设备的算力信息,确定在执行多个所述算子时对所述算子执行设备中的运算单元的调度策略时,用于:构建多个所述算子分别对应任务块的执行时长、多个所述算子分别对应的任务块数量、多个所述算子之间的并行度、所述算子执行设备的算力信息、调度策略参数,与多个所述算子的执行总时长之间的关联关系;以降低所述执行总时长为目标,基于所述关联关系,对所述调度策略参数进行调整,得到目标调度策略。
一种可能的实施方式中,所述主机,在构建多个所述算子分别对应任务块的执行时长、多个所述算子分别对应的任务块数量、多个所述算子之间的并行度、所述算子执行设备的算力信息、调度策略参数,与多个所述算子的执行总时长之间的关联关系时,用于:以多个所述算子分别对应的任务块的执行时长、多个所述算子分别对应的任务块数量、所述算子执行设备的算力信息为参数,以所述调度策略参数为自变量,以多个所述算子的执行总时长为因变量,以算子之间的并行度为约束条件,构建关系方程;将所述关系方程作为所述关联关系。
这样,可以不断对执行总时长进行优化,提升调度策略的合理性。
一种可能的实施方式中,所述调度策略参数包括下述至少一项:与多个所述算子分别对应的至少一个执行时刻、在所述至少一个执行时刻中的每个执行时刻对应的起始任务块的任务块标识、所需运算单元的数量、以及执行所述算子的运算单元的标识。
这样,可以通过调度策略中的各项内容,实现对运算单元的调度,使得调度系统能够对运算单元的工作情况有明确感知。
一种可能的实施方式中,所述主机,在基于所述调度策略调度所述运算单元执行多个所述算子,包括:基于所述调度策略,生成算子启动指令;向所述算子执行设备发送所述算子启动指令;
所述算子执行设备,在基于所述主机的调度执行多个所述算子时,用于:响应于接收到所述主机发送的所述算子启动指令,按照与所述算子启动指令所指示的方式,执行与所述算子启动指令对应的算子。
一种可能的实施方式中,所述调度策略参数包括:与多个所述算子分别对应的算子执行时刻;所述算子启动指令,包括:与多个算子分别对应的算子启动指令;所述主机,在向所述算子执行设备发送所述算子启动指令时,用于:响应于任一算子启动指令对应的指令发送时刻到达,向所述算子执行设备发送该任一算子启动指令;其中,所述指令发送时刻是基于该任一算子启动指令对应的指令执行时刻确定的。
第二方面,本公开实施例提供了一种调度方法,包括:对深度学习模型进行解析,得到所述深度学习模型中的多个算子;基于多个所述算子分别对应的运算信息以及算子执行设备的算力信息,确定在执行多个所述算子时对所述算子执行设备中的运算单元的调度策略;其中,每个任务块包括对应算子中的多个子任务;基于所述调度策略调度所述运算单元执行多个所述算子。
一种可选的实施方式中,所述多个算子分别对应的运算信息包括多个所述算子分别对应的任务块的执行时长、及多个所述算子之间的并行度;其中,每个任务块包括对应算子中的多个子任务。
一种可选的实施方式中,采用下述方式获取多个所述算子分别对应的任务块的执行时长:基于所述任务块在执行时需要占用的内存、以及所述运算单元的算力信息,估算执行所述任务块所需要的执行时长。
这样,可以估算得到各个任务块所需要的执行时长,估算效率较高。
一种可选的实施方式中,所述基于所述任务块在执行时需要占用的内存、以及所述运算单元的算力信息,估算执行所述任务块所需要的执行时长,包括:基于所述算子在执行时所需要占用的内存、以及所述运算单元对所述内存的访存带宽,确定访存时长;以及基于所述任务块中的每个子任务中的各计算步骤所需要的算力信息,以及所述每个运算单元的算力信息,确定所述任务块的计算时长;基于所述访存时长以及所述计算时长,确定执行所述任务块所需要的执行时长。
一种可选的实施方式中,采用下述方式获取多个所述算子分别对应的任务块的执行时长:基于所述算子,确定与所述算子对应的仿真模型;运行所述仿真模型,并基于所述仿真模型的运行时长,确定所述算子的各个任务块所需要的执行时长。
这样,可以通过仿真得到各个任务块所需要的执行时长,准确度较高。
一种可选的实施方式中,所述基于所述仿真模型的运行时长,确定所述算子的各个任务块所需要的执行时长,包括:根据运行所述仿真模型的算子执行设备中运算单元的尺寸、以及所述算子在执行时需要处理的数据量,确定在仿真过程中将所述算子划分得到的任务块的数量;根据仿真过程中将所述算子划分得到的任务块的数量、以及运行所述仿真模型的算子执行设备中运算单元的数量,确定需要处理的批次;基于所述批次、以及所述仿真模型的运行时长,确定多个所述算子分别对应的任务块的执行时长。
一种可选的实施方式中,所述基于多个所述算子分别对应运算信息以及算子执行设备的算力信息,确定在执行多个所述算子时对所述算子执行设备中的运算单元的调度策略,包括:构建多个所述算子分别对应任务块的执行时长、多个所述算子分别对应的任务块数量、多个所述算子之间的并行度、所述算子执行设备的算力信息、所述调度策略参数,与多个所述算子的执行总时长之间的关联关系;以降低所述执行总时长为目标,基于所述关联关系,对所述调度策略参数进行调整,得到目标调度策略。
一种可能的实施方式中,所述构建多个所述算子分别对应任务块的执行时长、多个所述算子分别对应的任务块数量、多个所述算子之间的并行度、所述算子执行设备的算力信息、调度策略参数,与多个所述算子的执行总时长之间的关联关系,包括:以多个所述算子分别对应的任务块的执行时长、多个所述算子分别对应的任务块数量、所述算子执行设备的算力信息为参数,以所述调度策略参数为自变量,以多个所述算子的执行总时长为因变量,以算子之间的并行度为约束条件,构建关系方程;将所述关系方程作为所述关联关系。
一种可选的实施方式中,所述调度策略参数包括下述至少一项:与多个所述算子分别对应的至少一个执行时刻、在所述至少一个执行时刻中的每个执行时刻对应的起始任务块的任务块标识、所需运算单元的数量、以及执行所述算子的运算单元的标识。
一种可选的实施方式中,所述基于所述调度策略调度所述运算单元执行多个所述算子,包括:基于所述调度策略,生成算子启动指令;向所述算子执行设备发送所述算子启动指令;所述算子启动指令用于所述算子执行设备按照与所述算子启动指令所指示的方式,执行与所述算子启动指令对应的算子。
一种可选的实施方式中,所述调度策略参数包括:与多个所述算子分别对应的算子执行时刻;所述算子启动指令,包括:与多个算子分别对应的算子启动指令;所述向所述算子执行设备发送所述算子启动指令,包括:响应于任一算子启动指令对应的指令发送时刻到达,向所述算子执行设备发送该任一算子启动指令;其中,所述指令发送时刻是基于该任一算子启动指令对应的指令执行时刻确定的。
第三方面,本公开实施例还提供一种调度装置,所述装置包括:
解析模块,用于对深度学习模型进行解析,得到所述深度学习模型中的多个算子;
生成模块,用于基于多个所述算子分别对应的运算信息以及算子执行设备的算力信息,确定在执行多个所述算子时对所述算子执行设备中的运算单元的调度策略;其中,每个任务块包括对应算子中的多个子任务;调度模块,用于基于所述调度策略调度所述运算单元执行多个所述算子。
一种可能的实施方式中,所述多个算子分别对应的运算信息包括多个所述算子分别对应的任务块的执行时长、及多个所述算子之间的并行度;其中,每个任务块包括对应算子中的多个子任务。
一种可能的实施方式中,所述获取模块,在获取多个所述算子分别对应的任务块的执行时长时,用于:基于所述任务块在执行时需要占用的内存、以及所述运算单元的算力信息,估算执行所述任务块所需要的执行时长。
一种可能的实施方式中,所述获取模块,在基于所述任务块在执行时需要占用的内存、以及所述运算单元的算力信息,估算执行所述任务块所需要的执行时长时,用于:基于所述算子在执行时所需要占用的内存、以及所述运算单元对所述内存的访存带宽,确定访存时长;以及基于所述任务块中的每个子任务中的各计算步骤所需要的算力信息,以及所述每个运算单元的算力信息,确定所述任务块的计算时长;基于所述访存时长以及所述计算时长,确定执行所述任务块所需要的执行时长。
一种可能的实施方式中,所述获取模块,获取多个所述算子分别对应的任务块的执行时长时,用于:基于所述算子,确定与所述算子对应的仿真模型;运行所述仿真模型,并基于所述仿真模型的运行时长,确定所述算子的各个任务块所需要的执行时长。
一种可能的实施方式中,所述获取模块,在基于所述仿真模型的运行时长,确定所述算子的各个任务块所需要的执行时长时,用于:根据运行所述仿真模型的算子执行设备中运算单元的尺寸、以及所述算子在执行时需要处理的数据量,确定在仿真过程中将所述算子划分得到的任务块的数量;根据仿真过程中将所述算子划分得到的任务块的数量、以及运行所述仿真模型的算子执行设备中运算单元的数量,确定需要处理的批次;基于所述批次、以及所述仿真模型的运行时长,确定多个所述算子分别对应的任务块的执行时长。
一种可能的实施方式中,所述生成模块,在基于多个所述算子分别对应的运算信息以及算子执行设备的算力信息,确定在执行多个所述算子时对所述算子执行设备中的运算单元的调度策略时,用于:构建多个所述算子分别对应任务块的执行时长、多个所述算子分别对应的任务块数量、多个所述算子之间的并行度、所述算子执行设备的算力信息、调度策略参数,与多个所述算子的执行总时长之间的关联关系;以降低所述执行总时长为目标,基于所述关联关系,对所述调度策略参数进行调整,得到目标调度策略。
一种可能的实施方式中,所述生成模块,在构建多个所述算子分别对应任务块的执行时长、多个所述算子分别对应的任务块数量、多个所述算子之间的并行度、所述算子执行设备的算力信息、调度策略参数,与多个所述算子的执行总时长之间的关联关系时,用于:以多个所述算子分别对应的任务块的执行时长、多个所述算子分别对应的任务块数量、所述算子执行设备的算力信息为参数,以所述调度策略参数为自变量,以多个所述算子的执行总时长为因变量,以算子之间的并行度为约束条件,构建关系方程;将所述关系方程作为所述关联关系。
一种可能的实施方式中,所述调度策略参数包括下述至少一项:与多个所述算子分别对应的至少一个执行时刻、在所述至少一个执行时刻中的每个执行时刻对应的起始任务块的任务块标识、所需运算单元的数量、以及执行所述算子的运算单元的标识。
一种可能的实施方式中,所述调度模块,在基于所述调度策略调度所述运算单元执行多个所述算子时,用于:基于所述调度策略,生成算子启动指令;向所述算子执行设备发送所述算子启动指令;所述算子启动指令用于所述算子执行设备按照与所述算子启动指令所指示的方式,执行与所述算子启动指令对应的算子。
一种可能的实施方式中,所述调度策略参数包括:与多个所述算子分别对应的算子执行时刻;所述调度模块,在向所述算子执行设备发送所述算子启动指令时,用于:响应于任一算子启动指令对应的指令发送时刻到达,向所述算子执行设备发送该任一算子启动指令;其中,所述指令发送时刻是基于该任一算子启动指令对应的指令执行时刻确定的。
第四方面,本公开实施例还提供一种芯片,包括如第一方面、或第一方面任一项所述的调度系统。
第五方面,本公开可选实现方式还提供一种计算机设备,包括:如第四方面所述的芯片。
第六方面,本公开可选实现方式还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
关于上述调度方法、装置、芯片、计算机设备、及计算机可读存储介质的效果描述参见上述调度方法的说明,这里不再赘述。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的一种调度方法的流程图;
图2示出了本公开实施例所提供的调度方法应用的具体架构示例;
图3示出了本公开实施例所提供的调度方法中,确定调度策略的具体方法的流程图;
图4示出了本公开实施例所提供的调度方法中,调度算子执行设备中的运算单元执行多个算子的具体方法的流程图;
图5示出了本公开实施例所提供的一种调度装置的流程图;
图6示出了本公开实施例所提供的算子执行方法的流程图;
图7示出了本公开实施例所提供的调度系统的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
经研究发现,随着人工智能的广泛使用,深度学习的模型和数据量也不断增大,这自然导致需要计算机执行的算子或者操作大增,对计算机中计算资源的调度开销占比越来越大。一方面,运行有如TensorFlow、Pytorch、Paddlepaddle等深度学习框架的主机(Host)通过解析各种深度学习模型,得到深度模型中的算子,并简单地将各类算子派发到算子执行设备;算子执行设备负责对算力的调度和算子执行。主机无法知道执行设备中计算资源的状态,因而也就不能根据执行设备中计算资源的状态,控制算子的下发,导致计算效率下降。
另一方面,神经网络训练过程中,深度学习模型的训练系统需要执行的算子包括单纯的计算类算子和通信类算子,单纯的计算类算子例如包括卷积算子、全连接算子等;通信类算子例如包括allreduce算子,执行设备在执行这两种算子的时候,会出现计算和通信抢占计算资源的情况。这不仅导致计算出现巨大的波动或抖动,而且显著地降低了这个训练系统的效率。
基于上述研究,本公开提供了一种调度方法,通过主机基于深度学习模型中的多个算子分别对应的运算信息以及执行设备的算力信息,确定在执行算子时对运算单元的调度策略,并基于该调度策略调度运算单元执行算子,从而能够根据预先对执行设备执行算子的具体过程进行规划,控制算子的下发,提升对执行设备中计算资源的利用率。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种调度方法进行详细介绍,本公开实施例所提供的调度方法的执行主体例如为计算机设备中的主机,该主机例如为计算机中的中央处理器CPU。在一些可能的实现方式中,该调度方法可以通过主机调用存储器中存储的计算机可读指令的方式来实现。
下面以执行主体为主机为例,对本公开实施例提供的调度方法加以说明。
参见图1所示,为本公开实施例提供的调度方法的流程图,所述方法包括步骤S101~S103,其中:
S101:对深度学习模型进行解析,得到所述深度学习模型中的多个算子;
S102:基于多个所述算子分别对应运算信息以及算子执行设备的算力信息,确定在执行多个所述算子时对所述算子执行设备中的运算单元的调度策略;
S103:基于所述调度策略调度所述运算单元执行多个所述算子。
本公开实施例通过主机基于深度学习模型中的多个算子分别对应的运算信息以及执行设备的算力信息,确定在执行算子时对运算单元的调度策略,并基于该调度策略调度运算单元执行算子,从而能够根据预先对执行设备执行算子的具体过程进行规划,控制算子的下发,提升对执行设备中计算资源的利用率。
下面以将本公开实施例提供的调度方法应用于深度学习领域为例,对对上述S101~S103加以详细说明。
针对上述S101:在计算机设备中可以部署深度学习框架、或者深度模型训练系统;计算机设备中的处理器可以在深度学习框架的环境下,执行深度学习模型;或者处理器在深度模型训练系统的环境下,对待训练的深度学习模型进行训练。
处理器在执行深度学习模型,或者对深度学习模型进行训练时,例如可以对深度学习模型进行解析,得到深度学习模型中包括的多个算子;算子例如包括计算类算子和通信类算子,其中,计算类算子例如包括:卷积算子、全连接算子、激活算子等;通信类算子例如包括:全局规约算子allreduce,全局收集算子allgather,syncBN等。
针对上述S102:
在具体实施中,算子执行设备例如包括:GPU、AI加速卡等;现在常用的AI加速器硬件架构主要包括了执行单元、以及调度器等,其中,算子执行设备中的执行单元,例如包括GPU中的处理核。
示例性的,如图2所示,本公开实施例还提供一种通过主机、以及执行设备执行深度学习任务的具体示例;其中,主机用于对深度学习模型进行解析,得到算子,并将算子下发至流队列,其例如为计算机设备中的中央处理器;执行设备中包括算子调度器(kernelscheduler)、以及执行单元;线程块调度器(Block scheduler)、以及多个运算单元;在本公开实施例中,主机在将算子下发至流队列中之前,会利用本公开实施例提供的调度方法,得到调度策略,然后利用调度策略生成具体的算子执行指令,并将算子执行指令下发至流队列。
算子调度器从流队列(SQ)中获取算子执行指令,基于算子的类型,将算子执行指令派发至不同的执行单元,执行单元有多种;种类不同的执行单元可以执行不同的算子;其中,算子类型例如包括:用于执行计算任务的计算算子、用于执行数据拷贝任务的算子、用于进行数据同步任务的。相应的,不同类型的执行单元由于结构的差异,所能够执行的算子类型也不同。
在用于执行计算任务的执行单元中,包括了线程块调度器(Block scheduler)以及多个运算单元。其中,线程块调度器,用于接收算子调度器派发的执行指令,并将算子分解为多个任务块(block);每个block中,包括多个子任务。线程块调度器能够感知到运算单元的是否处于工作状态,在得到block后,根据算子执行指令中携带的调度策略的相关信息,将block派发至对应的运算单元。运算单元在接收到block后,执行与block对应的计算任务。
在每个运算单元一般由二维处理引擎(Processing Engine,PE)阵列和寄存器阵列(local register file)构成,在每个PE中,包括了乘加器等计算元件,用于执行每个block具体的计算任务。每个运算单元,能够同时对多个数据进行同步处理,例如某个运算单元的中的PE阵列中包括S个PE,S个PE能够同步对S个数据进行同步处理;也即,该运算单元最多能够对S个数据进行同步处理。对每个数据进行处理的任务,称为一个子任务,由一个运算单元中的S个PE同步完成的S个子任务构成一个任务块。
算子对应的任务块数量,和运算单元的配置相关;其中,假设算子对应的待处理数据的数量包括H个,每个运算单元中PE阵列中PE的数量为S个,则算子对应的任务块的数量为:对H/S向上取整得到的整数。例如,待处理数据为图像数据,该图像数据的尺寸为w*h*c,其中,w表示图像宽度,h表示图像高度,c表示图像的通道数,则对应的待处理数据的数量H满足:H=w*h*c。
针对每个任务块,由于会利用一个运算单元,对该任务块对应的多个子任务进行同步处理,因此,任务块对应的任务块执行时长,和执行一个子任务对应的执行时长相同、或近似相等。该子任务例如是对图像数据中任一数据的处理任务。
多个算子分别对应的任务块的执行时长,是指算子执行设备执行对应算子的一个任务块时所需要消耗的时长;因此,在本公开另一实施例中,在确定调度策略之前,还包括:获取多个所述算子分别对应的任务块的执行时长。任务块的执行时长的确定方式可采用但不限于下述(1)或(2)中至少一种:
(1)基于所述任务块在执行时需要占用的内存、以及所述运算单元的算力信息,估算执行所述任务块所需要的执行时长。
在具体实施中,运算单元的算力信息,例如包括运算单元每秒所执行运算次数(operations per second,ops);其中,例如可以采用下述方式确定各个运算单元的算力信息:确定运算单元中包括的PE的数量,其中,一个PE每秒能够执行n次运算,其表征一个PE的算力信息;根据运算单元中包括的PE的数量、以及每个PE的算力信息,确定运算单元的算力信息,也即一个运算单元的总OPS数,其中,运算单元的算力信息满足:R*P*n。其中,R表示一个运算单元中PE的数量,P表示执行单元中包括的运算单元的数量。
在基于所述任务块在执行时需要占用的内存、以及所述运算单元的算力信息,估算执行所述任务块所需要的执行时长时,例如可以基于所述算子在执行时所需要占用的内存、以及所述运算单元对所述内存的访存带宽,确定访存时长;以及基于所述任务块中的每个子任务中的各计算步骤所需要的算力信息,以及所述每个运算单元的算力信息,确定所述任务块的计算时长;
基于所述访存时长以及所述计算时长,确定执行所述任务块所需要的执行时长。
其中,任务块在在执行时所需要访问的内存,能够表征任务块在执行时所要处理的数据量;由于算子的类型已知,进而在执行算子时的各个子任务的计算步骤是可以确定的,因此可以根据PE在执行一种计算操作时所需要的ops,例如,PE为乘加器,其能够用于执行乘加操作,每次乘加操作,需要2个ops;各个子任务的计算步骤已知,也即需要的计算操作已知,进而能够根据各个计算步骤分别对应操作所需要的ops,确定每个计算步骤需要消耗的ops;然后根据子任务的具体计算步骤,确定一个子任务的计算时长;一个任务块包括通过多个PE并行执行多个子任务,因此,每个子任务的计算时长,也即任务块的计算时长。
根据一个任务块对应的访存任务所需要访问内存的数据量、以及访带宽,确定任务块的访存时长。
基于计算时长、以及访存时长,确定执行一个任务块所需要的执行时长。
示例性的,算子例如为矩阵乘算子,每个任务块中的计矩阵乘任务满足:CMN=AMK*BKN,其中,M和K分别表示操作数A的尺寸;K和N分别表示操作数B的尺寸;每个数据需要占用b个比特数,则算子在执行时所需要访问内存的数据量(访存数据量)为(M*K+K*N+M*N)*b/8字节。其中,M*K表示需要从内存中读取的操作数A的数据量;K*N表示需要从内存中读取的操作数B的数据量;M*N表示要将计算结果存入内存中的数据量。执行单元中用于执行算子的每个运算单元中乘加器(也即PE)的数量为M*K*N。
则执行该算子的一个任务块时需要的计算时长为:n*M*K*N÷运算单元的总OPS数;而运算单元在执行算子的一个任务块所需要的访存时长为:访存数据量÷访存带宽。
与该算子对应的第一个任务块的执行时长包括:计算时长和访存时长的和,进而,可以得到该矩阵乘算子中一个任务块的执行时长为:n*M*K*N÷运算单元的总OPS数+访存数据量÷访存带宽。
(2)基于所述算子,确定与所述算子对应的仿真模型;运行所述仿真模型,并基于所述仿真模型的运行时长,确定所述算子的各个任务块的执行时长。
在具体实施中,基于算子确定的与算子对应的仿真模型中,仅包含该算子,而不包含其他的算子。其中,该算子在仿真模型中的参数,与该算子在深度学习模型中的参数一致。然后运行该仿真模型,得到仿真模型的运行时长。
由于运行仿真模型的算子执行设备中运算单元的尺寸W*H、以及数量S已知,因此,可以根据运行仿真模型的算子执行设备中运算单元的尺寸W*H、以及算子需要处理的数据量U,确定在仿真过程中将算子划分得到的任务块的数量U/(W*H),然后,由于多个运算单元能够同步对多个任务块对应进行处理,因此,可以根据任务块的数量、以及运算单元的数量S,确定需要处理的批次U/(W*H)/S。然后根据仿真模型的运行时长T、以及需要处理的批次,得到各个任务块的执行时长:T/(U/(W*H)/S)
这里,运行仿真模型的时候,所使用的执行设备的配置、与运行深度学习模型时算子执行设备的配置一致,也可以不一致。
计算机设备的处理器在对深度学习模型进行解析,得到深度学习模型包括的多个算子后,根据上述方式(1)或(2)确定各个算子中任务块的执行时长,并根据多个算子分别对应的运算信息以及算子执行设备的算力信息,确定对算子执行设备中的运算单元的调度策略,然后根据调度策略,生成对应的指令,并向算子执行设备中的控制单元发送指令;控制单元基于指令,调度多个运算单元执行对应的算子。
算子分别对应的运算信息,例如包括:多个所述算子分别对应的任务块的执行时长、及多个所述算子之间的并行度;其中,每个任务块包括对应算子中的多个子任务。
参见图3所示,本公开实施例还提供一种确定在执行多个所述算子时对所述运算单元的调度策略的具体方法,包括:
S301:构建多个所述算子分别对应任务块的执行时长、多个所述算子分别对应的任务块数量、多个所述算子之间的并行度、所述算子执行设备的算力信息、调度策略参数,与多个所述算子的执行总时长之间的关联关系。
S302:以降低所述执行总时长为目标,基于所述关联关系,对所述调度策略参数进行调整,得到目标调度策略。
其中,调度策略参数例如包括:与多个所述算子分别对应的至少一个执行时刻、在所述至少一个执行时刻中的每个执行时刻对应的起始任务块的任务块标识、所需运算单元的数量、以及执行所述算子的运算单元的标识。调度策略参数可以用于表征调度策略,比如在调度策略参数包括:与多个所述算子分别对应的至少一个执行时刻、在所述至少一个执行时刻中的每个执行时刻对应的起始任务块的任务块标识、所需运算单元的数量时,响应于任一个算子执行时刻到来,主机向算子执行设备发送一携带了对应的起始任务块的任务块标识、所需运算单元的数量两种信息的算子启动指令,即由调度策略参数表征的调度策略。算子执行设备在接收到算子启动指令后,根据所需运算单元的数量调度运算单元,并控制调度的运算单元根据任务块标识执行任务块。
关联关系,例如可以以方程的形式体现,也即,以多个算子分别对应的任务块的执行时长、多个算子分别对应的任务块数量、算子执行设备的算力信息为参数,以调度策略参数为自变量,以多个算子的执行总时长为因变量,以算子之间的并行度为约束条件,构建关系方程,并以降低执行总时长为优化目标,对关系方程中的自变量不断进行调整,优化执行总时长,最终在执行总时长达到最小(例如在多次优化迭代周期中,不再减小)的情况下,将最终得到的调度策略,作为目标调度策略。
在对自变量不断进行调整的过程中,例如可以执行下述多个迭代周期:
在第0个迭代周期,确定调度策略参数,并根据该调度策略参数、以及关系方程,确定第0个迭代周期的执行总时长。将调度策略参数作为第1个迭代周期的基准调度策略参数,并将第0个迭代周期的执行总时长作为第1个迭代周期的基准执行总时长,进入第1个迭代周期。
在第1个迭代周期,对第1个迭代周期的基准调度策略参数进行调整;基于调整后的调度策略参数以及关系方程,确定新的执行总时长;将新的执行总时长和基准执行总时长进行比对;若新的执行总时长小于基准执行总时长,则将第1个迭代周期确定的调整后的调度策略参数作为第2个迭代周期的基准调度策略参数,并将新的执行总时长作为第2个迭代周期的基准执行总时长,进入第2个迭代周期;若新的执行总时长大于或者等于基准执行总时长,则将第1个迭代周期的基准调度策略参数作为第2个迭代周期的基准调度策略参数,并将第1个迭代周期的基准执行总时长作为第2个迭代周期的基准执行总时长,进入第2个迭代周期。
……
在第i个迭代周期,对第i个迭代周期的基准调度策略参数进行调整;基于调整后的调度策略参数以及关系方程,确定新的执行总时长;将新的执行总时长和基准执行总时长进行比对;若新的执行总时长小于基准执行总时长,则将第i个迭代周期确定的调整后的调度策略参数作为第(i+1)个迭代周期的基准调度策略参数,并将新的执行总时长作为第(i+1)个迭代周期的基准执行总时长,进入第(i+1)个迭代周期;若新的执行总时长大于或者等于基准执行总时长,则将第i个迭代周期的基准调度策略参数作为第(i+1)个迭代周期的基准调度策略参数,并将第i个迭代周期的基准执行总时长作为第(i+1)个迭代周期的基准执行总时长,进入第(i+1)个迭代周期。
迭代执行上述过程,直至连续的n个迭代周期内,基准执行总时长不再发生变化。
另一种实施例中,上述算子的执行策略,可以是在执行某个深度学习模型之前,根据深度学习模型、以及算子执行设备确定的,也可以是预先针对某个深度学习模型,为该深度学习模型在多种算子执行设备执行时,确定好的与每种算子执行设备对应的调度策略;在执行深度学习模型时,可以直接通过提供的接口,调用与所使用算子执行设备对应的调度策略。
需要说明的是,本公开并不限制上述关联关系对应的方程形式,使用本公开所提供方案的用户可以根据自身的需要,以及应用本公开所提供方案的硬件环境(比如运算单元的数量、算力、需要执行的任务等)确定对应的方程形式,或者结合一定的算法确定对应的方程形式,并采用上述迭代方法对方程进行调整,在执行总时长达到最小的条件下,得到对应的调度策略参数,即得到调度策略。
示例性的,深度学习框架对深度学习模型进行解析后,得到的算子包括:A、B、C、D。A、B、C、D之间的并行度包括:A和B需要顺序执行,C和D需要顺序执行;而AB和CD无依赖关系,即AC、AD、BC、BD可并行执行;算子B的执行优先级高于算子C和算子D。
根据上述(1)或(2)任一种方式,确定A、B、C和D分别对应的任务块的数量、和每个任务块需要运行的执行时长分别如下表1所示:
表1
算子 | thread | cycle |
A | 68 | 20 |
B | 8 | 80 |
C | 60 | 20 |
D | 48 | 20 |
其中,thread表示任务块,cycle表示任务块的执行时长,单位为:处理周期。
在算子执行设备中,运算单元的数量为16;每个运算单元能够同步处理一个任务块中的多个子任务。
则在利用算子执行设备串行执行各个算子分别对应的理论耗时如下表2所示:
表2
算子 | thread | cycle | 串行调度 | 理论耗时 |
A | 68 | 20 | 100 | 1360 |
B | 8 | 80 | 80 | 640 |
C | 60 | 20 | 80 | 1200 |
D | 48 | 20 | 60 | 960 |
total | 320 | 260 |
串行调度,表示在执行任一算子时需要的处理周期数。
以算子A为例,其包括68个任务块,由于在算子执行设备中包括16个运算单元,则要执行算子A,则需要的计算批次为:68/16=4.25;由于是串行执行多个算子,因此在执行算子A的时候,任一批次的处理过程中无论是否会实际使用所有的运算单元,均会调度所有运算单元,因此,需要5个批次实现对算子的处理。每个批次占用20个处理周期,则5个批次所需要的处理周期为20*5=100,也即处理算子A对应的任务,需要100个处理周期。
理论耗时:表示执行算子A需要的理论处理周期数。以算子A为例,其包括68个任务块,每个任务块的执行时长为20个处理周期,则理论处理周期数为:68*20=1360个处理周期。
可以得知:四个算子的总执行时长为:320个处理周期。
而理论上,四个算子的总执行时长=sum(thread*cycle)/16=260。
若采用现有技术,通过GPU对运算单元进行调度,则调度的具体过程如下表3所示:
表3
时间 | A | B | C | D |
0 | 16x80 | |||
80 | 4x20 | 12x20 | ||
100 | 8x80 | 8x80 | ||
180 | 16x20 | |||
200 | 4x20 | |||
220 | 16x60 | |||
280 | done |
其中,时间表示:第i个处理周期。对于上述A~D四个算子:
在第0个处理周期,将16个运算单元均分配给算子A,并执行80个处理周期;
在第80个处理周期,将4个运算单元分配给算子A,执行20个处理周期,算子A被执行完毕;以及将12个运算单元分配给算子C,执行20个处理周期。
在第100个处理周期,由于算子B的执行优先级高于算子C的执行优先级,因此将8个运算单元分配给算子B,先执行80个处理周期,算子B被执行完毕;将空闲的8个运算单元分配给算子C,执行80个处理周期;
在第180个处理周期,将16个运算单元均分配给算子C,执行20个处理周期。
在第200个处理周期,将4个运算单元分配给算子C,执行20个处理周期,算子C被执行完毕。
在第220个处理周期,将16个运算单元分配给算子D,执行60个处理周期,算子D被执行完毕。
到第280个处理周期,算子A~D均被执行完毕。
若采用本公开实施例提供的调度方法,则调度的具体过程如下表4所示:
表4
其中,对于上述四个算子A~D,
在第0个处理周期,将16个运算单元均分配给算子A,并执行20个处理周期。
在第20个处理周期,将8个运算单元分配给算子A,并执行120个处理周期,将8个运算单元分配给算子C,执行120个处理周期。
在第140个处理周期,将4个运算单元分配给算子A,执行20个处理周期,算子A被执行完毕;以及将12个运算单元分配给算子C,并执行20个处理周期,算子C被执行完毕。
在第160个处理周期,将8个运算单元分配给算子B,执行80个处理周期,算子B被执行完毕;以及将8个运算单元分配给算子D,执行80个处理周期。
在第240个处理周期,将16个运算单元分配给算子D,执行20个处理周期,算子D被执行完毕。
在第260个处理周期,算子A~D均被执行完毕。
由此可见,利用GPU调度需要280个处理周期,而采用本公开实施例提供的调度方法进行调度,则只需要260个处理周期,因而,本公开实施例提供的调度方法,能够提升算子的执行效率,能够对算力进行更充分的利用,提升算力的利用率。
针对上述S103:
参见图4所示,本公开实施例提供一种在得到调度策略后,调度算子执行设备中的运算单元执行多个算子的具体方式,包括:
S401:基于所述调度策略,生成算子启动指令;
S402:向所述算子执行设备发送所述算子启动指令;
所述算子启动指令用于所述算子执行设备按照与所述算子启动指令所指示的方式,执行与所述算子启动指令对应的算子。
一种可能的实施方式中,所述调度策略包括:与多个所述算子分别对应的至少一个算子执行时刻;在向算子执行设备发送算子启动指令时,例如可以采用下述方式:
响应于任一算子启动指令对应的指令发送时刻到达,向所述算子执行设备发送该任一算子启动指令;其中,所述指令发送时刻是基于该任一算子启动指令对应的指令执行时刻确定的。
在生成算子启动指令时,例如要针对每一个算子执行时刻,生成一个与该算子执行时刻对应的算子启动指令。例如,在上述表4对应的示例中,算子执行时刻分别为:第0个处理周期、第20个处理周期、第140个处理周期、第160个处理周期、以及第240个处理周期,则针对第0个处理周期,生成对应的算子启动指令a1;第20个处理周期,生成对应的算子启动指令a2;第140个处理周期,生成对应的算子启动指令a3;第160个处理周期,生成对应的算子启动指令a4;第240个处理周期,生成对应的算子启动指令a5。
针对任一算子启动指令对应的指令发送时刻,例如是在确定了算子启动指令对应的指令执行时刻的时候,将指令执行时刻减少至少一个处理周期数,得到指令发送时刻。例如,在表4所示的示例中,在第0个处理周期,需要将16个运算单元均分配给算子A,则可以将指令发送时刻确定为第-1个处理周期。此处,第i个处理周期,是相对于A~D四个算子而言。
在第20个处理周期,需要将8个运算单元分配给算子A,将8个运算单元分配给算子C,则可以量指令发送时刻确定为第19个处理周期。
在生成的算子启动指令中,例如还可以携带起始任务块的任务块标识、所需运算单元的数量、以及执行所述算子的运算单元的标识中的至少一项。这样,可以将调度的具体方式告知算子执行设备。
主机在向算子执行设备下发算子启动指令时,是将算子启动存储至流队列SQ;算子调度器从流队列中读取算子启动指令,并根据算子启动指令中携带的算子类型,将算子启动指令下发给能够执行算子对应的计算任务的执行单元,也即对应执行单元中的线程块调度器。线程块调度器根据算子启动指令中携带的起始任务块的任务块标识,将算子启动指令拆解为多个需要执行的任务块(可能包括算子中的部分任务块),并根据所需运算单元的数量、或者执行所述算子的运算单元的标识,将任务块下发至对应的运算单元进行处理。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与调度方法对应的调度装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述调度方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参照图5所示,为本公开实施例提供的一种调度装置的示意图,所述装置包括:
解析模块51,用于对深度学习模型进行解析,得到所述深度学习模型中的多个算子;
生成模块52,用于基于多个所述算子分别对应的运算信息以及算子执行设备的算力信息,确定在执行多个所述算子时对所述算子执行设备中的运算单元的调度策略;其中,每个任务块包括对应算子中的多个子任务;
调度模块53,用于基于所述调度策略调度所述运算单元执行多个所述算子。
一种可能的实施方式中,所述多个算子分别对应的运算信息包括多个所述算子分别对应的任务块的执行时长、及多个所述算子之间的并行度;其中,每个任务块包括对应算子中的多个子任务。
一种可能的实施方式中,还包括:获取模块54,用于获取多个所述算子分别对应的任务块的执行时长。
一种可能的实施方式中,所述获取模块54,在获取多个所述算子分别对应的任务块的执行时长时,用于:
基于所述任务块在执行时需要占用的内存、以及所述运算单元的算力信息,估算执行所述任务块所需要的执行时长。
一种可能的实施方式中,所述获取模块54,在基于所述任务块在执行时需要占用的内存、以及所述运算单元的算力信息,估算执行所述任务块所需要的执行时长时,用于:
基于所述算子在执行时所需要占用的内存、以及所述运算单元对所述内存的访存带宽,确定访存时长;以及
基于所述任务块中的每个子任务中的各计算步骤所需要的算力信息,以及所述每个运算单元的算力信息,确定所述任务块的计算时长;
基于所述访存时长以及所述计算时长,确定执行所述任务块所需要的执行时长。
一种可能的实施方式中,所述获取模块54,获取多个所述算子分别对应的任务块的执行时长时,用于:
基于所述算子,确定与所述算子对应的仿真模型;
运行所述仿真模型,并基于所述仿真模型的运行时长,确定所述算子的各个任务块所需要的执行时长。
一种可能的实施方式中,所述获取模块54,在基于所述仿真模型的运行时长,确定所述算子的各个任务块所需要的执行时长时,用于:
根据运行所述仿真模型的算子执行设备中运算单元的尺寸、以及所述算子在执行时需要处理的数据量,确定在仿真过程中将所述算子划分得到的任务块的数量;
根据仿真过程中将所述算子划分得到的任务块的数量、以及运行所述仿真模型的算子执行设备中运算单元的数量,确定需要处理的批次;
基于所述批次、以及所述仿真模型的运行时长,确定多个所述算子分别对应的任务块的执行时长。
一种可能的实施方式中,所述生成模块52,在基于多个所述算子分别对应的任务块的执行时长、多个所述算子之间的并行度、以及算子执行设备的算力信息,确定在执行多个所述算子时对所述算子执行设备中的运算单元的调度策略时,用于:
构建多个所述算子分别对应任务块的执行时长、多个所述算子分别对应的任务块数量、多个所述算子之间的并行度、所述算子执行设备的算力信息、所述调度策略,与多个所述算子的执行总时长之间的关联关系;
以降低所述执行总时长为目标,基于所述关联关系,对所述调度策略参数进行调整,得到目标调度策略。
一种可能的实施方式中,所述生成模块52,在构建多个所述算子分别对应任务块的执行时长、多个所述算子分别对应的任务块数量、多个所述算子之间的并行度、所述算子执行设备的算力信息、调度策略参数,与多个所述算子的执行总时长之间的关联关系时,用于:
以多个所述算子分别对应的任务块的执行时长、多个所述算子分别对应的任务块数量、所述算子执行设备的算力信息为参数,以所述调度策略参数为自变量,以多个所述算子的执行总时长为因变量,以算子之间的并行度为约束条件,构建关系方程;将所述关系方程作为所述关联关系。
一种可能的实施方式中,所述调度策略参数包括下述至少一项:
与多个所述算子分别对应的至少一个执行时刻、在所述至少一个执行时刻中的每个执行时刻对应的起始任务块的任务块标识、所需运算单元的数量、以及执行所述算子的运算单元的标识。
一种可能的实施方式中,所述调度模块53,在基于所述调度策略调度所述运算单元执行多个所述算子时,用于:
基于所述调度策略,生成算子启动指令;
向所述算子执行设备发送所述算子启动指令;
所述算子启动指令用于所述算子执行设备按照与所述算子启动指令所指示的方式,执行与所述算子启动指令对应的算子。
一种可能的实施方式中,所述调度策略参数包括:与多个所述算子分别对应的算子执行时刻;
所述调度模块53,在向所述算子执行设备发送所述算子启动指令时,用于:响应于任一算子启动指令对应的指令发送时刻到达,向所述算子执行设备发送该任一算子启动指令;其中,所述指令发送时刻是基于该任一算子启动指令对应的指令执行时刻确定的。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
参见图6所示,本公开实施例还提供一种算子执行方法,包括:
S601:主机对深度学习模型进行解析,得到所述深度学习模型中的多个算子;基于多个所述算子分别对应的运算信息以及算子执行设备的算力信息,确定在执行多个所述算子时对所述算子执行设备中的运算单元的调度策略;基于所述调度策略,生成算子启动指令;向所述算子执行设备发送所述算子启动指令;
S602:算子执行设备接收所述主机发送的算子启动指令,并按照与所述算子启动指令所指示的方式,执行与所述算子启动指令对应的算子。
本公开实施例通过基于深度学习模型中的多个算子分别对应的运算信息以及执行设备的算力信息,确定在执行算子时对运算单元的调度策略,并基于该调度策略调度运算单元执行算子,从而能够根据预先对执行设备执行算子的具体过程进行规划,控制算子的下发,提升对执行设备中计算资源的利用率。
参见图7所示,本公开实施例还提供一种调度系统,该调度系统为硬件系统,包括:
主机71、以及算子执行设备72;
所述主机71,用于对深度学习模型进行解析,得到所述深度学习模型中的多个算子;基于多个所述算子分别对应的运算信息以及算子执行设备的算力信息,确定在执行多个所述算子时对所述算子执行设备中的运算单元的调度策略;
所述算子执行设备72,用于基于所述主机的调度策略执行多个所述算子。
一种可能的实施方式中,所述多个算子分别对应的运算信息包括多个所述算子分别对应的任务块的执行时长、及多个所述算子之间的并行度;
其中,每个任务块包括对应算子中的多个子任务。
一种可能的实施方式中,所述主机71,在获取多个所述算子分别对应的任务块的执行时长时,用于:
基于所述任务块在执行时需要占用的内存、以及所述运算单元的算力信息,估算执行所述任务块所需要的执行时长。
一种可能的实施方式中,所述主机71,在基于所述任务块在执行时需要占用的内存、以及所述运算单元的算力信息,估算执行所述任务块所需要的执行时长时,用于:
基于所述算子在执行时所需要占用的内存、以及所述运算单元对所述内存的访存带宽,确定访存时长;以及
基于所述任务块中的每个子任务中的各计算步骤所需要的算力信息,以及所述每个运算单元的算力信息,确定所述任务块的计算时长;
基于所述访存时长以及所述计算时长,确定执行所述任务块所需要的执行时长。
一种可能的实施方式中,所述主机71,在获取多个所述算子分别对应的任务块的执行时长时,用于:
基于所述算子,确定与所述算子对应的仿真模型;
运行所述仿真模型,并基于所述仿真模型的运行时长,确定所述算子的各个任务块所需要的执行时长。
一种可能的实施方式中,所述主机71,在基于所述仿真模型的运行时长,确定所述算子的各个任务块所需要的执行时长时,用于:
根据运行所述仿真模型的算子执行设备72中运算单元的尺寸、以及所述算子在执行时需要处理的数据量,确定在仿真过程中将所述算子划分得到的任务块的数量;
根据仿真过程中将所述算子划分得到的任务块的数量、以及运行所述仿真模型的算子执行设备72中运算单元的数量,确定需要处理的批次;
基于所述批次、以及所述仿真模型的运行时长,确定多个所述算子分别对应的任务块的执行时长。
一种可能的实施方式中,所述主机71,在基于多个所述算子分别对应的运算信息以及算子执行设备72的算力信息,确定在执行多个所述算子时对所述算子执行设备72中的运算单元的调度策略时,用于:
构建多个所述算子分别对应任务块的执行时长、多个所述算子分别对应的任务块数量、多个所述算子之间的并行度、所述算子执行设备72的算力信息、调度策略参数,与多个所述算子的执行总时长之间的关联关系;
以降低所述执行总时长为目标,基于所述关联关系,对所述调度策略参数进行调整,得到目标调度策略。
一种可能的实施方式中,所述主机71,在构建多个所述算子分别对应任务块的执行时长、多个所述算子分别对应的任务块数量、多个所述算子之间的并行度、所述算子执行设备72的算力信息、调度策略参数,与多个所述算子的执行总时长之间的关联关系时,用于:
以多个所述算子分别对应的任务块的执行时长、多个所述算子分别对应的任务块数量、所述算子执行设备72的算力信息为参数,以所述调度策略参数为自变量,以多个所述算子的执行总时长为因变量,以算子之间的并行度为约束条件,构建关系方程;将所述关系方程作为所述关联关系。
一种可能的实施方式中,所述调度策略参数包括下述至少一项:
与多个所述算子分别对应的至少一个执行时刻、在所述至少一个执行时刻中的每个执行时刻对应的起始任务块的任务块标识、所需运算单元的数量、以及执行所述算子的运算单元的标识。
一种可能的实施方式中,所述主机71,在基于所述调度策略调度所述运算单元执行多个所述算子,包括:
基于所述调度策略,生成算子启动指令;
向所述算子执行设备72发送所述算子启动指令;
所述算子执行设备72,在基于所述主机71的调度执行多个所述算子时,用于:响应于接收到所述主机71发送的所述算子启动指令,按照与所述算子启动指令所指示的方式,执行与所述算子启动指令对应的算子。
一种可能的实施方式中,所述调度策略参数包括:与多个所述算子分别对应的算子执行时刻;所述算子启动指令,包括:与多个算子分别对应的算子启动指令;
所述主机71,在向所述算子执行设备72发送所述算子启动指令时,用于:响应于任一算子启动指令对应的指令发送时刻到达,向所述算子执行设备72发送该任一算子启动指令;其中,所述指令发送时刻是基于该任一算子启动指令对应的指令执行时刻确定的。
本公开实施例还提供一种芯片,包括如本公开实施例提供的调度系统。
本公开实施例还提供了一种计算机设备,包括如本公开实施例所述的芯片。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的调度方法或者算子执行方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品承载有程序代码,所述程序代码包括的指令可用于执行上述方法实施例中所述的调度方法或者算子执行方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个运算单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。
Claims (16)
1.一种调度系统,其特征在于,包括:主机以及算子执行设备;
所述主机,用于对深度学习模型进行解析,得到所述深度学习模型中的多个算子;基于多个所述算子分别对应的运算信息以及算子执行设备的算力信息,确定在执行多个所述算子时对所述算子执行设备中的运算单元的调度策略;
所述算子执行设备,用于基于所述主机的调度策略执行多个所述算子。
2.根据权利要求1所述的调度装置,其特征在于,所述多个算子分别对应的运算信息包括多个所述算子分别对应的任务块的执行时长、及多个所述算子之间的并行度;
其中,每个任务块包括对应算子中的多个子任务。
3.根据权利要求1或2所述的调度系统,其特征在于,所述主机,在获取多个所述算子分别对应的任务块的执行时长时,用于:
基于所述任务块在执行时需要占用的内存、以及所述运算单元的算力信息,估算执行所述任务块所需要的执行时长。
4.根据权利要求3所述的调度系统,其特征在于,所述主机,在基于所述任务块在执行时需要占用的内存、以及所述运算单元的算力信息,估算执行所述任务块所需要的执行时长时,用于:
基于所述算子在执行时所需要占用的内存、以及所述运算单元对所述内存的访存带宽,确定访存时长;以及
基于所述任务块中的每个子任务中的各计算步骤所需要的算力信息,以及所述每个运算单元的算力信息,确定所述任务块的计算时长;
基于所述访存时长以及所述计算时长,确定执行所述任务块所需要的执行时长。
5.根据权利要求1或2所述的调度系统,其特征在于,所述主机,在获取多个所述算子分别对应的任务块的执行时长时,用于:
基于所述算子,确定与所述算子对应的仿真模型;
运行所述仿真模型,并基于所述仿真模型的运行时长,确定所述算子的各个任务块所需要的执行时长。
6.根据权利要求5所述的调度系统,其特征在于,所述主机,在基于所述仿真模型的运行时长,确定所述算子的各个任务块所需要的执行时长时,用于:
根据运行所述仿真模型的算子执行设备中运算单元的尺寸、以及所述算子在执行时需要处理的数据量,确定在仿真过程中将所述算子划分得到的任务块的数量;
根据仿真过程中将所述算子划分得到的任务块的数量、以及运行所述仿真模型的算子执行设备中运算单元的数量,确定需要处理的批次;
基于所述批次、以及所述仿真模型的运行时长,确定多个所述算子分别对应的任务块的执行时长。
7.根据权利要求2-6任一项所述的调度系统,其特征在于,所述主机,在基于多个所述算子分别对应的运算信息以及算子执行设备的算力信息,确定在执行多个所述算子时对所述算子执行设备中的运算单元的调度策略时,用于:
构建多个所述算子分别对应任务块的执行时长、多个所述算子分别对应的任务块数量、多个所述算子之间的并行度、所述算子执行设备的算力信息、调度策略参数,与多个所述算子的执行总时长之间的关联关系;
以降低所述执行总时长为目标,基于所述关联关系,对所述调度策略参数进行调整,得到目标调度策略。
8.根据权利要求7所述的调度系统,其特征在于,所述主机,在构建多个所述算子分别对应任务块的执行时长、多个所述算子分别对应的任务块数量、多个所述算子之间的并行度、所述算子执行设备的算力信息、调度策略参数,与多个所述算子的执行总时长之间的关联关系时,用于:
以多个所述算子分别对应的任务块的执行时长、多个所述算子分别对应的任务块数量、所述算子执行设备的算力信息为参数,以所述调度策略参数为自变量,以多个所述算子的执行总时长为因变量,以算子之间的并行度为约束条件,构建关系方程。
9.根据权利要求7或8所述的调度系统,其特征在于,所述调度策略参数包括下述至少一项:
与多个所述算子分别对应的至少一个执行时刻、在所述至少一个执行时刻中的每个执行时刻对应的起始任务块的任务块标识、所需运算单元的数量、以及执行所述算子的运算单元的标识。
10.根据权利要求7-9任一项所述的调度系统,其特征在于,所述主机,在基于所述调度策略调度所述运算单元执行多个所述算子,包括:
基于所述调度策略,生成算子启动指令;
向所述算子执行设备发送所述算子启动指令;
所述算子执行设备,在基于所述主机的调度执行多个所述算子时,用于:响应于接收到所述主机发送的所述算子启动指令,按照与所述算子启动指令所指示的方式,执行与所述算子启动指令对应的算子。
11.根据权利要求10所述的调度系统,其特征在于,所述调度策略参数包括:与多个所述算子分别对应的算子执行时刻;所述算子启动指令,包括:与多个算子分别对应的算子启动指令;
所述主机,在向所述算子执行设备发送所述算子启动指令时,用于:响应于任一算子启动指令对应的指令发送时刻到达,向所述算子执行设备发送该任一算子启动指令;其中,所述指令发送时刻是基于该任一算子启动指令对应的指令执行时刻确定的。
12.一种调度方法,其特征在于,包括:
对深度学习模型进行解析,得到所述深度学习模型中的多个算子;
基于多个所述算子分别对应的运算信息、以及算子执行设备的算力信息,确定在执行多个所述算子时对所述算子执行设备中的运算单元的调度策略;其中,每个任务块包括对应算子中的多个子任务;
基于所述调度策略调度所述运算单元执行多个所述算子。
13.一种调度装置,其特征在于,包括:
解析模块,用于对深度学习模型进行解析,得到所述深度学习模型中的多个算子;
生成模块,用于基于多个所述算子分别对应的运算信息以及算子执行设备的算力信息,确定在执行多个所述算子时对所述算子执行设备中的运算单元的调度策略;其中,每个任务块包括对应算子中的多个子任务;
调度模块,用于基于所述调度策略调度所述运算单元执行多个所述算子。
14.一种芯片,其特征在于,包括:如权利要求1-11任一项所述的调度系统。
15.一种计算机设备,其特征在于,包括:如权利要求14所述的芯片。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被计算机设备运行时,所述计算机设备执行如权利要求12所述的调度方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111443775.2A CN114090219A (zh) | 2021-11-30 | 2021-11-30 | 调度系统、方法、装置、芯片、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111443775.2A CN114090219A (zh) | 2021-11-30 | 2021-11-30 | 调度系统、方法、装置、芯片、计算机设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114090219A true CN114090219A (zh) | 2022-02-25 |
Family
ID=80305881
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111443775.2A Pending CN114090219A (zh) | 2021-11-30 | 2021-11-30 | 调度系统、方法、装置、芯片、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114090219A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114741172A (zh) * | 2022-04-06 | 2022-07-12 | 深圳鲲云信息科技有限公司 | 人工智能模型的算子调度方法、装置、设备及存储介质 |
CN117151381A (zh) * | 2023-08-16 | 2023-12-01 | 北京航天晨信科技有限责任公司 | 一种面向复杂并发多任务的应急资源测算方法和系统 |
-
2021
- 2021-11-30 CN CN202111443775.2A patent/CN114090219A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114741172A (zh) * | 2022-04-06 | 2022-07-12 | 深圳鲲云信息科技有限公司 | 人工智能模型的算子调度方法、装置、设备及存储介质 |
CN114741172B (zh) * | 2022-04-06 | 2023-05-02 | 深圳鲲云信息科技有限公司 | 人工智能模型的算子调度方法、装置、设备及存储介质 |
CN117151381A (zh) * | 2023-08-16 | 2023-12-01 | 北京航天晨信科技有限责任公司 | 一种面向复杂并发多任务的应急资源测算方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6898496B2 (ja) | 計算グラフの処理 | |
Glushkova et al. | Mapreduce performance model for Hadoop 2. x | |
CN109993299B (zh) | 数据训练方法及装置、存储介质、电子装置 | |
CN114090219A (zh) | 调度系统、方法、装置、芯片、计算机设备及存储介质 | |
CN114138440A (zh) | 算子执行设备、算子调度设备、方法、及芯片 | |
Liang et al. | Data centers job scheduling with deep reinforcement learning | |
CN114217966A (zh) | 基于资源调整的深度学习模型动态批处理调度方法和系统 | |
Wang et al. | SOLAR: Services-oriented deep learning architectures-deep learning as a service | |
Zuk et al. | Reducing response latency of composite functions-as-a-service through scheduling | |
Morchdi et al. | A Resource-efficient Task Scheduling System using Reinforcement Learning | |
Beaumont et al. | Comparison of static and runtime resource allocation strategies for matrix multiplication | |
Ilyashenko et al. | Algorithms for planning resource-intensive computing tasks in a hybrid supercomputer environment for simulating the characteristics of a quantum rotation sensor and performing engineering calculations | |
Canabé et al. | Parallel implementations of the MinMin heterogeneous computing scheduler in GPU | |
Huang et al. | GPU Energy optimization based on task balance scheduling | |
McSweeney et al. | An efficient new static scheduling heuristic for accelerated architectures | |
Kerbyson et al. | Is predictive tracing too late for HPC users? | |
Siddiqui et al. | Design space exploration of embedded applications on heterogeneous cpu-gpu platforms | |
Krömer et al. | An implementation of differential evolution for independent tasks scheduling on GPU | |
Delestrac et al. | Demystifying the TensorFlow eager execution of deep learning inference on a CPU-GPU tandem | |
Hasan et al. | Customized kernel execution on reconfigurable hardware for embedded applications | |
Ferscha et al. | Performance prototyping of parallel applications in n-map | |
US20240220314A1 (en) | Data dependency-aware scheduling | |
US20240320293A1 (en) | Smart threading in matrix multiplication | |
US20240152761A1 (en) | Method and apparatus for using a packet architecture to process neural networks in a neural processing unit | |
US20240220315A1 (en) | Dynamic control of work scheduling |
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 |