CN120011299B - 并行处理方法和装置 - Google Patents
并行处理方法和装置Info
- Publication number
- CN120011299B CN120011299B CN202411958803.8A CN202411958803A CN120011299B CN 120011299 B CN120011299 B CN 120011299B CN 202411958803 A CN202411958803 A CN 202411958803A CN 120011299 B CN120011299 B CN 120011299B
- Authority
- CN
- China
- Prior art keywords
- operator
- processing unit
- input
- unit
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17306—Intercommunication techniques
- G06F15/17318—Parallel communications techniques, e.g. gather, scatter, reduce, roadcast, multicast, all to all
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17306—Intercommunication techniques
- G06F15/17331—Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Complex Calculations (AREA)
Abstract
本公开提供了一种并行处理方法和装置,方法包括:根据第一通信任务确定对应的第一算子;在各个第一处理单元中,对第一算子输入执行第一算子,将得到的第一算子结果数据写入存储单元,并在执行第一算子的过程中,向对应的数据读取单元发送与第一通信任务对应的第一通信指令;响应于第一通信指令,从存储单元中读取第一算子结果数据,并将第一算子结果数据写入第一缓存模块;响应于第一缓存模块中缓存的第一算子结果数据达到第一预设数据量,将第一缓存模块中缓存的第一算子结果数据发送至对应的目标处理单元。基于本公开的并行处理方法,可以提高在处理单元之间对中间数据进行通信的效率。
Description
技术领域
本公开涉及数据处理领域,特别是涉及一种并行处理方法和装置。
背景技术
为了满足神经网络模型对算力的需求,在相关技术中,会使用分布式并行计算的方式来完成神经网络模型的计算任务,例如,使用张量并行或流水并行等方式来并行计算;而在并行计算的过程中,在执行某些算子的计算任务之前,需要对不同处理单元所生成的中间数据进行通信,才能得到执行这些算子所需的中间数据;例如,在数据并行的计算模式下,输入的数据会被分成多个子数据块并分配到不同的处理单元中进行并行计算,而当执行注意力算子时,每个处理单元都需要获取与每个子数据块对应的键矩阵块和值矩阵块,才能进行后续的注意力计算。
在相关技术中,在不同处理单元之间对数据进行通信时,往往是采用CCL通信原语等方式进行通信的,而在使用CCL通信原语时,每个处理单元需要等待需要通信的全部中间数据都被计算出来之后,再对将这些中间数据进行通信,通信和计算的过程是串行执行的,这使得在处理单元之间对中间数据进行通信的效率不高。
发明内容
本公开实施例提供了一种并行处理方法和装置,它能够使得在处理单元之间对中间数据进行通信的过程和计算所需通信中间数据的过程并行执行,提高在处理单元之间对中间数据进行通信的效率。
根据本公开的一方面,提供了一种并行处理方法,应用于并行处理装置,所述并行处理装置包括多个处理单元,各个所述处理单元包括第一缓存模块、通信模块和至少一个计算模块,所述计算模块包括相互对应的计算单元、存储单元和数据读取单元,所述多个处理单元用于对目标模型的模型输入并行执行所述目标模型的各个算子,所述方法包括:
根据第一通信任务确定对应的第一算子,所述第一通信任务指示第一处理单元将执行所述第一算子得到的第一算子结果发送至对应的目标处理单元,所述第一算子是所述目标模型中的算子,所述第一处理单元和所述目标处理单元是所述并行处理装置中的若干个处理单元;
在各个所述第一处理单元中,基于所述第一处理单元的单元输入子块得到所述第一算子的第一算子输入,通过所述计算单元对所述第一算子输入执行所述第一算子,将得到的第一算子结果数据写入所述存储单元,并在所述计算单元执行所述第一算子的过程中,向对应的所述数据读取单元发送与所述第一通信任务对应的第一通信指令,其中所述第一算子结果数据是对所述第一算子输入中的部分数据执行所述第一算子得到的数据;
所述数据读取单元响应于所述第一通信指令,从对应的所述存储单元中读取所述第一算子结果数据,并将所述第一算子结果数据写入所述第一缓存模块;
响应于所述第一缓存模块中缓存的所述第一算子结果数据达到第一预设数据量,通过所述通信模块将所述第一缓存模块中缓存的所述第一算子结果数据作为第一算子结果分块发送至对应的所述目标处理单元,其中,在通过所述通信模块将所述第一算子结果分块发送至对应的所述目标处理单元的同时,通过所述计算模块对所述第一算子输入中未被执行所述第一算子的部分数据执行所述第一算子。
可选地,所述通过所述计算单元对所述第一算子输入执行所述第一算子,将得到的第一算子结果数据写入所述存储单元,包括:
基于第二预设数据量将所述第一算子输入分成有序的多个第一算子输入分块,其中,所述第二预设数据量的第一算子输入分块在执行所述第一算子后,得到所述第一预设数据量的第一算子结果分块;
通过所述计算单元依次对所述多个第一算子输入分块执行所述第一算子,得到各个第一算子输入分块对应的第一算子结果分块,并依次将各个第一算子结果分块写入所述存储单元;
所述响应于所述第一缓存模块中缓存的所述第一算子结果数据达到第一预设数据量,将所述第一缓存模块中缓存的所述第一算子结果数据作为第一算子结果分块发送至对应的所述目标处理单元,包括:
在对单个所述第一算子输入分块执行所述第一算子,并将得到的第一算子结果分块写入所述第一缓存模块后,将所述第一算子结果分块发送至所述目标处理单元,其中,所述第一处理单元在将第一算子结果分块发送至所述目标处理单元的同时,通过所述计算单元对下一个所述第一算子输入分块执行所述第一算子。
可选地,所述目标模型包括有序的若干个第二算子,所述第二算子是所述目标模型中先于所述第一算子执行的算子,所述基于所述第一处理单元的单元输入子块得到所述第一算子的第一算子输入,包括:
基于第三预设数据量将所述第一处理单元对应的单元输入子块分成有序的多个单元输入分块,其中,所述第三预设数据量的单元输入分块在执行所述若干个第二算子后,得到所述第二预设数据量的第一算子输入分块;
将所述单元输入分块依次输入到第一个第二算子,作为对应的第二算子输入分块;
针对每个所述第二算子,对输入的各个所述第二算子输入分块依次执行所述第二算子,得到各个所述第二算子输入分块对应的第二算子结果分块,并将所述第二算子结果分块作为下一个算子对应的第二算子输入分块,直至下一个算子是所述第一算子,得到所述第一算子输入分块。
可选地,所述计算单元集成在所述存储单元,所述计算单元和所述存储单元构成存内计算模块。
可选地,所述通信模块包括RDMA模块,所述第一算子结果子数据在所述第一缓存模块中被存储到连续的内存地址,所述将所述第一缓存模块中缓存的所述第一算子结果数据作为第一算子结果分块发送至对应的所述目标处理单元,包括:
在所述第一处理单元中,确定所述第一算子结果分块所包含的所述第一算子结果数据在所述第一缓存模块中的第一起始内存地址和第一内存长度;
所述第一处理单元将所述第一起始内存地址和所述第一内存长度发送至所述目标处理单元的RDMA模块;
所述目标处理单元的RMDA模块基于所述第一起始内存地址和所述第一内存长度从所述第一处理单元的第一缓存模块中读取所述第一算子结果分块并写入所述目标处理单元的内存。
可选地,所述第一通信指令是规约指令,所述规约指令指示将所述处理单元将所述第一算子结果发送至对应的所述目标处理单元,并在所述目标处理单元中基于所述目标处理单元中的待规约数据和所述第一算子结果执行规约运算,在所述将所述第一缓存模块中缓存的所述第一算子结果数据作为第一算子结果分块发送至对应的所述目标处理单元之后,所述方法还包括:
在所述目标处理单元中,将所述待规约数据分成与多个所述第一算子结果分块分别对应的多个待规约分块;
响应于获取到所述第一处理单元发送的所述第一算子结果分块,对所述第一算子结果分块和对应的所述待规约分块执行规约运算,其中,所述目标处理单元在对所述待规约分块和所述第一算子结果分块执行规约运算的同时,从所述第一处理单元获取下一个所述第一算子结果分块。
可选地,所述方法还包括:
获取所述通信模块的带宽大小;
基于所述带宽大小确定所述第一预设数据量。
可选地,所述处理单元的个数为第一数目,所述目标模型分别部署至第一数目个处理单元,在所述基于所述第一处理单元的单元输入子块得到所述第一算子的第一算子输入之前,所述方法还包括:
将所述目标模型的模型输入均分成与所述第一数目个处理单元分别对应的第一数目个模型输入子块;
将所述第一数目个模型输入子块分别发送至对应的所述处理单元,作为所述处理单元的单元输入子块,以使所述第一数目个处理单元并行对所述第一数目个模型输入子块执行所述目标模型的各个算子。
可选地,所述处理单元的个数为第一数目,第一数目个处理单元是有序的,所述目标模型包括有序的第一数目个目标子模型,各个所述目标子模型分别包括所述目标模型中不相同的多个连续算子,且所述有序的第一数目个目标子模型依次部署到有序的所述第一数目个处理单元,在所述基于所述第一处理单元的单元输入子块得到所述第一算子的第一算子输入之前,所述方法还包括:
在各个所述处理单元中,将所述处理单元对应的所述目标子模型的最后一个算子确定为第一算子;
将所述目标模型的模型输入分成有序的第一数目个模型输入子块,并将有序的所述第一数目个模型输入子块依次作为有序的所述第一数目个处理单元中的第一个处理单元对应的单元输入子块;
针对各个处理单元,对输入的所述单元输入子块执行对应的所述目标子模型的各个算子,并在对所述单元输入子块执行目标子模型中的第一算子时,生成第一通信指令,以将执行所述第一算子得到的第一算子结果发送至下一个处理单元,作为下一个处理单元的单元输入子块,以对所述第一算子结果执行所述下一个处理单元对应的目标子模型中的第一个算子,其中,所述处理单元在将所述第一算子结果发送至所述下一个处理单元的同时,获取所述处理单元对应的下一个单元输入子块。
根据本公开的一方面,提供了一种并行处理装置,包括:
多个处理单元,各个所述处理单元包括第一缓存模块、通信模块和至少一个计算模块,所述计算模块包括相互对应的计算单元、存储单元和数据读取单元;
所述计算单元用于执行目标模型中的各个算子,所述存储单元用于存储对应的所述计算单元在执行所述目标模型的算子时生成的中间结果数据,其中,所述目标模型的算子包括与第一通信任务对应的第一算子,所述中间结果数据包括执行所述第一算子得到的第一算子结果,所述第一通信任务用于指示第一处理单元将所述第一算子结果发送至目标处理单元,所述第一处理单元和所述目标处理单元是所述多个处理单元中的若干个;
所述数据读取单元用于响应于与第一通信任务对应的第一通信指令,从对应的所述存储单元中读取所述存储单元中存储的第一算子结果数据,并将所述第一算子结果数据写入所述第一缓存模块;
所述第一缓存模块用于缓存所述数据读取单元读取的第一算子结果数据;
所述通信模块用于在所述第一缓存模块缓存的所述第一算子结果数据达到第一预设数据量时,将所缓存的第一算子结果数据确定为第一算子结果分块,并将所述第一算子结果分块发送至目标处理单元;
其中,在所述通信模块将所述第一算子结果分块发送至所述目标处理单元的同时,所述计算单元对所述第一算子输入中未被执行所述第一算子的部分数据执行所述第一算子。
本公开提出一种并行处理方法和装置,通过在使用多个处理单元构成的并行处理装置对目标模型的输入并行执行目标模型中的各个算子时,首先根据多个处理单元并行执行目标模型的各个算子的过程中的第一通信任务确定对应的第一算子,即需要在多个处理单元之间对所生成的中间数据进行通信的算子;之后,在多个处理单元中对目标模型的输入并行执行目标模型的各个算子;当第一处理单元中执行到第一算子,向对应的数据读取单元下发第一通信指令,由于计算单元会将得到的第一算子结果数据写入到对应的存储单元,数据读取单元可以实时将对应的存储单元中所写入的第一算子结果数据读出到第一缓存模块中;之后,第一缓存模块响应于所缓存的第一算子结果数据达到第一预设数据量,将所缓存的第一算子结果数据作为一个第一算子结果分块发送到对应的目标处理单元,如此,当对第一算子输入中的部分数据执行第一算子,并得到大小为第一预设数据量的第一算子结果分块后就可以开始在第一处理单元和目标处理单元之间对中间数据(即对第一算子输入执行第一算子得到的数据)进行通信;而在第一处理单元通过通信模块将第一算子结果分块发送至目标处理单元的同时,第一处理单元中的计算单元对第一算子输入中未被执行第一算子的部分数据执行第一算子。如此,可以在计算单元对完整的第一算子输入执行完第一算子之前,就在第一处理单元和目标处理单元之间对执行第一算子所生成的中间数据进行通信,并使得在处理单元之前对中间数据进行通信的过程和计算需要通信的中间数据的过程重叠,以提高在处理单元之间对中间数据进行通信的效率。
本公开的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本公开而了解。本公开的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
附图用来提供对本公开技术方案的进一步理解,并且构成说明书的一部分,与本公开的实施例一起用于解释本公开的技术方案,并不构成对本公开技术方案的限制。
图1是应用本公开实施例的并行处理方法的体系架构图;
图2是本公开的一个实施例的并行处理方法的主要流程图;
图3是本公开的一个实施例的将目标模型的模型输入切分后再分发到多个处理单元的示意图;
图4是本公开的一个实施例,在数据并行的计算模式下执行注意力机制的过程示意图;
图5是本公开的一个实施例,计算单元对第一算子输入的不同部分的数据先后执行第一算子的示意图;
图6是本公开的一个实施例,计算单元和存储单元构成存内计算模块时的处理单元架构示意图;
图7是本公开的一个实施例,带有指令调度模块的处理单元架构示意图;
图8是本公开的一个实施例,计算和通信并行的时序示意图;
图9是本公开的一个实施例,把处理单元的单元输入子块切分后流水执行各个算子的示意图;
图10是公开实施例的并行处理装置的体系架构图。
具体实施方式
为了使本公开的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本公开进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本公开,并不用于限定本公开。
对本公开实施例进行进一步详细说明之前,对本公开实施例中涉及的名词和术语进行说明,本公开实施例中涉及的名词和术语适用于如下的解释:
并行计算:一种通过多个处理单元并行完成同一个计算任务的计算模式。由于神经网络模型实际是通过对输入的数据进行大量计算来生成相应的输出的,而由于处理单元的算力是有限的,如果仅使用单个处理单元执行神经网络模型的相关计算的话,当神经网络模型本身的参数规模较大或者输入的数据规模较大时,计算效率就会变得很低。因此,相关技术中会使用多个处理单元对神经网络模型的模型输入的不同子数据同时进行同一算子或不同算子的计算,以提高计算效率,这即是并行计算。相关技术中的并行计算的方式包括数据并行、流水并行等。
集合通信(Collective communication):一种在多个处理单元之间,对各个处理单元所生成的中间数据进行通信的方式。在通过并行计算的方式来执行神经网络模型的计算任务时,每个处理单元在同一时间节点只处理模型输入的一部分子数据,例如在数据并行的计算模式下,模型的模型输入会被切片成多个子数据并分发到多个处理单元中,每个处理单元只负责对一份子数据执行模型的计算任务。而模型中的一部分算子的计算过程需要使用到其它处理单元的子数据,这时就需要在多个处理单元之间对数据进行交换。例如在执行注意力机制时,针对模型的模型输入中的每个词元,需要计算该词元与其它各个词元之间的注意力分数并进行归一化,而由于模型的模型输入被分成多个子数据并分发到不同的处理单元中进行处理,当进行注意力计算时,就需要在多个处理单元之间对不同子数据所包含的词元对应的键向量和值向量进行通信,以使得每个处理单元可以得到进行注意力计算所需的每个词元的键向量和值向量。这种在多个处理单元之间进行数据交互的过程即是集合通信。
本公开实施例应用的系统体系架构说明
图1是本公开实施例的并行处理方法所应用的并行处理装置的架构图,它包括:多个处理单元100,每个处理单元包括至少一个计算模块110、第一缓存模块120和通信模块130,多个处理单元之间通过通信模块130进行通信连接,通信模块130可以访问第一缓存模块120,从而在处理单元之间对第一缓存模块120中所缓存的数据进行通信,多个处理单元用于对目标模型的输入并行执行目标模型中的各个算子。
每个计算模块110包括相互对应的计算单元111、存储单元112和数据读取单元113,计算单元111用于执行目标模型中的各个算子对应的计算任务,存储单元112用于存储对应的计算单元111在执行相应的模型计算任务的过程中所产生的中间任务数据,其中,目标模型中的各个算子包括第一算子,计算单元111在对第一算子输入执行第一算子时,生成对应的第一算子结果数据,并将第一算子结果数据写入到对应的存储单元112中。
数据读取单元113用于响应于将第一处理单元中的第一算子结果发送至目标处理单元的第一通信任务,从对应的存储单元112中读取第一算子结果数据,并将读取到的第一算子结果数据写入到对应的第一缓存模块120。
第一缓存模块120用于缓存数据读取单元113从存储单元112中所读出的第一算子结果数据,并在所缓存的第一算子结果数据的数据量达到第一预设数据量时,将所缓存的第一算子结果数据作为一个第一算子结果分块,并通过通信模块130发送至对应的目标处理单元,其中,在通过通信模块130将第一算子结果分块发送至目标处理单元的同时,第一处理单元中的计算单元对第一算子输入中未被执行第一算子的部分数据执行第一算子。
本公开实施例的并行处理方法的整体实施方式
本公开实施例提出一种并行处理方法,应用于并行处理装置,参照图1,并行处理装置包括多个处理单元100,各个处理单元100包括第一缓存模块120、通信模块130和至少一个计算模块110,计算模块110包括相互对应的计算单元111、存储单元112和数据读取单元113,多个处理单元100用于对目标模型的输入并行执行目标模型中的各个算子,参照图2,方法包括:
步骤S201,根据第一通信任务确定对应的第一算子,第一通信任务指示第一处理单元将执行第一算子得到的第一算子结果发送至对应的目标处理单元,第一算子是目标模型中的算子,第一处理单元和目标处理单元是并行处理装置中的若干个处理单元;
步骤S202,在第一处理单元中,基于第一处理单元的单元输入子块得到第一算子的第一算子输入,通过计算单元对第一算子输入执行第一算子,将得到的第一算子结果数据写入存储单元,并在计算单元执行第一算子的过程中,向对应的数据读取单元发送与第一通信任务对应的第一通信指令,第一算子结果数据是对第一算子输入中的部分数据执行第一算子得到的数据;
步骤S203,数据读取单元响应于第一通信指令,从对应的存储单元中读取第一算子结果数据,并将第一算子结果数据写入第一缓存模块;
步骤S204,响应于第一缓存模块中缓存的第一算子结果数据达到第一预设数据量,通过通信模块将第一缓存模块中缓存的第一算子结果数据作为第一算子结果分块发送至对应的目标处理单元,其中,在通过通信模块将第一算子结果分块发送至对应的目标处理单元的同时,通过计算模块对第一算子输入中未被执行第一算子的部分数据执行第一算子。
处理单元可以是图形处理单元(Graphic Processing Unit,GPU),并行处理装置可以是多个互联的图形处理单元构成的图形处理单元集群;第一缓存模块是图形处理单元中的缓存器,第一缓存模块作为通信模块的发送缓冲区,用于缓存待发送的数据;多个处理单元之间通过通信模块进行通信连接,通信模块可以是PCIe总线、RDMA模块等通信硬件中的一个或多个;计算单元可以是图形处理单元中的计算单元(compute unit,CU),存储单元可以是图形处理单元中的存储器,例如静态随机存取存储器(Static Random-AccessMemory,SRAM)或动态随机存取存储器(dynamic random access memory,DRAM),存储单元和计算单元一一对应,存储单元用于存储对应的计算单元在执行计算任务时所需的输入数据以及计算单元对输入数据进行计算后所生成的中间数据,数据读取单元用于响应于相应的指令,将对应的存储单元中所存储的数据读出到第一缓存模块。
目标模型是部署在并行处理装置的神经网络模型,例如大语言模型、扩散模型等,对应目标模型在本实施例中不进行限制。可以理解的是,目标模型是通过对输入的数据执行一系列计算,从而生成相应的输出的,这一系列计算则是分别通过对应的算子完成的,目标模型本身由多个算子构成的,每个算子分别用于对目标模型的模型输入执行相应的计算。具体地,这些算子可以包括但不限于softmax算子,卷积算子等,目标模型所包含的各个算子需要根据实际的目标模型确定,在本实施例中不进行限定。
在本实施例中,多个处理单元对目标模型的输入并行执行目标模型的各个算子是指:以流水并行、张量并行或数据并行等方式对目标模型的输入中不同部分的数据进行并行计算,具体的并行执行目标模型的各个算子的方式根据在多个处理单元中部署目标模型的方式确定,在本实施例中不进行限定。
在步骤S201中,第一通信任务是在通过多个处理单元对目标模型的模型输入并行执行目标模型的各个算子的过程中,需要在不同的处理单元之间,对各个处理单元在执行某个算子后所生成的中间数据进行通信的任务;第一通信任务可以与某个通信指令对应的通信任务,该通信指令可以是集合通信指令,例如All to All、All Reduce、Gather等CCL通信指令,或者是send-receive等通信指令。第一算子即是需要将所生成的中间数据进行通信的算子;第一算子结果即是计算单元在基于相应的输入执行第一算子后所得到的完整结果。
可以理解的是,在多个处理单元对目标模型的模型输入并行执行目标模型的各个算子时,模型输入往往会被分成多个模型输入子块,多个处理单元在同一时刻分别对不同的模型输入子块执行目标模型中的算子。示例性地,在数据并行的计算模式下,目标模型的模型输入会被分割成多个模型输入子块并分发到多个处理单元中分别进行处理,参照图3,目标模型的输入被分割成、、等多个模型输入子块,并依次分发到处理单元1至处理单元3中并行处理。
而每个处理单元所需处理的模型输入子块是通过对同一个模型输入进行切片得到的,这些模型输入子块之间是存在一定关联的,各个处理单元在执行目标模型中的某些算子对应的计算任务时,会需要使用到其它处理单元所生成的中间数据。因此,在通过多个处理单元并行执行目标模型的各个算子的过程中,往往需要在多个处理单元之间,对目标模型中的某个算子所生成的中间数据进行通信,以使每个处理单元得到执行后续的算子所需的数据。
示例性地,参照图4,图4是通过处理单元1和处理单元2两个处理单元对模型输入进行并行处理的过程示意图。目标模型的由于模型输入input被分割成子输入input_1和子输入input_2,并分发到处理单元1和处理单元2中进行处理。目标模型包括注意力机制,处理单元1和处理单元2在分别对相应的子输入依次执行目标模型的算子1、2、3...等算子后,分别得到用于执行注意力机制的输入X1和输入X2。在执行注意力机制时,每个处理单元首先需要将输入到注意力机制的数据X分别通过一个matmul算子与查询权重矩阵W_Q、键权重矩阵W_K和值权重矩阵W_V相乘,得到查询矩阵Q、键矩阵K和值矩阵V,之后需要通过一个matmul算子将查询矩阵Q和转置后键矩阵K相乘,得到输入数据X中的词元两两之间的注意分数构成注意力分数矩阵。而在进行注意力计算时,每个词元对应的查询向量都需要与所有词元对应的键向量相乘,此时,由于模型输入input被分割成子输入input_1和子输入input_2,每个处理单元所分配到的子输入只包含模型输入中一部分词元,此时,处理单元1需要将本地计算的键矩阵K1发送至第二处理单元,处理单元2也需要将本地计算得到的键矩阵K2发送至处理单元1,以使得每个处理单元均可以得到全部词元对应的键矩阵,以进行注意力计算。此时,在每个处理单元中,用于将注意力机制的输入与键权重矩阵W_K相乘,以生成键矩阵的matmul算子,就是第一算子。同理,由于注意力计算的过程中,在得到每个词元两两之间的注意力权重之后,还需要基于注意力权重对每个词元对应的值向量进行加权,即在注意力计算的过程中,每个处理单元还需要得到全部词元对应的值向量才能正确地执行注意力运算,即处理单元1和处理单元2需要分别将本地计算的值矩阵V1和值矩阵V2发送至对方,基于此,在处理单元1和处理单元2中,用于将对应的注意力输入与值权重矩阵W_V相乘的matmul算子,也作为第一算子。即在目标模型的第一算子的个数可以是多个的,第一算子的个数根据在多个处理单元并行执行目标模型的过程中,需要在处理单元之间对中间数据进行通信的次数确定,每个所生成的中间数据需要在多个处理单元之间通信的算子均是第一算子。
在一个实施例中,第一算子还可以是训练目标模型过程中进行反向传播时用于计算目标模型的各个神经网络层的梯度的梯度算子。在训练神经网络模型时,往往会使用数据并行的计算模式来加速神经网络模型的训练过程,此时,用于训练模型的数据会被切分成多个子数据并分发到不同的处理单元中进行处理,在训练过程中往往会使用反向传播的模式来优化模型的参数,反向传播时每个处理单元会分别进行梯度的计算,由于在同一轮训练过程中,不同的处理单元是分别用于处理训练数据的不同子数据的,这使得不同的处理单元在同一轮次的训练过程中针对目标模型中的同一神经网络层所计算的梯度往往是不同的,如果每个处理单元都分别基于自身所计算的梯度对神经网络模型的参数进行优化,容易导致训练的过程难以收敛,因此在通过反向传播算法优化模型参数时,往往也需要对各个处理单元针对目标模型中的同一神经网络层所计算的梯度进行规约处理(求和、求均值、取最大值或取最小值等),每个处理单元基于规约后的梯度进行梯度下降以保障模型训练过程的稳定性,这时就需要将计算模型中的各个神经网络层的参数梯度的梯度算子确定为第一算子。
第一处理单元是指在执行第一通信任务时,需要向并行处理装置中的其它处理单元发送本地所生成的中间数据的处理单元。目标处理单元则是在执行第一通信任务时,需要从并行处理装置中的其它处理单元接收其所生成的中间数据的处理单元。例如并行处理装置包括处理单元A、处理单元B和处理单元C,在并行处理的过程中,处理单元A在执行算子1后,需要将执行算子1所生成的中间数据发送至处理单元B和处理单元C,此时,处理单元A就是第一处理单元,处理单元B和处理单元C就是目标处理单元,在处理单元A中,算子1即是一个第一算子。可以理解的是,在单次的第一通信任务中,单个处理单元可以同时向其它处理单元发送自身所生成的中间数据,以及从其它处理单元接收其它处理单元所生成的中间数据,例如,在图4所示的注意力机制的计算中,每个处理单元既需要将本地计算的部分词元的键向量和值向量发送至其它处理单元,也需要从其它处理单元接收其它处理单元的模型输入子块所包含的词元对应的键向量和值向量。基于此,在单次的第一通信任务中,单个处理单元可以同时作为第一处理单元和目标处理单元,第一处理单元和目标处理单元的个数也可以是多个。
具体地,在步骤S201中,在将目标模型部署到并行处理装置中的多个处理单元时,会在目标模型的源码中插入相应的通信语句,以在运行目标模型的过程中,使多个处理单元对执行某个算子所生成的中间数据进行通信。示例性地,当需要在多个处理单元之间对目标模型中某个算子所生成的中间数据进行All gather通信时,在目标模型的源码插入如下语句:MPI_Allgather( &local_value, x, MPI_INT, all_values,y, MPI_INT, MPI_COMM_WORLD);其中local_value是所需通信的中间数据,生成local_value的算子即是对应的第一算子,&local_value表示获取local_value在处理单元本地的内存地址;COMM_WORLD表示各个处理单元的进程所构成的进程组;该语句指示在多个处理单元中,每个处理单元从本地存储local_value的内存地址开始读取x个INT类型的数据,并发送至进程组COMM_WORLD所包含的各个进程对应的处理单元,同时接收其它处理单元发送的共y个INT类型的数据,并依次存储到all_value所指向的缓冲区。基于此,当在目标模型的源码中插入用于使多个处理单元对执行某个算子所生成的中间数据进行通信的通信语句时,即确定了相应的第一通信任务,以及该第一通信任务对应的第一算子。
在步骤S202中,在通过多个处理单元对目标模型的模型输入并行执行目标模型的各个算子时,第一处理单元所接收到的外部输入即是第一处理单元对应的单元输入子块,该单元输入子块是基于目标模型的模型输入确定的,它可以是对目标模型的模型输入进行切分后得到的一个模型输入子块,或者是从其它处理单元接收的对目标模型的模型输入进行一定处理后得到的数据。可以理解的是,第一处理单元在获取到对应的单元输入子块后,会将单元输入子块存储到本地的各个计算模块的存储单元中,之后,计算单元通过从对应的存储单元中读取所存储的单元输入子块,从而执行目标模型的各个算子。
可以理解的是,除第一算子外,第一处理单元中还部署有目标模型中的其它算子,其中的部分算子是先于第一算子被执行的。基于此,第一处理单元接收到对应的单元输入子块后,会先对单元输入子块依次执行目标模型中先于第一算子执行的其它算子,当依次对第一处理单元的单元输入子块执行这些算子后,即可得到第一算子对应的第一算子输入。示例性地,第一算子包括注意力机制中用于将输入序列与键权重矩阵进行矩阵乘的matmul算子,每个处理单元的单元输入子块是目标模型的原始输入中的一部分,各个第一处理单元在获取到相应的单元输入子块后,需要对该单元输入子块进行词元化处理,转换成相应的多个词元,之后通过一个嵌入层计算每个词元对应的特征向量,再对每个词元对应的特征向量与键权重矩阵执行matmul算子。
此外,在一种可能的实现方式里,在部署于第一处理单元的多个算子中,第一算子是首个被执行的算子,此时,第一处理单元的单元输入子块本身即是第一算子输入。
在得到第一算子对应的第一算子输入后,通过计算单元对第一算子输入执行第一算子,可以生成相应的第一算子结果。而可以理解的是,第一算子输入本身往往是一个张量,它包含多个词元分别对应的部分,在通过计算单元对第一算子输入执行第一算子时,首先于计算单元的并行计算能力,计算单元往往是对第一算子输入中的一部分数据执行第一算子后,再对第一算子输入中其它部分的数据执行第一算子,即计算单元实际不是对第一算子输入中的全部数据同时进行计算的。示例性地,参照图5,第一算子输入是一个由1000个词元对应的特征向量构成的特征矩阵,而该第一处理单元中的计算单元同时可以调用128个线程执行该matmul算子,此时,在开始对该第一算子输入第一算子时,这128个线程分别用于执行第一算子输入中的前128个词元对应的特征向量与键权重矩阵的矩阵乘运算,每个线程负责执行一个词元对应的特征向量与键权重矩阵的矩阵乘运算,当执行完前128个词元对应的矩阵乘运算,得到前128个词元对应的键向量后,这128个线程再分别用于执行第129至第256个词元对应的特征向量与键权重矩阵的矩阵乘运算。即在计算单元对第一算子输入执行第一算子时,是先对第一算子输入中的部分数据执行第一算子,当对第一算子输入中的前一部分数据执行完第一算子后,再开始对第一算子输入中的下一部分数据执行第一算子。
在本实施例中,第一算子结果数据是指计算单元对第一算子输入中的一部分数据执行第一算子后得到的数据,而不是对整个第一算子输入都执行完算子后所得到的数据。例如,在图5的示例中,计算单元在完成某个词元对应的特征向量与键权重矩阵的矩阵乘运算,得到该词元对应的键向量后,就将该词元对应的键向量作为第一算子结果数据。计算单元在对第一算子输入所包含的每部分数据执行第一算子后,都会将相应的第一算子结果数据实时写入到对应的存储单元中。例如,在图5对应的示例中,计算单元每计算得到一个词元对应的键向量后,就将该词元对应的键向量直接存储到计算单元对应的存储单元中,而不会等待第一算子输入中的所有词元的键向量都计算出来后再存储到对应的存储单元。
在一种可能的实现方式里,参照图6,计算单元可以嵌入到对应的存储单元中,此时,计算单元和对应的存储单元构成存内计算模块。在执行目标模型中的各个算子时,计算单元可以直接在对应的存储单元中进行计算,而无需将数据从存储单元中读出到计算单元再执行对应的计算,由此降低在存储单元和对应的计算单元之间传输数据所产生的时延,提高计算效率。同时,在存内计算的模式下,第一算子输入本身是基于第一处理单元的单元输入子块得到的一个中间数据,第一算子输入也是存储在存储单元中的,计算单元在对第一算子输入执行第一算子时,是直接在存储单元中对存储单元所存储的第一算子输入进行计算的。如此,在对第一算子输入中的部分数据执行完第一算子后,相应的第一算子结果数据就会直接存储到该计算单元所对应的存储单元中。
而在计算单元执行第一算子的过程中,由于第一算子结果是需要发送到目标处理单元的数据,此时,就需要生成相应的第一通信指令,以控制第一处理单元将第一算子结果发送至对应的目标处理单元。具体地,第一通信指令是用于指示第一处理单元将计算单元执行第一算子得到的第一算子结果发送至对应的目标处理单元的指令。参照步骤S201可知,在目标模型的源码中插入有相应的通信语句,当处理单元执行到第一算子时,相应的通信语句也会被执行,响应于该通信语句被执行,各个第一处理单元中会生成相应的第一通信指令。
具体地,参照图7,每个处理单元中还设置有一个指令调度模块,该指令调度模块接收上层应用基于目标模型的源码所生成的各项操作,并通过相应的操作指令以调度处理单元中的各个模块来执行这些操作。具体地,指令调度模块所生成的操作指令会构成一个指令队列,指令调度模块会确定队列中的各个指令需要发送给处理单元中的哪个模块执行,并监测处理单元中的各个模块是否空闲,当用于执行指令队列中的某条指令的模块空闲时,就将对应的指令下发到该模块。例如,上层应用在执行到目标模型的源码中与算子1对应的语句时,生成与该算子1对应的计算操作,然后,指令调度模块生成一个相应的操作指令存放到指令队列里,当计算单元执行完算子1之前的各个算子对应的指令后,指令调度模块就将该操作指令下发至计算单元以调用计算单元执行算子1对应的计算操作。而当上层应用执行到目标模型的源码中与第一通信任务对应的通信语句时,指令调度模块生成一个用于调度处理单元中各个计算模块中的数据读取单元的第一通信指令,并将该第一通信指令放入到指令队列中。
可以理解的是,计算单元在对第一算子输入执行第一算子时,是先后对第一算子输入中的各部分数据执行第一算子对应的计算任务,计算单元实际是需要一定的时长才能完成对第一算子输入执行第一算子的过程。而由于第一通信指令是用于调度数据读取单元的,而在计算单元执行基于对应的第一算子输入执行第一算子时,数据读取单元往往是空闲的,基于此,在本实施例中,指令调度模块可以在计算单元对第一算子输入执行第一算子的过程中,将第一通信指令下发至对应的而数据读取单元,无需等待计算单元执行完第一算子后再将第一通信指令下发。在一个实施例中,指令调度模块可以在计算单元在对第一算子输入中的第一个数据执行第一算子,并写入到对应的存储单元,得到第一算子结果在对应的存储单元中起始内存地址后,立即将第一通信指令下发到数据读取单元,使数据读取单元可以实时将执行第一算子得到的第一算子结果数据读出到第一缓存模块。
在步骤S203中,数据读取单元响应于第一通信指令,确定需要将对应的计算单元在执行第一算子(即计算单元当前执行的算子)所生成的第一算子结果发送至对应的目标处理单元。基于此,各个计算模块中的数据读取单元开始从对应的存储单元中将执行第一算子所得到的第一算子结果数据读出到通信模块的发送缓冲区,即第一缓存模块。
具体地,参照上述示例可知,目标模型的源码中所插入的通信语句包含有所需发送的数据的内存地址。相应地,第一通信指令中也包含对应的内存地址,该内存地址即是计算单元执行第一算子所得到的第一算子结果在存储单元中的地址,数据读取单元响应于第一通信指令,基于该地址从对应的存储单元中读取数据,并通过数据总线将所读取的数据传输到第一处理单元中的第一缓存模块。
在本实施例中,数据读取单元可以是一个集成在对应的存储单元中的复制引擎,复制引擎可以直接访问存储单元本地所存储的数据,同时该复制引擎可以通过数据总线与第一缓存模块通信连接;复制引擎可以在接收到第一通信指令后,基于第一通信指令所携带的内存地址,从对应的存储单元中将存储于该内存地址的第一算子结果数据复制并传输到计算模块外部的第一缓存模块。
在步骤S204中,第一预设数据量是一个预设的值,第一预设数据量是用于表征单个第一算子结果分块所对应的张量中的元素个数的值。例如,当所需的第一算子结果分块是一个4*32*64的三维张量时,单个第一算子结果分块就包含8192个元素,相应的第一数据量就是8192个元素所对应的字节个数。此外,在一种可能的实现方式中,第一预设数据量还可以直接用于表示单个第一算子结果分块的形状的一组参数,例如在上述示例中,第一预设数据量可以直接表示为4*32*64。
具体地,在本实施例中,可以实时监测第一缓存模块所缓存的数据量,当第一缓存模块中所缓存的数据达到第一预设数据量时,向通信模块发送一个信号以通知通信模块需要发送的第一算子结果分块已经准备好。此时,通信模块即可通过通信模块将第一缓存模块中的第一算子结果分块发送至对应的目标处理单元。
而由于本实施例是在第一缓存模块中所缓存的第一算子结果数据的数据量达到第一预设数据量之后,就将所缓存的第一算子结果数据作为一个第一算子结果分块发送至对应的目标处理单元;如此可以在计算单元计算出完整的第一算子结果之前,就开始在第一处理单元和目标处理单元之间进行通信。此外,在本实施例中,在通过通信模块是将第一缓存模块中所缓存的数据作为第一算子结果分块发送至目标处理单元的同时,计算单元可以同步对第一算子中的未被执行第一算子的部分数据执行第一算子。例如,第一算子输入包括512个词元对应的数据,计算单元在对前128个词元对应的数据执行第一算子,并将得到的第一算子结果数据写入第一缓存模块后,在通信模块将这128个词元对应的第一算子结果数据作为一个第一算子结果分块发送至目标处理单元的同时,计算模块对第一算子输入中与129个词元及其之后的其它词元对应的数据执行第一算子。基于此,本实施例提出的方法可以使得在处理单元之间对中间数据进行通信的过程和计算中间数据的过程并行执行,使得在处理单元之前对中间数据进行通信的过程和计算需要通信的中间数据的过程重叠,减少计算所需通信的中间数据以及在处理单元之间对中间数据进行通信的总时长,从而提高在处理单元之间对中间数据进行通信的效率。
在步骤S201至步骤S205公开的实施例中,通过在使用多个处理单元并行执行目标模型中的各个算子时,首先根据第一通信任务确定对应的第一算子;之后,在多个处理单元中对目标模型的输入并行执行目标模型的各个算子;当第一处理单元中执行到第一算子,向对应的数据读取单元下发第一通信指令,通过数据读取单元实时将对应的存储单元中所写入的第一算子结果数据读出到第一缓存模块;第一缓存模块响应于所缓存的第一算子结果数据达到第一预设数据量,将所缓存的第一算子结果数据作为一个第一算子结果分块发送到对应的目标处理单元,同时,第一处理单元中的计算单元对第一算子输入中未被执行第一算子的部分数据执行第一算子。如此,可以在计算单元对完整的第一算子输入执行完第一算子之前,就在第一处理单元和目标处理单元之间对执行第一算子所生成的中间数据进行通信,并使得在处理单元之前对中间数据进行通信的过程和计算需要通信的中间数据的过程重叠,以提高在处理单元之间对中间数据进行通信的效率。
此外,在一个实施例中,在通信模块将第一算子结果分块发送至目标处理单元的同时,数据读取单元可以实时将对应的存储单元中存储的与除第一算子输入中的其它数据对应的第一算子结果数据读出到对应第一缓存模块;即在本实施例中,计算单元对第一算子输入中未被执行第一算子的部分数据执行第一算子的过程、数据读取单元将从对应的存储单元中将第一算子结果数据读出到第一缓存模块的过程以及通信模块将第一缓存模块中的第一算子结果分块发送到目标处理单元的过程是并行执行的。示例性地,参照图8,第一算子输入可以表示为block_A、block_B、block_C三部分,其中,block_A表示第一算子输入中未被执行第一算子的部分数据;block_B是第一算子输入中已经执行第一算子,但未从存储单元读出到第一缓存模块的数据;block_C是第一算子输入中已经被执行第一算子并读出到第一缓存模块,构成一个第一算子结果分块的数据。此时,在通信模块将block_C所对应的第一算子结果数据构成的第一算子结果分块发送至目标处理单元的同时,数据读取单元将block_B所对应的第一算子结果数据读出到第一缓存模块,计算单元对block_A所包含的数据执行第一算子。如此,可以进一步提高在处理单元之间对中间数据进行通信的效率。
步骤S202的详细描述
在一个实施例中,步骤S202中,对第一算子输入执行第一算子,包括:
步骤S301,基于第二预设数据量将第一算子输入分成有序的多个第一算子输入分块,其中,第二预设数据量的第一算子输入分块在执行第一算子后,得到第一预设数据量的第一算子结果分块;
步骤S302,通过计算单元依次对多个第一算子输入分块执行第一算子,得到各个第一算子输入分块对应的第一算子结果分块,并依次将各个第一算子结果分块写入存储单元;
此时,步骤S204中,响应于第一缓存模块中缓存的第一算子结果数据达到第一预设数据量,将第一缓存模块中缓存的第一算子结果数据作为第一算子结果分块发送至对应的目标处理单元,包括:
步骤S303,在对单个第一算子输入分块执行第一算子,并将得到的第一算子结果分块写入第一缓存模块后,将第一算子结果分块发送至目标处理单元,其中,第一处理单元在将第一算子结果分块发送至目标处理单元的同时,通过计算单元对下一个第一算子输入分块执行第一算子。
在步骤S301中,第一算子输入分块是对第一算子输入进行切片得到的一个数据块,每个第一算子输入分块包括第一算子输入中连续的一部分数据,可以理解的是,第一算子输入中的各部分数据本身是有序的,基于此,对第一算子输入进行切片得到的多个第一算子输入分块也是有序的。
第二预设数据量是基于第一预设数据量以及第一算子的输入和输出之前的数据量的关系确定的,对第一个第二预设数据量的第一算子输入分块执行第一算子后,所得到的结果的数据量是第一预设数据量。具体地,可以通过第一算子的输入的数据量和输出的数据量的比值,以及第一预设数据量确定第二预设数据量。示例性地,第一算子对应的计算任务是第一算子输入和一个n阶方阵进行矩阵乘,那么在对第一算子输入执行第一算子后,得到的结果是与第一算子输入形状相同的张量,即执行第一算子前后的数据量是相等的,此时第二预设数据量即是第一预设数据量;同理,若第一算子是将第一算子输入与一个形状为(n,2n)的矩阵进行矩阵乘,执行第一算子后得到的输出的数据量相较于第一算子的输入的数据量是倍增的,此时第二预设数据量则是第一预设数据量的二分之一。
可以理解的是,由于第一算子输入的总数据量是根据用户的原始输入确定的,当用户输入的数据不同时,这使得第一算子输入的总数据量往往不是第二预设数据量的整数倍,此时,除最后一个第一算子输入分块外的其它第一算子输入分块均为第二预设数据量,而最后一个第一算子输入分块的数据量则可以少于第二预设数据量。例如,第一算子输入包含1000个词元对应的特征向量,第二预设数据量是128个词元对应的特征向量的数据量总和,此时,即可将第一算子输入分成8个第一算子输入分块,其中最后一个第一算子输入分块由第一算子输入中的最后104个词元的特征向量组成,其它七个第一算子输入分块则分别由第一算子输入中连续的128个词元的特征向量组成。
在步骤S302中,将第一算子输入分成有序的多个第一算子输入分块之后,通过计算单元依次对各个第一算子输入分块执行第一算子。对每个第一算子输入分块执行第一算子后,所得到的结果即是一个第一算子结果分块。
计算单元在对每个第一算子输入分块执行完第一算子,得到该第一算子输入分块对应的第一算子结果分块后,即可将第一算子结果分块存储到对应的存储单元中,以使对应的数据读取单元可以实时从存储单元中将该第一算子结果分块所包含的数据读出到第一缓存模块。而在数据读取单元将第一算子结果分块的数据读出到第一缓存模块的同时,计算单元可以对下一个第一算子输入分块执行第一算子,循环该过程,直至对所有第一算子输入分块都执行完第一算子,并将所得到的第一算子结果分块写入到存储单元中。
在步骤S303中,在将对单个第一算子输入分块中的所有数据执行第一算子后所得到的数据都写入到第一缓存模块后,即认为得到了一个需要发送至目标处理单元的第一算子结果分块,此时,通过通信模块将该第一算子结果分块发送至目标处理单元。同时,计算单元可以对下一个第一算子输入分块执行第一算子。如此,计算单元对第一算子输入分块执行第一算子的过程和通信模块发送基于前一个第一算子输入分块得到的第一算子结果分块的过程可以同时执行,从而提高在处理单元之间对执行第一算子所生成的中间数据进行通信的效率。
在步骤S301至步骤S303公开的实施例中,通过在第一处理单元中对第一算子输入进行切片成有序的多个第一算子输入分块,之后计算单元依次对各个第一算子输入分块执行第一算子,而在对单个第一算子输入分块执行第一算子,即可得到相应的第一算子结果分块;之后即可把第一算子结果分块加载到第一缓存模块。如此,即可在计算单元对下一个第一算子输入分块执行第一算子的同时,通过通信模块将对前一个第一算子输入分块执行第一算子得到的第一算子结果分块发送至目标处理单元,从而使得在处理单元之间对执行第一算子所生成的中间数据进行通信的过程和执行第一算子的过程并发执行,使得通信的过程和计算的过程在时序上可以重叠,通信所需的时间开销可以被计算的时间开销覆盖,从而提高在处理单元之间进行通信的效率。
可以理解的是,目标模型还包含除第一算子外的其它算子,其中的部分算子是先于第一算子被执行的,这部分算子可以记为第二算子,在将对应的单元输入子块输入到第一处理单元后,首先需要对单元输入子块依次执行这些第二算子,才能得到执行第一算子所需的第一算子输入。基于此,在一个实施例中,步骤S202中,基于第一处理单元的单元输入子块得到第一算子的第一算子输入,包括:
步骤S401,基于第三预设数据量将第一处理单元对应的单元输入子块分成有序的多个单元输入分块,其中,第三预设数据量的单元输入分块在执行若干个第二算子后,得到第二预设数据量的第一算子输入分块;
步骤S402,将单元输入分块依次输入到第一个第二算子,作为对应的第二算子输入分块;
步骤S403,针对每个第二算子,对输入的各个第二算子输入分块依次执行第二算子,得到各个第二算子输入分块对应的第二算子结果分块,并将第二算子结果分块作为下一个算子对应的第二算子输入分块,直至下一个算子是第一算子,得到第一算子输入分块。
在步骤S401中,第一处理单元的单元输入子块参照上述步骤S202的相关描述,在此不赘述。基于第三预设数据量将单元输入子块分成单元输入分块的过程则可以参照上述步骤S301中,基于第二预设数据量将第一算子输入分成第一算子输入分块的过程,在此不额外赘述。
需要说明的是,第三预设数据量可以根据第一处理单元中所部署的有序的多个第二算子的输入和输出的张量形状的变化,以及第二预设数据量确定。示例性地,单元输入子块是一个形状为N*128的矩阵,当对单元输入子块依次执行有序的多个第二算子后,所得到的中间数据是一个形状为N*256的矩阵,此时,表明在对单元输入子块依次执行多个第二算子后所得到的中间数据的数据量相较于单元输入子块原本的数据量翻倍,此时,第三预设数据量就是第二预设数据量的二分之一。
在步骤S402中,由于在将单元输入子块输入第一处理单元后,需要对单元输入子块依次执行有序的多个第二算子后才能得到第一算子输入。基于此,在本实施例中,将各个单元输入分块依次输入到有序的若干个第二算子中的第一算子,作为对应的第二算子输入分块,以在在后续对各个单元输入分块依次执行各个第二算子。
在步骤S403中,可以理解的是,若干个第二算子是有序的,在目标模型中,执行每个算子所生成的输出是作为下一个算子的输入的。基于此,在本实施例中,针对每个第二算子,在获取到相应的第二算子输入分块后,依次对所获取的第二算子输入分块执行该第二算子对应的计算,生成相应的第二算子结果分块,并将所生成的第二算子结果分块作为下一个算子的输入,直至该第二算子的下一个算子是第一算子,此时,执行该第二算子所生成的第二算子结果分块即是第一算子输入分块。
在一种可能的实现方式里,因为第一处理单元中的计算单元的并行执行能力可能是超出对单个单元输入分块执行第二算子的能力。此时,计算单元可以对单个第二算子对应的多个第二算子输入分块同时执行该第二算子,直至对该第二算子的所有第二算子输入分块均执行完该第二算子后,再开始执行下一个算子。例如,有序的多个第二算子依次为第二算子A至第二算子C,第一处理单元的单元输入子块被切分成单元输入分块1至单元输入分块10,此时,计算单元可以在对这10个输入数分块均执行完第二算子A之后,再开始执行第二算子B,以此类推。
在另一种可能的实现方式里,针对每个第二算子,在得到单个第二算子输入分块对应的第二算子结果分块后,可以在将该第二算子结果分块输入到下一个算子的同时,对下一个第二算子输入分块执行第二算子,此时,计算单元可以同时对不同的数据分别执行不同的第二算子。此时。例如,参照图9,有序的多个第二算子依次为第二算子OP_0至第二算子OP_2,且执行第二算子OP_2所生成的结果即是第一算子输入,第一处理单元的单元输入子块被切分成单元输入分块block_0至单元输入分块block_5,此时,首先对单元输入分块block_0执行第二算子OP_0,得到相应的第二算子结果分块;此时,将对block_0执行第二算子OP_O后得到的第二算子结果分块作为第二算子OP_1的输入,通过计算单元对该第二算子结果分块执行第二算子OP_1,同时,对单元输入分块block_1执行第二算子OP_0,以此类推,当对单元输入分块block_3执行第一算子OP_0时,即可得到与单元输入分块block_0对应的第一算子结果分块,并开始通过通信模块将该第一算子结果分块发送至目标处理单元。基于此,因为每个单元输入分块在执行完一个第二算子后即可开始执行下一个第二算子,而无需等待其它单元输入分块也执行完同一个第二算子再开始执行下一个第二算子,这样,可以更快速地得到需要通信的第一算子结果分块并开始在处理单元之间对第一算子结果分块进行通信。同时,可以使得通信模块的通信过程不仅与执行第一算子的过程重叠,还可以与执行部分第二算子的过程重叠,基于此,可以进一步提高在多个处理单元之间对中间数据进行通信的效率。
在步骤S401至步骤S403公开的实施例中,通过将第一处理单元的单元输入子块直接切分为多个单元输入分块;之后,将多个单元输入分块作为第一处理单元中的第一个第二算子对应的第二算子输入分块,以开始对单元输入分块依次执行第一个第二算子;而每个第二算子在对相应的第二算子输入分块执行对应的计算任务后,会将计算得到的第二算子结果分块作为下一个算子的输入。如此,即可以对各个单元输入分块依次执行各个第二算子,直至得到相应的各个第一算子输入分块。
步骤S204的详细描述
在一个实施例中,通信模块是一个RDMA(Remote Direct Memory Access,远程内存直接访问)模块,多个处理单元之间可以通过RDMA模块直接从其它处理单元的第一缓存模块中进行数据存取,此时,步骤S204中,通过通信模块将第一缓存模块中缓存的第一算子结果数据作为第一算子结果分块发送至对应的目标处理单元,包括:
步骤S501,在第一处理单元中,确定第一算子结果分块所包含的第一算子结果数据在第一缓存模块中的第一起始内存地址和第一内存长度;
步骤S502,第一处理单元将第一起始内存地址和第一内存长度发送至目标处理单元的RDMA模块;
步骤S503,目标处理单元的RMDA模块基于第一起始内存地址和第一内存长度从第一处理单元的第一缓存模块中读取第一算子结果分块并写入目标处理单元的内存。
在步骤S501中,第一起始内存地址是指第一缓存模块中用于缓存第一算子结果分块的连续内存,第一内存长度则是指第一算子结果分块所包含的数据在第一缓存模块中占用的连续的内存地址的长度。需要说明的是,本实施例中的第一内存地址是指存储第一算子结果数据的真实的物理地址。可以理解的是,为了方便数据的管理,数据读取单元所读出的第一算子结果数据是缓存在第一缓存模块中是缓存到的连续的一段内存地址的,这样,针对第一算子结果分块,只需要获取到相应的起始地址和长度,即可确定第一缓存模块中哪一段内存地址所缓存的数据是第一算子结果分块的数据。而由于RDMA不同于其它通信方式,它不是通过在本地将待发送的数据封装成数据包再将数据包发送至接收端,而是将所需发送的数据在本地的地址直接发送给接收端,由接收端直接访问本地的内存,从相应的地址中读取所需发送的数据。基于此,在本实施例中,当通信模块是RDMA模块时,在第一处理单元本地确定第一算子结果分块在第一缓存模块中的第一起始内存地址和第一内存长度,以在后续将第一起始内存地址和第一内存长度发送至目标处理单元。
在步骤S502中,在确定第一起始内存地址和第一内存长度后,将第一起始内存地址和第一内存长度发送至目标处理单元,即可以使目标处理单元确定第一算子结果分块在第一缓存模块中的地址并进行访问。
在步骤S503中,目标处理单元的RDMA模块在接收到第一缓存模块所发送的第一起始内存地址、第一内存长度后,基于第一起始内存地址从第一处理单元的第一缓存模块中开始读取数据并写入到目标处理单元本地的内存中,具体地,可以是写入目标处理单元的各个存储单元中,在读取完每个第一起始内存地址的数据后,使第一起始内存地址的偏移量从0开始递增,从而读取下一个地址的数据,直至地址的偏移量达到第一内存长度,此时目标处理单元即把第一算子结果分块都读取到本地的存储单元中。而由于在第一算子结果分块发送到目标处理单元的过程中,只需要将第一算子结果分块的第一起始内存和第一内存长度发送至目标处理单元,目标处理单元即可直接从第一处理单元的内存中读取第一算子结果分块,这种访问内存的方式可以使得第一处理单元和目标处理单元之间具有更高的带宽。
在步骤S501至步骤S503公开的实施例中,通过使用RDMA模块作为通信模块,此时,在第一处理单元中,响应于缓存的第一算子结果数据达到第一预设数据量,确定第一算子结果分块在第一缓存模块中的第一起始内存地址和第一内存长度,并把该第一起始内存地址、和第一内存长度一同发送到对应的目标处理单元,目标处理单元的RDMA模块可基于第一起始内存地址和第一内存长度从第一处理单元的第一缓存模块中直接读取第一算子结果分块并写入到目标处理单元本地的内存中,从而完成对单个第一算子结果分块的通信过程。通过使目标处理单元直接访问第一处理单元的内存的方式来完成对第一算子结果分块的通信,提高第一处理单元和目标处理单元之间的通信带宽,从而提高了对第一算子结果分块进行通信的效率。
在一个实施例中,第一处理单元所包含的计算模块是多个的,即第一处理单元包含多个计算单元,而不同的计算单元在同一时刻可能分别被调用于执行模型中的不同算子;例如,在上述图4所示的注意力机制中,在同一时刻,一部分计算单元用于执行注意力机制的输入与键权重矩阵进行矩阵乘的matmul算子,另一部分计算单元用于执行将注意力机制的输入与值权重矩阵进行矩阵乘的matmul算子,还有一部分计算单元用于执行将注意力机制的输入与查询权重矩阵进行矩阵乘的matmul算子;甚至在一些可能的实施例中,单个处理单元中可能部署多个神经网络模型,其中的多个计算单元可能同时执行不同模型中的算子。
在一个实施例中,第一通信指令是一个规约指令,该规约指令指示了第一处理单元将第一算子结果发送至目标处理单元,并在目标处理单元中对第一算子结果和待规约数据执行相应类型的规约运算,其中,规约运算可以包括但不限于求和、取最大值或最小值等算术运算,以及逻辑与、逻辑或、按位与、异或等逻辑运算。此时,在步骤S204之后,方法还包括:
步骤S601,在目标处理单元中,将待规约数据分成与多个第一算子结果分块分别对应的多个待规约分块;
步骤S602,响应于获取到第一处理单元发送的第一算子结果分块,对第一算子结果分块和对应的待规约分块执行规约运算,其中,目标处理单元在对待规约分块和第一算子结果分块执行规约运算的同时,从第一处理单元获取下一个第一算子结果分块。
在步骤S601中,可以理解的是,待规约数据是一个形状与第一算子结果的形状相同的张量,且待规约数据和第一算子结果中具有相同坐标的元素是相互对应的;具体地,待规约数据是在目标处理单元本地,基于目标处理单元的单元输入子块执行目标模型中的若干个算子后得到的一个中间数据;在一些可能的实施例中,待规约数据和第一算子结果实际是在不同的处理单元中,分别对不同处理单元的单元输入子块执行相同的算子后所得到的,即待规约数据可以是在目标处理单元本地,基于目标处理单元对应的单元输入子块执行第一算子后得到的结果。例如,参照步骤S201的相关描述,第一算子是某个梯度算子,第一算子结果即是在第一处理单元中基于第一处理单元的单元输入子块进行反向传播时,执行该梯度算子所得到的梯度张量;而待规约数据则是在目标处理单元本地基于目标处理单元的单元输入子块进行反向传播时,执行梯度算子所得到的梯度张量。
而执行规约运算时,是分别对待规约数据和第一算子结果中具有相同坐标的元素分别进行运算的。例如,待规约数据与第一算子结果均是一个形状为M*N的矩阵,规约运算是求和运算,在对待规约数据和第一算子结果进行规约运算时,即是把这两个矩阵中具有相同的行列坐标的元素分别进行相加,例如,将待规约数据中第m行第n列的元素和第一算子结果中第m行第n列的元素相加。基于此,在本实施例中,可以将待规约数据分成与各个第一算子结果分块对应的待规约分块。
在步骤S602中,当目标处理单元接收到第一处理单元所发送的第一算子结果分块后,即可通过目标处理单元中的计算单元对所获取的第一算子结果分块与对应的待规约分块执行相应的规约操作,而无需等待接收到第一处理单元所发送的所有第一算子结果分块后再开始执行规约运算。
同时,在目标处理单元对所获取的第一算子结果分块和对应的待规约分块执行规约操作的过程中,若第一处理单元已经通过执行第一算子准备好下一个第一算子结果分块,则目标处理单元可以在对第一算子结果分块和对应的待规约分块执行规约操作的同时,从第一处理单元获取下一个第一算子结果分块。例如,目标处理单元从第一处理单元获取到第一算子结果分块1后,可以在基于第一算子结果分块1和对应的待规约分块执行规约运算的同时,从第一处理单元获取第一算子结果分块2。如此,可以使得在第一处理单元之间对第一算子结果分块进行通信的过程,和在目标处理单元中对第一算子结果和待规约数据进行规约操作的过程同时执行,从而提高规约指令的执行效率。
在步骤S601至步骤S602公开的实施例中,通过在执行规约指令时,在目标处理单元中,将用于与第一算子结果进行规约运算的待规约数据分成与多个第一算子结果分块分别对应的多个待规约分块;当目标处理单元接收到第一处理单元所发送的第一算子结果分块后,立即对第一算子结果分块和对应的待规约分块执行规约运算,并在对所接收的第一算子结果分块和待规约分块执行规约运算的同时,从第一处理单元中获取下一个第一算子结果分块;基于此,使得对第一算子结果和待规约数据进行规约运算的过程和从第一处理单元获取第一算子结果分块的过程在时序上重叠,提高了在处理单元之间执行规约指令的效率。
确定第一预设数据量的详细过程
可以理解的是,第一预设数据量越小,通信模块可以更早地开始向目标处理单元发送第一算子结果分块,从而提高通信过程和计算过程的重叠度。例如,当第一预设数据量是128个词元对应的第一算子结果数据的数据量时,则通信模块需要等待计算单元计算出128个词元对应的第一算子结果数据,并读出到第一缓存模块后,才可以开始向目标处理单元发送第一算子结果分块,计算单元计算前128个词元对应的第一算子结果数据的过程是不会与通信过程重叠的。而如果第一预设数据量是32个词元对应的第一算子结果数据的数据量时,通信模块只需要等待计算单元计算出前32个词元对应的第一算子结果数据,并读出到第一缓存模块后,即可以开始向目标处理单元发送第一算子结果分块,相较于将128个词元对应的第一算子结果数据的数据量作为第一预设数据量时,计算单元计算第33个词元至第128个词元对应的第一算子结果数据的过程也可以与通信的过程重叠,从而提高了通信过程和计算过程的重叠度。但是,在每次从第一处理单元向目标处理单元发送第一算子结果分块时,往往还需要进行链路初始化,或者从第一处理单元向目标处理单元发送一些与第一算子结果分块相关的参数(如第一算子结果分块的长度或通信协议等信息)以保证传输过程的准确性,这使得每次对第一算子结果分块进行传输都会产生一定的额外开销。如果第一预设数据量过小,那么就需要多次发送第一算子结果分块,所产生的额外开销就较大,这会导致通信模块的带宽利用率下降。基于此,在一个实施例中,确定第一预设数据量可以包括:
步骤S701,获取通信模块的带宽大小;
步骤S702,基于带宽大小确定第一预设数据量;
在步骤S701中,带宽大小指示了在第一处理单元和目标处理单元之间通过通信模块进行通信时,在单位时间所能通信的数据量多少。可以理解的是,通信模块本身作为一个通信用的硬件,基于通信模块自身的硬件参数即可确定相应的带宽大小。
在步骤S702中,在确定通信模块的带宽大小后,可以根据带宽大小和期望在第一处理单元和目标处理单元之间传输单个第一算子结果分块的时延上限,确定第一预设数据量,例如将带宽大小和时延上限的乘积确定第一预设数据量。示例性地,带宽大小32Gbps,即4GB/s,即每秒可以传输4GB数据;此时,期望在第一处理单元和目标处理单元之间发送单个第一算子结果分块的时长在1微秒以内,相应的第一预设数据量即是4GB/s*1μs/1s=0.000004GB,即4kB。
当然,在实际确定第一预设数据量时,还可以结合第一处理单元和目标处理单元之间本身的路径时延等因素。例如,带宽大小时4GB/s,期望在第一处理单元和目标处理单元之间发送单个第一算子结果分块的时长在1微秒以内,而第一处理单元和目标处理单元之间的路径时延为100纳秒,此时,若要在1微秒内完成单个第一算子结果分块的传输,则单个第一算子结果分块的大小应当是4GB/s*(1μs-10ns)/1s,即3.6kB。
而基于上述方法所确定的第一预设数据量,可以使得第一处理单元和目标处理单元之间传输单个第一算子结果分块所需的时间不会大于期望的时延上限,在保证第一处理单元和目标处理单元之间对单个第一算子结果分块进行通信时的时延的前提下,使得第一预设数据量不会过小,从而保证通信模块的带宽利用率不会过低。
在步骤S701至步骤S702公开的实施例中,基于通信模块的带宽大小来确定第一预设数据量,从而使得在第一处理单元和目标处理单元之间对单个第一算子结果分块进行通信时的通信效率,同时保证了第一预设数据量不会过小,防止通信模块的带宽利用率过低。
通过多个处理单元并行执行目标模型的各个算子的详细描述
在一个实施例中,目标模型在多个处理单元中是以数据并行的方式进行并行计算的,此时,每个处理单元中均部署有目标模型的所有算子,并行处理方法还包括:
步骤S801,将目标模型的模型输入均分成与第一数目个处理单元分别对应的第一数目个模型输入子块;
步骤S802,将第一数目个模型输入子块分别发送至对应的处理单元,以使第一数目个处理单元并行对第一数目个模型输入子块执行目标模型的各个算子。
在步骤S801中,第一数目是并行处理装置中的处理单元的个数;模型输入即是将用户输入到目标模型的数据转换成适合模型处理的形式后的数据,例如,用户输入的是一段文本,对这段文本进行分词并进行词元化处理后,就得到了一个由该文本中的各个词元的特征向量构成的一个特征序列,该特征序列即是模型输入。在获取到模型输入后,因为后续需要通过第一数目个处理单元进行并行处理,基于此,在获取到目标模型的模型输入后,将模型输入均分成第一数目个模型输入子块,模型输入子块和处理单元之间一一对应。具体地,第一数目个处理单元分别分配有相应的序号,在对模型输入进行切分时,对切分得到的每个模型输入子块分配一个相应的序号;具有相同序号的模型输入子块和处理单元即是一一对应的。
例如,第一数目是8,并行处理装置中的8个处理单元对应的序号依次是1至8,在获取到模型输入后,将模型输入分成8个模型输入子块,且这8个模型输入子块的序号也依次是1至8,此时,序号为1的模型输入子块即是与序号为1的处理单元对应的,序号为2的模型输入子块即是与序号为2的处理单元对应的,以此类推。
在步骤S802中,将模型输入分成与处理单元之间一一对应的多个模型输入子块后,将各个模型输入子块发送至对应的处理单元,每个处理单元将所接收到的模型输入子块作为对应的单元输入子块,开始对模型输入子块执行目标模型的各个算子;如此,每个处理单元只需要对单个模型输入子块执行目标模型的各个算子即可,而无需对完整的模型输入进行处理,提高了对模型输入执行目标模型的各个算子时的计算效率。之后,每个处理单元在执行到目标模型中的第一算子时,按照步骤S201至步骤S204所公开的方法进行并行处理。
在步骤S801至步骤S802公开的实施例中,通过将目标模型同时部署到并行处理装置中的各个处理单元,之后当接收到目标模型的模型输入时,将模型输入切分成与第一数目个处理单元分别对应的第一数目个模型输入子块,并将每个模型输入子块分配到对应的处理单元;之后,每个处理单元只需要对相应的模型输入子块执行目标模型的各个算子即可。基于此,通过利用多个处理单元进行并行计算,提高了执行目标模型的各个算子时的计算效率。
在一种可能的实现方式里,第一数目个处理单元是有序的,目标模型包括有序的第一数目个目标子模型,各个目标子模型分别包括目标模型中不相同的多个连续算子,且有序的第一数目个目标子模型依次部署到有序的第一数目个处理单元,具体地,可以把目标模型的各个神经网络层分别划分到不同的目标子模型,每个目标子模型由目标模型中连续的一部分神经网络层构成。例如,目标模型是一个堆叠了N个卷积层的神经网络模型,这N个卷积层是依次级联的,输入的数据需要依次经过这N个卷积层以进行相应的卷积处理,以生成相应的输出,每个卷积层即是一个卷积算子,每个卷积算子生成的结果即是下一个卷积算子的输入,此时,将目标模型分成M个目标子模型,每个目标子模型则分别包括目标模型中的N/M个卷积层,例如,第一个目标子模型包括前N/M个卷积层,第二个目标子模型包括第N/M+1至第2N/M个卷积层,以此类推。此时,并行处理方法还包括:
步骤S901,将各个目标子模型的最后一个算子确定为第一算子;
步骤S902,将目标模型的模型输入分成有序的第一数目个模型输入子块,并将有序的第一数目个模型输入子块依次作为有序的第一数目个处理单元中的第一个处理单元对应的单元输入子块;
步骤S903,针对各个处理单元,对输入的单元输入子块执行对应的目标子模型的各个算子,并在对单元输入子块执行目标子模型中的第一算子时,生成第一通信指令,以将执行第一算子得到的第一算子结果发送至下一个处理单元,作为下一个处理单元的单元输入子块,其中,处理单元在将第一算子结果发送至下一个处理单元的同时,获取处理单元对应的下一个单元输入子块。
在步骤S901中,因为目标模型被分割成多个目标子模型,且不同子模型是包含目标模型中不相同的多个算子的。可以理解的是,每个处理单元中的目标子模型中的最后一个算子所生成的中间数据,即是下一个目标子模型的第一个算子的输入,而因为不同的目标子模型是部署到不同的处理单元的,即每个目标子模型的最后一个算子所生成的中间数据是需要在不同的处理单元之间进行通信的数据。基于此,在本实施例中,可以将每个目标子模型的最后一个算子作为第一算子。
在步骤S902中,首先将目标模型的模型输入均分成第一数目个模型输入子块;此时,因为每个处理单元中只部署有由目标模型中的一部分算子构成的目标子模型,而不是部署有整个目标模型中的所有算子,而模型输入则需要依次经过目标模型的所有算子进行处理的。基于此,在本实施例中,在将模型输入分成模型输入子块之后,将各个模型输入子块依次作为有序的第一数目个处理单元中的第一个处理单元对应的单元输入子块,以在后续对各个模型输入子块执行目标模型的第一个目标子模型中的各个算子。
在步骤S903中,每个处理单元在接收到输入的单元输入子块后,开始对该单元输入子块依次执行处理单元本地所部署的目标子模型中的各个算子,由于在步骤S1001中,将每个目标子模型中的最后一个算子确定为第一算子,当在处理单元中对单元输入子块执行到第一算子时,即表明已经对该单元输入子块执行完对应的目标子模型中的各个算子,需要将执行该算子后所生成的中间数据发送到部署有下一个目标子模型的处理单元,以执行后续的处理。而可以理解的是,多个目标子模型是依次部署到有序的各个处理单元的。基于此,在本实施例中,处理单元将对单元输入子块执行第一算子后所生成的第一算子结果发送至下一个处理单元,作为下一个处理单元对应的单元输入子块即可。具体地,在本实施例中,处理单元可以通过步骤S201至步骤S204所示将对单元输入子块执行第一算子后所生成的第一算子结果发送至下一个处理单元,在此不额外赘述。
同时,在本实施例中,处理单元在将第一算子结果发送至下一个处理单元的同时,会获取该处理单元所对应的下一个单元输入子块。例如,第一个处理单元在对第一个模型输入子块执行目标模型的各个算子后,在将与第一个模型输入子块对应的中间发送至第二个处理单元的同时,获取第二个模型输入子块作为对应的单元输入子块;如此,后续在第一个处理单元对第二个模型输入子块执行第一个目标子模型中的各个算子的同时,第二个处理单元即可对第一个模型输入子块执行第二个目标子模型中的各个算子,以此类推。如此,多个处理单元即可在同一时刻分别对不同的模型输入子块分别执行不同的目标子模型所包含的各个算子,从而利用多个处理单元同时对模型输入的各部分数据进行并行处理。
在步骤S901至步骤S903公开的实施例中,在将目标模型分成多个目标子模型并分别部署到不同的处理单元时,通过将每个目标子模型的最后一个算子确定为第一算子;同时将目标模型的模型输入分成多个模型输入子块,并将模型输入子块依次作为部署有第一个目标子模型的处理单元对应的单元输入子块;之后,针对每个处理单元,在对输入的单元输入子块到第一算子时,即表明已经对该单元输入子块执行完了对应的目标子模型中的各个算子;此时,生成相应的第一通信指令,以通过处理单元中的数据读取单元和通信模块,将基于该单元输入子块得到的第一算子结果发送到下一个处理单元,作为下一个处理单元的单元输入子块,并同时获取处理单元自身所对应的下一个单元输入子块,如此,多个处理单元可以同时对各个模型输入子块分别执行目标模型中的不同算子,从而利用多个处理单元的计算资源进行并行计算,提高对目标模型输入执行目标模型的各个算子的效率。
本公开实施例的装置和设备描述
参照图10,本公开还提出一种并行处理装置1000,该并行处理装置1000包括:
多个处理单元1100,各个处理单元1100包括第一缓存模块1010、通信模块1020和至少一个计算模块1030,计算模块1030包括相互对应的计算单元1031、存储单元1032和数据读取单元1033;
计算单元1031用于执行目标模型中的各个算子,存储单元1032用于存储对应的计算单元1031在执行目标模型的算子时生成的中间结果数据,其中,目标模型的算子包括与第一通信任务对应的第一算子,中间结果数据包括执行第一算子得到的第一算子结果,第一通信任务用于指示第一处理单元将第一算子结果发送至目标处理单元,第一处理单元和目标处理单元是多个处理单元1100中的若干个;
数据读取单元1033用于响应于与第一通信任务对应的第一通信指令,从对应的存储单元1032中读取存储单元1032中存储的第一算子结果数据,并将第一算子结果数据写入第一缓存模块1010;
第一缓存模块1010用于缓存数据读取单元1033读取的第一算子结果数据;
通信模块1020用于在第一缓存模块1010缓存的第一算子结果数据达到第一预设数据量时,将所缓存的第一算子结果数据确定为第一算子结果分块,并将第一算子结果分块发送至目标处理单元;
其中,在通信模块1020将第一算子结果分块发送至目标处理单元的同时,计算单元1031对第一算子输入中未被执行第一算子的部分数据执行第一算子。
本公开的并行处理装置用于执行如上述实施例的并行处理方法,其具体处理过程与上述实施例的并行处理方法相同,此处不再赘述。
本公开的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“包含”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或装置不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或装置固有的其它步骤或单元。
应当理解,在本公开中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
应了解,在本公开实施例的描述中,多个(或多项)的含义是两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。
在本公开所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
还应了解,本公开实施例提供的各种实施方式可以任意进行组合,以实现不同的技术效果。
以上是对本公开的实施方式的具体说明,但本公开并不局限于上述实施方式,熟悉本领域的技术人员在不违背本公开精神的条件下还可作出种种等同的变形或替换,这些等同的变形或替换均包括在本公开权利要求所限定的范围内。
Claims (10)
1.一种并行处理方法,其特征在于,应用于并行计算装置,所述并行处理装置包括多个处理单元,各个所述处理单元包括第一缓存模块、通信模块和至少一个计算模块,所述计算模块包括相互对应的计算单元、存储单元和数据读取单元,所述多个处理单元用于对目标模型的模型输入并行执行所述目标模型的各个算子,所述方法包括:
根据第一通信任务确定对应的第一算子,所述第一通信任务指示第一处理单元将执行所述第一算子得到的第一算子结果发送至对应的目标处理单元,所述第一算子是所述目标模型中的算子,所述第一处理单元和所述目标处理单元是所述并行处理装置中的若干个处理单元;
在各个所述第一处理单元中,基于所述第一处理单元的单元输入子块得到所述第一算子的第一算子输入,通过所述计算单元对所述第一算子输入执行所述第一算子,将得到的第一算子结果数据写入所述存储单元,并在所述计算单元执行所述第一算子的过程中,向对应的所述数据读取单元发送与所述第一通信任务对应的第一通信指令,其中所述第一算子结果数据是对所述第一算子输入中的部分数据执行所述第一算子得到的数据;
所述数据读取单元响应于所述第一通信指令,从对应的所述存储单元中读取所述第一算子结果数据,并将所述第一算子结果数据写入所述第一缓存模块;
响应于所述第一缓存模块中缓存的所述第一算子结果数据达到第一预设数据量,通过所述通信模块将所述第一缓存模块中缓存的所述第一算子结果数据作为第一算子结果分块发送至对应的所述目标处理单元,其中,在通过所述通信模块将所述第一算子结果分块发送至对应的所述目标处理单元的同时,通过所述计算模块对所述第一算子输入中未被执行所述第一算子的部分数据执行所述第一算子。
2.根据权利要求1所述的并行处理方法,其特征在于,所述通过所述计算单元对所述第一算子输入执行所述第一算子,将得到的第一算子结果数据写入所述存储单元,包括:
基于第二预设数据量将所述第一算子输入分成有序的多个第一算子输入分块,其中,所述第二预设数据量的第一算子输入分块在执行所述第一算子后,得到所述第一预设数据量的第一算子结果分块;
通过所述计算单元依次对所述多个第一算子输入分块执行所述第一算子,得到各个第一算子输入分块对应的第一算子结果分块,并依次将各个第一算子结果分块写入所述存储单元;
所述响应于所述第一缓存模块中缓存的所述第一算子结果数据达到第一预设数据量,将所述第一缓存模块中缓存的所述第一算子结果数据作为第一算子结果分块发送至对应的所述目标处理单元,包括:
在对单个所述第一算子输入分块执行所述第一算子,并将得到的第一算子结果分块写入所述第一缓存模块后,将所述第一算子结果分块发送至所述目标处理单元,其中,所述第一处理单元在将第一算子结果分块发送至所述目标处理单元的同时,通过所述计算单元对下一个所述第一算子输入分块执行所述第一算子。
3.根据权利要求2所述的并行处理方法,其特征在于,所述目标模型包括有序的若干个第二算子,所述第二算子是所述目标模型中先于所述第一算子执行的算子,所述基于所述第一处理单元的单元输入子块得到所述第一算子的第一算子输入,包括:
基于第三预设数据量将所述第一处理单元对应的单元输入子块分成有序的多个单元输入分块,其中,所述第三预设数据量的单元输入分块在执行所述若干个第二算子后,得到所述第二预设数据量的第一算子输入分块;
将所述单元输入分块依次输入到第一个第二算子,作为对应的第二算子输入分块;
针对每个所述第二算子,对输入的各个所述第二算子输入分块依次执行所述第二算子,得到各个所述第二算子输入分块对应的第二算子结果分块,并将所述第二算子结果分块作为下一个算子对应的第二算子输入分块,直至下一个算子是所述第一算子,得到所述第一算子输入分块。
4.根据权利要求1所述的并行处理方法,其特征在于,所述计算单元集成在所述存储单元,所述计算单元和所述存储单元构成存内计算模块。
5.根据权利要求1所述的并行处理方法,其特征在于,所述通信模块包括RDMA模块所述第一算子结果子数据在所述第一缓存模块中被存储到连续的内存地址,所述将所述第一缓存模块中缓存的所述第一算子结果数据作为第一算子结果分块发送至对应的所述目标处理单元,包括:
在所述第一处理单元中,确定所述第一算子结果分块所包含的所述第一算子结果数据在所述第一缓存模块中的第一起始内存地址和第一内存长度;
所述第一处理单元将所述第一起始内存地址和所述第一内存长度发送至所述目标处理单元的RDMA模块;
所述目标处理单元的RMDA模块基于所述第一起始内存地址和所述第一内存长度从所述第一处理单元的第一缓存模块中读取所述第一算子结果分块并写入所述目标处理单元的内存。
6.根据权利要求1所述的并行处理方法,其特征在于,所述第一通信指令是规约指令,所述规约指令指示将所述处理单元将所述第一算子结果发送至对应的所述目标处理单元,并在所述目标处理单元中基于所述目标处理单元中的待规约数据和所述第一算子结果执行规约运算,在所述将所述第一缓存模块中缓存的所述第一算子结果数据作为第一算子结果分块发送至对应的所述目标处理单元之后,所述方法还包括:
在所述目标处理单元中,将所述待规约数据分成与多个所述第一算子结果分块分别对应的多个待规约分块;
响应于获取到所述第一处理单元发送的所述第一算子结果分块,对所述第一算子结果分块和对应的所述待规约分块执行规约运算,其中,所述目标处理单元在对所述待规约分块和所述第一算子结果分块执行规约运算的同时,从所述第一处理单元获取下一个所述第一算子结果分块。
7.根据权利要求1所述的并行处理方法,其特征在于,所述方法还包括:
获取所述通信模块的带宽大小;
基于所述带宽大小确定所述第一预设数据量。
8.根据权利要求1所述的并行处理方法,其特征在于,所述处理单元的个数为第一数目,所述目标模型分别部署至第一数目个处理单元,在所述基于所述第一处理单元的单元输入子块得到所述第一算子的第一算子输入之前,所述方法还包括:
将所述目标模型的模型输入均分成与所述第一数目个处理单元分别对应的第一数目个模型输入子块;
将所述第一数目个模型输入子块分别发送至对应的所述处理单元,作为所述处理单元的单元输入子块,以使所述第一数目个处理单元并行对所述第一数目个模型输入子块执行所述目标模型的各个算子。
9.根据权利要求1所述的并行处理方法,其特征在于,所述处理单元的个数为第一数目,第一数目个处理单元是有序的,所述目标模型包括有序的第一数目个目标子模型,各个所述目标子模型分别包括所述目标模型中不相同的多个连续算子,且所述有序的第一数目个目标子模型依次部署到有序的所述第一数目个处理单元,在所述基于所述第一处理单元的单元输入子块得到所述第一算子的第一算子输入之前,所述方法还包括:
在各个所述处理单元中,将所述处理单元对应的所述目标子模型的最后一个算子确定为第一算子;
将所述目标模型的模型输入分成有序的第一数目个模型输入子块,并将有序的所述第一数目个模型输入子块依次作为有序的所述第一数目个处理单元中的第一个处理单元对应的单元输入子块;
针对各个处理单元,对输入的所述单元输入子块执行对应的所述目标子模型的各个算子,并在对所述单元输入子块执行目标子模型中的第一算子时,生成第一通信指令,以将执行所述第一算子得到的第一算子结果发送至下一个处理单元,作为下一个处理单元的单元输入子块,以对所述第一算子结果执行所述下一个处理单元对应的目标子模型中的第一个算子,其中,所述处理单元在将所述第一算子结果发送至所述下一个处理单元的同时,获取所述处理单元对应的下一个单元输入子块。
10.一种并行处理装置,其特征在于,所述装置包括:
多个处理单元,各个所述处理单元包括第一缓存模块、通信模块和至少一个计算模块,所述计算模块包括相互对应的计算单元、存储单元和数据读取单元;
所述计算单元用于执行目标模型中的各个算子,所述存储单元用于存储对应的所述计算单元在执行所述目标模型的算子时生成的中间结果数据,其中,所述目标模型的算子包括与第一通信任务对应的第一算子,所述中间结果数据包括执行所述第一算子得到的第一算子结果,所述第一通信任务用于指示第一处理单元将所述第一算子结果发送至目标处理单元,所述第一处理单元和所述目标处理单元是所述多个处理单元中的若干个;
所述数据读取单元用于响应于与第一通信任务对应的第一通信指令,从对应的所述存储单元中读取所述存储单元中存储的第一算子结果数据,并将所述第一算子结果数据写入所述第一缓存模块;
所述第一缓存模块用于缓存所述数据读取单元读取的第一算子结果数据;
所述通信模块用于在所述第一缓存模块缓存的所述第一算子结果数据达到第一预设数据量时,将所缓存的第一算子结果数据确定为第一算子结果分块,并将所述第一算子结果分块发送至目标处理单元;
其中,在所述通信模块将所述第一算子结果分块发送至所述目标处理单元的同时,所述计算单元对所述第一算子输入中未被执行所述第一算子的部分数据执行所述第一算子。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202411958803.8A CN120011299B (zh) | 2024-12-27 | 2024-12-27 | 并行处理方法和装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202411958803.8A CN120011299B (zh) | 2024-12-27 | 2024-12-27 | 并行处理方法和装置 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN120011299A CN120011299A (zh) | 2025-05-16 |
| CN120011299B true CN120011299B (zh) | 2025-11-14 |
Family
ID=95664975
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202411958803.8A Active CN120011299B (zh) | 2024-12-27 | 2024-12-27 | 并行处理方法和装置 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN120011299B (zh) |
Families Citing this family (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN120295738B (zh) * | 2025-06-11 | 2025-09-16 | 上海壁仞科技股份有限公司 | 任务执行方法、装置、计算机设备、存储介质和程序产品 |
Family Cites Families (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9395957B2 (en) * | 2010-12-22 | 2016-07-19 | Microsoft Technology Licensing, Llc | Agile communication operator |
| CN110689115B (zh) * | 2019-09-24 | 2023-03-31 | 安徽寒武纪信息科技有限公司 | 神经网络模型处理方法、装置、计算机设备及存储介质 |
| CN113010469B (zh) * | 2021-03-18 | 2023-05-26 | 恒睿(重庆)人工智能技术研究院有限公司 | 图像特征提取方法、装置以及计算机可读存储介质 |
| CN113535638B (zh) * | 2021-07-20 | 2022-11-15 | 珠海市一微星科技有限公司 | 一种并行运算加速系统及其运行方法 |
| CN118394415B (zh) * | 2024-06-25 | 2024-11-01 | 北京壁仞科技开发有限公司 | 一种算子执行方法、设备、存储介质及程序产品 |
-
2024
- 2024-12-27 CN CN202411958803.8A patent/CN120011299B/zh active Active
Also Published As
| Publication number | Publication date |
|---|---|
| CN120011299A (zh) | 2025-05-16 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN110991634B (zh) | 人工智能加速器、设备、芯片及数据处理方法 | |
| CN107689948B (zh) | 应用于神经网络硬件加速系统的高效数据访存管理装置 | |
| US9378533B2 (en) | Central processing unit, GPU simulation method thereof, and computing system including the same | |
| US12265492B2 (en) | Circular buffer for input and output of tensor computations | |
| CN115860080B (zh) | 计算核、加速器、计算方法、装置、设备、介质及系统 | |
| CN118733206A (zh) | 基于多核系统的任务调度方法、装置及相关产品 | |
| CN108491924B (zh) | 一种面向人工智能计算的神经网络数据串行流水处理装置 | |
| WO2015031547A1 (en) | Computation hardware with high-bandwidth memory interface | |
| CN116167419B (zh) | 一种兼容N:M稀疏的Transformer加速器的架构及加速方法 | |
| CN120011299B (zh) | 并行处理方法和装置 | |
| US12197362B2 (en) | Batch matrix multiplication operations in a machine learning accelerator | |
| US20190197018A1 (en) | Dynamic reconfiguration using data transfer control | |
| CN117112145B (zh) | 训练模型分配方法、装置、计算机设备和存储介质 | |
| CN112631982B (zh) | 基于众核架构的数据交换方法及装置 | |
| US20210326189A1 (en) | Synchronization of processing elements that execute statically scheduled instructions in a machine learning accelerator | |
| CN121311905A (zh) | 时延处理单元 | |
| CN109993293A (zh) | 一种适用于堆叠式沙漏网络的深度学习加速器 | |
| CN114258538A (zh) | 片上操作的显式调度 | |
| CN115481364A (zh) | 基于gpu加速的大规模椭圆曲线多标量乘法的并行计算方法 | |
| US20250245565A1 (en) | Cross-cluster communication for machine learning workloads | |
| CN113313251A (zh) | 一种基于数据流架构的深度可分离卷积融合方法及系统 | |
| CN117437113A (zh) | 用于对图像数据进行加速处理的系统、方法及存储介质 | |
| CN117290279B (zh) | 基于共享紧耦合的通用型计算加速器 | |
| US12242854B2 (en) | Compressing instructions for machine-learning accelerators | |
| US12293093B2 (en) | Control of deterministic machine learning systems using trigger tables and configuration state registries |
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 | ||
| GR01 | Patent grant | ||
| GR01 | Patent grant |