System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于矩阵核心的高性能矩阵向量乘方法技术_技高网

一种基于矩阵核心的高性能矩阵向量乘方法技术

技术编号:40968320 阅读:2 留言:0更新日期:2024-04-18 20:49
本方法公开了一种基于深度学习加速器矩阵核心的矩阵向量乘加速方法和装置。方法包括:根据计算规模,将任务分配到一定数量的块上,需要使得处理器核心负载均衡;使用LDS将矩阵原始格式转换并读入矩阵核心的输入对应的存储单元中,提出了避免存储体冲突的方案。使用处理器架构矩阵核心中粒度最细的mma指令来完成块内的矩阵向量乘;使用预取和双缓冲技术,能够持续整体任务中最耗时的访问HBM操作,同时避免流水线中的结构冲突和数据冲突;每个块的计算结果通过硬件的原子累加写入HBM。通过本发明专利技术,能够高性能地使用深度学习处理器中的矩阵核心来执行矩阵向量乘法操作,在实际应用场景中能够有效加速深度学习模型。

【技术实现步骤摘要】

本专利技术设计高性能计算以及深度学习加速领域,尤其涉及深度学习中的一种基于矩阵核心的高性能矩阵向量乘方法


技术介绍

1、深度学习中的计算主要由深度学习加速器提供支持,例如gpu,npu,tpu等等。这类加速器都有着类似的大规模数据的并行计算能力,和cpu组成异构系统。在计算的时候需要将数据从内存搬运至处理器专有的hbm存储空间上。处理器在进行计算的时候,除了编程不可见的l1,l2缓存外,通常还会配有可编程的缓存单元,例如在gpu片上workgroup内线程共享的lds,线程私有的寄存器等。

2、深度学习有大量的矩阵向量乘计算场景,而矩阵乘的计算访存比远远大于其退化得到的矩阵向量乘,所以矩阵向量乘的计算性能通常受限于处理器的带宽,体现在流水线中,计算单元有大量的时间因为在等待访存而闲置。深度学习对能源消耗和资源利用率有着严格的要求。

3、近年来深度学习加速器通常带有加速矩阵计算的矩阵核心,例如nvidia的tensorcore,amd的matrix core,华为昇腾的cube。这些矩阵核心通常用于深度学习中半精度的矩阵乘,并且理论上的峰值性能至少可以达到向量处理单元的8倍。但深度学习中,尤其是半精度的矩阵向量乘通常还很大程度上依赖向量计算单元。因为矩阵向量乘原始的数据读取方法直观上看并不适用于矩阵核心的计算,并且两个输入占据的内存空间相差巨大。矩阵向量乘是矩阵乘的一种特殊情况,如何利用矩阵核的高算力来对矩阵向量乘加速,并且充分利用深度学习加速器的多级存储单元和计算能力是目前面临的一个难题。

/>

技术实现思路

1、为了解决上述问题,本专利技术提出了基于深度学习加速器矩阵核心的矩阵向量乘加速方法,有效利用矩阵核心的高算力和深度学习加速器上的多级存储单元,极大降低了矩阵向量乘的计算延迟。

2、矩阵乘法形式:y=a*b,其中a的维度为mxk,b的维度为kxn,y的维度为mxn。

3、矩阵向量乘形式:y=v*m或y=m*v,m和v分别代表矩阵和向量,其中乘法运算需要符合矩阵乘法的运算规则,并且在乘号左边的对象维度描述与a一致,乘号右边的对象维度描述与b一致。图1展示了深度学习加速器的架构特征,无论是gpu还是n pu都遵循这个计算架构。

4、在逻辑上将任务划分到不同的block当中,深度学习加速器上存在若干物理上的处理器,执行的时候每个处理器从调度队列中挑选一个未执行的block进行处理,处理器之间相互并行,处理器内部采用simd的方法并行计算。图2展示了处理器上矩阵核心执行模型。

5、矩阵核心对应于硬件指令集中的isa提供的mma相关指令,mma指令读取fragmenta和fragmentb处的两个固定维度的输入矩阵,经过矩阵核心计算单元处理,得到输出fragmentc并累加到fragmentd上,并且根据计算架构的不同,这些fragment中的矩阵格式排布也有严格的限制。

6、本专利技术公开了一种基于深度学习加速器矩阵核心的矩阵向量乘加速方法,包括:

7、任务网格构建。以矩阵向量乘中的矩阵为依据划分出大小为tile_k×tile_n的矩阵块,每个块只会被block读取或写入一次,这些block分别被调度到不同的处理器上执行。深度学习加速器中存在许多可以并行计算的处理器,这些处理器之间不会互相干扰,独立执行各自的任务,唯一的可交互方式是通过片外的hbm空间。在该步骤中主要涉及两部分影响总体计算性能的因素,具体包括:

8、设置原子累加的次数,不同的块会交由不同的处理器执行,在累加方向上的块会将计算结果累加到同一块hbm存储区域,所以该方向上的块的数量splict_k决定了总体的原子累加数量,所以splict_k越小越好。

9、设置块的发射数量,通常来讲增加块的发射数量可以增加并行度,但最佳方案是尽量接近处理器总数的整数倍。这样可以使得分配给每个处理器的计算量是均衡的,确保每个处理器的任务能够同时完成。处理器数量为sm_num,矩阵的形状为k×n,块的最佳发射数量可以最小化公式3中的损失l确定。

10、

11、l=sm_num-((splict_k×n_tile_num)%sm_num)  (3)

12、当神经网络的类型和配置确定时,矩阵向量乘计算的形状种类极少,所以针对特定的网络,基于公式1和2,编译时对预选的几种方案的执行性能进行枚举,从而得到当前网络下最佳的分块方案。

13、根据架构所支持的矩阵核心设置块内矩阵向量乘的计算方式和数据分布。

14、对块内的工作组进行任务划分。涉及到累加操作,每个块内的工作组需要处理相互独立的结果,避免不同工作组之间的通信。对工作组进行一维的划分,根据处理器中矩阵核心的数量来确定工作组的数量,使每个工作组调用一个矩阵核心来完成计算。

15、可选地,每个block从hbm上将整个待处理向量读取并常驻到lds上,lds空间足够大的时候用以减少重复读取开销,并且将分块数量设为与处理器数量相等,通过程序控制block内部所需处理的矩阵块索引。

16、每个block创建用以指令并行的双缓冲,两块存储区分别为buffer_1和buffer_2,交替使用buffer_1和buffer_2用于迭代计算分块的矩阵向量乘并在片上累加。

17、预取数据:每个工作组先将负责处理的第一块矩阵块预取到buffer_1中,并更新矩阵块在hbm中的首地址,使其跳转到下一块待处理的位置。

18、可选地,需要在lds中对数据重新排布,以符合矩阵核心对输入数据的格式需求,同时用优化的排布的方式来避免lds中的存储体冲突或者适应lds中的对齐访问需求。具体包括:

19、采用simd指令按照hbm中矩阵的原始格式,粗粒度地读取到lds上,以充分利用合并访存事务。

20、根据fragment所需的格式将原始格式使用simd指令进行转化,涉及到多线程可能访问lds上同一存储体时,在冲突的位置加入padding,使得原本访问同一存储体而导致冲突的两个线程得以访问不同的存储体。

21、每个block迭代完成对应矩阵块的处理,具体包括:

22、在循环体内部,如果还有待处理的矩阵,每个工作组将负责处理的下一块矩阵块取到buffer_2中,并更新矩阵块在hbm中的首地址,使其跳转到下一块待处理的位置。

23、在循环体内部,将向量从hbm中加载到矩阵核心的输入存储单元中。可选地,从预加载到lds中的部分读取待处理部分。在此处添加block内部工作组的同步检查点,用以同步blcok内所有线程。

24、在循环体内部,调用矩阵核心完成分块的矩阵向量乘,并暂存至累加器。交换frag1缓冲和frag2的缓冲索引。

25、其中,s72的耗时最长,但通过双缓冲技术使得该步骤可以在计算过程中不间断执行,最大化利用带宽,将s73和s74的延迟完全掩盖。

2本文档来自技高网...

【技术保护点】

1.一种基于矩阵核心的高性能矩阵向量乘方法,包括以下步骤:

2.根据权利要求1所述的一种基于矩阵核心的高性能矩阵向量乘方法,其特征在于,步骤一所述的任务网格构建方法是指以矩阵向量乘中的矩阵为依据划分出大小为TILE_K×TILE_N的矩阵块,依照公式3和编译阶段的枚举测试得出TILE_K和TILE_N的最佳值。进一步的,以上超参数的值受两方面因素限制,一是K方向上的结果向量的累加次数,希望越少越好,二是block的总数,理想情况是物理处理器的整数倍。

3.根据权利要求1所述的一种基于矩阵核心的高性能矩阵向量乘方法。其特征在于,矩阵向量乘预编译方法根据权利要求1,和公式3在一个给定区间上推断,对预选的若干种方案的执行性能进行枚举测试,从而得到当前网络下最佳的分块方案。该枚举测试方法不唯一,但过程类似且能达到相同目的。当神经网络的类型和配置确定时,矩阵向量乘计算的形状种类极少,所以针对特定的网络,根据架构所支持的矩阵核心设置块内矩阵向量乘的计算方式和数据分布。

4.根据权利要求1所述的一种基于矩阵核心的高性能矩阵向量乘方法,其特征在于,需要确定的超参数主要包括任务网格内单次处理任务规模,在本方法中主要指输入矩阵子块的行数和列数。

5.根据权利要求1所述的一种基于矩阵核心的高性能矩阵向量乘方法,其特征在于,矩阵核心包括但不限于英伟达GPU上的Tensor core计算单元,昇腾NPU上的cube计算单元。

6.根据权利要求1所述的一种基于矩阵核心的高性能矩阵向量乘方法,其特征在于,该mma指令指深度学习加速器中,和矩阵核心相关的指令,用以计算一个最基本的矩阵乘加操作。

7.根据权利要求1所述的一种基于矩阵核心的高性能矩阵向量乘方法,其特征在于,双缓冲只针对输入矩阵。需要在矩阵核心接受的输入存储单元中开辟双缓冲单元,若有必要在LDS中对输入矩阵进行重新排布,则在LDS中也需要开辟双缓冲。

8.根据权利要求7所述的双缓冲单元,其特征在于,缓冲大小受硬件存储资源限制,但可以在片上的任何一级存储单元上,主要目的是为了使指令并行,使当前指令无需因为数据冲突需要等待前一条指令执行完成才执行。

9.根据权利要求1所述的一种基于矩阵核心的高性能矩阵向量乘方法,其特征在于,待处理的向量根据特定的硬件架构,以最节省带宽的方式读取到任何一级的缓存中。该情景下,向量的读取耗时应远小于待处理矩阵的读取耗时。

10.根据权利要求1所述的一种基于矩阵核心的高性能矩阵向量乘方法,其特征在于,在每个block取完输入向量,并且准备开始执行矩阵乘加mma指令时需要对所有指令进行同步,再将双缓冲的两块缓冲区的指针进行交换。

11.根据权利要求10所述的将双缓冲的两块缓冲区的指针进行交换,其特征在于,不改变两块缓冲区中存储的内容,仅将交换它们的标识。即下一次迭代,buffer1指向的首地址是本次buffer2的首地址,buffer2指向的首地址是本次buffer1中的首地址。

12.根据权利要求1所述的一种基于矩阵核心的高性能矩阵向量乘方法,其特征在于,mma指令用以累加结果的片上内存包括不限于处理器中的寄存器,LDS等高速的存储单元,主要目的是为了将耗时的规约操作尽量集中在片上,减少访问HBM的次数。

13.根据权利要求1所述的一种基于矩阵核心的高性能矩阵向量乘方法,其特征在于,每个block将最终的计算结果在HBM上进行原子相加,该方法通过深度学习加速器所提供的对应原子指令完成,区别于传统的加法计算,原子操作确保了不同的block对同一块HBM区域的互斥访问,确保了计算的正确性。

...

【技术特征摘要】

1.一种基于矩阵核心的高性能矩阵向量乘方法,包括以下步骤:

2.根据权利要求1所述的一种基于矩阵核心的高性能矩阵向量乘方法,其特征在于,步骤一所述的任务网格构建方法是指以矩阵向量乘中的矩阵为依据划分出大小为tile_k×tile_n的矩阵块,依照公式3和编译阶段的枚举测试得出tile_k和tile_n的最佳值。进一步的,以上超参数的值受两方面因素限制,一是k方向上的结果向量的累加次数,希望越少越好,二是block的总数,理想情况是物理处理器的整数倍。

3.根据权利要求1所述的一种基于矩阵核心的高性能矩阵向量乘方法。其特征在于,矩阵向量乘预编译方法根据权利要求1,和公式3在一个给定区间上推断,对预选的若干种方案的执行性能进行枚举测试,从而得到当前网络下最佳的分块方案。该枚举测试方法不唯一,但过程类似且能达到相同目的。当神经网络的类型和配置确定时,矩阵向量乘计算的形状种类极少,所以针对特定的网络,根据架构所支持的矩阵核心设置块内矩阵向量乘的计算方式和数据分布。

4.根据权利要求1所述的一种基于矩阵核心的高性能矩阵向量乘方法,其特征在于,需要确定的超参数主要包括任务网格内单次处理任务规模,在本方法中主要指输入矩阵子块的行数和列数。

5.根据权利要求1所述的一种基于矩阵核心的高性能矩阵向量乘方法,其特征在于,矩阵核心包括但不限于英伟达gpu上的tensor core计算单元,昇腾npu上的cube计算单元。

6.根据权利要求1所述的一种基于矩阵核心的高性能矩阵向量乘方法,其特征在于,该mma指令指深度学习加速器中,和矩阵核心相关的指令,用以计算一个最基本的矩阵乘加操作。

7.根据权利要求1所述的一种基于矩阵核心的高性能矩阵向量乘方法,其特征在于,双缓冲只针对输入矩阵。需要在矩阵核...

【专利技术属性】
技术研发人员:陆璐钟昊阳
申请(专利权)人:深圳爱特思信息技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1