首页 / 专利库 / 多媒体工具与应用 / 流式传输 / 具有堆栈存储器的硬件加速器上的深度神经网络处理

具有堆栈存储器硬件加速器上的深度神经网络处理

阅读:1030发布:2020-06-10

专利汇可以提供具有堆栈存储器硬件加速器上的深度神经网络处理专利检索,专利查询,专利分析的服务。并且提供一种用于在 加速 组件上处理 深度神经网络 的方法。该方法包括配置加速组件以执行深度神经网络的前向传播和后向传播阶段。加速组件包括布置在集成 电路 封装中的加速组件裸片和 存储器 堆栈。存储器堆栈具有大于约50GB/秒的存储器带宽和大于约20MB/秒/mW的功率效率。,下面是具有堆栈存储器硬件加速器上的深度神经网络处理专利的具体信息内容。

1.一种用于在加速组件上处理深度神经网络的方法,所述加速组件包括被布置在集成电路封装中的加速组件裸片和存储器堆栈,所述存储器堆栈包括大于约50GB/秒的存储器带宽和大于约20MB/秒/mW的功率效率,所述方法包括:
配置所述加速组件以执行所述深度神经网络的前向传播和后向传播阶段。
2.根据权利要求1所述的方法,其中所述加速组件包括现场可编程阵列设备、大规模并行处理器阵列设备、图形处理单元以及专用集成电路中的一个或多个。
3.根据权利要求1所述的方法,其中所述加速组件进一步包括中介器,并且所述加速组件裸片和所述存储器堆栈被布置在所述中介器上。
4.根据权利要求1所述的方法,其中配置所述加速组件包括利用包括用于实现所述前向传播和所述后向传播阶段的逻辑的多个神经引擎来配置所述加速组件裸片。
5.根据权利要求4所述的方法,其中所述神经引擎中的每一个神经引擎包括用于计算点积、导数、误差和非线性函数中的一个或多个的逻辑。
6.根据权利要求4所述的方法,其中:
DNN包括多个权重、输入激活和误差;
所述神经引擎的每一个神经引擎包括储存元件;和
配置所述加速组件包括:
将所述权重、输入激活和误差存储在所述存储器堆栈中;和将所述权重、输入激活和误差流式传输到所述神经引擎的所述储存元件。
7.一种用于处理深度神经网络的系统,所述系统包括:
加速组件,所述加速组件包括被布置在集成电路封装中的加速组件裸片和存储器堆栈,所述存储器堆栈包括大于约50GB/秒的存储器带宽和大于约20MB/秒/mW的功率效率;
配置在加速组件裸片上的多个神经引擎,其中所述神经引擎包括用于实现所述深度神经网络的前向传播和后向传播阶段的逻辑。
8.根据权利要求7所述的系统,其中所述加速组件包括现场可编程门阵列设备、大规模并行处理器阵列设备、图形处理单元和专用集成电路中的一个或多个。
9.根据权利要求7所述的系统,其中所述加速组件进一步包括中介器,并且所述加速组件裸片及所述存储器堆栈被布置在所述中介器上。
10.根据权利要求7所述的系统,其中所述神经引擎中的每一个神经引擎包括用于计算点积、导数、误差和非线性函数中的一个或多个的逻辑。
11.根据权利要求7所述的系统,其中:
DNN包括多个权重、输入激活和误差;
所述神经引擎中的每一个包括储存元件;和
所述加速组件被配置为:
将所述权重、输入激活和误差存储在所述存储器堆栈中;和将所述权重、输入激活和误差流式传输到所述神经引擎的所述储存元件。
12.根据权利要求11所述的系统,其中所述加速组件被配置成将所述权重、输入激活和误差的子集流式传输到所述神经引擎的所述储存元件。

说明书全文

具有堆栈存储器硬件加速器上的深度神经网络处理

背景技术

[0001] 计算行业试图改善软件驱动的计算设备的速度和效率。软件驱动的计算设备采用以传统时间方式对机器可读指令进行处理的一个或多个中央处理单元(CPU)。硬件加速组件(诸如现场可编程阵列(FPGA))已被用来对由软件驱动的计算设备执行的处理进行补充。发明内容
[0002] 根据第一方面,提供了一种用于在加速组件上处理深度神经网络的方法。该方法包括配置加速组件以执行深度神经网络的前向传播和后向传播阶段。加速组件包括被布置在集成电路封装中的加速组件裸片和存储器堆栈。存储器堆栈具有大于约50GB/秒的存储器带宽和大于约20MB/秒/mW的功率效率。
[0003] 根据第二方面,提供了一种用于处理深度神经网络的系统。该系统包括加速组件,该加速组件包括布置在集成电路封装中的加速组件裸片和存储器堆栈。存储器堆栈包括大于约50GB/秒的存储器带宽和大于约20MB/秒/mW的功率效率。该系统还包括被配置在加速组件裸片上的多个神经引擎。神经引擎包括用于实现深度神经网络的前向传播和后向传播阶段的逻辑。
[0004] 根据第三方面,提供了一种用于处理深度神经网络的系统。该系统包括加速组件,该加速组件包括被布置在集成电路封装中的加速组件裸片和存储器堆栈。存储器堆栈包括大于约50GB/秒的存储器带宽和大于约20MB/秒/mW的功率效率。该系统还包括被配置在加速组件裸片上的多个神经引擎以及在存储器堆栈上的多个DRAM通道,DRAM通道中的每个DRAM通道被耦合到神经引擎。神经引擎包括用于实现深度神经网络的前向传播和后向传播阶段的逻辑。
[0005] 上面概括的功能性可以表现在各种类型的系统、设备、组件、方法、计算机可读存储介质、数据结构、图形用户界面呈现、制品等等中。
[0006] 提供本概要是为了以简化的形式引入概念的选择;这些概念在下面的具体实施方式部分中进一步描述。本发明内容部分不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。附图说明
[0007] 图1示出了包括软件平面和硬件加速平面的数据处理系统的概述。
[0008] 图2示出了图1的数据处理系统的操作的第一示例。
[0009] 图3示出了图1的数据处理系统的操作的第二示例。
[0010] 图4示出了对应于数据中心的图1的数据处理系统的一个实现。
[0011] 图5是图4的数据中心实现的更全面的描绘。
[0012] 图6示出了与图4中所示的相比实现服务器单元组件的一种替代方式。
[0013] 图7示出了与图4中所示的相比实现服务器单元组件的又一种方式。
[0014] 图8示出了与图1中所示的相比的一种替代数据处理系统,例如,它与图1中所示的相比而言使用不同的网络基础设施。
[0015] 图9是示出了图1的数据处理系统的一种操作方式的流程图
[0016] 图10示出了用于管理图1的数据处理系统的管理功能性的一个实现的概述。
[0017] 图11提供了服务映射组件的一个请求驱动的操作方式的概述,所述服务映射组件是图10的管理功能性的组件。
[0018] 图12-图15示出了用于处理由驻留在主机组件上的租户功能性的实例所做出的对服务的请求的不同的相应选项。
[0019] 图16提供了图10的服务映射组件的另一后台相关的操作方式的概述。
[0020] 图17-图20示出了用于物理地实现图10的管理功能性的不同的相应架构。
[0021] 图21-图24示出了用于在图21的数据处理系统中配置硬件加速组件的不同的相应策略。
[0022] 图25示出了实现图1的硬件加速组件的一种方式。
[0023] 图26示出了包括单独的可配置域的硬件加速组件。
[0024] 图27示出了用于执行本地主机组件和相关联的本地硬件加速组件之间的数据传输的功能性。
[0025] 图28示出了在图25中引入的路由器的一个实现。
[0026] 图29示出了在图25中引入的传送组件的一个实现。
[0027] 图30示出了在图25中引入的3端口交换机的一个实现。
[0028] 图31示出了在图1中所示的主机组件的一个实现。
[0029] 图32提供了用于生成和应用多组件服务的功能性的概述;该功能性又包括多组件管理组件。
[0030] 图33示出了可以由图32的功能性产生和应用的一种类型的硬件加速组件的集合。
[0031] 图34示出了可以由图32的功能性产生和应用的另一种类型的硬件加速组件的集合。
[0032] 图35示出了产生多组件服务的功能解析组件的一个实现。
[0033] 图36示出了使用硬件加速组件的集合(collection)所实现的说明性多组件服务的更详细示例。
[0034] 图37示出了在图36的多组件服务的阶段之一中执行处理的功能性。
[0035] 图38示出了用于替换图36的硬件加速组件的集合中的模型以适应与不同模型相关联的请求的功能性。
[0036] 图39是示出图35的功能解析组件的一种操作方式的流程图。35。
[0037] 图40是示出实现多组件服务的硬件加速组件的集合内的一个硬件加速组件的操作的流程图。
[0038] 图41是示出处理实现多组件服务的硬件加速组件的集合中的故障的一种方式的流程图。
[0039] 图42是图示出示例特征值和自由形式表达式的图。
[0040] 图43A-图43C示出了高带宽存储器加速组件的各种实现的视图。
[0041] 图44示出了高带宽存储器加速组件的另一实现。
[0042] 图45A-图45C示出了三维存储器和加速组件的各种实现的视图。
[0043] 图46示出了包括高带宽存储器加速组件的服务器单元组件的实现。
[0044] 图47是示出图46的存储器管理组件的操作的流程图。
[0045] 图48是示出图46的存储器管理组件的另一操作的流程图。
[0046] 图49示出了被配置为执行机器学习分类服务的加速组件的实现。
[0047] 图50示出了用于机器学习分类的示例决策树
[0048] 图51示出了加速组件和模型切片组件的实现。
[0049] 图52是示出图51的模型切片组件的操作的流程图。
[0050] 图53是示出图51的模型切片组件的另一操作的流程图。
[0051] 图54示出了包括顶部和下部的示例决策树。
[0052] 图55示出了深度神经网络的图解说明。
[0053] 图56示出了深度神经网络的后向传播的图解说明。
[0054] 图57示出了被配置为执行深度神经网络的前向传播和后向传播阶段的加速组件的实现。
[0055] 图58示出了图57的加速组件中的神经引擎的实现。
[0056] 遍及整个公开和附图,使用相同的标号来指代类似的组件和特征。100系列标号是指最初在图1中找到的特征,200系列标号是指最初在图2中找到的特征,300系列标号是指最初在图3中找到的特征,以此类推。

具体实施方式

[0057] 本公开描述了包括硬件加速平面和软件平面的示例数据处理系统。描述硬件加速平面中的示例硬件加速组件。示例硬件加速组件包括被布置在集成电路封装中的加速组件裸片和存储器堆栈。存储器堆栈包括大于约50GB/秒的存储器带宽和大于约20MB/秒/mW的功率效率。多个神经引擎被配置在加速组件裸片上。神经引擎包括实现深度神经网络的前向传播和后向传播阶段的逻辑。
[0058] 作为初步事项,一些附图在一个或多个结构组件的上下文中描述了概念,所述结构组件被不同地被称为功能性、模、特征、元件等。附图中示出的各种组件可以通过任何物理和有形机制——例如通过运行在计算机装备上的软件、硬件(例如,芯片实现的逻辑功能性)等和/或其任何组合以任何方式来实现。
[0059] 在一种情况下,所图示出的将附图中的各个组件分离成不同的单元可以反映对应的不同物理和有形组件在实际实现中的使用。替代地或附加地,可以由多于一个的实际物理组件来实现附图中图示出的任何单个组件。替代地或附加地,附图中的任何两个或更多单独组件的描述可以反映由单个实际物理组件执行的不同功能。
[0060] 其他附图以流程图的形式描述了概念。在这种形式中,某些操作被描述为构成为按照特定顺序执行的不同块。这样的实现是说明性的而非限制性的。本文中描述的某些块可以被组织在一起并且在单个操作中执行,某些块可以被分解成多个组件块,并且某些块可以按照与这里示出的顺序不同的顺序来执行(包括并行地执行块的方式)。流程图中示出的块可以通过任何物理和有形机制——例如通过运行在计算机装备上的软件、硬件(例如,芯片实现的逻辑功能性)等和/或其任何组合以任何方式来实现。
[0061] 就术语而言,短语“被配置为”涵盖任何种类的物理和有形功能性可以被构建来执行所标识的操作的任何方式。该功能性可以被配置为使用例如在计算机装备上运行的软件、硬件(例如,芯片实现的逻辑功能性)等和/或其任何组合来执行操作。
[0062] 术语“逻辑”涵盖用于执行任务的任何物理和有形功能性。例如,流程图中所示的每个操作对应于用于执行该操作的逻辑组件。可以使用例如在计算机装备上运行的软件、硬件(例如,芯片实现的逻辑功能性)等和/或其任何组合来执行操作。当由计算装备实现时,逻辑组件表示作为计算系统的物理部分的、然而被实现的电子组件。
[0063] 本文所描述的任何储存资源或者储存资源的任何组合可以被视为计算机可读介质。在许多情况下,计算机可读介质代表某种形式的物理和有形实体。术语计算机可读介质还涵盖传播的信号,例如通过物理管道和/或空气或其他无线介质发射或接收的信号。但是,特定术语“计算机可读存储介质”和“计算机可读介质设备”明确地排除传播信号本身,同时包括所有其他形式的计算机可读介质。
[0064] 以下解释可以将一个或多个特征识别为“可选的”。这种类型的表述不应被解释为可以被视为可选的特征的详尽指示。也就是说,其他特征可以被认为是可选的,但是在文本中未被明确标识。此外,单个实体的任何描述并不旨在排除使用多于一个这样的实体。类似地,对多个实体的描述并不旨在排除使用单个实体。此外,虽然描述可以将某些特征解释为执行所标识的功能或实现所标识的机制的替代方式,但是特征也可以以任何组合的方式组合在一起。最后,术语“示例性”或“说明性”是指在潜在的许多实现之中的实现。
[0065] 图1示出了包括软件平面104和硬件加速平面106的数据处理系统102的概述。软件平面104包括软件驱动组件的集合(每个都由图1中的符号“S”标示),而硬件加速平面106包括硬件加速组件的集合(每个都由图1中的符号“H”标示)。
[0066] 例如,软件驱动的主机组件可以对应于使用一个或多个中央处理单元(CPU)来执行机器可读指令的服务器计算机。每个CPU继而可以在一个或多个硬件线程上执行指令。另一方面,每个硬件加速组件可以对应于用于实现功能的硬件逻辑,诸如现场可编程门阵列(FPGA)设备、大规模并行处理器阵列(MPPA)设备、图形处理单元(GPU)、专用集成电路(ASIC)、多处理器片上系统(MPSoC)等等。
[0067] 术语“硬件”加速组件还旨在宽泛地涵盖利用硬件设备来执行功能的不同方式,例如至少包括:a)其中在硬件ASIC逻辑等等之中实现至少一些任务的情况;b)其中在软(可配置)FPGA逻辑等等之中实现至少一些任务的情况;c)其中在FPGA软件处理器覆盖等等之上作为软件运行至少一些任务的情况;d)其中在软处理器的MPPA等等之上运行至少一些任务的情况;e)其中在硬ASIC处理器等等之上作为软件运行至少一些任务的情况等,或其任何组合。类似地,数据处理系统102可以适应软件平面104中的软件驱动设备的不同表现。
[0068] 为了简化对硬件加速组件的重复引用,下面的解释将把这些设备简称为“加速组件”。此外,下面的解释将呈现一个主要示例,其中加速组件对应于FPGA设备,但是如上所指出,可以使用其他类型的加速组件来构建数据处理系统102。此外,可以使用加速组件的异构集合(包括具有不同的相应处理能和架构的不同类型的FPGA设备、FPGA设备和其他设备的混合等等)来构建硬件加速平面106。
[0069] 主机组件通常使用时间执行范例来执行操作,例如通过使用其CPU硬件线程中的每一个来一个接一个地执行机器可读指令。对照而言,加速组件可以使用空间范例执行操作,例如通过使用大量的并行逻辑单元来执行计算任务。因此,与软件驱动的主机组件相比,加速组件可以在更短的时间内执行一些操作。在数据处理系统102的上下文中,与术语“加速组件”相关联的“加速”限定符反映了其用于对由主机组件执行的功能进行加速的潜力。
[0070] 在一个示例中,数据处理系统102对应于包括多个计算机服务器的数据中心环境。计算机服务器对应于图1中所示的软件平面104中的主机组件。在其他情况下,数据处理系统102对应于企业系统。在其他情况下,数据处理系统102对应于使用至少一个访问两个或更多加速组件的主机组件的用户设备或装置等。这些示例是作为示例而非限制的方式被引用的。还有其他的应用也是可能的。
[0071] 在一个实现中,数据处理系统102中的每个主机组件通过本地链路耦合到至少一个加速组件。处理装备的那个基本单元在本文中被称为“服务器单元组件”,因为该装备可以被组织在一起并且被保持为数据处理系统102内的单个可服务单元(尽管不一定如此)。服务器单元组件中的主机组件被称为“本地”主机组件,以将其与其他的与其他服务器单元组件相关联的主机组件区分开。类似地,服务器单元组件的加速组件被称为“本地”加速组件,以将它们与其他的与其他服务器单元组件相关联的加速组件区分开。
[0072] 例如,图1示出了说明性的本地主机组件108,所述本地主机组件108通过本地链路112(诸如,如下所述,快速外围组件互连(PCIe)链路)耦合到本地加速组件110。本地主机组件108和本地加速组件110的配对形成单个服务器单元组件的至少一部分。更一般地,图1示出了软件平面104通过许多个体本地链路而耦合到硬件加速平面106,这在图1中被统称为本地H到本地S(localH-to-localS)耦合114。
[0073] 本地主机组件108还可以间接地与硬件加速平面106中的任何其他远程加速组件通信。例如,本地主机组件108可以经由本地加速组件110访问远程加速组件116。更具体地,本地加速组件110经由链路118来与远程加速组件116通信。
[0074] 在一个实现中,公共网络120被用来将软件平面104中的主机组件耦合到其他主机组件,并且将硬件加速平面106中的加速组件耦合到其他加速组件。也就是说,两个主机组件可以使用相同的网络120来彼此通信,两个加速组件也是如此。作为另一个特征,软件平面104中的主机组件之间的交互独立于硬件加速平面106中的加速组件之间的交互。
[0075] 这意味着,例如,从软件平面104中的主机组件的度看,在主机组件的方向之外,两个或更多加速组件可以以透明的方式相互通信,并且主机组件不“知道”在硬件加速平面106中发生的特定交互。然而,主机组件可以通过对由硬件加速平面106所主管的服务发出请求来发起在硬件加速平面106中发生的交互。
[0076] 根据一个非限制性实现,数据处理系统102使用以太网协议来通过公共网络120发射IP分组。在一个实现中,服务器单元组件中的每个本地主机组件被给予单个物理IP地址。在相同服务器单元组件中的本地加速组件可以采用相同的IP地址。服务器单元组件可以以不同的方式确定传入分组是否是以本地主机组件为目的地而不是本地加速组件。
[0077] 例如,可以将目的地为本地加速组件的分组制定为规定特定端口的用户数据报协议(UDP)分组。另一方面,主机定义的分组不是以这种方式制定的。在另一种情况下,可以基于每个分组中的状态标志的值(例如,在分组的报头或主体中)来将属于硬件加速平面106的分组与属于软件平面104的分组区分开。
[0078] 鉴于上述特性,可以将数据处理系统102概念化为形成共享相同物理通信链路的两个逻辑网络。与两个逻辑网络相关联的分组可以以上述方式通过它们相应的业务类别而彼此区分开。但是在其他实现中(例如,如下面关于图8所描述的),数据处理系统102可以使用两个不同的物理网络来分别处理主机到主机业务和硬件到硬件业务。而且,在使用公共网络120的实现中,主机到主机网络基础结构不需要完全与硬件到硬件网络基础结构相同。也就是说,这两个基础设施在共享大部分网络资源的意义上是公共的,但并不一定共享它们的全部网络资源。
[0079] 最后,管理功能性122用于管理数据处理系统102的操作。如下面将更详细地阐述的,可以使用不同的控制架构物理地实现管理功能性122。例如,在一个控制架构中,管理功能性122可以包括耦合到一个或多个全局管理组件的多个本地管理组件。每个本地管理组件和全局管理组件可以用具有存储器存储指令的一个或多个计算机处理器或者例如在FPGA或ASIC或其他类似设备中实现的专用逻辑门阵列来实现。
[0080] 在一个示例中,管理功能性122可以包括执行不同的相应逻辑功能(其可以以不同方式物理地实现)的多个子组件。位置确定组件124例如基于存储在数据存储126中的当前分配信息,来识别数据处理系统102内的服务的当前位置。位置确定组件124可以用具有存储器存储指令的一个或多个计算机处理器或者例如在FPGA或ASIC上或者其他类似设备中实现的专用逻辑门阵列来实现。
[0081] 如本文所使用的,服务是指由数据处理系统102执行的任何功能。例如,服务可以对应于加密功能。另一个服务可以对应于文档排名功能。另一个服务可以对应于数据压缩功能。又一个服务可以对应于图像分类功能。再一个服务可以对应于机器学习功能,等等。
[0082] 在操作中,位置确定组件124可以接收对服务的请求。作为响应,如果与该服务相关联的地址存在于数据存储126中,那么位置确定组件124返回该地址。该地址可以识别主管所请求的服务的特定加速组件。
[0083] 服务映射组件(SMC)128将服务映射到特定数据处理系统102组件。SMC 128可以用具有存储器存储指令的一个或多个计算机处理器或者例如在FPGA或ASIC或其他类似设备中实现的专用逻辑门阵列来实现。SMC 128可以取决于SMC 128接收到的调用SMC 128的操作的触发事件的类型以至少两种模式进行操作。在第一模式中,SMC 128处理对由租户功能性的实例所做出的服务的请求。租户功能性的实例可以对应于在特定的本地主机组件上运行的软件程序,或者更具体地,对应于在虚拟机上执行的程序,该程序又与特定的本地主机组件相关联。该软件程序可以在执行过程中对一个服务进行请求。
[0084] SMC 128通过确定数据处理系统102中用于提供服务的适当组件(或多个组件)来处理该请求。考虑可能的组件包括:本地加速组件(与从中发起请求的本地主机组件相关联);远程加速组件;和/或本地主机组件本身(因此本地主机组件将以软件实现该服务)。SMC 128基于一个或多个映射考虑(诸如所请求的服务是否涉及线路速率服务或其他负载平衡和功率管理考虑之类)来做出它的确定。
[0085] 在另一种操作方式中,SMC 128通常以后台和全局模式操作,基于数据处理系统102中的全局条件向数据处理系统102组件分配服务(而不是如在第一种模式中那样处理来自租户功能性的实例的个体请求,或者是除了处理来自租户功能性的实例的个体请求之外)。例如,SMC 128可以响应于影响一个或多个服务的需求变化来调用其分配功能。在此模式中,SMC 128再次基于诸如与服务相关联的历史需求等等之类的一个或多个映射考虑来做出它的确定。
[0086] SMC 128可以与位置确定组件124交互以执行其功能。例如,当SMC 128试图确定由加速组件提供的已分配服务的地址时,SMC 128可以咨询数据存储126。当SMC 128将服务映射到一个或多个加速组件时——例如通过存储与服务相关的那些加速组件的地址,SMC 128也可以更新数据存储126。
[0087] 虽然在图1中未示出,但是SMC 128的子组件也管理多组件服务。多组件服务是由多个加速组件组成的服务。
[0088] 为了方便起见,图1图示出了与软件平面104和硬件平面106中的组件分开的管理功能性122。但是如下面将要描述的,可以使用软件平面104和/或硬件平面106的资源来实现管理功能性122的任何方面。当通过硬件平面106来实现时,管理功能性可以像任何服务一样被加速。
[0089] 图2示出了对应于单个事务或单个事务一部分的图1的数据处理系统102的操作的第一示例。在操作(1)中,第一主机组件202在执行单个计算任务的过程中与第二主机组件204通信。第二主机组件204然后请求使用在硬件加速平面106中实现的服务(虽然第二主机组件204可能不“知道”服务在何处被实现,除此之外服务可以在规定的地址被访问)。
[0090] 在许多情况下,在单个加速组件上实现所请求的服务(尽管可能存在多个冗余的这种加速组件可从中选择)。但是在图2的特定示例中,所请求的服务对应于散布在加速组件的集合(或集群)上的多组件服务,其中每个加速组件执行该服务的被分配部分。图形结构可以规定将各个加速组件在集合中耦合在一起的方式。在一些实现中,图形结构还识别至少一个头组件。头组件对应于一个接触点,通过该接触点,数据处理系统102中的实体可以与硬件加速平面106中的多组件服务交互。头组件还可以用作由图形结构定义的处理流线中的初始处理阶段。在图2的特定情况下,假定加速组件206对应于本地加速组件206(将其本地地链接到本地主机组件204)并且加速组件208是多组件服务的头组件。
[0091] 在操作(2)和(3)中,请求本地主机组件204经由它的本地加速组件206来访问加速组件208。加速组件208然后执行多组件服务的它的那一部分以生成中间输出结果。在操作(4)中,加速组件208然后调用另一加速组件210(其执行多组件服务的另一相应部分)以生成最终结果。在操作(5)、(6)和(7)中,硬件加速平面106通过上述相同的组件链但是是以相反的方向来将最终结果连续地转发回请求本地主机组件204。注意,上面描述的包括定义返回路径的流操作在内的数据流操作是作为示例而非限制来引用的。其他多组件服务可以使用规定任何其他流路径的其他图形结构。例如,加速组件210可以将最终结果直接转发到本地加速组件206。
[0092] 首先,请注意,在硬件加速平面106中发生的操作是以在软件平面104中执行的独立操作方式来执行的。换言之,软件平面104中的主机组件不管理硬件加速平面106中的操作。然而,主机组件可以通过对由硬件加速平面106所主管的服务发布请求来调用硬件加速平面106中的操作。
[0093] 其次,请注意,硬件加速平面106以对请求主机组件透明的方式执行其事务。例如,本地主机组件204可能“不知道”它的请求如何正在硬件加速平面中被处理,包括不知道服务对应于多组件服务的事实。
[0094] 第三,请注意,在该实现中,软件平面104中的通信(例如,对应于操作(1))使用与硬件加速平面106中的通信(例如,对应于操作(3)-(6))相同的公共网络120来发生。操作(2)和(7)可以通过本地链路发生,对应于图1中所示的本地H到本地S耦合114。
[0095] 图2中所示的多组件服务类似于一个环,因为一系列加速组件在第一方向上被遍历以达到最终结果。最终结果然后在与头组件相反的方向上通过相同的一系列加速组件被传回。但是如上所指出,其他多组件服务可以使用具有不同的相应流结构的不同加速组件集合。
[0096] 例如,图3示出了图1的数据处理系统102的操作的第二示例,与图1的示例相比,其采用了不同的流结构。更具体地,在操作(1)中,本地主机组件(未示出)向其本地加速组件302发送请求。在这种情况下,假定本地加速组件也就是该服务的头组件。在操作(2)中,头组件然后可以将多个消息转发到多个相应的加速组件。接收该消息的每个加速组件可以与其他加速组件并行地执行该多组件服务的一部分。(注意,图3可能仅表示了一个更完整事务的一部分)。
[0097] 而且,多组件服务不一定需要采用单个头组件或任何头组件。例如,多组件服务可以采用全部执行相同功能的加速组件集群。数据处理系统102可以被配置为通过联系集群中的任何随机成员来调用这种多组件服务。该加速组件可以被称为头组件,因为它是要被访问的第一个组件,但是它没有以其他方式具有特殊状态。在其他情况下,主机组件可以将多个请求最初分布给加速组件集合的多个成员。
[0098] 图4示出了表示图1的数据处理系统102的一个实现的数据中心402的一部分。具体地说,图4示出了数据中心402中的一个机架。该机架包括多个服务器单元组件(404,406,...,408),其每一个都耦合到架顶式(TOR)交换机410。TOR是指将机架中的组件耦合到数据中心的其他部分的交换机。虽然未被示出,但是其他机架可以具有相似的结构。机架是用于容纳或以其他方式组织多个处理组件的物理结构。
[0099] 图4还示出了一个代表性服务器单元组件404的说明性组成。服务器单元组件404包括本地主机组件412以及本地加速组件418,所述本地主机组件412包括一个或多个中央处理单元(CPU)(414,416,...)。本地加速组件418经由本地链路420直接耦合到本地主机组件412。本地链路420例如可以被实现为PCIe链路。本地加速组件418还通过网络接口控制器(NIC)422而被间接耦合到本地主机组件412。
[0100] 最后,本地加速组件418被耦合到TOR交换机410。因此,在这个特定的实现中,本地加速组件418表示本地主机组件412与数据中心402中的其他组件(包括其他主机组件和其他加速组件)进行交互的唯一路径。除了其他效果之外,图4的架构允许本地加速组件418对从TOR交换机410接收(和/或发送到TOR交换机410)的分组(例如,通过执行加密、压缩等)执行处理,而不加重由本地主机组件412执行的基于CPU的操作的负担。
[0101] 本地主机组件412可以通过本地链路420或经由NIC 422来与本地加速组件418通信。不同的实体可以在不同的相应境况下利用这两个路径。例如,假定在本地主机组件412上运行的程序请求服务。在一个实现中,假定本地主机组件412提供位置确定组件124和数据存储126的本地实例。或者全局管理组件可以提供位置确定组件124及其数据存储126。在任一种情况下,本地主机组件412可以咨询数据存储126以确定服务的地址。本地主机组件412然后可以使用所识别的地址经由NIC 422和TOR交换机410来访问该服务。
[0102] 在另一个实现中,假定本地加速组件418提供位置确定组件124和数据存储126的本地实例。本地主机组件412可以经由本地链路420访问本地加速组件418。本地加速组件418然后可以咨询数据存储126以确定该服务的地址,它通过该服务的地址经由TOR交换机
410来访问该服务的地址。访问该服务的其他方式也是可能的。
[0103] 图5是图4的数据中心402的更全面的描述。数据中心402包括多个机架(502-512)。每个机架包括多个服务器单元组件。每个服务器单元组件又可以具有上面在图4中描述的架构。例如,代表性服务器单元组件514包括本地主机组件(S)516、网络接口控制器(N)518和本地加速组件(H)520。
[0104] 图5中所示的路由基础设施对应于上面参考图1描述的公共网络120的一个实现。路由基础设施包括多个TOR交换机522和更高级交换基础设施524。更高级交换基础设施524将TOR交换机522连接在一起。更高级交换基础设施524可以具有任何架构,并且可以由(一个或多个)任何路由协议驱动。在图5的图示示例中,更高级交换基础设施524至少包括汇总交换机526、核心交换机528等的集合。通过图示的基础设施所路由的业务可以对应于以太网IP分组。
[0105] 图5中所示的数据中心402可以对应于在单个地理位置处提供的资源集或分布在多个地理位置(例如位于世界不同地区的多个个体贡献数据中心)上的分布式资源集合。在分布式上下文中,管理功能性122可以基于诸如以下的任何映射考虑来将工作从第一贡献数据中心发送到第二贡献数据中心:(1)确定加速组件在第二贡献数据中心处可用;(2)确定加速组件被配置为在第二贡献数据中心处执行期望的一个或多个服务;和/或(3)确定加速组件不仅被配置为执行期望的一个或多个服务,而且它们立即可用(例如,“在线”)以执行那些服务,等等。如本文所使用的,术语“全局”通常是指比与个体服务器单元组件相关联的本地域更全面的任何范围。
[0106] 通常注意到,尽管图4和图5关注于(对应于数据中心)相对广泛的数据处理系统的使用,但是本文所阐述的一些原理可以被应用于较小的系统,包括单个本地主机组件(或其他类型的组件)被耦合到包括本地加速组件和一个或多个远程加速组件的多个加速组件的情况。这种更小的系统甚至可以体现在用户设备或设施等中。用户设备可以具有使用本地加速资源和/或远程加速资源的选项。
[0107] 图6示出了与图4中所示的架构相比实现服务器单元组件602的替代方式。像图4的情况那样,图6的服务器单元组件602包括由一个或多个CPU(606,608,...)组成的本地主机组件604、本地加速组件610和用于耦合本地主机组件604与本地加速组件610的本地链路612。不像图4的情况那样,服务器单元组件602将网络接口控制器(NIC)614实现为本地加速组件610的内部组件,而不是单独的组件。
[0108] 图7示出了与图4中所示的架构相比实现服务器单元组件702的另一种方式。在图7的情况下,服务器单元组件702包括任何数量n的本地主机组件(704,...,706)以及任意数量m的本地加速组件(708,...,710)(为了便于解释,从图中省略了服务器单元组件702的其他组件)。
[0109] 例如,服务器单元组件702可以包括耦合到两个本地加速组件的单个主机组件。两个加速组件可以执行不同的相应任务。例如,可以使用一个加速组件来处理到其本地TOR交换机的传出业务,而可以使用另一个加速组件来处理来自TOR交换机的传入业务。另外,服务器单元组件702可以在任何本地加速组件(708,...,710)上加载任何服务。
[0110] 还要注意的是,在上面阐述的示例中,服务器单元组件可以是指例如通过在数据中心的机架内形成单个可服务单元的组件的物理组织。在其他情况下,服务器单元组件可以包括一个或多个主机组件和一个或多个加速组件,不必将这些组件一起容纳在单个物理单元中。在这种情况下,本地加速组件可以被认为是逻辑地、而不是物理地与其相应的本地主机组件相关联。
[0111] 替代地或附加地,可以在诸如单个MPSoC-FPGA裸片的单个物理组件上实现本地主机组件和一个或多个远程加速组件。还可以将网络交换机也并入到该单个组件中。
[0112] 图8示出了与图1中所示的相比的一种替代数据处理系统802。像图1的数据处理系统102那样,数据处理系统802包括软件平面104和硬件加速平面106以及用于将本地主机组件连接到相应的本地加速组件的本地H到本地S耦合114。但是不像图1的数据处理系统102那样,数据处理系统802包括用于将主机组件耦合在一起的第一网络804和用于将硬件组件耦合在一起的第二网络806,其中第一网络804至少部分地不同于第二网络806。
[0113] 例如,第一网络804可以对应于图5中所示的数据中心交换基础设施的类型。第二网络806可以对应于用于将加速组件连接在一起的具有任何网络拓扑的专用链路。例如,第二网络806可以对应于一个pⅹr环形网络。环形(torus)网络中的每个加速组件经由合适的电缆链路等耦合到东、西、北和南附近的加速组件。可以替换地使用具有任何相应尺寸和维度的其他类型的网络。
[0114] 在其他情况下,由(例如,如在单个裸片上实现的)单个处理组件所提供的加速逻辑和/或本地硬CPU和/或软CPU可以经由各种各样的网络耦合到(例如,如在其他裸片、板、机架等上实现的)其他处理组件上的其他元件。个体服务本身可以利用一个或多个递归的本地互连网络。
[0115] 另外请注意,以上描述是在发出由加速组件满足的服务请求的主机组件的上下文中被设计。但是替代地或另外地,任何加速组件还可以对可以被任何其他组件——例如另一个加速组件和/或甚至主机组件——满足的服务做出请求。SMC 128可以以与上述方式类似的方式来处理这样的请求。实际上,本文所描述的某些特征可以自己在硬件加速平面上实现而无需软件平面。
[0116] 更一般地说,某些特征可以由请求服务的任何第一组件来实现,所述服务可由第一组件、和/或由相对于第一组件的一个或多个本地组件、和/或由相对于第一组件的一个或多个远程组件来满足。然而,为了便于解释,下面的描述将继续主要框定在做出请求的实体对应于本地主机组件的上下文中。
[0117] 最后,例如,除了图8中所示的本地H到本地S耦合114以外,其他实现可以采取不同的策略用于将主机组件耦合到硬件组件。
[0118] 图9示出了表示图1的数据处理系统102的一个说明性操作方式的过程902。在块904中,本地主机组件发出对服务的请求。在块906中,本地主机组件接收对该请求的回复,该回复可以识别该服务的地址。在替代实现中,相关联的本地加速组件可以在从本地主机组件接收到请求之后执行块904和906。换言之,本地主机组件或本地加速组件都可以执行地址查找功能。
[0119] 在块908中,假定已经识别的地址涉及由本地加速组件本地地实现的功能性,则相关联的本地加速组件可以本地地执行该服务。替代地或另外地,在块910中,本地加速组件将请求路由到远程加速组件。如上所指出,本地加速组件被配置为在不涉及本地主机组件的情况下执行到远程加速组件的路由。此外,多个主机组件在数据处理系统102中通过与多个加速组件相同的物理网络来彼此通信。
[0120] 数据处理系统102具有许多有用的特性。首先,数据处理系统102使用公共网络120(除了图8的示例之外),其避免了与用于将加速组件耦合在一起的定制网络相关联的费用。其次,公共网络120使得将加速平面添加到诸如数据中心之类的现有数据处理环境是可行的。并且在安装之后,可以有效地维护由此导致的数据处理系统102,因为它利用了在现有数据处理环境中存在的现有物理链路。第三,数据处理系统102在不施加大的附加功率要求的情况下,例如鉴于上述方式——其中本地加速组件可以与现有服务器单元组件集成——来集成了加速平面106。第四,数据处理系统102提供高效且灵活的机制,用于允许主机组件访问由硬件加速平面106提供的任何加速资源,例如不需要将主机组件狭隘地配对到特定的固定加速资源,并且不会自身对硬件加速平面106进行管理而加重主机组件的负担。第五,数据处理系统102通过智能地将这些资源分散在硬件平面106内来提供一种用于管理加速资源的有效机制,由此:(a)减少资源的过度利用率和不足利用率(例如,对应于“搁浅的容量”问题);(b)促进这些服务的消费者快速访问这些服务;(c)适应某些消费者和/或服务所规定的加强处理要求等等。上述效果是说明性的而不是详尽的。数据处理系统102还提供了其他有用的效果。
[0121] 图10示出了用于管理图1的数据处理系统102的管理功能性122的一个实现的概述。更具体地,图10描绘了由管理功能性122执行的功能的逻辑视图,包括其主要引擎SMC 128。不同的子组件对应于由管理功能性122执行的不同的主要功能。下面描述的图17-图20示出了逻辑功能性的各种可能的物理实现。
[0122] 如上所述,位置确定组件124基于存储在数据存储126中的当前分配信息来识别数据处理系统102内的服务的当前位置。在操作中,位置确定组件124接收对服务的请求。作为响应,它返回该服务的地址——如果存在于数据存储126内的话。地址可以识别实现该服务的特定加速组件。
[0123] 数据存储126可以维护将服务映射到地址的任何类型的信息。在图10中所示的小节选中,数据存储126将少量服务(服务w、服务x、服务y和服务z)映射到当前被配置为提供这些服务的加速组件。例如,数据存储126指示用于服务w的配置图像当前被安装在具有地址a1、a6和a8的设备上。地址信息可以用任何方式来表达。这里,为了便于解释,以高级符号的形式来表示地址信息。
[0124] 在一些实现中,数据存储126可以可选地还以任何方式存储表征每个当前服务到组件(service-to-component)分配的状态信息。一般地,用于服务到组件分配的状态信息规定了在其被指派的组件(或多个组件)上实现的已分配服务要在数据处理系统102内被处理的方式——例如通过规定其持久性级别、规定其访问权限(例如,“所有权”)等。例如,在一个非限制性实现中,可以将服务到组件分配指定为保留的或非保留的。
[0125] 当执行配置操作时,SMC 128可以在确定改变该分配是否是合适的(例如,以满足当前对服务的请求、对一个或多个服务的需求的改变等)时考虑与分配相关联的保留/非保留的状态信息。例如,数据存储126指示具有地址a1、a6和a8的加速组件当前被配置为执行服务w,但是只有对加速组件a1和a8的指派被认为是保留的。因此,与另外两个加速组件相比,SMC 128将把对加速组件a6的分配视为针对重新指派(重新配置)更合适的候选。
[0126] 另外地或替代地,数据存储126可以提供信息,该信息指示服务到组件分配是要由租户功能性的所有实例共享还是被专用于租户功能性的一个或多个特定实例(或一些其他指定的服务消费者)。在前者(完全共享)的情况下,租户功能性的所有实例都争夺由加速组件提供的相同资源。在后者(专用)情况下,只有那些与服务分配相关联的客户才被允许使用被分配的加速组件。图10以高级的方式示出了在具有地址a3的加速组件上运行的服务x和y被保留,以供租户功能性的一个或多个规定实例使用,而租户功能性的任何实例可以使用其他服务到组件分配。
[0127] SMC 128还可以与提供可用性信息的数据存储1002交互。可用性信息识别具有空闲容量来实现一个或多个服务的加速组件池。例如,在一种使用方式中,SMC 128可以确定指派一个或多个加速组件作为功能的提供者是合适的。为此,SMC 128在数据存储1002上进行抽取以查找具有空闲容量来实现该功能的加速组件。然后,SMC128将把该功能分配给这些空闲加速组件中的一个或多个。这样做会改变所选加速组件的可用性状态。
[0128] SMC 128还管理和维护数据存储1002中的可用性信息。在这样做时,SMC 128可以使用不同的规则来确定加速组件是可用的还是不可用的。在一种方法中,SMC 128可以将当前正被使用的加速组件视为不可用的,而将当前未被使用的加速组件视为可用的。在其他情况下,加速组件可以具有不同的可配置域(例如,片),其中一些当前正被使用,而另一些当前未被使用。
[0129] 在这里,SMC 128可以通过表达当前未被使用的它的处理资源的一部分来规定加速组件的可用性。例如,图10指示具有地址a1的加速组件,其处理资源的50%可用于使用。另一方面,具有地址a2的加速组件是完全可用的,而具有地址a3的加速组件是完全不可用的。个体加速组件可以以不同的方式通知SMC 128关于它们的相对利用率级别,如下面将更详细描述的。
[0130] 在其他情况下,SMC 128在登记加速组件是可用还是不可用的时可以考虑对加速组件的未决请求。例如,SMC 128可以指示加速组件不可用,因为它被调度为将一个服务递送给租户功能性的一个或多个实例,即使它在当前时间可能没有参与提供该服务。
[0131] 在其他情况下,SMC 128还可以登记可用的每个加速组件的类型。例如,数据处理系统102可以对应于支持具有不同物理特性的加速组件的异构环境。这种情况下的可用性信息不仅可以指示可用的处理资源的身份,而且还可以指示这些资源的类型。
[0132] 在其他情况下,当将加速组件登记为可用或不可用时,SMC 128还可以考虑服务到组件分配的状态。例如,假定特定的加速组件当前被配置为执行某个服务,并且此外假定分配已经被指定为保留而不是非保留。单独鉴于其保留状态,SMC 128可以将该加速组件指定为不可用(或其一部分不可用),而不管服务在当前时刻是否当前正被主动用于执行功能。实际上,至少在某些境况下,加速组件的保留状态因此用作防止SMC 128重新配置加速组件的
[0133] 现在参考SMC 128自身的核心映射操作,SMC 128响应于触发事件而将服务分配或映射到加速组件。更具体地说,取决于已经接收的触发事件的类型,SMC 128在不同的模式中操作。在请求驱动模式中,SMC 128通过租户功能向处理对服务的请求。在这里,每个触发事件对应于对至少部分驻留在特定本地主机组件上的租户功能性的实例的请求。响应于本地主机组件的每个请求,SMC 128确定用于实现该服务的适当组件。例如,SMC 128可以从以下之中选择:本地加速组件(与作出请求的本地主机组件相关联)、远程加速组件或本地主机组件本身(因此本地主机组件将以软件来实现该服务)或其一些组合。
[0134] 在第二后台模式中,SMC 128通过将服务全局地分配给数据处理系统102内的加速组件来操作,以满足数据处理系统102中的总体预期需求和/或满足其他系统范围目标和其他因素(而不是狭隘地关注于主机组件的个体请求)。在这里,接收到的每个触发事件对应于数据处理系统102中作为整体保证服务的分配(或重新分配)的一些条件,诸如对服务的需求变化之类的。
[0135] 然而,要注意,上述模式不是相互排斥的分析域。例如,在请求驱动模式中,SMC 128可能试图实现至少两个目标。作为第一个主要目标,SMC 128将试图找到将满足对服务的突出请求的加速组件(或多个组件),同时也满足与数据处理系统102相关的作为整体的一个或多个性能目标。作为第二个目标,SMC 128可以可选地考虑其服务分配的相对于租户功能性的其他实例对该服务的未来使用而言的长期影响。换言之,第二个目标涉及恰好由租户功能性的特定实例的请求所触发的后台考虑。
[0136] 例如,考虑以下简化的情况。租户功能性的实例可以对服务进行请求,其中该租户功能性的实例与本地主机组件相关联。SMC 128可以通过配置本地加速组件来执行服务从而响应该请求。在做出这个决定时,SMC 128可能首先试图通过租户功能性的实例来找到满足请求的分配。但是SMC 128也可以基于如下确定来进行它的分配:确定许多其他主机组件已经请求该相同服务,并且这些主机组件大部分位于与已经生成针对该服务的当前请求的租户功能性的实例相同的机架中。换言之,这个补充发现进一步支持将服务放置在机架内的加速组件上的决策。
[0137] 图10将SMC 128描绘为可选地包括执行不同的相应分析的多个逻辑组件。作为第一可选分析组件,SMC 128可以使用状态确定逻辑1004来定义其正在进行的分配的状态,例如,定义为保留的或非保留的、专用的或完全共享的等。例如,假定SMC 128接收来自租户功能性的实例的对服务的请求。作为响应,SMC 128可以决定配置本地加速组件以提供该服务,并且在该过程中将该分配指定为非保留的,例如在初始假定之下,该请求可以是针对该服务的“一次性”请求。
[0138] 在另一种情形下,假定SMC 128进行附加的确定,即租户功能性的相同实例在短时间内已经重复地对相同的服务做出了请求。在这种情形下,SMC 128可以做出与上述相同的分配决策,但是这次SMC128可以将其指定为被保留。SMC 128还可以可选地将服务指定为仅专用于请求租户功能性。通过这样做,SMC 128可以使得数据处理系统102能够更有效地满足租户功能性的实例将来对该服务的请求。换言之,保留状态可以减少SMC 128稍后将从被本地主机组件大量使用的本地加速组件中移动该服务的机会。
[0139] 另外,租户功能性的实例(或本地主机组件)可以明确地请求授予对本地加速组件的保留和专用的使用。在确定是否遵守该请求中,状态确定逻辑1004可以使用不同的环境特定的规则。例如,假设没有接收到保证推翻该请求的其他触发事件,状态确定逻辑1004可以决定遵守该请求。例如,当状态确定逻辑1004基于任何环境特定的原因而试图满足被确定为具有比租户功能性的请求更紧迫的另一个请求时,状态确定逻辑1004可以推翻该请求。
[0140] 请注意,在一些实现中租户功能性的实例(或服务的本地主机组件或某一其他消费者)可以独立地控制其本地资源的使用。例如,本地主机组件可以将利用率信息传递到管理功能性122,管理功能性122指示其本地加速组件不可用或不完全可用,而不管本地加速组件此刻实际上是否正在忙碌。在这样做时,本地主机组件可以防止SMC 128“窃取”其本地资源。不同的实现可以使用不同的环境特定的规则来确定是否允许实体以上述方式限制对其本地资源的访问,并且如果允许,则确定是在什么境况下允许。
[0141] 在另一个示例中,假定SMC 128确定对特定服务的需求已经存在一个普遍的增加。作为响应,SMC 128可以找到对应于加速组件“池”的规定数目的空闲加速组件,并且然后将该加速分量池指定为用于在提供该特定服务时使用的保留(但是完全共享)的资源。之后,SMC128可以检测到对该特定服务的需求的一个普遍下降。作为响应,SMC128可以例如通过将之前被登记为“保留”的一个或多个加速组件的状态改变为“非保留”,来减少保留的加速组件的池。
[0142] 注意,上面描述的状态的特定维度(保留与非保留、专用与完全共享)是通过说明而非限制的方式来引用的。其他实现可以采取任何其他状态相关的维度,或者可以仅容纳单个状态指定(并且因此省略状态确定逻辑1004功能性的使用)。
[0143] 作为第二分析组件,SMC 128可以使用尺寸确定逻辑1006来确定适合于提供服务的加速组件的数量。SMC 128可以基于与服务相关联的处理需求的考虑以及可用于满足那些处理需求的资源来做出这样的确定。
[0144] 作为第三分析组件,SMC 128可以使用类型确定逻辑1008来确定适合于提供服务的加速组件的(一个或多个)类型。例如,考虑其中数据处理系统102具有不同的相应能力的加速组件的异构集合的情况。类型确定逻辑1008可以确定适合于提供服务的特定类型的加速组件中的一个或多个。
[0145] 作为第四分析组件,SMC 128可以使用放置确定逻辑1010来确定适合于解决特定触发事件的特定加速组件(或多个组件)。这个确定继而可以具有更多的方面。例如,作为其分析的一部分,放置确定逻辑1010可以确定配置加速组件以执行服务是否是合适的,其中该组件当前未被配置为执行服务。
[0146] 分析的上述方面是以举例说明而非限制的方式来引用的。在其他实现中,SMC 128可以提供附加的分析阶段。
[0147] 通常,SMC 128基于一个或多个映射考虑来执行其各种分配确定。例如,一个映射考虑可以涉及在数据存储1002中提供的历史需求信息。但是,注意,SMC 128在所有情况下都不需要执行多因素分析。例如,在一些情况下,主机组件可以对与单个固定位置相关联的服务做出请求,例如对应于本地加速组件或远程加速组件。在那些情况下,SMC 128可以简单地延迟到位置确定组件124以将服务请求映射到服务的地址,而不是评估以不同方式执行服务的成本和益处。在其他情况下,数据存储126可以将多个地址与单个服务相关联,每个地址与可以执行服务的加速组件相关联。SMC 128在分配对服务的请求至特定地址时可以使用诸如负载平衡考虑之类的(一个或多个)任何映射考虑。
[0148] 作为其操作的结果,SMC 128可以用将服务映射到可以找到那些服务的地址的信息来更新数据存储126(假定该信息已经被SMC 128改变)。SMC 128还可以存储涉及新的服务到组件分配的状态信息。
[0149] 为了配置一个或多个加速组件来执行功能(如果还没有这样配置的话),SMC 128可以调用配置组件1014。配置组件1014可以用具有存储器存储指令的一个或者多个计算机处理器或者例如在FPGA或ASIC上或其他类似设备中实现的专用逻辑门阵列来实现。在一个实现中,配置组件1014通过向加速组件发送配置流来配置加速组件。配置流规定要被“编程”到接收方加速组件中的逻辑。配置组件1014可以使用不同的策略来配置加速组件,其中在下面阐述若干策略。
[0150] 故障监视组件1016确定先前配置的加速组件是否已经失败。故障监视组件1016可以用以下来实现:具有存储器存储指令的一个或多个计算机处理器或者例如在FPGA或ASIC或其他类似设备中实现的专用逻辑门阵列。SMC 128可以通过用备用加速组件代替失败的加速组件来响应故障通知。
[0151] 图11提供了当被应用于对主机组件上运行的租户功能性的实例的请求进行处理的任务时的SMC 128的一种操作方式的概述。在所示场景中,假定主机组件1102实现租户功能性的多个实例(T1,T2,...,Tn)。租户功能性的每个实例可以对应于至少部分地在主机组件1102上执行的软件程序,例如在使用主机组件1102的物理资源运行的虚拟机中(除了其他可能的主机组件之外的)。此外,假定租户功能性的一个实例通过生成针对一个特定服务的请求来发起图11中所示的事务。例如,租户功能性可以执行照片编辑功能,并且可以作为其整体操作的一部分而调遣压缩服务。或者租户功能性可以执行搜索算法,并且可以作为其整体操作的一部分而调遣排名服务。
[0152] 在操作(1)中,本地主机组件1102可以将其对服务的请求发送到SMC 128。在操作(2)中,除其他分析之外,SMC 128还可以确定至少一个合适的组件来实现该服务。在这种情况下,假定SMC 128确定远程加速组件1104是实现该服务的最合适的组件。SMC 128可以从位置确定组件124获得该加速组件1104的地址。在操作(3)中,SMC 128可以例如以与服务相关联的地址的形式将其应答传送给本地主机组件1102。在操作(4)中,本地主机组件1102可以经由其本地加速组件1106来调用远程加速组件1104。通过租户功能性来处理请求的其他方式是可能的。例如,本地加速组件1106可以查询SMC128,而不是本地主机组件102或者除了本地主机组件102之外。
[0153] 路径1108表示其中代表性加速组件1110(和/或其相关联的本地主机组件)将利用率信息传送到SMC 128的示例。利用率信息可以全部或部分地识别加速组件1110是否可用或不可用。利用率信息还可以可选地规定加速组件1110拥有的可用的处理资源的类型。如上所指出,还可以选择利用率信息以有目的地阻止SMC 128稍后利用加速组件1110的资源,例如通过全部或部分地指示资源不可用来进行。
[0154] 虽然未被示出,但是任何加速组件也可以向SMC 128做出针对特定资源的定向请求。例如,主机组件1102可以具体地要求使用其本地加速组件1106作为保留和专用的资源。如上所指出,SMC 128可以使用不同的环境特定的规则来确定是否遵守这样的请求。
[0155] 此外,虽然未被示出,但除主机组件之外的其他组件也可以做出请求。例如,硬件加速组件可以运行租户功能性的实例,该实例发出对服务的请求,该请求可以由其自身、另一硬件加速组件(或多个组件)、主机组件(或多个组件)或者它们的组合来满足。
[0156] 图12-图15示出了用于处理由驻留在主机组件上的租户功能性所做出的对服务的请求的不同的相应选项。从图12开始,假定本地主机组件1202包括租户功能性的至少两个实例T1(1204)和T2(1206),两者都同时在运行(但实际上,本地主机组件1202可以主管租户功能性的多个实例)。租户功能性的第一实例T1需要加速服务A1来执行其操作,而租户功能性的第二实例T2需要加速服务A2来执行其操作。
[0157] 进一步假定本地加速组件1208例如经由PCIe本地链路等耦合到本地主机组件1202。在当前时刻,本地加速组件1208主管用于执行加速服务A1的Al逻辑1210和用于执行加速服务A2的A2逻辑1212。
[0158] 根据一个管理决策,SMC 128将T1指派给A1逻辑1210,并将T2指派给A2逻辑1212。然而,由SMC 128做出的这个决策不是固定的规则。SMC 128可以基于多个因素而做出它的决策,其中一些因素可以反映相互矛盾的考虑。如此,基于其他因素(此时未描述),SMC 128可以选择以与图12中所图示的不同的方式将作业指派给加速逻辑。
[0159] 在图13的场景中,主机组件1302具有与上述相同的服务需求的相同的租户功能性的实例(1304,1306)。但是在这种情况下,本地加速组件1308仅包括用于执行服务A1的Al逻辑1310。也就是说,它不再主管用于执行服务A2的A2逻辑。
[0160] 响应于以上场景,SMC 128可以选择将T1指派给加速组件1308的A1逻辑1310。然后,SMC 128可以将T2指派给远程加速组件1314的A2逻辑1312,其已经被配置为执行该服务。再次,在这里以说明而非限制的精神来阐述所图示的指派。SMC 128可以基于输入考虑的另一组合来选择不同的分配。在一个实现中,本地主机组件1302和远程加速组件1314可以可选地压缩它们发送给彼此的信息,例如以便减少带宽的消耗。
[0161] 要注意,主机组件1302经由本地加速组件1308来访问A2逻辑1312。但是在另一种情况下(未图示出),主机组件1302可以经由与加速组件1314相关联的本地主机组件(未示出)来访问A2逻辑1312。
[0162] 图14呈现了另一种场景,其中主机组件1402具有与上述相同的服务需求的相同的租户功能性的实例(1404,1406)。在这种情况下,本地加速组件1408包括用于执行服务A1的A1逻辑1410和用于执行服务A3的A3逻辑1412。响应于以上场景,SMC 128可以使用(图10的)配置组件1006来重新配置加速组件1408,使得它包括A2逻辑1414而不是A3逻辑1412(如图14的底部所示)。然后,SMC 128可以将T2指派给A2逻辑1414。尽管未被示出,但是SMC 128可以替代地或附加地决定重新配置任何远程加速组件来执行A2服务。
[0163] 通常,SMC 128可以以完全或部分的方式执行配置,以满足租户功能性的实例的任何请求。通过重新配置由加速组件提供的所有应用逻辑,SMC 128执行完全配置。通过重新配置由加速组件提供的应用逻辑的一部分(例如,一个或多个片)、保持其他部分(例如,一个或多个片)在重新配置期间是完整和可操作的,SMC 128可以执行部分配置。关于SMC 128在其后台操作模式下的操作也是如此,如下所述。还要注意到,在确定A3逻辑1412是否是针对重新配置的有效候选时,附加因素可以起作用,诸如服务是否被认为是保留的,是否存在针对该服务的未决请求等。
[0164] 图15呈现了另一种场景,其中主机组件1502具有与上述相同的服务需求的相同的租户功能性的实例(1504,1506)。在这种情况下,本地加速组件1508仅包括用于执行服务A1的Al逻辑1510)。响应于上述场景,SMC 128可以将T1指派给A1逻辑1510。此外,假定SMC 128确定对于任何加速组件而言执行A2服务是不可行的。在响应中,SMC 128可以指令本地主机组件1502将T2指派给本地A2软件逻辑1512,事实上,如果该逻辑在主机组件1502处可用,SMC 128可以根据各种基础做出图15的决策。例如,SMC 128可以认定:硬件加速是不可能的,这是因为针对该服务,当前不存在配置图像。或者配置图像可以存在,但是SMC 128认定在任何加速设备上都没有足够的容量来加载和/或运行这样的配置。
[0165] 最后,在主机组件上运行的租户功能性的实例的上下文中描述了上述示例。但是如上面已经指出的那样,租户功能性的实例可以更一般地对应于服务请求器,并且那些服务请求器可以在包括加速组件的(一个或多个)任何组件上运行。因此,例如,在加速组件上运行的请求器可以生成对服务的请求,该服务将由一个或多个其他加速组件和/或由其自身和/或由一个或多个主机组件执行。SMC 128可以以上述任何方式处理请求器的请求。
[0166] 图16提供了当在后台模式下操作时SMC 128的一种操作方式的概述。在操作(1)中,SMC 128可以接收发起SMC 128的操作的某种类型的触发事件。例如,触发事件可以对应于影响服务的一个需求变化等。在操作(2)中,响应于触发事件,SMC 128基于数据存储1002中的可用性信息和一个或多个映射考虑因素来确定将一个或多个服务分配给加速组件——例如通过将服务指派给加速组件。在操作(3)中,SMC 128执行其分配决策。作为该过程的一部分,假定这些组件尚未被配置为执行(一个或多个)服务,则SMC 128可以调遣配置组件1014来配置已被分配来执行(一个或多个)服务的加速组件。SMC 128还更新数据存储126中的服务位置信息,并且如果合适的话,更新数据存储1002中的可用性信息。
[0167] 在图16的特定示例中,SMC 128分配加速组件的第一组1602以执行第一服务(“服务y”),并且分配加速组件的第二组1604以执行第二服务(“服务z”)。在实际实践中,分配的一组加速组件可以具有任意数量的成员,并且可以以任何方式将这些成员分布在硬件加速平面106上。然而,SMC 128可以试图以特定的方式将与一个服务相关联的加速组件组织,来实现令人满意的带宽和延迟性能(除了其他因素之外)。SMC 128可以在分配与单个多组件服务相关联的加速组件时应用进一步的分析,也在下面更详细地描述。
[0168] SMC 128还可以在后台模式下操作以将实现特定服务的一个或多个加速组件分配给租户功能性的至少一个实例,而不必每次要求租户功能性对该特定服务做出请求时间。例如,假定租户功能性的实例定期地使用对应于图16中的“服务z”的压缩功能。SMC 128可主动地将一个或多个专用加速组件1604分配给租户功能性的至少这个实例。当租户功能性需要使用该服务时,它可以从与已经被指派给它的加速组件1604相关联的可用地址池中抽取。可以针对租户功能性的一组实例(而不是单个实例)执行相同的专用映射操作。
[0169] 图17示出了图10的管理功能性122的第一物理实现。在这种情况下,在单个全局管理组件(MG)1702或多个全局管理组件(1702,1704)上提供管理功能性122。全局管理组件(1702,1704)中的每一个可以用如下来实现:具有存储器存储指令的一个或多个计算机处理器或者例如在FPGA或ASIC或其他类似设备中实现的专用逻辑门阵列。如果使用多个全局管理组件(1702,...,1704),则它们可以提供冗余逻辑和信息以达成期望的负载平衡和故障管理性能。在一种情况下,每个全局管理组件可以在可以对应于主机组件之一的计算机服务器设备或专用管理计算设备上被实现。在操作中,任何个体主机组件(S)或加速组件(H)可以经由图1中所示的公共网络120来与全局管理组件交互。
[0170] 图18示出了图10的管理功能性122的第二物理实现。在这种情况下,每个服务器单元组件(诸如代表性服务器单元组件1802)提供至少一个本地管理组件(ML)1804。例如,本地主机组件1806可以实现本地管理组件1804(例如,作为其超级管理程序功能性),或者本地加速组件1808可以实现本地管理组件1804,或者服务器单元组件1802内的一些其他组件可以实现本地管理组件1804(或其一些组合)。
[0171] 数据处理系统102还包括一个或多个全局管理组件(1810,1812)。全局管理组件(1810,…,1812)中的每一个可以用具有存储器存储指令的一个或多个计算机处理器或者例如在FPGA或ASIC或其他类似设备中实现的专用逻辑门阵列来实现。每个全局管理组件(1810,…,1812)可以以上面关于图7描述的方式来提供冗余逻辑和信息。如上所阐述,管理功能性122共同呈现数据处理系统102中的所有本地和全局管理组件。
[0172] 图18的架构可以例如以下面的方式实现SMC 128的请求驱动方面。本地管理组件1804可以首先确定本地加速组件1808是否可以执行由租户功能性请求的服务。全局管理组件(MG)可以执行其他决策,诸如在本地加速组件1808不能执行该任务的情况下识别远程加速组件来执行服务。另一方面,在图17的架构中,单个全局管理组件可以执行涉及将请求映射到加速组件的所有决策。
[0173] 此外,本地管理组件1804可以在任何基础上——诸如周期性的基础和/或事件驱动的基础(例如,响应于利用率的改变)——将利用率信息发送到全局管理组件。全局管理组件可以使用利用率信息来更新其在数据存储1002中的可用性信息的主记录。
[0174] 图19示出了图10的管理功能性122的第三物理实现。在这种情况下,每个服务器单元组件存储其自己的专用本地管理组件(ML)(其可以由本地主机组件来实现为其超级管理程序功能性的一部分、由本地加速组件、一些其他本地组件或其一些组合来实现)。
[0175] 例如,服务器单元组件1902提供本地管理组件1904、以及本地主机组件1906和本地加速组件1908。同样地,服务器单元组件1910提供本地管理组件1912、以及本地主机组件1914和本地加速组件1916。本地管理组件的每个实例存储关于相同组件的其他实例的冗余逻辑和信息。
[0176] 可以使用已知的分布式系统工具来确保该组件的所有分布式版本包含相同的逻辑和信息,诸如里兰州森林山的Apache软件基金会提供的ZOOKEEPER工具。(此外,注意可以使用相同的技术来在本小节中描述的其他示例中维护冗余逻辑和信息)。管理功能性122共同地呈现数据处理系统102中的所有本地管理组件,如上所阐述。也就是说,在这个示例实现中没有中央全局管理组件。
[0177] 图20示出了图10的管理功能性122的第四物理实现。在这种情况下,管理功能性122体现了个体管理组件的分层结构。例如,在一个仅仅是代表性的结构中,每个服务器单元组件包括低级本地管理组件(ML3)(其可以由本地主机组件、本地加速组件、一些其他本地组件或其一些组合来实现)。
[0178] 例如,服务器单元组件2002提供低级本地管理组件2004、以及本地主机组件2006和本地加速组件2008。同样地,服务器单元组件2010提供低级本地管理组件2012、以及本地主机组件2014和加速组件2016。
[0179] 该结构的下一个管理层包括至少一个中级管理组件2018和中级管理组件2020。中级管理组件2018和中级管理组件2020中的每一个可以用具有:存储器存储指令的一个或多个计算机处理器或者例如在FPGA或ASIC上或者其他类似设备中实现的专用逻辑门阵列来实现。该结构的顶级包括单个全局管理组件2022(或多个冗余的这种全局管理组件)。所图示出的控制架构因此形成具有三个级别的结构,但是该架构可以具有任意数量的级别。
[0180] 在操作中,低级管理组件(2004,2012,...)处理直接影响与个体服务器单元组件相关联的资源的某些低级管理决策。中级管理组件(2018,2020)可以做出影响数据处理系统102的相关部分(诸如单个机架或一组机架)的决策。顶级管理组件(2022)可以做出广泛应用于整个数据处理系统102的全局决策。
[0181] 图21-图24示出了与实现图10的配置组件1014的不同方式相对应的、用于配置加速组件的不同的相应策略。从图21开始,全局管理组件2102访问提供一个或多个配置图像的数据存储2104。每个配置图像都包含可用来实现相应服务的逻辑。全局管理组件2102可以通过将配置流(对应于配置图像)转发到加速组件来配置加速组件。
[0182] 例如,在一种方法中,全局管理组件2102可以将配置流发送到与特定服务器单元组件2108相关联的本地管理组件2106。本地管理组件2106然后可以基于接收到的配置流来协调本地加速组件2110的配置。替代地,本地主机组件2112可以代替本地管理组件2106或者除了本地管理组件2106之外来执行上述操作。
[0183] 图22示出了用于配置加速组件的另一种策略。在这种情况下,全局管理组件2202向服务器单元组件2206的本地管理组件2204发送指令。作为响应,本地管理组件2204访问本地数据存储2208中的配置图像,并且然后使用它来配置本地加速组件2210。替代地,本地主机组件2212可以代替本地管理组件2204或者除了本地管理组件2204之外来执行上述操作。
[0184] 图23示出了用于配置局部加速组件2302的另一种技术。在该方法中,假定加速组件2302包括应用逻辑2304,该应用逻辑2304继而又由当前模型2306(其中模型对应于以特定的方式执行功能的逻辑)管理。进一步假定加速组件2302访问本地存储器2308。本地存储器2308存储与一个或多个其他模型(模型1,...,模型n)相关联的配置图像。
[0185] 当被触发时,本地模型加载组件2310可以用本地存储器2308中的另一个模型相关联的配置换掉(swap out)与当前模型2306相关联的配置。模型加载组件2310可以由加速组件2302本身、本地主机组件、本地管理组件等、或其一些组合来实现。在一个实现中,可以在比应用逻辑2304作为整体的整体重新配置更少的时间内执行图23中所示的配置操作,因为它牵涉替换由应用逻辑2304所使用的一些逻辑而不是以批发方式替换整个应用逻辑2304。
[0186] 最后,图24示出了具有支持部分配置的应用逻辑2402的加速组件。管理功能性122可以通过将应用1(2404)与应用2(2406)分开地进行配置来利用该性能,反之亦然。
[0187] 图25示出了在图1的数据处理系统102中实现加速组件2502的一种方式,其可以被物理地实现为FPGA设备。请注意,下面呈现的细节是以说明而非限制的精神来进行阐述。其他数据处理系统可以使用具有与图25中所示相比以一种或多种方式变化的架构的加速组件。此外,其他数据处理系统可以采用包括具有不同类型的加速组件的异构设计。
[0188] 从高级观点来看,加速组件2502可以被实现为具有不同层的功能性的分层结构。在最低级别处,加速组件2502提供“外核”,其提供在大多数应用场景中通常保持相同的基本界面相关的组件。位于外核内部的核心组件2504可以包括“内核”和应用逻辑2506。内核对应于除了应用逻辑2506之外的核心组件2504中的所有资源,并且表示在某个应用场景集合中保持相同的第二级资源。应用逻辑2506本身表示最容易受到改变的最高级资源。然而请注意,可以在技术上对加速组件2502的任何组件进行重新配置。
[0189] 在操作中,应用逻辑2506以与软件实现的应用与其底层操作系统资源交互的方式相类似的方式来与外核资源和内核资源交互。从应用开发的观点来看,使用公共外核资源和内核资源可以使得开发人员不必为他或她所创建的每个应用重新创建这些公共组件。这种策略还降低了开发人员可能以导致整个数据处理系统102内的问题的方式来改变核心内核或外核功能的险。
[0190] 参照外核,加速组件2502包括用于将加速组件2502耦合到网络接口控制器(经由NIC接口2510)和本地架顶式交换机(经由TOR接口2512)的桥接器2508。
[0191] 桥接器2508支持两种模式。在第一模式中,桥接器2508提供数据路径,该数据路径允许来自NIC或TOR的业务流入加速组件2502,并且来自加速组件2502的业务流出到NIC或TOR。加速组件2502可以对其“拦截”的业务执行任何处理,诸如压缩、加密等。在第二模式中,桥接器2508支持允许业务在NIC和TOR之间流动的数据路径,而无需被加速组件2502进一步处理。在内部,桥接器2508可以包括对接收分组进行缓冲的各种FIFO(2514,2516)以及将分组路由到它们的期望目的地的各种选择器和仲裁逻辑。旁路控制组件2518控制桥接器2508是以第一模式还是第二模式操作。
[0192] 存储器控制器2520管控加速组件2502与本地存储器2522(诸如DRAM存储器)之间的交互。作为其服务的一部分,存储器控制器2520可以执行误差校正。
[0193] 主机接口2524提供使加速组件2502能够与本地主机组件(图25中未被示出)交互的功能性。在一个实现中,主机接口2524可以结合直接存储器访问(DMA)来使用快速外围组件互连(PCIe),从而与本地主机组件交换信息。
[0194] 最后,核还可以包括各种其他特征2526,诸如时钟信号发生器、状态LED、纠错功能性等等。
[0195] 在一个实现中,内核可以包括路由器2528,用于在加速组件2502的各种内部组件之间以及在加速组件2502和外部实体(经由传送组件2530)之间对消息进行路由。传送组件2530可以用具有存储器存储指令的一个或多个计算机处理器或者例如在FPGA或ASIC或其他类似设备中实现的专用逻辑门阵列来实现。每个这样的端点都与一个相应的端口相关联。例如,路由器2528被耦合到存储器控制器2520、主机接口2524、应用逻辑2506和传送组件2530。
[0196] 传送组件2530制定用于传输到远程实体(诸如远程加速组件)的分组,并从远程加速组件(诸如远程加速组件)接收分组。
[0197] 3端口交换机2532在被激活时通过在NIC和TOR之间以及在NIC或TOR和与加速组件2502相关联的本地端口之间对分组进行路由,来接管桥接器2508的功能。
[0198] 最后,可选诊断记录器2534将有关由路由器2528、传送组件2530和3端口交换机2532执行的操作的事务信息存储在循环缓冲器中。例如,事务信息可以包括有关分组的起源和目的地IP地址的数据、主机特定的数据、时间戳等。技术人员可以研究事务信息的日志,以试图诊断加速组件2502中的故障或次优性能的原因。
[0199] 图26示出了包括单独的可配置域(2604,2606,...)的加速组件2602。配置组件(例如,图10的配置组件1014)可以配置每个可配置域而不影响其他可配置域。因此,配置组件可以配置一个或多个可配置域,同时其他可配置域正在基于它们相应的配置执行操作,这些均不受干扰。
[0200] 在一些实现中,图1的数据处理系统102可以动态地重新配置其加速组件以解决任何映射考虑。该重新配置可以在部分和/或全部服务的基础上执行,并且可以在周期性和/或事件驱动的基础上执行。实际上,在一些情况下,数据处理系统102可能似乎是通过重新配置其加速逻辑来不断地在过程中将其适应数据处理系统102中的变化条件。
[0201] 图27示出了一个功能性,通过该功能性,本地主机组件2702可以经由图25中所示的主机接口2524(例如,结合DMA存储器传输而使用PCIe)将信息转发到其本地加速组件2704。在一个非限制性协议中,在操作(1)中,主机逻辑2706将要被处理的数据放置在与主机逻辑2706相关联的主存储器中的内核锁定输入缓冲器2708中。在操作(2)中,主机逻辑
2706指令加速组件2704取回数据并开始处理它。然后主机逻辑的线程进入休眠状态直到它从加速组件2704接收到通知事件,或者它继续异步地处理其他数据。在操作(3)中,加速组件2704传输来自主机逻辑的存储器的数据并将其放置在加速组件输入缓冲器2710中。
[0202] 在操作(4)和(5)中,应用逻辑2712从输入缓冲器2710取回数据,对其进行处理以生成输出结果,并将输出结果放置于输出缓冲器2714中。在操作(6)中,加速组件2704将输出缓冲器2714的内容复制到主逻辑的存储器中的输出缓冲器中。在操作(7)中,加速组件通知主机逻辑2706:数据已准备好供主机逻辑2706取回。在操作(8)中,主机逻辑线程唤醒并消耗输出缓冲器2716中的数据。主机逻辑2706然后可以丢弃输出缓冲器2716的内容,其允许加速组件2704在下一个事务中重新使用输出缓冲器2716。
[0203] 图28示出了图25中引入的路由器2528的一个实现。路由器包括用于从相应端口接收消息的任意数量的输入单元(在这里是四个,2802,2804,2806,2808),以及用于将消息转发到相应端口的输出单元(在这里是四个,2810,2812,2814,2814)。如上所述,与端口相关联的端点包括存储器控制器2520、主机接口2524、应用逻辑2506和传送组件2530。纵横(crossbar)组件2818基于与消息相关联的地址信息将消息从输入端口转发至输出端口。更具体地说,消息包括多个“微片”(flit),路由器2528在逐微片的基础上发送消息。纵横组件2818可以用具有存储器存储指令的一个或多个计算机处理器或者例如在FPGA或ASIC或其他类似设备中实现的专用逻辑门阵列来实现。
[0204] 在一个非限制性实现中,路由器2528支持用于在同一物理链路上发射不同类别的业务的多个虚拟通道(诸如八个)。也就是说,路由器2528可以针对在其中由应用逻辑2506实现多个业务的那些场景支持多个业务类别,并且这些服务需要在单独的业务类别上进行通信。
[0205] 路由器2528可以使用基于信用的流技术来管控对路由器资源(例如,其可用缓冲器空间)的访问。在该技术中,输入单元(2802-2808)向上游实体提供信用,这些信用对应于其缓冲器中可用的确切数量的微片。信用授予上游实体权利以将其数据发射到输入单元(2802-2808)。更具体地说,在一个实现中,路由器2528支持可以在多个虚拟通道之间进行共享的“弹性”输入缓冲器。输出单元(2810-2816)负责跟踪其下游接收器中的可用信用,并且向正在请求将微片发送到给定输出端口的任何输入单元(2802-2808)提供授权。
[0206] 图29示出了图25中引入的传送组件2530的一个实现。传送组件2530可以提供登记接口以建立节点之间的连接。也就是说,每个这样的连接是单向的,并将源组件上的发送队列链接到目的地组件上的接收队列。软件过程可以在传送组件2530可以发射或接收数据之前通过对连接进行静态分配来建立连接。数据存储2902存储控制连接状态的两个表——发送连接表和接收连接表。
[0207] 分组处理组件2904处理目的地为远程端点(例如,另一个加速组件)的、从路由器2528到达的消息。分组处理组件2904通过对消息进行缓冲和分组化来这样处理。分组处理组件2904还处理从一些远程端点接收的并且目的地为路由器2528的分组。分组处理组件
2904可以利用具有存储器存储指令的一个或者多个计算机处理器或者例如在FPGA或ASIC或其他类似设备中实现的专用逻辑门阵列来实现。
[0208] 对于从路由器2528到达的消息,分组处理组件2904例如使用由路由器2528提供的、与该消息相关联的报头信息和虚拟通道(VC)信息作为查找项目,来将每个消息请求匹配到发送连接表中的发送连接表条目。分组处理组件2904使用从发送连接表条目中取回的信息(诸如序列号、地址信息等)来构造其发出到远程实体的分组。
[0209] 更具体地说,在一个非限制性方法中,分组处理组件2904将分组封装在UDP/IP以太网中,并将它们发送到远程加速组件。在一个实现中,分组可以包括以太网报头,随后是IPv4报头,随后是UDP报头,随后是传送报头(具体地是与传送组件2530相关联),随后是有效载荷
[0210] 对于(例如,如在3端口交换机2532的本地端口上接收到的)从网络到达的分组,分组处理组件2904将每个分组匹配到在分组报头中提供的接收可连接表条目。如果存在匹配,则分组处理组件取回条目的虚拟通道字段,并使用那个信息将接收到的消息转发到路由器2528(根据路由器2528使用的信用流技术)。
[0211] 故障处理组件2906对所有发送分组进行缓冲,直到它从接收节点(例如,远程加速组件)接收到确认(ACK)。如果针对连接的ACK在规定的超时周期内没有到达,则故障处理组件2906可以重发该分组。故障处理组件2906将这样的重新传输重复执行达预定次数(例如128次)。如果在所有这样的尝试之后分组仍未被确认,则故障处理组件2906可以丢弃它并释放其缓冲器。故障处理组件2906可以利用具有存储器存储指令的一个或多个计算机处理器或者例如在FPGA或ASIC或其他类似设备中实现的专用逻辑门阵列来实现。
[0212] 图30示出了3端口交换机2532的一个实现。3端口交换机2532操作来将加速组件生成的网络分组安全地插入(和移除)到数据中心网络上,而不损害主机到TOR的网络业务。
[0213] 3端口交换机2532连接到NIC接口2510(对应于主机接口)、TOR接口2512和与本地加速组件2502本身相关联的本地接口。3端口交换机2532可以被概念化为包括用于分别从主机组件、TOR交换机接收分组以及用于在本地加速组件处接收分组的接收接口(3002,3004,3006)。3端口交换机2532还包括用于分别向TOR交换机和主机组件提供分组并接收由本地加速组件发射的分组的发射接口(3008,3010,3012)。
[0214] 分组分类器(3014,3016)例如基于由分组规定的状态信息来确定从主机组件或TOR交换机接收的分组的类别。在一个实现中,每个分组被分类为属于无损流(例如,远程直接存储器访问(RDMA)业务)或者有损流(例如,传输控制协议/因特网协议(TCP/IP)业务)。属于无损流的业务不容许分组丢失,属于有损流的业务可以承受一些分组丢失。
[0215] 分组缓冲器(3018,3020)取决于传入分组所涉及的业务的类别而将传入分组存储在不同的相应缓冲器中。如果缓冲区中没有可用空间,则将分组丢弃。在一个实现中,3端口交换机2532不提供用于由本地加速组件(经由本地端口)提供的分组的分组缓冲,因为应用逻辑2506可以通过使用“反压(back pressuring)”来调节分组的流动。仲裁逻辑3022在可用分组中进行选择并发射所选分组。
[0216] 如上所述,目的地为本地加速组件的业务被封装在固定端口号上的UDP/IP分组中。3端口交换机2532检查传入分组(例如,从TOR接收到的分组)以确定它们是否是在正确端口号上的UDP分组。如果是,则3端口交换机2532在本地RX端口接口3006上输出分组。在一个实现中,到达本地TX端口接口3012上的所有业务从TOR TX端口接口3008被发出,但是它也可以被发送到主机TX端口接口3010。还要注意:图30指示加速组件2502拦截来自TOR的业务,但不拦截来自主机组件的业务;但它也可以被配置为拦截来自主机组件的业务。
[0217] PFC处理逻辑3024允许3端口交换机2532将优先级流控制帧插入到TOR或主机组件的业务流中。也就是说,对于无损业务类别,如果分组缓冲器填满,则PFC处理逻辑3024将PFC消息发送给链路伙伴,请求暂停在该类别上的业务。如果在主机RX端口接口3002或TOR RX端口接口3004上接收到针对无损业务类别的PFC控制帧,则3端口交换机2532将停止在接收到控制消息的端口上发送分组。
[0218] 图31示出了主机组件3102的一个实现,其对应于图1中所示的主机组件(S)中的任一个。主机组件3102可以包括一个或多个处理设备3104,诸如一个或多个中央处理单元(CPU),其每一个都可以实现一个或多个硬件线程。主机组件3102还可以包括用于存储诸如代码、设置、数据等等之类的任何种类的信息的任何储存资源3106。例如而非限制,储存资源3106可以包括任何类型的RAM、任何类型的ROM、闪存设备、硬盘、光盘等等。更一般地说,任何储存资源都可以使用任何技术来存储信息。此外,任何储存资源都可以提供信息的易失性或非易失性保留。此外,任何储存资源可以表示主机组件3102的固定或可移除组件。
[0219] 在一种情况下,当处理设备3104执行存储在任何储存资源或储存资源的组合中的关联指令时,主机组件3102可以执行与本地租户功能性相关联的任何操作。主机组件3102还包括一个或多个驱动机制3108用于与诸如硬盘驱动机制、光盘驱动机制等等的任何储存资源进行交互。
[0220] 主机组件3102还包括用于(经由输入设备3112)接收各种输入并且(经由输出设备3114)提供各种输出的输入/输出模块3110。一个特定的输出机制可以包括呈现设备3116和关联的图形用户界面(GUI)3118。主机组件3102还可以包括用于经由一个或多个通信管道
3122来与其他设备交换数据的一个或多个网络接口3120。一个或多个通信总线3124将上述组件通信地耦合在一起。
[0221] (一个或多个)通信管道3122可以以任何方式来实现,例如通过局域网、广域网(例如因特网)、点对点连接等或其任何组合来实现。通信管道3122可以包括由任何协议或协议组合所管控的硬连线链路、无线链路、路由器、网关功能性、名称服务器等的任何组合。
[0222] 图32提供了用于生成和应用多组件服务的功能性的概述。SMC128包括多组件管理组件(MCMC)3202。MCMC 3202与(图10的)配置组件1014进行交互以配置加速组件的集合(集群)。此后,MCMC3202管理该集合。MCMC 3202还存储有关集合中的加速组件之间的连接的信息。例如,对于集合中的每个成员,MCMC 3202可以存储(一个或多个)其上游组件(如果有的话)及(一个或多个)其下游组件(如果有的话)。
[0223] 图32还示出了执行多组件服务的加速组件(3206,3208,...,3210)的一个说明性集合3204。加速组件(3206,3208,...,3210)的该特定集合3204被构造为环。但其他集合可以展示出其他流结构。在集合3204内,加速组件3206表示多组件服务的头组件。
[0224] MCMC 3202还从上面在图10的上下文中引入的故障监视组件1016接收故障报告。故障报告指示两个加速组件之间的链路是否已经失败,例如,这可能表现为自身无法通过该链路交换消息。如果确认故障,则MCMC 3202可以通过用适当配置的备用加速组件换掉一个或多个失败的加速组件来恢复多组件服务。为了执行这个任务,MCMC 3202可以从备用加速组件池3212(例如,包括加速组件(3214,3216,3218))中抽取。例如,假定集合3204中的加速组件3208失败,其执行多组件服务的特定部分。MCMC 3202可以将该组件3208替换为已经配置为执行相同功能的池中的另一个组件。替代地,MCMC 3202可以与配置组件1014交互,以便在将备用组件指派给集合3204之前以动态的方式配置备用组件。MCMC 3202存储关于在任何给定时间处可用的备用组件3212的信息,例如作为数据存储1002中的可用性信息进行存储。
[0225] 功能解析组件3220可以将功能解析为多个部分以创建多组件服务。功能解析组件3220然后可以将指令转发到MCMC 3202,所述指令描述已经对功能进行解析的方式。MCMC 
3202使用这些指令来配置多组件服务中的加速组件(3206,3208,...,3210)。功能解析组件
3220可以用具有存储器存储指令的一个或多个计算机处理器或者例如在FPGA或ASIC或其他类似设备中实现的专用逻辑门阵列来实现。
[0226] 图33示出了可以使用图32的功能性来创建和应用的加速组件(3304-3314)的另一简化集合3302。集合3302包括头组件3304,该头组件3304分支成两条平行路径,包括:由加速组件3306和3308组成的第一路径和由加速组件3310和3312组成的第二路径(尽管分支可以具有任何数量的组件)。
[0227] 图34示出了可以由图32的功能性生成和应用的加速组件的另一种类型的集合3402。在这里,该图一般性地示出了加速组件可以被安排为形成三维流结构。
[0228] 更一般地,在一些情况下,多组件服务可以基于定义其加速组件之间的固定互连的图形结构。这种类型的多组件服务在它被调遣时将使用相同的加速组件集,并以这些组件的图形结构所定义的固定方式来在这些组件之间传递信息。在其他情况下,多组件服务可以基于一个或多个因素在运行时动态地改变其图形结构。在这样做时,多组件服务可以针对不同的调用而使用不同的加速组件,和/或可以针对不同的调用来在加速组件之间采用不同的流。
[0229] 例如,考虑执行图像识别的多组件服务。多组件服务可以调用加速组件的第一集合以处理第一类型的输入数据。多组件服务可以调用加速组件的第二集合以处理第二类型的输入数据。替代地或另外地,多组件服务可以基于诸如链路和/或加速组件所经历的拥塞之类的实时性能条件来动态地调用不同的加速组件和/或流。
[0230] 图35示出了上面引入的图32的功能解析组件3220的说明性实现。功能解析组件3220可以包括可用资源分析组件(ARAC)3502,其用于确定可用于在构建多组件服务中使用的加速组件3504的能力。例如,ARAC 3502可以在(图10的)数据存储1002中查询可用性信息,以确定可用的加速组件的数量、每个加速组件的总处理容量以及在当前可用于在实现多组件服务的一部分中所使用的每个加速组件中的处理容量的量(和类型)。
[0231] 功能分析组件3506可以研究功能本身,该功能本身将被分区成多个部分。取决于功能的性质,功能分析组件3506可以以不同的方式执行该操作。考虑这样一个功能:该功能涉及对相同的基本操作重复相对较多次。功能分析组件3506可以确定操作被执行的总次数以及与操作的每次迭代相关联的计算负载。功能分析组件3506可以用具有存储器存储指令的一个或多个计算机处理器或者例如在FPGA或ASIC或其他类似设备中实现的专用逻辑门阵列来实现。
[0232] 功能分析组件3506还可以识别功能的流程内的自然转移。例如,功能可以由多个阶段来表征,并且那些阶段可以映射到多组件服务的相应部分,并且在部分之间进行转移。另外地或者替代地,一个功能可以调用子例程的集合,并且那些子例程可以映射到多组件服务的相应部分,并且转移到子例程和从子例程转移。
[0233] 更一般地,一个功能可以包括任何类型的编程调遣,例如,其中一个代码模块调遣另一个代码模块。功能解析组件3220可以将这些调遣视为用于对功能进行划分的自然点,从而有效地用从一个加速组件到下一个加速组件的调遣来替换内部程序化调遣。此外,当功能具有多个部分或阶段时,功能分析组件3506还可以确定与每个部分相关联的处理工作量。
[0234] 分区生成组件3508使用ARAC 3502和功能分析组件3506的结果,来生成将功能分配成要被分配给相应分配组件的多个部分。例如,考虑功能分析组件3506已经确定一个功能涉及将特定任务重复一定次数(诸如通过执行蒙特卡洛模拟算法的一千万次迭代)的情况。分区生成组件3508可以将全部数量的任务分成适当尺寸的组块,以分配给可用的个体加速组件。更具体地说,分区生成组件3508可以选择足以执行任务总数量的多个加速组件,并且然后取决于每个加速组件的特定可用容量将合适的部分分配给每个这样的加速组件。分区生成组件3508还可以在选择特定的分区点时利用由功能分析组件3506识别的自然转移信息,例如使得内部程序单元被重新调整为从一次加速组件到另一个加速组件的调遣。
分区生成组件3508可以用具有存储器存储指令的一个或多个计算机处理器或者例如在FPGA或ASIC或其他类似设备中实现的专用逻辑门阵列来实现。
[0235] 在其他情况下,功能解析组件3220可以识别将功能分区成多个部分的有限数量的可能方式,并且可以识别影响其总体期望性的每个选项的结果特性(例如,就计算速度、成本、功耗、热曲线和/或任何其他因素而言)。功能解析组件3220然后可以选择最有利的分区选项。例如,功能解析组件3220可以向每个选项指派一个分数,该分数反映其特性特征的加权组合,并且然后选择具有最有利分数的选项。可以基于环境特定的考虑来选择权重。在其他情况下,功能解析组件3220可以应用已知的搜索算法(诸如最优先)来在选项空间内找到合适的解决方案。
[0236] 在另一种场景中,假定功能具有多个阶段,功能解析组件3220将该多个阶段映射到不同的加速组件。但是假定一个阶段比其他阶段更加劳动密集。为了避免与该阶段相关联的处理中的瓶颈,功能解析组件3220可以为该阶段分配并行操作的两个或更多加速组件。
[0237] 功能解析组件3220可以被应用于不同的使用上下文中。在一个使用上下文中,功能解析组件3220提供了一种工具,开发人员可以与该工具进行交互以便手动探索不同的分区选项。
[0238] 在另一个使用上下文中,功能解析组件3220至少以部分自动化的方式进行操作。例如,假定数据处理系统102提供至少一个多组件服务。进一步假定:在任何给定的时间,多组件服务采用在当前分区策略的基础上构建的加速组件的集合。在触发事件之后,数据处理系统102可以动态地调用功能解析组件3220以鉴于数据处理系统102中的主要条件,来确定当前分区策略是否继续是适当的。例如,在数据处理系统102的操作过程中,功能解析组件3220可以在周期性的基础上和/或在事件驱动上执行此操作。如果策略不再合适,则功能解析组件3220动态地更新与多组件服务相关联的组件的分配,并且然后部署新的多组件服务。
[0239] 之前选择的分区策略可能由于一个或多个原因而不再适合。例如,数据处理系统102可以包含与最初遇到的可用资源不同的一组可用资源,这可以保证对该多组件服务的重新分区。另外地或替代地,数据处理系统102可能遇到实时性能约束,其可能在每次调用多组件服务时不同。
[0240] 另外地或替代地,待执行的任务的性质本身可以基于各种因素而改变。例如,如上所指出,取决于馈送给多组件服务的输入信息的性质和/或客户要求的性质等等,多组件服务可以具有不同的处理要求。
[0241] 为了引用特定场景,假定多组件服务对应于迭代算法,所述迭代算法取决于馈送给它的输入数据的性质和/或基于由消费者规定的置信度度量来调用不同数量的重复性任务。为了解决这种场景,功能解析组件3220可以基于功能解析组件3220在处理数据集时遇到的实时数据处理需求来动态地对算法进行重新分区。例如,考虑图33中所示的集合3302的类型。响应于功能解析组件3220遇到的实时处理需要,功能解析组件3220可以动态地减少或增加集合3302中的分支数量,以分别减少或增加其处理容量。
[0242] 在一种情况下,功能解析组件3220对应于在一个或多个软件驱动的计算设备上运行的程序,所述计算设备例如是图1中所示的主机组件之一或者专用计算机服务器。替代地或者附加地,即使没有来自软件平面104的帮助,(一个或多个)加速组件也可以实现功能解析组件3220的一些方面。例如,加速组件可以自动检测其本地处理中的、或者集合中的其他加速组件的处理中的拥塞。
[0243] 例如,加速组件可以确定其在规定的时间量内未能产生其输出结果——无论出于何种原因。作为响应,加速组件可以自动生成其自身的重复版本,其随后并行操作以减轻拥塞。例如,再次参照图33,在检测到一个或多个分支或节点中的处理正变得拥塞或者以其他方式表现不佳时,加速组件可以自动增加或减少并行分支或单个节点的数量。
[0244] 图36示出了使用加速组件的集合实现的说明性多组件服务的更详细的示例。总之,多组件服务将排名分数指派给查询和文档的配对。排名分数定义了文档与查询的相关性。传统上,比如,通过应用由机器学习所产生的模型来完全以软件来执行任务。
[0245] 在本实现中,主机组件3602可以通过向与头组件3604相对应的多组件服务的第一加速组件发送请求来调用服务。更具体地说,图36通过在操作(1)中示出主机组件3602与头组件3604直接交互而简化了第一操作。更一般地,主机组件3602直接与其本地加速组件交互,所述本地加速组件可以对应于或可以不对应于头组件3604。如果本地加速组件不是头组件3604,则本地加速组件将把请求转发给头组件3604。
[0246] 请求本身可以包括各种信息项,诸如描述在考虑中的文档内的查询项的位置的一个或多个命中矢量等。该请求还可以规定软件生成的特征的集合。这些软件生成的特征是用软件(而不是硬件)来计算的——出于任何特定于环境的原因(例如,因为这样的计算不能很好地映射到硬件资源)。
[0247] 头组件3604执行两个角色。首先,头组件3604计算在本文中被称为“特征值”的数值分数,其将被用作下游加速组件的输入信息。例如,一个这样的特征值可以标识查询词在考虑中的文档中出现的次数。另一个特征值可以是查询词以连续顺序出现的次数等等。头组件3604还可以执行队列管理角色,下面将更详细地描述。
[0248] 与头组件3604执行的计算相比,接下来的两个加速组件(3606,3608)执行更复杂的计算,在本文中被称为“自由形式表达式”(FFE)。例如,如下面更详细描述的,FFE加速组件3606和3608可以使用由头组件3604确定的特征值来执行数学计算。虽然在图36中示出了两个FFE加速组件3606和3608,但是本领域的普通技术人员将理解,可以使用多于或少于两个FFE加速组件。序列中的下一个加速组件3610对到目前为止计算出的特征值进行压缩。
[0249] 最后三个加速组件(3612,3614,3616)使用迄今为止计算出的所有特征值作为评分计算的输入信息,并且使用任何环境特定的分数计算等式或算法来生成最终排名分数。上述一系列加速组件然后将最终分数路由回到头组件3604,并且在那之后路由到主机组件
3602。
[0250] 一般而言,图36中的编号箭头反映了由组成多组件服务的加速组件所执行的操作序列。在这里,流结构假定了环的形式,在其中计算在环的第一方向上流动,并且最终结果在环的相反方向上流动。但是同样,许多其他流结构也是可能的。标签S1,S2,……,S6标示与图36中所示的相应加速组件相关联的本地主机组件。
[0251] 图37示出头组件3604中用于在计算特征值中使用的功能性。该功能性包括流处理组件3702,用于将(例如,与命中矢量相关联的)输入流分割成多个子流3704。然后,特征状态机3706的集合对子流并行地操作以生成特征值。特征聚集组件3708收集来自特征状态机的特征值并使它们对下游加速组件可用。特征聚集组件3708可以用具有存储器存储指令的一个或多个计算机处理器或者例如在FPGA或ASIC或其他类似设备中实现的专用逻辑门阵列来实现。虽然未被示出,但执行更高级特征计算的加速组件(35606,3608)也可以利用并行计算资源。
[0252] 图38示出了可以由图36的头组件3604实现的队列管理器组件3802。队列管理器组件3802通过改变由图36的加速组件的集合所使用的模型来操作以适应需求不同模型的需求。更具体地说,从主机组件3602接收的不同请求对应于以不同自然语言表达的查询。不同的语言继而提示队列管理器组件3802加载不同的相应模型以处理不同的请求。例如,如果接收到的查询以法语表达,那么队列管理器组件3802将尝试加载多组件服务中的法语相关模型,以作用于该查询(如果该模型尚未被加载的话)。
[0253] 更具体地,队列管理器组件3802可以在本地存储器3804中维护多个队列。每个队列与不同的相应模型相关联。例如,队列1与模型1相关联,队列2与模型2相关联,队列3与模型3相关联,依此类推。
[0254] 队列管理器组件3802包括请求处理组件3806和模型加载组件3808。模型加载组件3808可以利用以下来实现:具有存储器存储指令的一个或多个计算机处理器或者例如在FPGA或ASIC或其他类似设备中实现的专用逻辑门阵列。在操作中,请求处理组件3806例如通过将上面指出的法语查询添加到法语队列来将每个传入请求添加到合适的队列。请求处理组件3806还基于任何策略来在队列之中进行选择以进行处理,诸如通过在轮询基础上、在队列充满度基础上、在优先级基础上等或其任何组合在队列之中进行选择。这样的策略通常可能试图在队列和请求之间进行公平仲裁,同时也减少了选择新队列的频率(以及因此加载新模型的频率)。在切换到新的队列(例如,具有其中的未处理的请求)时,模型加载组件3808将与该队列相关联的模型加载到加速组件3810中,然后将队列中的请求提交到加速组件3810以基于加载新模型。
[0255] 图39是示出图35的功能解析组件3220的一种操作方式的过程3902。在块3904中,功能解析组件3220接收关于要被分区的功能的信息以及关于可用加速组件的信息。在块3906中,功能解析组件3220将该功能分区成两个或更多部分,以分配给相应加速组件。在块
3908中,功能解析组件3220使用配置组件1006来配置具有块3906中标识的部分的加速组件(如果尚未配置的话)。在块3910中,功能解析组件3220确定数据处理系统102中的条件(和/或功能本身的性质)是否保证对功能进行重新分区。如果是,则过程2802返回到块3904。
[0256] 图40示出了描述在实现多组件服务的加速组件的集合内的特定加速组件的操作的过程4002。在块4004中,例如通过识别(一个或多个)上游组件(如果有的话)和(一个或多个)下游组件(如果有的话),加速组件接收识别特定加速组件与集合中的其他加速组件的连接的建立信息。在块4006中,特定加速组件从(一个或多个)上游组件或者从已经请求使用多组件服务的请求主机组件接收输入信息。在块4008中,特定加速组件执行其被指派的操作以生成输出信息。在块4010中,特定加速组件将输出信息发送到(一个或多个)下游组件或请求主机组件。
[0257] 图41是描述处理实现多组件服务的加速组件的集合中的故障的一种方式的过程4102。在块4104中,管理功能性122确定加速组件是否失败。在块4106中,管理功能性122用从备用加速组件池中选择的备用加速组件换下失败的加速组件。备用加速组件可能已被配置为执行失败的加速组件的角色,或者它可以被配置为以按需方式执行该角色。
[0258] 如上面结合图36所描述的,可以使用示例多组件服务来将排名分数指派给查询和文档的配对。在所图示的示例中,头组件3604基于查询和文档组合来计算特征值。例如,一个这样的特征值可以是查询词出现在考虑的文档中的次数。另一个特征值可以是查询词以连续的顺序出现的次数,等等。
[0259] 如上所述,FFE加速组件3606和3608可以使用由头组件3604确定的特征值来执行数学计算。FFE给开发者提供了一种创建混合特征的方式,所述混合特征没有被方便地规定为特征提取状态机。可能存在数千个FFE,其范围从非常简单(诸如添加两个特征)到大型并复杂(包括条件执行和复杂浮点运算符(诸如自然对数(ln)pow运算和除法)的数千个操作)。FFE跨越不同模型而显著变化,因此为每个表达式合成定制的数据路径是不切实际的。
[0260] 图42图示出了一些特征值的示例和使用示例特征值来执行各种数学计算的FFE的示例。在所图示的示例中,特征值包括具有值7的NumberofOccurences_0(例如,第一查询词在文档中出现的次数)、具有值4的NumberofOccurences_1(例如,第二查询词在文档中出现的次数)和具有值1的NumberofTuples_0_1(例如,第一和第二查询词按顺序出现的次数)。本领域的普通技术人员将理解,特征值可以具有除了图42中所示出的那些以外的值,并且可以有多于或少于四个特征值。
[0261] 图42还包括四个示例FFE。第一个FFE(FFE#0)是两个特征值的简单相加。第二个FFE(FFE#1)包括乘法、加法和除法运算。第三个FFE(FFE#2)包括触发和自然对数运算。第四个FFE(FF#3)包括乘法、幂和除法运算。本领域的普通技术人员将理解,FFE可以包括更多的变量和数学运算,并且可以有多于或少于四个FFE。因此,就所使用的特征值的数量和在特征值上执行的数学运算的复杂度而言,FFE可以有相当大的不同。
[0262] 如上所述,数据处理系统102的硬件加速组件可以被配置为主管各种服务,诸如尤其是加密功能、文档排名功能、数据压缩功能、图像分类功能、机器学习功能等等。一些服务可能需要相对少量的可存储在存储器中的数据,并且需要相对低的存储器带宽(例如,数十GB/秒),而其他服务可能需要大量的可存储在存储器中的数据并且需要高得多的存储器带宽(例如,数百GB/秒)(在本文中被称为“高带宽服务”)。
[0263] 如上面结合图25所描述的,示例加速组件2502耦合到本地存储器2522。在一个实现中,加速组件2502经由多通道存储器总线(例如总线宽度为64或72位的量级)耦合到本地存储器2522(例如,诸如传统DIMMS的DDR3或DDR4DRAM设备),并且在约3瓦的功率下具有约10GB/秒的存储器带宽(即约3.33MB/秒/mW的功率效率)。虽然这种存储器带宽可能对于一些服务而言是足够的,但是对于其他数据密集型服务而言,需要更多的存储器带宽。
[0264] 增加存储器带宽的一种技术是提供更多的通道给更多数量的DIMMS。但是这种技术要求主板上有大量的以非常高速度驱动的迹线,并且需要大量的功率。这种用于增加存储器带宽的技术对于一些应用来说可能是不切实际的。例如,在数据处理系统102的数据中心实现中,功率是非常昂贵且有限的资源,因此提供更多的通道给更多数量的DIMMS可能是不可行的。
[0265] 增加存储器带宽的另一技术是使用不同于DDR3或DDR4DRAM的存储器技术诸如混合存储器立方体(HMC)来实现本地存储器2522。HMC结合了通孔和微凸块以将多个(例如4至8个)存储器单元阵列的裸片在彼此之上进行连接。总带宽在128GB/秒到400GB/秒的范围中。虽然HMC提供高存储器带宽,但是该技术也需要非常高的功率,这对于诸如数据中心之类的一些应用来说也是不切实际的。
[0266] 用于提供高带宽、低功率存储器的替代技术使用裸片堆栈技术。如本文所使用的,“高带宽、低功率存储器”是具有大于约50GB/秒的存储器带宽和大于约20MB/秒/mW的功率效率的存储器。一个这样的裸片堆栈技术是JEDEC高带宽存储器(HBM)DRAM标准JESD235,其规定了使用宽接口架构来提供高带宽、低功率存储器的存储器架构。
[0267] 图43A-图43C示出了具有HBM DRAM 4302的加速组件的实现。为了简单起见,具有HBM DRAM的加速组件在本文中将被称为“HBM加速组件”。HBM加速组件4302包括可以被物理地实现为FPGA裸片的加速组件裸片4304以及布置在中介器4308上的存储器堆栈4306。在一个实现中,将加速组件裸片4304、存储器堆栈4306和中介器4308布置在集成电路封装(未示出)中。如图43B中的横截面所示,在一个实现中,加速组件裸片4304和存储器堆栈4306中的每一个都经由微凸块4310或其他类似的接触件而被耦合到中介器4308。
[0268] 存储器堆栈4306可以包括一至四个存储器裸片,每一个存储器裸片具有介于约0.5GB至约4GB之间的容量。在图43B中所示的实现中,存储器堆栈4306a包括单个存储器裸片4312。在图43C中所描绘的另一实现中,存储器堆栈4306b包括四个存储器裸片4314,
4316,4318及4320。存储器堆栈4306中的每一个存储器裸片可以包括具有512位数据接口的
1或2个存储器通道。存储器堆栈4306可以具有在约1066MHz至1600MHz之间的时钟速率,但是可以使用其他时钟速率。
[0269] 中介器4308可以是具有平坦表面的裸片,在所述平坦表面上可以安装一个或多个裸片,例如加速组件裸片4304和存储器堆栈4306。在一个实现中,加速组件裸片4304和存储器堆栈4306并排地位于中介器4308的平面表面上。中介器4308为加速组件裸片4304和存储器堆栈4306提供共同的安装表面和电耦合点。
[0270] 中介器4308用作在加速组件裸片4304与存储器堆栈4306之间的互连路由(未示出)的中间层。中介器4308可以用硅晶片衬底来实现——无论掺杂或未掺杂有N型和/或P型杂质。中介器4308可以包括一个或多个金属互连以及一个或多个电介质或绝缘层。中介器4308可以被实现为不包括有源电路元件的无源裸片,或者可以包括有源电路元件(例如,晶体管器件和/或二极管器件)。
[0271] 在一个实施例中,经由微凸块4310和中介器4308中的互连路由(未示出)将加速组件裸片4304和存储器堆栈4306进行电耦合。例如,加速组件裸片4304和存储器堆栈4306可以经由中介器4308中的512纳米尺度互连迹线进行耦合。互连迹线具有非常低的电阻和寄生电容,并且因此具有非常低的驱动要求。
[0272] 在一个实现中,存储器堆栈4306具有计时在1600MHz、每时钟为2个数据传输的512位数据接口,并且可以在大约7瓦特的功率处实现大约204.8GB/秒的最大存储器带宽(功率效率约为29MB/秒/mW)。因此,存储器堆栈4306可以以相对较低的时钟频率计时,并且仍然以相对较高的功率效率获得非常高的存储器带宽。在其他实现中,存储器堆栈4306具有在约128GB/秒和约256GB/秒之间的最大存储器带宽。
[0273] 图44示出了HBM加速组件4402的实现,所述HBM加速组件4402包括可以被物理地实现为FPGA裸片的加速组件裸片4404和布置在中介器4414上的存储器堆栈4406,4406,4410及4412。虽然为在图44中未被示出,在一个实现中,加速组件裸片4404和存储器堆栈4406,4406,4410和4412中的每一个经由微凸块或其他类似的接触件而被耦合到中介器4414。存储器堆栈4406,4406,4410和4412中的每一个可以包括一至四个存储器裸片,但是所有四个存储器堆栈不需要包括相同数量的存储器裸片。虽然图44中示出了四个存储器堆栈4406,
4406,4410和4412,但是可以使用多于或少于四个存储器堆栈。另外,虽然存储器堆栈4406,
4406,4410和4412被示出为被布置在加速组件裸片4404的四个角处,但是存储器裸片可以被布置在中介器4414上的其他位置处。
[0274] 用于提供高带宽、低功率存储器的另一种裸片堆栈技术是3D集成电路技术。图45A-图45C示出了3D加速及存储器组件4502的实现。3D加速和存储器组件4502包括可以被物理地实现为FPGA裸片的加速组件裸片4504和包括被布置在加速组件裸片4504上的一个或多个存储器裸片的存储器堆栈4506。在一个实现中,加速组件裸片4504和存储器堆栈
4506被布置在集成电路封装(未示出)中。
[0275] 如图45B中的横截面所示,在一个实现中,3D加速和存储器组件4502a包括存储器堆栈4506a,所述存储器堆栈4506a包括被布置在加速组件裸片4504上并经由微凸块4510或其他类似的接触件耦合在一起的单个存储器裸片4508。如图45C中的横截面所示,在一个实现中,3D加速和存储器组件4502b包括存储器堆栈4506b,所述存储器堆栈4506b包括被布置在加速组件裸片4504上并且经由微凸块4510或其他类似的接触件耦合在一起的多个存储器裸片4512,4514,...,4516。虽然在图45A-图45C中未被示出,但是3D加速和存储器组件4502中的一个或多个裸片可以包括硅通孔(TSV)以允许上部裸片与下部裸片通信。
[0276] 如上面结合图4所描述的,数据中心402表示图1的数据处理系统102的一个实现,并且包括服务器单元组件(404,406,...,408)的机架。图46示出了服务器单元组件4602的替代实现,与图4中所示的架构相比,其包括具有使用裸片堆栈技术的高带宽、低功率存储器的加速组件。
[0277] 服务器单元组件4602包括经由本地链路4608(例如,PCIe链路)耦合的主机组件4604和加速组件4606。主机组件4604包括耦合到存储器4614(例如,DRAM)(在本文中也被称为“主机组件存储器4614”)的一个或多个CPU(4610,4612,...)。加速组件4606包括HBM加速组件4616,其包括被布置在中介器4622上的加速组件裸片4618和存储器堆栈4620。替代地,HBM加速组件4616可以使用诸如图45A-图45C的3D加速和存储器组件4502之类的3D加速和存储组件。
[0278] 服务器单元组件4602可选地可以包括耦合到本地加速组件4606的存储器4624。在一个实现中,存储器4624在本地加速组件4606的外部(即,未被包括在相同的集成电路包中),并且包括低带宽存储器,诸如DIMMS 4626。如本文所使用的,“低带宽存储器”是具有小于约50GB/秒的带宽的存储器。在其他实现中,存储器4624还可以包括高带宽、高功率存储器技术,诸如HMC 4628。如本文所使用的,“高带宽、高功率存储器”是具有大于约50GB/秒的存储器带宽以及小于约20MB/秒/mW的功率效率的存储器。
[0279] 因此,服务器单元组件4602包括具有高带宽、低功率存储器(存储器堆栈4620)的加速组件4606。在混合实现中,服务器单元组件4602包括具有高带宽低功率存储器(存储器堆栈4620)和低带宽存储器(DIMMS 4626)两者的加速组件4606。在另一个混合实现中,服务器单元组件4602包括具有高带宽低功率存储器(存储器堆栈4620)、低带宽存储器(DIMMS 4626)和高带宽高功率存储器(HMC4628)的加速组件4606。
[0280] 在一个实现中,主机组件存储器4614、存储器堆栈4620和可选的其他存储器4624共享相同的存储器空间。替代地,主机组件存储器4614、存储器堆栈4620和可选的其他存储器4624可以各自具有单独的存储器空间。
[0281] 在一个实施例中,服务器单元组件4602还包括耦合到主机组件存储器4614、存储器堆栈4620、DIMMS 4626和HMC 4628的存储器管理组件4630。存储器管理组件可以由主机组件4614(例如,作为在一个或多个CPU(4610,4612,...)上运行的操作系统)、由加速组件4606a(例如由本地加速组件4606上实现的控制器)、由队列管理器组件3802(图38)等等、或者它们的一些组合来实现。在一个实现中,存储器管理组件4626被配置为基于数据的带宽要求,将数据分配给高带宽存储器(存储器堆栈4620)和低带宽存储器(DIMMS存储器4626)。
[0282] 例如,图47图示了用于基于数据的带宽要求将数据分配给高带宽存储器或低带宽存储器的存储器管理组件4702诸如存储器管理组件4630的示例操作。在块4704中,存储器管理组件4630接收要存储在存储器中的数据。在块4706中,存储器管理组件4630为数据确定带宽要求。例如,与数据相关联的标志可以指示数据是高带宽或低带宽数据。替代地,存储器管理组件4630可以基于数据的性质或数据的来源来为数据确定带宽要求。
[0283] 如果存储器管理组件4630确定数据是低带宽数据,则在块4708中,存储器管理组件4630将数据存储在低带宽存储器(例如,图46中的DIMMS 4626)中。如果存储器管理组件4630确定数据是高带宽数据,则在块4710中,存储器管理组件4630将数据存储在堆栈的存储器(例如,图46中的存储器堆栈4620)中。
[0284] 在另一实现中,存储器管理组件4626被配置为基于数据的带宽要求和服务器单元组件4602的功率要求,来将数据分配给高带宽低功率存储器(存储器堆栈4620)、低带宽存储器(DIMMS存储器4626)、和高带宽高功率存储器(HMC 4628)。
[0285] 例如,图48图示出了用于基于数据的带宽要求将数据分配给高带宽存储器或低带宽存储器的存储器管理组件4802诸如存储器管理组件4630的示例操作。在块4804中,存储器管理组件4630接收要存储在存储器中的数据。在块4806中,存储器管理组件4630为数据确定带宽要求。例如,与数据相关联的标志可以指示数据是高带宽或低带宽数据。替代地,存储器管理组件4630可以基于数据的性质或数据的来源来为数据确定带宽要求。
[0286] 如果存储器管理组件4630确定数据是低带宽数据,则在块4808中,存储器管理组件4630将数据存储在低带宽存储器(例如,图46中的DIMMS 4626)中。如果存储器管理组件4630确定数据是高带宽数据,则在块4810中,存储器管理组件4630确定数据应被存储在低功率存储器中还是高功率存储器中。如果存储器管理组件4630确定数据应被存储在低功率存储器中,则在块4812中,存储器管理组件4630将数据存储在堆栈存储器(例如,图46中的存储器堆栈4620)中。如果存储器管理组件4630确定数据应被存储在高功率存储器中,则在块4814中,存储器管理组件4630将数据存储在HMC(例如,图46中的HMC 4628)中。
[0287] 包括使用裸片堆栈技术的高带宽低功率存储器的加速组件,诸如图43A-图43C的HBM加速组件4302、图44的HBM加速组件4402和图45A-图45C的3D加速和存储器组件4502可以被用来主管高带宽服务,诸如关键值存储、机器学习应用、神经网络、渲染应用、物理仿真以及其他带宽密集型服务。
[0288] 可以在包括使用裸片堆栈技术的高带宽低功率存储器的加速组件上实现的这种高带宽服务的一个示例是使用决策树的机器学习分类。例如,机器学习分类服务可以在加速组件上被实现,并且被用来将排名分数指派给查询和文档的配对,并且可以使用决策树来确定排名分数。图49是加速组件4902的一种实现的框图,其被配置为接收(例如,来自主机组件的)文档评分请求,并且基于如下来执行文档排名:存储在存储器4906中并被加载到加速组件4902上的加速组件存储器(例如,块RAM(未示出))中的K个决策树DT0,DT1,...,DTK-1的模型4904。文档评分请求包括用于决策树的输入值。在一个实现中,文档评分请求输入值是与被评分的文档相关联的特征值(诸如以上结合图36所描述的)和FFE值(诸如以上结合图42所描述的)。
[0289] 每个决策树包括与树相关联的决策树数据,诸如树形拓扑、节点数目、每个节点处的特征/FFE、每个节点处的常数以及每个叶子处的值。对每个决策树的输入值是决策树中的特征/FFE的值。图50图示出了模型4904的决策树(例如,DT0)的示例实现。DT0包括图50中描绘的拓扑,包括五个节点(5002,5004,5006,5008,5010,5012)和七个叶节点(5014,5016,5018,5020,5022,5024和5026)。
[0290] 节点5002包括特征NumberofOccurrences_0和常数1。节点5004包括特征NumberofTupples_0_1和常数0。节点5006包括特征NumberofOccurrences_0和常数1。节点
5008包括FFE FFE#1和常数5。节点5010包括特征NumberofOccurrences_1和常数4。节点
5012包括FFE FFE#1和常数10。叶子5014,5016,5018,5020,5022,5024和5026具有值-0.5,-
0.3,-0.2,-0.1,0.1,0.2和0.5。
[0291] 到决策树DT0的输入值是决策树中的特征/FFE的值。在图50的示例中,DT0中的特征/FFE是NumberofOccurrences_0,NumberofTupples_0_1,NumberofOccurrences_1和FFE#1。使用图42中的值,针对决策树DTo的示例输入值是NumberofOccurrences_0=7,NumberofTupples_0_1=1,NumberofOccurrences_1=1,并且FFE#1=9
[0292] 在每个节点处,将输入特征/FFE值与该节点处的常数进行比较,并且比较结果通向下一个节点或叶子。在图50的图示示例中,使用上面列出的输入值,决策树遵循以粗体突出显示的路径,并且导致值为0.2。如上所述,模型4904包括K棵树。在所有的K棵树被评估之后,将每棵树的结果进行求和以产生针对文档的分数。
[0293] 再次参照图49,在一个实现中,加速组件4902从存储器4906中取回模型4904,并将针对K棵树的决策树数据加载到加速组件4902上的加速组件存储器中。加速组件4902上可用于存储树数据的加速组件存储器的的总量(aggregate amount)是有限的。例如,加速组件4902可以具有在大约4MB和大约6MB之间的加速组件存储器的总量。因此,加速组件4902中的加速组件存储器的总量限制了可存储在加速组件4902中的决策树数据的量。
[0294] 一些模型包括非常大数目的K棵树,并且包括大于加速组件中的加速组件存储器的总量的决策树数据的总量。解决这个问题的一种方式是在多个加速组件上实现一个模型。但是,这要求附加的硬件、资源和功率,并且对于非常大的模型来说实际上不是可扩展的。
[0295] 包括使用裸片堆栈技术的高带宽低功率存储器的加速组件,诸如图43A-图43C的HBM加速组件4302、图44的HBM加速组件4402和图45A-图45C的3D加速和存储器组件4502可以被用来实现这样一个模型,该模型包括大于加速组件上的加速组件存储器的总量(第二量)的决策树数据的模型的总量(第一量)。
[0296] 图51图示出了实现包括大于加速组件5102上的加速组件存储器的总量的决策树数据的总量的模型(例如,图49的模型4904)的加速组件5102和模型切片组件5104的一种实现。加速组件5102包括被布置在中介器5110上的加速组件裸片5106和存储器堆栈5108。加速组件裸片5106包括具有存储器总量的加速组件存储器5112(例如,块RAM)。在一个实施例中,加速组件存储器5112具有4MB的总量。也可以使用其他总量。
[0297] 模型4904具有大于加速组件存储器5112的总量的决策树数据的总量(例如,40MB)。存储器堆栈5108是HBM(例如,大约200GB/秒的存储器带宽)以及具有在大约0.5GB到大约4GB之间的容量,但是可以使用其他存储器带宽和存储器容量。
[0298] 模型切片组件5104包括模型量确定组件5114、加速组件存储量确定组件5116和切片组件5118。图52是示出图51的模型切片组件5104的一种操作方式的过程5202。
[0299] 在块5204中,模型切片组件5104接收模型数据(例如,包括在模型中的针对决策树的决策树数据)。在块5206中,模型尺寸确定组件5114确定接收到的模型中的决策树数据的总量。在块5208中,加速组件存储量确定组件5116确定加速组件存储器5112的总量。在块5210中,模型切片组件5104基于在块5206中确定的决策树数据的总量和在块5208中确定的加速组件存储器的总量来计算模型分片的数量N。
[0300] 例如,如果加速组件存储器5112具有4MB的总量,并且模型4904具有K=30,000棵树,所述树包括40MB的决策树数据总量,则模型切片组件5104确定N=40MB/4MB=10。在块5210中,切片组件5118将该模型切片成N个模型分片S0,S1,S2,...,SN-1,并将N个模型分片存储在存储器堆栈5108中。每个模型分片S0,S1,S2,...,SN-1具有小于或等于加速组件存储器
5112的总量(例如,4MB)的第三量的决策树数据。
[0301] 每个模型分片S0,S1,S2,...,SN-1包括模型4904的K个决策树DT0,DT1,...,DTK-1的子集,但所有模型分片S0,S1,S2,...,SN-1不需要包括相同数目的决策树。例如,模型分片S0可以包括2700个决策树,模型分片S1可以包括3400个决策树,等等。在一个实现中,每个模型分片S0,S1,S2,...,SN-1包括小于或等于加速组件存储器的总量的决策树数据量。例如,模型分片S0可以包括3.85MB的决策树数据,模型分片S1可以包括3.97MB的决策树数据,等等。
[0302] 因为存储器堆栈5108具有高存储器带宽,所以可以在很短的时间段内从存储器堆栈5108将每个模型分片S0,S1,S2,...,S10加载到加速组件裸片5106。例如,如果存储器堆栈5108具有200GB/秒的存储器带宽,并且每个模型分片S0,S1,S2,...,S10具有4MB或更少的决策树数据量,则可以在20μs或更少的时间内从存储器堆栈5108将每个模型分片S0,S1,S2,...,S10加载到加速组件存储器5112。
[0303] 图53是示出图51的加速组件5102的一种操作方式的过程5302。在块5304中,加速组件5102接收并将M个已缓冲评分请求R0,R1,R2,...,RM缓冲在存储器堆栈5108中。每一个评分请求R0,R1,R2,...,RM包括模型分片S0,S1,S2,...,S10中的针对决策树的输入值集。在块5306中,加速组件5102将第一模型分片(例如,S0)从存储器堆栈5108复制到加速组件存储器5112。在块5308中,加速组件5102使用加载的模型分片S0来处理M个评分请求R0,R1,R2,...,RM(例如,通过将来自存储器堆栈5108的针对M个评分请求R0,R1,R2,...,RM中的每一个评分请求的每个输入值集合复制到加速组件存储器5112、用输入值的集合填充模型分片S0中的决策树和在树中行进)。
[0304] 在块5310中,加速组件5102确定在存储器堆栈5108中是否有更多模型分片可用。如果更多请求可用,则在块5310中,加速组件5102将来自存储器堆栈5108的下一个模型分片(例如,S1)复制到加速组件存储器5112,并且处理流程返回到块5308。相反,如果在存储器堆栈5108中不再有请求可用,则处理5302结束。本领域的普通技术人员将会理解,可以针对M个评分请求的下一个集合重复过程5302。
[0305] 图54示出了包括九个节点N0,N1,...,N8和十个叶子L0,L1,...,L9的示例决策树5402。虽然第一个节点N0总是被评估,但在树很靠下的节点被评估的可能性较低。例如,评估节点N1的概率为50%,评估节点N2和N3中任一个的概率为25%等等。评估决策树5402的部分5404或部分5406的概率仅为6.25%。因此,不是将整个决策树加载到加速组件中,其中许多部分可能永远不会被评估,而是将决策树的第一(顶部)部分加载到加速组件中并进行评估,并且随后基于评估第一部分的结果只加载那些实际上可能需要的部分。
[0306] 例如,如果部分5408被加载到加速组件中,则仅在评估了顶部部分5408的节点N4(或节点N2)的情况下才将部分5404加载到加速组件中,并且仅在评估了顶部部分5408的节点N5(或节点N3)的情况下将部分5406加载到加速组件中。通过将该原理应用于模型中的所有决策树,具有极大数量的树的模型可以通过如下方式由加速组件来评估,通过将模型的所有树的顶部部分加载到加速组件中、用每个顶部部分处理请求(例如R0)、仅基于顶部部分的处理根据需要加载每棵树的较低部分的下一集合、用每个较低部分处理该请求、并且重复直到所有树已经被评估为止。
[0307] 可以在包括使用裸片堆栈技术的高带宽低功率存储器的加速组件上实现的高带宽服务的另一示例是深度神经网络(DNN)。已经示出DNN在诸如图像和语音识别之类的人类识别任务上达到了最先进的精确度。当今最先进的DNN算法的性能瓶颈极大受到商用硬件容量的影响。
[0308] 图55图示出了示例DNN 5502,其包括具有神经元之间的连接的多层(例如,层i-1和层i)的神经元(被图形地描绘为圆圈)。每个神经元由具有自适应权重(w00,w01,...)的一组输入边缘(连接到前驱层的神经元)来表征,这些是通过学习算法调整的数字参数。术语“深度学习”通常是指包含大量层的DNN的训练。
[0309] DNN训练的一个实现使用后向传播算法,其中使用标记的训练数据以迭代的方式更新DNN的权重。后向传播的目标是采用梯度下降的方法来使关于网络中的所有权重的误差函数最小化。使用梯度下降法,DNN中的所有权重使用为每个神经元计算出的梯度而被递增地更新。
[0310] 使用大量预先标记的输入数据(表示已知数据)迭代地重复该过程,直到DNN收敛于可以用于进行预测(例如,当模型被部署时)的训练权重集合上。对于大型模型,当以软件实现时后向传播是非常耗时的(例如,花费数周或数月以收敛)。因此,DNN是高带宽服务的一个示例,可以在包括使用裸片堆栈技术的高带宽低功率存储器的加速组件上实现该高带宽服务。
[0311] 可以将使用后向传播的DNN训练的过程划分成多个阶段:(1)通过DNN前向传播一个或多个输入激活以生成输出激活(预测);(2)经由从输出层输入层的“误差”的后向传播,计算针对DNN中的每个神经元的梯度;(3)使用梯度来更新在每个神经元处的权重;(4)重复步骤(1)至(3)直到权重收敛。
[0312] 在梯度下降中,若干选择可用于选择每次迭代使用的多个输入。第一种方法,批量梯度下降,在权重更新之间的每次迭代中使用所有可用的训练数据(例如,预先标记的图像)。这种方法通常非常昂贵并且在实践中不被使用。第二种方法,即随机梯度下降,通过从权重更新之间的语料库中选择一个随机示例来表示另一个极端。第三种方法,即小批量梯度下降,使用语料库的随机子集来执行梯度计算,随后进行单个权重更新。
[0313] 实际上,小批量梯度下降在训练精确度和训练时间之间取得了良好的平衡。此外,通过允许并行计算针对不同输入的梯度(而无连续依赖于权重更新),小批量处理促进了以硬件实现可用并行性。在一些实现中已经发现,在保持训练时间可管理的同时,256个值对于实现良好的精确度是有效的。本说明书的剩余部分将假定小批量梯度下降用于训练。
[0314] 图55图示了通过单个层前向传播单个训练输入的实现。在这个示例中,输入激活由层i-1中的四元组矢量[x0,x1,x2,x3]T表示。层i中的每个神经元使用激活函数来处理层i-1的输入矢量,并生成层i的输出激活。通常,激活函数是乘积的加权和,取每个神经元的输入激活,并且利用可调权重参数对其进行缩放。通过诸如双曲正切、S形或其他非线性可微函数之类的非线性可微函数对点积进行进一步转换。
[0315] 在图53中所描绘的实现中,层i的输出激活y0,y1,y2,y3被表达为:
[0316] y0=f(x0w00+x1w01+x2w02+x3w03)
[0317] y1=f(x0w10+x1w11+x2w12+x3w13)
[0318] y2=f(x0w20+x1w21+x2w22+x3w23)
[0319] y3=f(x0w30+x1w31+x2w32+x3w33)
[0320] 前向传播可以被数学地表达如下:层i的输出激活(在非线性化之前)等于针对层i的权重矩阵乘以来自层i-1的输入激活矢量:
[0321]
[0322] 因此,大量的计算是在计算点积中。在小批量梯度下降中,前向传播的每次迭代可以处理多个输入激活矢量。在这种情况下,上面示出的数学表达式一般化到矩阵-矩阵乘法、随后是非线性变换。
[0323] 在前向传播之后,结果是最终输出层中的输出激活集合。在后向传播中,这些输出激活被用来计算通过网络向后传播的输出“误差”,以计算每个神经元的梯度。在图56中描绘了后向传播的示例实现。
[0324] 如图56中所图示,误差以与前向传播类似的方式向后传播。一个不同之处在于:误差函数将乘积的加权和与导数项中使用的原始输入激活作为输入,如下:
[0325] γ00=h′(x00)×差错的加权和(层i)
[0326] γ01=h′(x01)×差错的加权和(层i)
[0327] γ02=h′(x02)×差错的加权和(层i)
[0328] γ03=h′(x03)×差错的加权和(层i)
[0329] 其中h′()是导数函数。
[0330] 例如,如果前向传播中的非线性可微函数是S形函数,则在层i-1处的误差可以被表达为:
[0331] γ00=x00(1-x00)×(γ10w00+γ11w10+γ12w20+γ13w30)
[0332] γ01=x01×(1-x01)×(γ10w01+γ11w11+γ12w21+γ13w31)
[0333] γ02=x02×(1-x02)×(γ10w02+γ11w12+γ12w22+γ13w32)
[0334] γ03=x03×(1-x03)×(γ10w03+γ11w13+γ12w23+γ13w33)
[0335] 后向传播可以被数学地表达如下:
[0336]
[0337] 也就是说,转置权重矩阵(层i)乘以输入误差矢量(层i)等于输出误差矢量(层i-1)(在乘以导数之前)。
[0338] 后向传播因此可以被类似地表达为矩阵-矢量乘法,其吸收了乘以误差矢量的、并通过在前向传播期间计算出的原始激活来缩放的转置权重矩阵。如前所提及,小批量的使用将这种操作一般化到矩阵-矩阵乘法。
[0339] 一旦针对每个神经元计算出误差,则更新每个神经元的权重。在梯度下降中,重量更新由以下给出:w′ij=wij-μγijxij
[0340] 其中μ是表示DNN的学习速率的参数。
[0341] 如上所述,前向传播和后向传播阶段需要矩阵-矩阵和矩阵-矢量乘法运算符的实质性使用。在一个实现中,在包括诸如如上所述的裸片堆栈技术的高带宽低功率存储器的加速组件上实现DNN的前向传播和后向传播阶段。
[0342] 图57图示出了被配置为执行DNN的前向传播和后向传播阶段的加速组件5702的实现。加速组件5702包括被布置在中介器5710上的加速组件裸片5706和存储器堆栈5708。
[0343] 加速组件裸片5706包括耦合到网络组件5722和控制器组件5724的神经引擎(5712,5714,5716,...,5718,5720)的并行阵列。如下面更详细描述的,每个神经引擎(5712,5714,5716,...,5718,5720)包括用于实现前向传播和后向传播阶段的逻辑。在一个实现中,每个神经引擎(5712,5714,5716,...,5718,5720)包括用于计算点积、导数、误差和非线性函数(例如,S形、双曲线正切等)的逻辑。
[0344] 在前向传播或后向传播中,加速组件5702一次处理DNN的一个层(例如,层i-1,层i,...)。控制器组件5704处理来自主机组件的命令,其允许在运行时配置诸如神经元的数量或每个神经元的权重之类的参数。控制器组件5704还向神经引擎(5712,5714,5716,...,5718,5720)发出命令以触发层计算的开始,并请求计算结果。
[0345] 执行层计算所需的权重矩阵经常使加速组件存储器(例如,块RAM)的可用量相形见绌。例如,在目标为ImageNet-22K的示例深度学习模型中,单在输出层中就可以使用高达250MB的权重。
[0346] 为了在硬件中处理此情况,高带宽低功率存储器堆栈5706包括DRAM通道(5726,5728,5730,...,5732,5734)的并行阵列以提供对可使用来存储权重矩阵、激活和误差的高带宽存储器的访问。使用网络组件5722将权重矩阵、激活和误差从这些并行通道流式传输到并行神经引擎(5712,5714,5716,...,5718,5720),所述网络组件5722可以实现纵横或2-D网格网络或其他类似的网络。
[0347] 图58示出了神经引擎5802的实现,其包括第一存储器5804、第二存储器5806、第三存储器5808、导数组件5810、乘法-累加组件5812、非线性函数组件5814和第四存储器。第一存储器5804、第二存储器5806、第三存储器5808和第四存储器5816是块RAM或其他类似的存储器。第一存储器5804被用来缓冲输入激活数据,第二存储器5806被用来缓冲误差数据(在后向传播期间),第三存储器5808被用来缓冲权重数据,第四存储器5816被用来缓冲输出和临时数据。
[0348] 再次参照图57,为了执行前向传播或后向传播,控制器组件5704向神经引擎(5712,5714,5716,...,5718,5720)发出命令,以从DRAM通道(5726,5728,5730,...,5732,5734)中将输入激活、误差和权重的子集流式传输到并行神经引擎(5712,5714,5716,...,
5718,5720)的储存元件(5804,5806,5808)中。
[0349] 控制器组件5704可以使用各种策略来进行缓冲和并行化。在一个实现中,控制器组件5704在多个神经引擎(5712,5714,5716,...,5718,5720)上独立地对矩阵乘法进行平铺(tile)。每个神经引擎(5712,5714,5716,...,5718,5720)读入权重矩阵、输入激活和误差的子集,并且独立于其他神经引擎(5712,5714,5716,...,5718,5720)执行本地矩阵-矩阵。
[0350] 在另一实现中,控制器组件5704在矩阵的单个片上以同步方式操作神经引擎(5712,5714,5716,...,5718,5720)。在该实现中,权重被分布并固定在多个神经引擎(5712,5714,5716,...,5718,5720)上。然而,输入/激活是在它们被消耗的情况下以类似移位寄存器的方式被交换。不希望受到任何特定理论的束缚,相信这种实现可以将权重矩阵的重用量最大化。
[0351] 技术的说明性方面
[0352] 以下概要提供了本文所阐述的技术的说明性方面的非穷尽性列表。
[0353] 根据第一方面,提供了一种用于在加速组件上处理深度神经网络的方法。所述方法包括配置该加速组件以执行深度神经网络的前向传播和后向传播阶段。所述加速组件包括布置在集成电路封装中的加速组件裸片和存储器堆栈。所述存储器堆栈具有大于约50GB/秒的存储器带宽和大于约20MB/秒/mW的功率效率。
[0354] 根据第二方面,所述加速组件包括现场可编程门阵列设备、大规模并行处理器阵列设备、图形处理单元和专用集成电路中的一个或多个。
[0355] 根据第三方面,所述存储器堆栈包括一个或多个存储器裸片。
[0356] 根据第四方面,所述加速组件还包括中介器,所述加速组件裸片和所述存储器堆栈被布置在所述中介器上。
[0357] 根据第五方面,所述存储器堆栈被布置在所述加速组件裸片上方。
[0358] 根据第六方面,配置所述加速组件包括利用包括用于实现所述前向传播和后向传播阶段的逻辑的多个神经引擎配置所述加速组件裸片。
[0359] 根据第七方面,所述神经引擎的每一个包括用于计算点积、导数、误差和非线性函数中的一个或多个的逻辑。
[0360] 根据第八方面,DNN包括多个权重、输入激活和误差,所述神经引擎中的每一个神经引擎包括储存元件,并且配置所述加速组件包括将所述权重、输入激活和误差存储在所述存储器堆栈中;并将所述权重、输入激活和误差流式传输到所述神经引擎的所述储存元件。
[0361] 根据第九方面,配置所述加速组件包括将所述权重的子集、输入激活和误差流式传输到所述神经引擎的所述储存元件。
[0362] 根据第十方面,提供了一种用于处理深度神经网络的系统。所述系统包括加速组件,所述加速组件包括被布置在集成电路封装中的加速组件裸片和存储器堆栈。所述存储器堆栈包括大于约50GB/秒的存储器带宽和大于约20MB/秒/mW的功率效率。所述系统还包括配置在加速组件裸片上的多个神经引擎。所述神经引擎包括实现所述深度神经网络的前向传播和后向传播阶段的逻辑。
[0363] 根据第十一方面,加速组件包括现场可编程门阵列设备、大规模并行处理器阵列所述、图形处理单元和专用集成电路中的一个或多个。
[0364] 根据第十二方面,所述存储器堆栈包括一个或多个存储器裸片。
[0365] 根据第十三方面,所述加速组件还包括中介器,所述加速组件裸片和所述存储器堆栈被布置在所述中介器上。
[0366] 根据第十四方面,所述存储器堆栈被布置在所述加速组件裸片上方。
[0367] 根据第十五方面,所述神经引擎中的每一个神经引擎包括用于计算点积、导数、误差和非线性函数中的一个或多个的逻辑。
[0368] 根据第十六方面,DNN包括多个权重、输入激活和误差。所述神经引擎的每一个包括储存元件,并且加速组件被配置为将所述权重、输入激活和误差存储在所述存储器堆栈中,并且将所述权重、输入激活和误差流式传输到所述神经引擎的所述储存元件。
[0369] 根据第十七方面,所述加速组件被配置为将所述权重、输入激活和误差的子集流式传输到所述神经引擎的所述储存元件。
[0370] 根据第十八方面,提供了一种用于处理深度神经网络的系统。所述系统包括加速组件,所述加速组件包括被布置在集成电路封装中的加速组件裸片和存储器堆栈。所述存储器堆栈包括大于约50GB/秒的存储器带宽和大于约20MB/秒/mW的功率效率。所述系统还包括被配置在所述加速组件裸片上的多个神经引擎以及在所述存储器堆栈上的多个DRAM通道,所述DRAM通道的每一个DRAM通道被耦合到所述神经引擎。所述神经引擎包括用于实现所述深度神经网络的前向传播和后向传播阶段的逻辑。
[0371] 根据第十九方面,所述加速组件包括现场可编程门阵列设备、大规模并行处理器阵列设备、图形处理单元以及专用集成电路中的一个或多个。
[0372] 根据第二十方面,所述存储器堆栈包括一个或多个存储器裸片。
[0373] 尽管已经用结构特征和/或方法行为特定的语言描述了主题,但是应当理解的是,所附权利要求中限定的主题不一定限于上述具体特征或行为。相反,上述的具体特征和行为作为实现权利要求的示例形式而被公开。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈