掌桥专利:专业的专利平台
掌桥专利
首页

一种反馈式神经网络模型计算流流水线排布方法及AI编译器

文献发布时间:2024-04-18 20:01:30


一种反馈式神经网络模型计算流流水线排布方法及AI编译器

【技术领域】

本发明涉及计算机技术领域,具体涉及一种反馈式神经网络模型计算流流水线排布方法及AI编译器。

【背景技术】

编译器就是将"一种语言(通常为高级语言)"翻译为"另一种语言(通常为低级语言)"的程序。

IR(Intermediate Representation即中间表示)是程序编译过程中,源代码与目标代码之间翻译的中介,IR的设计对编译器来说非常关键,好的IR要考虑从源代码到目标代码编译的完备性、编译优化的易用性和性能。

数据类型-Tensor:AI领域,计算被抽象成张量的计算,这就意味着AI编译器中主要处理的数据类型也是张量,这个是非常重要的前提。

与传统编译器相比,AI编译器是一个领域特定的编译器,有四个明显的特征:1、Python为主的动态解释器语言前端,2、多层IR设计,3、面向神经网络的特定优化,4、DSA芯片架构的支持。

AI编译器一般针对一些硬件结构来设计,图1是一种业内比较常见的AI计算单元硬件结构示意图。如图1所示,计算单元每次计算时,先进行加载过程,需要先将DDR中的输入数据加载到SRAM中;然后进行计算过程,将SRAM中的数据加载到vector(向量)寄存器,计算单元从vector寄存器中取数据计算;计算后将结果输出到vector寄存器,然后再将vector寄存器中数据存回SRAM;最后进行存储过程,将SRAM的数据存回DDR。其中从DDR读写数据的速度小于从SRAM的读写数据的速度。

图2是一个链状的神经网络模型计算流示例图。如图2所示,AI编译器的计算中,神经网络模型(计算图IR)是由若干计算节点组成的一个有向无环图,每一个计算节点的输入输出是一个tensor(张量),由于处理器中SRAM的比较小无法放下整个tensor,需要将tensor(存储在DDR)进行切block(块),每次将一个block加载到SRAM中计算,block大小一般相同。

常规情况下的AI编译器流水线排布存在的问题。常规情况下的AI编译器流水线排布是每一个块流水线包括加载、固定个数计算和存储过程。图3是常规情况下的神经网络模型计算流流水线排布结构示意图。如图3所示,建立流水线的目的是用计算时间掩盖掉load(加载)和store(存储)时间,从而提升系统性能,例如blcok1在计算的过程、block0的计算结果在从SRAM store回DDR、block2在从DDR load到SRAM。为了实现计算时间和加载数据时间均衡,其中每一个block加载后,需要经过固定个数的计算,使得计算单元的计算时间和加载load/存储store的时间相差不过大,从而减少计算单元的空闲时间,其中灰色部分为计算单元空闲时间。虽然这种固定的流水线看上去实现了系统的最优化流水排布,但是当用户随时打开一个模块时,如果模块对DDR带宽抢占比较明显,当前的流水线中的blockload和block store的时间会变长,使得计算单元空闲的时间增长,从而导致性能下降,此时的流水线排布效率比较差。

有些方法为了解决这个问题,会加入更多的block compute(块计算)来增加每次计算的时间,由于神经网络模型中存在convolution(卷积)计算较多,将过多的convolution连在一起计算会出现明显的overlap(重叠),也就是输入的数据块很大,输出的数据块很小,同时增加了整个模型的计算量。

公布号为CN111090464A,名称《一种数据流处理方法及相关设备》的中国发明专利,公开了一种数据流处理方法及相关设备,包括获取多个处理单元对数据流进行操作的依赖关系和执行先后顺序,根据所述依赖关系和所述执行先后顺序,生成同步逻辑;将所述同步逻辑插入到所述多个处理单元中各个处理单元的操作流水线上,生成可执行代码;提高了编译性能,提高数据处理效率。但是这篇专利生成值流水线排布在编译后确定不变,不论系统DDR带宽如何,流水线排布都是固定的,不可以根据DDR带宽占用、切换流水线排布。

本发明针对神经网络模型计算流流水线排布DDR带宽占用导致计算单元空闲时间增长、卷积计算重叠的技术问题,对神经网络模型计算流流水线排布方法及AI编译器进行了技术改进。

【发明内容】

本发明的目的是,提供一种根据DDR带宽占用、动态切换相对合适神经网络模型计算流流水线排布的方法。

为实现上述目的,本发明采取的技术方案是一种反馈式神经网络模型计算流流水线排布方法,所述神经网络模型包括若干计算节点,所述计算节点包括计算单元、SRAM和DDR;所述神经网络模型编译时的中间表示是由若干计算节点组成的一个有向无环图,所述计算节点的输入输出是一个存储在DDR中的张量,所述张量切成若干块;所述计算单元计算时是顺序执行若干块任务的计算流,所述块任务先进行块加载,每次将DDR中的一个块加载到SRAM中,然后进行块计算,从SRAM中读取块,计算后将结果输出到SRAM,最后进行块存储,将SRAM中的结果存回DDR;所述计算流按照流水线排布,用本块任务的块计算时间掩盖掉在后执行块任务的块加载时间、和在先执行块任务的块存储时间,所述DDR带宽是指块加载/块存储占有流水线的时间;包括以下步骤:

S1、针对块加载/块存储时间的大小,通过增减块计算个数做若干不同块计算时间大小的计算流流水线排布,编译生成不同DDR带宽占有下的计算流流水线排布指令流;

S2、发生DDR带宽抢占时,根据计算单元运行块计算周期个数和块加载加块存储周期个数的比例,动态切换不同DDR带宽占有下的计算流流水线排布,切换到块计算时间大小和块加载/块存储时间大小相等或近似的计算流流水线排布指令流。

优选地,步骤S1:所述计算流流水线排布指令流包括DDR带宽未被抢占时的计算流流水线排布指令流、DDR带宽被略微抢占时的计算流流水线排布指令流和DDR带宽被严重抢占时的计算流流水线排布指令流。

优选地,步骤S2:根据条件a:块计算周期个数/块加载加块存储周期个数<最小阈值,条件b:块计算周期个数/块加载加块存储周期个数>=最大阈值,切换计算流流水线排布指令流,其中,最大阈值和最小阈值人为设定。

优选地,步骤S2:发生DDR带宽抢占时,如果所述计算流处于DDR带宽未被抢占时的计算流流水线工作模式,满足条件a时,切换到DDR带宽被略微抢占时的计算流流水线排布指令流,满足条件b时,工作模式不切换。

优选地,步骤S2:发生DDR带宽抢占时,如果所述计算流处于DDR带宽被略微抢占时的计算流流水线工作模式,满足条件a时,切换到DDR带宽被严重抢占时的计算流流水线排布指令流,满足条件b时,切换到DDR带宽未被抢占时的计算流流水线排布指令流。

优选地,步骤S2:发生DDR带宽抢占时,如果所述计算流处于DDR带宽被严重抢占时的计算流流水线工作模式,满足条件a时,工作模式不切换,满足条件b时,切换到DDR带宽被略微抢占时的计算流流水线排布指令流。

优选地,每次计算流流水线工作模式切换前,需要所述计算流流水线在一个时间片内符合条件a或者条件b,并且保证计算单元一次推理计算完成后进行计算流流水线工作模式切换。

优选地,每一种所述计算流流水线排布指令流存储在一块连续的内存里,计算流流水线排布切换时只要修改所述计算流流水线排布指令流起始地址,输入输出和中间缓存对应的内存地址复用切换前计算流流水线排布指令流对应的地址。

本发明的又一目的是,提供一种根据DDR带宽占用、动态切换相对合适神经网络模型计算流流水线排布的AI编译器。

为实现上述又一目的,本发明采取的技术方案是一种反馈式神经网络模型计算流流水线排布AI编译器,用于执行上述的一种反馈式神经网络模型计算流流水线排布方法。

本发明神经网络模型计算流流水线排布方法及AI编译器有益效果如下:1、可以在其他模块抢占DDR带宽时,有效防止性能出现明显下降;2、可以动态确定一个比较合适的计算层数,从而避免了过多的卷积层的融合导致的overlap太大、使得输入很大输出很小的、计算量明显增加的技术问题。

【附图说明】

图1是一种业内比较常见的AI计算单元硬件结构示意图。

图2是一个链状的神经网络模型计算流示例图。

图3是常规情况下的神经网络模型计算流流水线排布结构示意图。

图4是DDR带宽未被抢占时的神经网络模型计算流流水线排布结构示意图。

图5是DDR带宽被略微强占时的神经网络模型计算流流水线排布结构示意图。

图6是DDR带宽被严重抢占时的神经网络模型计算流流水线排布结构示意图。

【具体实施方式】

下面将详细描述本发明的各个方面的特征和示例性实施例。在下面的详细描述中,提出了许多具体细节,以便提供对本发明的全面理解。但是对于本领域技术人员来说很明显的是,本发明可以在不需要这些具体细节中的一些细节的情况下实施。下面对实施例的描述仅仅是为了通过示出本发明的示例来提供对本发明的更好的理解。本发明决不限于下面所提出的任何具体配置和算法,而是在不脱离本发明构思的前提下覆盖了元素、部件和算法的任何修改、替换和改进。在附图和下面的描述中,没有示出公知的结构和技术,以便避免对本发明造成不必要的模糊。

实施例

本实施例实现一种反馈式神经网络模型计算流流水线排布方法。

本实施例通过AI编译器采用基于反馈的编译方法,根据DDR带宽占用、动态切换比较合适的神经网络模型计算流流水排布方式。

由附图3所示的神经网络模型计算流流水线排布计算过程可知,系统运行时,用户随时可以打开另一个模块导致现有模块的流水线排布效率变低,由于模块可以统计load/store cycle(周期)个数、计算单元运行cycle个数和计算单元空闲的cycle个数(cycle个数等效于时间),本实施例针对load/store延迟的大小做若干对应的流水线排布,先编译生成不同带宽下的流水线排布指令流,然后根据计算单元运行cycle个数和load加store的cycle个数的比例动态的切换流水线排布。即先编译生成指令流后,运行时才会动态的切换,具体而言:运行之前,编译的时候,由于一个块的计算时间编译器是可以估算出来的,但是编译器无法确定的运行时带宽的抢占情况,所以可以假设几种带块抢占的情况,对应的编译出几种对应的流水线指令流;然后将指令流加载到DDR中;运行时(带宽抢占时)根据上面的切换方法在这几种指令流之间进行切换。

图4是DDR带宽未被抢占时的神经网络模型计算流流水线排布结构示意图。

图5是DDR带宽被略微强占时的神经网络模型计算流流水线排布结构示意图。

图6是DDR带宽被严重抢占时的神经网络模型计算流流水线排布结构示意图。如图4、图5、图6所示,本实施例下面以一种三条不同的流水线设置为例,说明本实施例方法实现过程。图4、图5、图6设置了三种不同DDR带宽下的流水线排布,图4为DDR带宽未被抢占时的流水线排布,图5为DDR带宽被略微强占时的流水线排布,增加了计算个数,从而未增加计算时长,图6为DDR带宽被严重抢占时的流水线排布。

计算单元运行cycle个数/(load和store的cycle个数)<最小阈值(1)

计算单元运行cycle个数/(load和store的cycle个数)>最大阈值(2)

公式(1)和(2)为动态切换神经网络模型计算流流水线排布的条件,其中最大和最小阈值人为设定。

当发生带宽抢占时,如果系统当前处于图4所示的流水线工作模式,load和store的cycle个数增加,计算单元运行cycle个数不变。当满足公式(1)时,切换到图5所示的流水线工作模式,如果不满足公式(1)满足公式(2)流水线模式不切换。如果处于图5所示的流水线模式满足公式(1),切换到图6所示的流水线工作模式,如果满足公式(2),切换到图4所示的流水线工作模式。如果处于图6所示的流水线模式满足公式(1),不切换,如果满足(2)切换到图5所示的流水线工作模式。

为了避免频繁切换,每次切换前,需要在一个时间片内符合(1)或者(2)的条件,才进行切换,并且切换时要保证一次inference(推理计算)完成后才能切换。

另外由于编译后的指令和数据是分开存储的,所以本实施例的指令会根据流水线排布的不同分成若干份(本实施例是三种不同的流水线,对应三份不同指令流),每一种流水线对应的指令流存储在一块连续的内存里,切换时只要修改需要指令流起始地址寄存器对应起始地址即可,对于输入输出和中间缓存对应的内存地址可以复用前一种流水线对应的地址。

本实施例可以在其他模块抢占DDR带宽时,可以有效防止性能出现明显下降。

本实施例可以动态确定一个比较合适的计算层数,从而避免了过多的卷积层的融合导致的overlap太大,使得输入很大输出很小的,计算量明显增加的问题。

本领域普通技术人员可以理解,实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员,在不脱离本发明原理的前提下,还可以做出若干改进和补充,这些改进和补充也应视为本发明的保护范围。

相关技术
  • 源极驱动电路、驱动方法、源极驱动装置和显示装置
  • 显示驱动方法、显示驱动装置、数据驱动电路及显示装置
  • 驱动电路、驱动装置、显示装置及其驱动方法
  • 压电驱动装置、压电驱动装置的驱动方法以及机器人
  • 图像形成装置、带驱动装置以及带驱动装置的控制方法
  • 设计成用于平带驱动带端部段的抗张力连接的驱动带连接装置、驱动带以及配备有驱动带连接装置和驱动带的传送装置
  • 显示驱动装置和用于驱动显示驱动装置的方法以及显示装置和用于驱动显示装置的方法
技术分类

06120116557092