用于神经网络硬件加速的多播网络和存储器转移优化的制作方法

文档序号:17117319发布日期:2019-03-15 23:27阅读:219来源:国知局
用于神经网络硬件加速的多播网络和存储器转移优化的制作方法

此专利申请要求2016年5月7日提交的序列号为62/333214、标题为“memoryandprocessingarchitectureforhardwareacceleratedmachinelearning”的临时专利申请的优先权,据此通过引用将其完整地结合于本文中。



背景技术:

机器学习和深度神经网络,包含深度信任网络(统称为神经网络),正在迅速变得普及。应用起初从计算机图像中的对象识别以及从语音识别开始,现在,在诸如applesiritm、microsoftcortanatm、amazonalexatm、googleassistanttm之类的声音用户接口中是常见的。神经网络目前被运用于工业控制器、医疗诊断,这导致神经网络的急速增长。

然而,神经网络操作,至少当被运用于机器学习和深度神经网络时,通常利用诸如矩阵运算之类的密集的线性代数运算,以及诸如卷积、最大汇合和数据噪声生成之类的更加神经网络特定的操作。这样的操作有助于并行操作,诸如并行地计算矩阵行,这如果在一般并非并行的常见中央处理单元(cpu)上执行,则导致次优的性能。

因此,针对矩阵运算和并行操作而优化的图形处理单元(gpu)的阵列已被运用于神经网络,诸如经由nvidia的cudatm架构。然而,虽然gpu针对矩阵运算被优化,但是它们没有提供对神经网络(诸如卷积、最大汇合和噪声生成)特定的优化,从而限制它们在神经网络操作中的性能。

附图说明

参考附图来提供详细描述。

图1是用于机器学习硬件加速的系统环境的场景图。

图2是针对机器学习硬件加速的框图。

图3是针对用于机器学习硬件加速的多播网络优化的框图。

图4是针对用于机器学习硬件加速的多播网络优化的流程图。

图5是针对不间断存储体化的计算机存储器的访问跨距的场景图。

图6是针对用于机器学习硬件加速的dram转移优化中使用的置换器(permutaton)的框图。

图7是针对用于机器学习硬件加速的dram转移优化的框图。

图8是针对用于机器学习硬件加速的dram转移优化的流程图。

具体实施方式

用于神经网络硬件加速的多播网络和存储器转移优化的概览

神经网络硬件加速在开发、编译(或编程上转换)和执行利用神经网络的应用的环境的场景内发生。这样的应用经常被称作机器学习应用、深度神经网络应用和/或深度信任网络应用。虽然机器学习并不严格地需要神经网络的使用,但是很多常见的现今框架和技术利用神经网络。深度神经网络可大致认为是一系列的神经网络或神经网络的网络。

如上所述,中央处理单元(cpu)或图形处理单元(gpu)阵列这些形式的现今硬件没有为对神经网络常见的很多操作提供硬件优化。本文公开的是用于神经网络硬件加速的各种技术,特别是用于针对被调遣到数据接收器(诸如执行单元)的数据的多播网络的技术,以及用于存储器转移的技术。

本文公开的优化被设计成以恒量时间(bigo(c))或线性时间(bigo(n))在硬件中执行那些操作,否则cpu和/或gpu将会使用bigo(nlog(n))或更高的多项式时间。优化可在设计时间和/或编译时间利用信息,可利用转换来实现对矩阵常见的多维运算以及张量运算,并且可识别和利用硬件中的指令流水线机会。

图1提供其中可发生神经网络硬件加速的场景图100。具体来说,用户102从云104访问计算服务。用户可以是开发者或者可以是最终用户。

云104包括能够存储计算机可读数据和执行计算机可读指令的若干服务器106。可由管理器108来分解那些服务器106以服务虚拟机110。

已编译神经网络应用112可直接在服务器106上或者在虚拟机110上执行。可由一个或多个神经网络框架和/或运行时间114来供应服务器106和/或虚拟机110。神经网络硬件加速单元116可被连接到服务器106或者可以是独立的。作为服务器106的资源,神经网络硬件加速单元也可由管理器108来分解,从而使它的资源可用于虚拟机110。

已编译神经网络应用112是用于神经网络应用的源码118由编译器120编译后的结果。神经网络应用112可能也已被链接到对神经网络框架或运行时间114特定的库。

重新回到神经网络硬件加速器单元116,它包括可转移指令以及执行其它操作的系统控制块122。它经由通信总线124与控制cpu通过接口连接。硬件加速器单元将具有与本地存储器128、一个或多个多播网络130以及多个数据接收器132通过接口连接的指令解释器126。在一些实施例中,数据接收器132可以是执行单元。与装置外的数据的接口可经由数据转移单元134在存储器总线136上通过接口连接。

下面关于图2进一步详细地描述神经网络硬件加速器单元116。注意,一个或多个多播网络130和数据转移单元134具有若干优化。下面关于图3和图4进一步详细地描述多播网络优化。数据转移单元优化利用如下面关于图5描述的群论的特征。下面关于图6、图7和图8描述数据转移单元优化本身。

神经网络硬件加速单元的示范性架构

对神经网络硬件加速单元116的更细致考察是值得的。图2提供在关于图1描述的细节上扩充的神经网络硬件加速单元的框图200。

神经网络硬件加速器单元202,它可经由并行总线或串行总线206经由系统控制块204与服务器或与一些其它控制cpu通过接口连接。在一些实现中,接口是pci总线或pci-e总线。然而,任何标准化的总线都是能胜任的。可使用串行总线,但是以串行化的开销作为性能代价。

计算机指令和/或操作码可被存储在本地存储器208中,并且可由指令解释器210来解释。计算机指令可经由系统控制块204到达。本地存储器208可以是静态随机存取存储器(sram)。sram可被细分成用于计算机指令解释和执行的位置,以及工作存储器的一个或多个区域208(a)、208(b),其中每个区域可在至少某部分中被细分成存储器的多个存储体。

工作存储器的区域208(a)、208(b)中的至少一些可各自与由交换节点构成的多播网络212(a)、212(b)关联,交换节点将工作存储器区域208(a)、208(b)中存储的数据调遣到一个或多个数据接收器214。

如关于图3和图4进一步详细描述的,构成多播网络212(a)、212(b)的交换节点被组织成多层,第一层紧邻存储器208(a)、208(b)以及最末层紧邻数据接收器214。在连接的一些置换中,包括最末层的交换节点访问数据接收器214。注意,不同多播网络212(a)、212(b)的最末层的连接置换各自不需要相同。

取决于应用,数据接收器214可以是若干实施例其中之一。对于神经网络应用112,数据接收器214可以是各自能够执行计算机可执行指令的多个执行单元214。

数据可从本地存储器208被转移到板外存储器,这可由数据转移单元216在数据总线218上执行。在板外存储器采取动态随机存取存储器(dram)的形式的情况中,数据转移单元216是dram转移单元,并且数据总线218是dram总线。

用于神经网络硬件加速的多播网络优化

多播网络212(a)、212(b)被设计成重新安排并且复制来自存储器208(a)、208(b)的数据,以便确定性地馈送存储器208(a)、208(b)中的数据的部分和置换。为了实现这一点,多播网络212(a)、212(b)被配置成beneš网络,该网络是被组织成层的交换节点的集合,其中,层中的每个交换节点能够将数据复制和/或转发到随后层中的一个或多个交换节点。当输入数据已穿过所有层时,数据将已被重布置成期望的置换。

对于利用称为张量的多维矩阵的神经网络操作而言,beneš网络的此特征是所期望的。张量可被存储在不间断的存储器中,意味着构成张量的数据元素中的每个驻留在具有有序且不中断的存储器地址的存储器块中。通过能够选择和置换任意数据元素,将数据元素多播到数据接收器执行单元214的beneš网络实现对那些多播数据元素的并行操作。

出于硬件加速的目的,通过使beneš网络配置数据对多播网络中的所有交换节点可全局访问,并且通过将执行指令流水线化,配置和操作可被降低到恒量时间(bigo(c))。图3是两个多播网络302(a)、302(b)的框图300,这些网络将输入数据置换到数据接收器304中。

每个多播网络302(a)、302(b)从被组织成存储体的工作存储器306(a)、306(b)的区域接收输入数据,其通常采取张量的数据元素的形式。如关于图5将会看到的,将张量的数据元素组织到存储体中有助于进一步优化。

每个多播网络302(a)、302(b)由被组织成层310的交换节点308构成。层经过安排,其中第一层紧邻存储器306(a)、306(b)并且最末层紧邻数据接收器304。

实现两个多播网络302(a)、302(b)的一个目的是:在张量运算中,可能期望访问张量的不同分区。例如,在二维张量(矩阵)中,第一多播网络302(a)可对行执行操作,而另一个多播网络302(b)可对列执行操作。由于这个原因,来自一个多播网络302(a)的与数据接收器304通过接口连接的交换节点308(即,第一多播网络302(a)的交换节点的最末层)的置换不需要是来自另一个多播网络302(b)的与数据接收器304通过接口连接的交换节点308(即,第二多播网络302(b)的交换节点的最末层)的相同置换。在一个实施例中,第一多播网络302(a)置换是取模,并且第二多播302(b)置换是成群扇出。

单独的交换节点308可包含从存储器306(a)、306(b)或者从来自前一级310的交换节点308接收的一个或多个数据条目。交换节点可包含配置指示符314以及控制器指示符。配置指示符314指定是否要执行广播模式,是否要根据配置数据来转发输入数据,或者执行通行模式,其中不管配置数据如何而转发输入数据。控制器指示符316指定是否要更新至少一个交换节点条目。

可存在分离的全局配置数据存储装置318,其采取寄存器的形式或者采取存储器的形式。全局配置数据是所有交换节点308可访问的,并且分别持有交换节点308的控制器指示符316和配置指示符314的值。因为配置数据存储装置318是全局可访问的,在一些实施例中,交换节点308有可能不具有控制器指示符316和配置指示符314的本地存储的值,而是可只访问全局配置数据存储装置318。

图4是多播网络302(a)、302(b)的可能的操作的流程图400。

框402通过检索配置数据开始多播网络302(a)、302(b)的配置,所述配置数据是从计算机存储器306(a)、306(b)中的已知地址检索的。所检索的配置数据用于配置构成多播网络302(a)、302(b)的交换节点308。然后在框404中,所检索的配置数据被存储在全局配置数据存储装置318中。

在框406中,计算机存储器306(a)、306(b)中要被操作的数据元素可被存储在交换节点的数据条目存储装置312中。

因为所有交换节点308可以访问全局配置数据存储装置318,在框408中,多播网络302(a)、302(b)中的交换节点308的至少第一层310可具有它们相应的配置指示符314和控制器指示符316,用全局配置数据存储装置318中的控制数据填充这些指示符。

注意,在这一点,多播网络302(a)、302(b)被配置。如果框402和404在一个时钟周期内被执行,并且框408在一个时钟周期内被执行,则实际上(不考虑无操作的指令(也称作空操作)的插入),多播网络302(a)、302(b)在两个时钟周期内被配置,而不管数据的量如何。实际上,以恒量时间(bigo(c))实现多播网络配置。

在框408中,在交换节点的第一级的beneš多播操作开始重新安排和拷贝那些交换节点中存储的数据元素。交换节点308将确定是使用配置信息,还是不管基于配置指示符314的配置如何而让数据通行。交换节点308也考虑控制器指示符316来确定用哪种模式将数据条目312置换到交换节点的下一层(或者在最末层的情况中,到数据接收器304)。

在框410中,通过交换节点308的每层310有序地执行beneš多播操作,直到在框412中,最末层执行最末的beneš多播操作以将数据元素置换到数据接收器304中。

注意,在通行的情况中,因为操作不管控制器指示符316和配置指示符314的值如何而进行,操作可在一个时钟周期内进行,跳过加载和传播控制信息的操作。

用于存储器转移优化的群论背景介绍

在讨论存储器转移优化之前,本文公开的群论支撑中的背景是适宜的。神经网络中常见的操作包含张量运算,涉及张量的一个分区在该张量或不同张量的另一分区上被操作。分区由数据元素构成,这些数据元素在它们的张量内有规则地分隔。构成分区的数据元素可被称作平铺(tiles)。

因为构成分区的平铺可对它们的操作数独立地操作,这产生并行地执行操作的机会,从而极大地节省处理时间。因此,具有以尽可能少量的操作来检索和移动张量的分区的平铺的能力是有用的。

群论是数学的分支,其描述集合以及它们在运算符上的相应行为。例如,整数的集合是针对加法运算的群,因为任何两个整数的加法得到整数。存在产生群的集合的其它方面。

一个群是整数模数d的有限群,其中d是某正整数。这样的群也称作循环群d,本文表示为cd。本文的存储器技术利用循环群cd,其中d是存储器的工作群中的存储体的数量。图5是这样的工作区域502的示意图500。存储体504被编索引从0到d-1,并且存储多个数据元素506。在括号中指示了构成分区508的数据元素。

数据元素被存储在不间断存储器中。注意,不间断意味着数据元素被存储在连续、不中断的存储器地址中。存储器地址不需要是物理地址,而是也能够涉及虚拟存储空间。因为分区以规则间隔分隔,并且因为我们跨那些规则间隔的距离(称作“跨距”)(即,每第d个元素加上某个偏移o)来访问数据元素,我们能够根据公式o+(m*i)%d来识别存储所期望的数据元素的存储体,其中,o是存储张量的存储器的起始偏移,d是存储体的数量,以及m是存储器中张量的跨距。此能力让我们以恒定数量的操作、有可能在单个处理器指令内访问张量中的平铺。

为了避免冲突,存储体的数量d应是质数,并且数据元素的跨距m不是d的整倍数。备选地,存储体的数量d应与数据元素的跨距m互质,并且要被检索的分区应是具有少于d个数据元素的向量。

比如说,我们想要访问每第五个元素。这就是说m=5。让我们还假定起始偏移地址o是2,并且存储体的数量d是7。因此,我们可读取多达7个元素,其中的每个读自存储器的不同存储体,因为5与7互质。(最确定的是,5和7两者凭它们自身条件都是质数。)因此:

对于o和m的给定值,只要m与d互质,我们总能够置换逻辑上安排的数据元素,使得每个访问i转到唯一存储体。然而,在硬件实现中,对于任意的o和m,我们必须物理上执行这种置换。为了移除o的影响,它足以执行旋转。旋转的快速硬件实现是理解的问题。为了处置跨距m的影响,我们依赖于素域的另一性质。具体来说,对于质数d,元素1到d-1的乘法模数d也形成群。事实上,这个群是与循环群d-1同构的。如果m不是d的整倍数,这意味着,我们能够通过首先将固定置换运用于从d的乘法群到循环群d-1的映射,随后在群d-1中旋转,随后进行另一固定置换以回到d的乘法群,来实现乘以m的效果。实现固定置换的硬件能够通过在金属层中布线来完成,并且如早先提及的旋转也是好理解的。

现在我们需要确定固定置换使用以及计算在循环群d-1内旋转的量,我们将其称作‘r’。

为了定义这些置换,我们必须在所讨论的乘法素域上选择生成元。群的生成元是一个元素,通过反复应用,该元素产生群的所有元素。例如,对于基于d=7的素域,3是乘法生成元:

31(mod7)=3

32(mod7)=2

33(mod7)=6

34(mod7)=4

35(mod7)=5

36(mod7)=1

所选择的生成元被表示成g。注意,d和g在设计时被固定。以g为底的离散对数logg(x)能够被定义成值y,使得gy(modd)=x。例如,对于g=3、d=7,我们计算出logg(6)=3。

由于用来处置置换的乘法部分的旋转发生在循环空间中,需要计算离散对数以确定要旋转的量,这在硬件中执行是复杂的。在实际实现中,可假定m和因而m以及logg(m)是事先已知的。这允许编译器执行适当的计算并且为旋转提供固定的恒量。具体来说,为了确定必需的旋转,我们计算:

n=(logg(m)+l)%(d-1)

也就是说,为了指定转换,在置换时提供o和r。要注意,置换网络可被配置成两个不同变型其中之一。第一变型称作转发取模置换网络,这种置换网络将每个i<d映射到对应适当的存储体位置b=(o+m*i)%d(给定正确的o和n)。此置换被用于将地址和数据发送到存储器存储体(即,用于存储器写操作)。第二变型称作反向取模置换网络,这种置换网络仅仅执行转发取模置换网络的逆映射,并且由于存储器读操作,被用于适当地重新安排所读数据元素。

在能够更详细地描述转发和反向取模置换网络之前,要定义两个简单的布线模式。两个布线模式被用于执行映射逻辑群和循环群。具体来说,定义第一布线模式map_to_cylic来取d-1个元素,并且对于1<=i<d,将d-1个元素的每个条目i映射到条目logg(i)。定义第二布线模式map_from_cylic来进行相反的操作,并且将条目i映射到条目gi(modd)。因为0不是乘法群的成员,使元素的条目0不被映射和旋转这两者改动。下面关于图6更详细地描述这个结构。

置换器

上文描述的存储器转移操作的硬件实现包含置换数据元素的能力。这样做的硬件装置被称为置换器。图6是置换器602的框图600。

在o=o%d的情况中考虑接收参数,其中o是存储器中的偏移起点,存储器将数据元素存储在不间断存储器中并且该存储器被组织成存储器中的d个存储体。进一步考虑接收参数r,r表示要为小于d的循环群执行的旋转的数量,其中,r至少基于以生成元g为底的离散对数logg。

置换器包括要置换的多个输入604。这些输入一般会对应于d个输入,通常是存储体。然后,将那些输入604经由第一循环映射606从索引为1到d的输入映射到置换。在硬件中,这个操作可经由执行从1到d的数据元素的循环右移的右滚筒移位器来实现。

然后,置换器经由将从0到d-1的所有数据元素循环右移的第二循环映射608来置换数据元素。这可经由右滚筒移位器来执行,右滚筒移位器执行从0到d-1的数据元素的循环右移,并且又将所置换的数据元素转发到输出610。

注意,可经由执行0到d-1的数据元素的循环左移的左滚筒移位器,接着是执行1到d的数据元素的循环左移的左滚筒移位器来实现反向置换器,其将数据元素恢复到它们的原始位置。这样,反向置换器是与置换器逆向的硬件。

在置换器和反向置换器之间,支持对于用于本文公开的存储器转移技术的置换操作的硬件支持。

用于神经网络硬件加速的存储器转移优化

置换器可被运用于创建为神经网络硬件加速而优化的存储器转移单元。图7是示范性存储器转移单元702的框图700。图8是存储器转移单元700的示范性操作的流程图800。

取模地址生成器704是转发或标准置换器。它从数据存储体接收输入,按输入参数o和r置换数据元素,如上文关于图5和图6所述。具体来说,按流程图800中的框802,取模地址生成器接收存储器地址和长度,并且在流程图800的框804中,取模地址生成器704生成一组存储器地址,这些存储器地址对应于按跨距分离的计算机可读存储器中存储的数据元素。

排队控制器706负责控制转发所接收的数据元素到d个地址队列708中。具体来说,地址队列708存储硬件中的数据元素的存储器地址,而不是数据元素本身的值。在流程图800的框806中,排队控制器706接收由取模地址生成器704生成的该组存储器地址,并且在流程图800的框808中,将存储器地址转发到对应的地址队列708中,而同时将控制信息添加到控制队列710中。控制信息被用于使接收出列控制器712上的接收同步。

地址队列708分别馈送到多个地址解码器714中,地址解码器714又分别馈送到多个数据队列716中。具体来说,在流程图800的框810中,地址解码器714将地址队列708中的数据元素的存储器地址解码成它们相应的数据元素,并且将所解码的数据元素分别排队到数据队列716中。

在流程图800的框812中,出列控制器710从数据队列714接收排队的数据元素,并且从控制队列708接收控制信息,以及至少基于所接收的控制信息转发到反向置换器716。

在流程图800的框814中,反向置换器718执行取模地址生成器704的转发置换器的逆向操作,以恢复从出列控制器712接收的数据。一旦这样做,则在流程图800的框816中,将所恢复的数据转发到数据出口720。

示范性使用情况

如关于图1所述,本文公开的多播网络和存储器转移优化可被运用于神经网络操作。一个或多个多播网络可被用于将存储器存储体中存储的数据元素的置换转发到多个执行单元。如果使用了多个多播单元,则那些单元可使用不同置换来馈送到执行单元中。在一个实施例中,不同多播单元可涉及张量的不同分区。

这样,可以与神经网络硬件加速器的场景不关联并且分开来构思多播网络和存储器转移单元,每个具有可能与神经网络硬件加速不相关的应用。

举例来说,多播网络和存储器转移优化可用在其它硬件加速场景中,诸如包含线性代数运算的计算的图形处理、对图形特定的张量运算和四元数运算。

在存储器转移优化的情况中,应用不需要对具体操作是特定的,但是可仅用在存储器控制器中。例如,在不间断存储器中存储的数据元素的分区和/或向量要被转移的情况下,可运用存储器转移优化。此外,因为多播网络优化可任意地复制和置换数据元素,结合存储器转移操作使用可为全存储器控制器提供基础。

结论

虽然已采用对结构特征和/或方法动作特定的语言描述了主题,但是要理解,所附权利要求中限定的主题不一定局限于上文描述的特定特征或动作。相反,作为实现权利要求的示例形式来公开上文描述的特定特征和动作。

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