一种应用于深度学习网络的缓存优化方法及装置与流程

文档序号:15589343发布日期:2018-10-02 18:45阅读:218来源:国知局

本发明涉及计算机技术领域,具体涉及一种应用于深度学习网络的缓存优化方法及与该方法对应的装置。



背景技术:

深度学习是机器学习研究中的新领域,是一种比较有效的人工智能方法。它通过模拟人脑的学习行为,从数据中学习到相关知识以便用于后续的预测。深度学习采用所谓的“网络”进行学习,其中网络由多个“层”(例如,卷积)组成,每一层以前一层(或前几个卷积)的输出作为输入进行训练,然后再将训练结果作为下一层的输入。训练过程便是对每一层进行有序计算的过程。

在深度学习的训练中,将产生大量的中间数据,为训练需要,通常需要对这些数据进行缓存,从而占用大量的缓存。因此,亟需探寻优秀的缓存优化方法变得尤为重要。如果由人工根据经验知识进行对深度学习进行缓存优化,其要求优化人员必须对深度学习的网络模型结构非常清楚,并且了解缓存中间数据的每一块缓存的使用时机,知道每块缓存何时会被使用、何时不会被使用,从而将不会被共同使用的缓存进行共享,达到节约缓存大小的目的。

然而,深度学习的不同网络模型,结构不同,其使用缓存的情况也各不相同,对优化人员的要求较高,在真正实施过程中,难以实现,降低了缓存优化效率。



技术实现要素:

本发明所要实现的目的在于,通过提出的一种应用于深度学习网络的缓存优化方法及装置,以解决深度学习网络每层训练中,缓存优化效率较低的问题。

根据本发明的一方面,提供了一种应用于深度学习网络的缓存优化方法,该深度学习网络包括n层,n大于等于2,该方法包括:对深度学习网络的第n层进行模拟运算;在对深度学习网络的第n层进行模拟运算后,检测第一预定缓存块是否被占用,所述第一预定缓存块用于缓存所述第n层模拟运算的输入数据或第n层之前的层模拟运算的输入/输出数据;如果被占用,则为第n层模拟运算的输出数据分配第二预定缓存块,并在满足预设条件时,释放被占用的所述第一预定缓存块。

可选地,所述缓存块具有与其对应的占用或未占用的状态标记存储在缓存块状态表中,所述检测第一预定缓存块是否被占用,具体包括:根据第一预定缓存块的标识在所述缓存状态表中查询第一预定缓存块对应的状态标记,根据所述状态标记确定所述第一预定缓存块是否被占用。

可选地,所述为第n层模拟运算的输出数据分配第二预定缓存块,具体包括:为第n层模拟运算的输出数据分配与所述第一预定缓存块紧邻的第二预定缓存块。

可选地,所述方法中,在满足预设条件时,释放被占用的所述第一预定缓存块,具体包括:在对深度学习网络的第n+1层进行模拟运算时,释放被占用的所述第一预定缓存块;或在对第n层进行模拟运算之后,对深度学习网络的第n+1层进行模拟运算之前,释放被占用的所述第一预定缓存块;或在没有第二预定缓存块可分配时,释放被占用的所述第一预定缓存块。

可选地,在检测到第一预定缓存块未被占用时,为第n层模拟运算的输出数据分配所述第一预定缓存块。

可选地,所述第一预定缓存块、所述第二预定缓存块通过不同颜色进行标记。根据本发明的另一方面,还提供了一种应用于深度学习网络的缓存优化装置,该深度学习网络包括n层,n大于等于2,包括:

模拟运算单元,用于对深度学习网络的第n层进行模拟运算;

状态检测单元,用于在对深度学习网络的第n层进行模拟运算后,检测第一预定缓存块是否被占用,所述第一预定缓存块用于缓存所述第n层模拟运算的输入数据或第n层之前的层模拟运算的输入/输出数据;

缓存分配单元,用于在第一预定缓存块被占用时,为第n层模拟运算的输出数据分配第二预定缓存块;

缓存释放单元,用于在满足预设条件时,释放被占用的所述第一预定缓存块。

可选地,缓存块具有与其对应的占用或未占用的状态标记,则所述状态检测单元包括查询子单元,所述查询子单元,用于查询所述第一预定缓存块对应的状态标记,根据所述状态标记确定所述第一预定缓存块是否被占用。

可选地,缓存块与其状态标记之间的对应关系存储在缓存块状态表中,所述查询子单元,具体用于根据第一预定缓存块的标识在所述缓存状态表中查询第一预定缓存块对应的状态标记,以便根据查询结果确定所述第一预定缓存块是否被占用。

可选地,所述缓存分配单元具体用于为第n层模拟运算的输出数据分配与所述第一预定缓存块紧邻的第二预定缓存块。

可选地,所述缓存释放单元具体用于:在对深度学习网络的第n+1层进行模拟运算时,释放被占用的所述第一预定缓存块;或,在对第n层进行模拟运算之后,对深度学习网络的第n+1层进行模拟运算之前,释放被占用的所述第一预定缓存块;或,在没有第二预定缓存块可分配时,释放被占用的所述第一预定缓存块。

可选地,在所述状态检测单元,还用于在检测到第一预定缓存块未被占用时,为第n层模拟运算的输出数据分配所述第一预定缓存块。

可选地,所述第一预定缓存块、所述第二预定缓存块通过不同颜色进行标记。

本发明在对深度学习网络第n层进行模拟运算后,检测第一预定缓存块是否被占用,在被占用的情况下,便重新分配缓存块,在满足预设条件时,释放被占用的所述第一预定缓存块。本发明在需要对模拟运算的结果数据分配缓存时,可以自动识别预定缓存块的使用状态,而不再依赖于优化人员对深度学习网络模型结构、缓存使用状态的掌握,从而可以提高缓存优化效率。

附图说明

为了更清楚地说明本发明的技术方案,本发明的实施例及其说明用于解释本发明,并不构成对本发明的不当限定,下面将对实施方式描述中所需要使用的附图进行简要说明。在附图中:

图1a为传统的缓存使用方法原理图,其横轴为时间轴;

图1b为共享缓存的原理图,其横轴为时间轴;

图2为根据本发明实施例的一种缓存优化方法的流程图;

图3为根据本发明实施例的一种缓存优化方法的流程图;

图4为根据本发明实施例的一种缓存优化方法的流程图;

图5a为本发明实施例中显存优化开始阶段的显存状态示意图;

图5b为本发明实施例中对层a进行显存优化过程示意图;

图5c为本发明实施例中对层b进行显存优化过程示意图;

图5d为本发明实施例中对层c进行显存优化过程示意图;

图5e为本发明实施例中最终完成显存优化之后的显存使用示意图;

图6为本发明实施例中的缓存优化装置的结构框图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施方式及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施方式仅是本申请一部分实施方式,而不是全部的实施方式。基于本申请中的实施方式,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施方式,都属于本申请保护的范围。

以下结合附图,详细说明本申请各实施方式提供的技术方案。

如图1a所示的是传统的缓存使用方法原理图,其中横轴为时间轴;从图1a中,发明人发现显存1和显存2有一段时间被同时使用,因此,显存1和显存2不能共享,但是显存1和显存3的使用时间是相对独立的,因此可以共享。如图1b所示的是共享缓存的原理图,其中横轴为时间轴。其中共享显存1表示显存1和显存3最终使用同一块地址空间;共享显存2标识显存2和显存4最终使用同一块地址空间。

本实施例提供了一种应用于深度学习网络的缓存优化方法。本实施例中的深度学习网络包括许多层,一般来说层数大于等于2,并用n来表示层数。本实施例的流程图如图2所示,包括如下步骤:

s101:对深度学习网络的第n层进行模拟运算;在深度学习网络中,包括输入层、输出层以及一层或多层的隐藏层,其中,多层隐藏层合起来组成深度学习网络中的中间层。而深度学习网络中的模拟运算方式也有许多种。例如,输出层的值可以通过输入层的值与中间层的权值矩阵进行某种结合所得到。而模拟运算的过程即可以被看作是计算这些中间层权值矩阵的过程。

s102:在对深度学习网络的第n层进行模拟运算后,检测第一预定缓存块的使用状态;其中所述第一预定缓存块用于缓存所述第n层模拟运算的输入数据或第n层之前的层模拟运算的输入/输出数据;

s103:缓存块被占用,则为第n层模拟运算的输出数据分配第二预定缓存块,并在满足预设条件时,释放被占用的所述第一预定缓存块。

其中,所述第一预定缓存块及第二预定缓存块是在模拟运算进行之前分配好的待用缓存块,其缓存块的数量不做限定,可以是两块及两块以上。第一预定缓存块及第二预定缓存块中的第一和第二用于区分缓存块。

需要说明的是,本实施例所提供的方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。例如,步骤s101的执行主体可以是设备1,步骤s102和s103的执行主体可以为设备2;等等。所述设备可以是具有能够实施缓存优化的计算设备,例如,个人电脑、笔记本电脑、平板电脑等。为了避免重复,下述所有实施例中的执行主体都可以与上述实施例中的执行主体相同或类似。

上述缓存块可以但不限于是cpu(中央处理器,centralprocessingunit)的内存、gpu(图形处理器,graphicsprocessingunit)的显存等具有存储功能的载体。

通过本实施例,提供一种基于深度学习网络的缓存优化方法,该方法通过在模拟运算时进行冲突检测和释放缓存以达到优化缓存的目的,即在深度学习网络的每层训练中,为了优化真实训练过程中对缓存的占用,先进行模拟运算来作为缓存分配的参考,在模拟运算后进行缓存分配时,检查待分配或预先分配的缓存块当前使用状态,进而选择空闲的缓存进行分配。通过上述过程,能够自动检测缓存块的使用状态,而不再依赖优化人员人为去根据网络结构分配缓存,使得深度学习网络的缓存优化和分配效率得以提升,并能够去适应更多不同的网络。

此外,对于深度学习网络已经占用的缓存,在满足预设条件时,及时释放掉先前的输出数据,以使得整个缓存分配能够循环起来。

本发明实施例的一个具体实施方式的过程还可以包括对深度学习网络的每一层进行模拟运算,冲突检测,即对缓存此层模拟运算的输入数据或前一层的模拟运算输入/输出数据的第一预定缓存块是否被占用进行检测;缓存分配,即发现缓存块被占用,为其数据分配第二预定缓存块,以此类推。本实施例中基于一种冲突检测方式的缓存优化方法的流程示意图如图3所示,其步骤包括:

s201:假设所有预定缓存块都没被使用,并将需要缓存数据的缓存块都指向同一个预定的第一缓存地址,

s202:对每层需要使用的缓存块进行冲突检测。当检测到冲突出现时,为冲突的缓存块分配一个预定的第二缓存地址,若未检测到冲突出现,则继续检测下一块缓存,以此类推。

s203:在满足预设条件,即此层模拟运算结束后,释放被占用的所述第一预定缓存块。

其中,所述第一预定缓存块及第二预定缓存块中第一第二是其使用的顺序。并且,第二预定缓存块与第一预定缓存块是紧邻的。这样设计的目的是为了减少存储碎片所带来的不必要的缓存浪费。并且,实施例中的缓存优化方式,可以通过每次模拟运算后,对缓存状态进行“冲突检测”,及时发现处于闲置状态的缓存,从而提高缓存的使用效率。

本发明实施例的一个具体实施方式中,如图4所示的是本实施例的一种缓存优化方法的流程图。在本实施例中,缓存块作为一个存储单元,可以具体体现为磁盘存储器、内存、显存等具有存储功能的载体,因此本实施例的缓存优化方法可以适用于对磁盘存储器、内存、显存等的优化。下面以显存为例来进行说明,为简化起见,在本实施例中,深度学习网络的层数n为3,分别是a、b、c三层,其中显存的预定分配方式是:显存1和显存2为层a的输入和输出,显存3和显存4为层b的输入和输出,显存2和显存4为层c的输入,显存5为层c的输出。当每一层模拟运算完成后,此层输入所占用的显存块即被释放。该方法包括(步骤s301-s304):

步骤s301:将需要显示数据的显存块都指向同一个预定的显存地址,并标记预定的显存块被显存1中的数据占用。如图5a所示的是显存优化开始阶段的显存状态示意图,如图5a所示,将显存1-5都标记为红色或显示成红色,即所有显存块都指向同一个显存地址,并标记红色显存块被显存1中数据占用,并在显存块状态表中记录。

步骤s302:对层a进行显存优化过程,即对a层的输入输出显存进行冲突检测以及显存分配,并将分配结果记录。如图5b所示的是对层a进行显存优化过程示意图,如图5b所示,模拟运算中,对层a的显存1和显存2进行冲突检测,发现显存2想使用的红色显存块已经被显存1占用,即产生冲突。此时,为显存2重新分配一个新的显存地址,即标记黄色显存块被显存2中数据占用,完成层a的模拟运算之后,释放显存1占用的红色显存块,并在显存块状态表中记录此时的显存块使用状态。

步骤s303:对层b进显存优化过程,即对b层的输入输出显存进行冲突检测以及显存分配,并将分配结果记录。如图5c所示的是对层b进行显存优化过程示意图,如图5c所示,模拟运算中,层b的显存3想将数据缓存到预定的红色显存块中,通过显存块状态表发现红色显存块没有被使用,因此将红色显存块标记为被显存3使用。接着,对b层的显存3和显存4进行冲突检测,通过显存块状态表发现显存4想使用的红色显存块已被显存3占用,黄色显存块已被显存2占用,即产生冲突。此时,为显存4重新分配一个新的显存地址,即标记蓝色显存块被显存4中数据占用,完成b层的模拟运算之后,释放显存3占用的红显存存块,并在显存块状态表中记录此时的显存块使用状态。

步骤s304:对层c进行显存优化过程,即对c层的输入输出显存进行冲突检测以及显存分配,并将分配结果记录。如图5d所示的是对层c进行显存优化过程示意图,如图5d所示,模拟运算中,层c的显存5想将数据存储到红色显存块中,进行冲突检测,通过显存块状态表发现层c红色显存块未被使用,因此将红色显存块标记为被显存5占用。此时,已对所有显存块的冲突状态检测完毕,完成层c的模拟运算之后,释放显存2和显存4占用的蓝色显存块和黄色显存块,并在显存块状态表中记录。

图5e所示的是最终完成显存优化之后的显存使用示意图。如图5e所示,最终,完成显存优化之后,显存5中的数据存储在红色显存块中,而显存1-4已经全部被释放。

本实施例中所述的显存块状态表,是对所有显存占用状态的记录,通过使用显存块状态表,使得每块显存占用信息更加清晰。在本实施例中,假设显存1-5的大小均为200m,若不利用实施例中所述的显存优化方式进行显存优化分配,则显存1-5都需要被占用,即显存占用量为1000m;但利用本实施例中所述方法进行显存优化分配之后,实际使用的显存块只有红色、蓝色、黄色三块显存,其实际显存占用量仅为600m。通过本实施例的缓存优化方法,能达到节约缓存的目的,进一步提高缓存的使用率。

本实施例中所举例子只是一个较小的深度学习网络,只包括三层。对于更加复杂的深度学习网络,例如n层(n大于3)的深度学习网络,利用本方法,将n-1层的输出作为n层的输入,也依然能够实现其缓存的优化及分配。

基于相同的发明构思,本发明的实施例还提供了一种缓存优化装置。

图6是根据本发明实施方式的缓存优化装置的结构框图,如图6所示,所述装置包括:模拟运算单元610、状态检测单元620、缓存分配单元630和缓存释放单元640,下面详细描述各模块的结构和连接关系。

模拟运算单元610用于对深度学习网络的第n层进行模拟运算;

状态检测单元620其与模拟运算单元610相耦合,其用于在对深度学习网络的第n层进行模拟运算后,检测第一预定缓存块是否被占用;

缓存分配单元630其与状态检测单元620相耦合,其用于在第一预定缓存块被占用时,为第n层模拟运算的输出数据分配第二预定缓存块;

缓存释放单元640其与缓存分配单元630相耦合,其用于在在满足预设条件时,释放被占用的所述第一预定缓存块。

可选地,缓存块与其状态标记之间的对应关系存储在缓存块状态表中,所述状态检测单元620还包括:查询子单元(未示出),具体用于根据第一预定缓存块的标识在所述缓存状态表中查询第一预定缓存块对应的状态标记,以便根据查询结果确定所述第一预定缓存块是否被占用。

可选地,所述缓存分配单元630具体用于为第n层模拟运算的输出数据分配与所述第一预定缓存块紧邻的第二预定缓存块。

可选地,所述缓存释放单元640具体用于:在对深度学习网络的第n+1层进行模拟运算时,释放被占用的所述第一预定缓存块;或,在对第n层进行模拟运算之后,对深度学习网络的第n+1层进行模拟运算之前,释放被占用的所述第一预定缓存块;或,在没有第二预定缓存块可分配时,释放被占用的所述第一预定缓存块。

可选地,在所述状态检测单元620,还用于在检测到第一预定缓存块未被占用时,为第n层模拟运算的输出数据分配所述第一预定缓存块。所述第一预定缓存块、所述第二预定缓存块可以通过不同颜色进行标记。

根据本发明的技术方案,基于深度学习方式,改进了传统缓存优化方法中,优化人员必须对深度学习网络非常清楚,并且了解的每一块缓存的使用时机,知道每块缓存何时会被使用,何时不会被使用的复杂方法,使得深度学习领域的缓存优化方法更加通用和简单。并通过“模拟运算、冲突检测、释放缓存”的方法,及时发现处于闲置状态的缓存,从而提高了缓存的使用效率。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。

尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram),只读存储器(rom),可擦除可编辑只读存储器(eprom或闪速存储器),光纤装置,以及便携式光盘只读存储器(cdrom)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。

在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。

尽管已描述了本发明的优选实施方式,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施方式做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施方式以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1