服务器上深度神经网络划分的制作方法

文档序号:13741972阅读:293来源:国知局
服务器上深度神经网络划分的制作方法



背景技术:

计算行业寻求提高软件驱动的计算设备的速度和效率。软件驱动的计算设备采用以传统的时间方式处理机器可读指令的一个或多个中央处理单元(cpu)。硬件加速部件(例如,现场可编程门阵列(fpga))已用于补充由软件驱动的计算设备执行的处理。



技术实现要素:

根据第一方面,提供了一种用于在服务器部件上实现深度神经网络的方法,所述服务器部件包括具有cpu的主机部件和耦合到所述主机部件的硬件加速部件。所述深度神经网络包括多个层。所述方法包括:将所述深度神经网络划分为第一片段和第二片段,所述第一片段包括所述多个层的第一子集,所述第二片段包括所述多个层的第二子集;配置所述主机部件来实现第一片段;并且配置所述硬件加速部件来实现第二片段。

根据第二方面,提供了一种服务器部件,被配置为实现包括多个层的深度神经网络。该服务器部件包括具有cpu的主机部件,耦合到主机部件的硬件加速部件,以及控制器部件。控制器部件被配置为将深度神经网络划分为第一片段和第二片段,第一片段包括多个层的第一子集,第二片段包括多个层的第二子集,配置主机部件来实现第一片段,并配置硬件加速部件来实现第二片段。

根据第三方面,提供了一种用于在服务器部件上实现深度神经网络的方法,所述服务器部件包括具有cpu的主机部件和耦合到所述主机部件的硬件加速部件,所述深度神经网络包括多个线性层和多个卷积层。该方法包括配置主机部件来实现线性层,并配置硬件加速部件来实现卷积层。

上面概括的功能可以表现在各种类型的系统、设备、部件、方法、计算机可读存储介质、数据结构、图形用户界面演示、制品等中。

提供本发明内容是为了以简化形式介绍概念的选择;这些概念在下面的详细描述中进一步描述。本发明内容并不旨在识别所要求保护的技术方案的关键特征或必要特征,也不旨在用于限制所要求保护的技术方案的范围。

附图说明

图1示出了包括软件平面和硬件加速平面的数据处理系统的概况。

图2示出了图1的数据处理系统的操作的第一示例。

图3示出了图1的数据处理系统的操作的第二示例。

图4示出了图1的数据处理系统对应于数据中心的一个实现方式。

图5是图4的数据中心实现方式的更全面的描述。

图6示出了与图4所示相比实现服务器单元部件的替代方式。

图7示出了与图4所示相比实现服务器单元部件的另一方式。

图8示出了与图1所示相比的替代数据处理系统,例如,与图1所示相比它使用不同的网络基础设施。

图9是示出图1的数据处理系统的一种操作方式的流程图。

图10示出了用于管理图1的数据处理系统的管理功能的一种实现方式的概述。

图11提供了作为图10的管理功能的部件的服务映射部件的一种请求驱动的操作方式的概述。

图12-15示出了用于处理驻留在主机部件上的租户功能实例所做的对服务的请求的各个不同选项。

图16提供了图10的服务映射部件的另一背景相关的操作方式的概述。

图17-20示出了用于物理实现图10的管理功能的不同的相应架构。

图21-24示出了用于在图1的数据处理系统中配置硬件加速部件的各个不同的相应策略。

图25示出了实现图1的硬件加速部件的一种方式。

图26示出了包括分离的可配置域的硬件加速部件。

图27示出了用于执行在本地主机部件和关联的本地硬件加速部件之间的数据传输的功能。

图28示出了图25中引入的路由器的一种实现方式。

图29示出了图25中引入的传输部件的一种实现方式。

图30示出了图25中引入的3端口交换机的一种实现方式。

图31示出了图1中所示的主机部件的一种实现方式。

图32提供了用于生成和应用多部件服务的功能的概述;该功能反过来包括多部件管理部件。

图33示出了可以由图32的功能产生和应用的硬件加速部件的一种类型的集合。

图34示出了可以由图32的功能产生和应用的硬件加速部件的另一种类型的集合。

图35示出了产生多部件服务的功能解析部件的一种实现方式。

图36示出了使用硬件加速部件的集合实现的说明性多部件服务的更详细的示例。

图37示出了在图36的多部件服务的阶段之一中执行处理的功能。

图38示出了用于交换图36的硬件加速部件的集合中的模型的功能,以适应与不同模型相关联的请求。

图39是示出图35的功能解析部件的一种操作方式的流程图。

图40是示出实现多部件服务的硬件加速部件集合内的一个硬件加速部件的操作的流程图。

图41是示出在实现多部件服务的硬件加速部件的集合中处理故障的一种方式的流程图。

图42是描绘三维卷积神经网络的图。

图43a-43d示出了示例性卷积运算。

图44示出了被配置为实现卷积层的示例性加速部件。

图45示出了将输入数据分割成水平切片的示例。

图46是图44的加速部件的示例性功能单元的框图。

图47示出了被配置为实现多个卷积层的示例性加速部件。

图48是操作图47的加速部件的示例过程。

图49示出了被配置为实现多个卷积层的另一示例加速部件。

图50是描绘深度神经网络的图。

图51是在服务器单元部件上实现深度神经网络的框图。

图52是用于分割深度神经网络的示例过程。

在整个公开和附图中使用相同的标记来指代类似的部件和特征。系列100号码是指最初在图1中发现的特征,系列200号码是指最初在图2中发现的特征。系列300号码是指最初在图3中发现的特征,等等。

具体实施方式

本公开描述了包括硬件加速平面和软件平面的示例性数据处理系统。描述了包括软件平面中的软件部件和硬件加速平面中的硬件加速部件的示例性服务器部件。一个或多个服务器部件可以被配置为通过将深度神经网络划分为第一片段和第二片段来实现深度神经网络。第一片段可以在一个或多个软件部件上实现,而第二片段可以在一个或多个服务器部件上的一个或多个硬件加速部件上实现。

作为初步的问题,一些附图描述了一个或多个结构部件的上下文中的概念,被不同地称为功能、模块、特征、元件等。附图中示出的各种部件可以以任何方式通过任何物理和有形机构实现,例如,通过在计算机设备上运行的软件、硬件(例如,芯片实现的逻辑功能)等和/或其任何组合。

在一种情况下,在附图中将各个部件单独示出为不同的单元可以反映在实际实现方式中对应的不同物理和有形部件的使用。替代地或另外,附图中示出的任何单个部件可以由多于一个的实际物理部件来实现。替代地或另外,附图中的任何两个或更多个分离部件的描述可以反映由单个实际物理部件执行的不同功能。

其他附图以流程图的形式描述了这些概念。在这种形式中,某些操作被描述为构成以特定次序执行的不同框。这种实现方式是说明性的而非限制性的。本文中描述的某些框可以被分组到一起并且在单个操作中被执行,某些框可以被分解成多个部件框,并且某些框可以以与这里示出的次序不同的次序执行(包括执行这些框的并行方式)。流程图中示出的框可以通过任何物理和有形机制以任何方式实现,例如通过在计算机设备上运行的软件、硬件(例如,芯片实现的逻辑功能)等和/或其任何组合来实现。

就术语而言,短语“被配置为”包含任何种类的物理和有形功能可以被构建为执行识别出的操作的任何方式。该功能可以被配置为使用例如在计算机设备上运行的软件、硬件(例如,芯片实现的逻辑功能)等和/或其任何组合来执行操作。

术语“逻辑”包含用于执行任务的任何物理和有形的功能。例如,流程图中所示的每个操作对应于用于执行该操作的逻辑部件。可以使用例如在计算机设备上运行的软件、硬件(例如,芯片实现的逻辑功能)等和/或其任何组合来执行操作。当由计算设备实现时,逻辑部件表示作为计算系统的物理部分的电子部件,无论是如何实现的。

本文所述的任何存储资源或存储资源的任意组合可被视为计算机可读介质。在许多情况下,计算机可读介质代表某种形式的物理和有形实体。术语“计算机可读介质”还包括例如经由物理管道和/或空气或其他无线介质等发送或接收的传播信号。然而,特定术语“计算机可读存储介质”和“计算机可读介质设备”明确排除传播信号本身,同时包括所有其他形式的计算机可读介质。

以下解释可以将一个或多个特征标识为“可选的”。这种类型的陈述不应被解释为可被视为可选的特征的详尽指示。也就是说,其他特征可以被认为是可选的,虽然在文本中没有明确标识。此外,单个实体的任何描述并不意图排除使用多于一个这样的实体。类似地,对多个实体的描述并不意味着排除使用单个实体。此外,虽然描述可以将某些特征解释为执行标识的功能或实现标识的机制的替代方式,但是特征也可以以任何组合的方式组合在一起。最后,术语“示例性”或“说明性”是指潜在的许多实现方式中的实现方式。

图1示出了包括软件平面104和硬件加速平面106的数据处理系统102的概况。软件平面104包括软件驱动部件(在图1中每个都由符号“s”表示)的集合,而硬件加速平面106包括硬件加速部件(在图1中每个都由符号“h”表示)的集合。

例如,软件驱动的主机部件可对应于使用一个或多个中央处理单元(cpu)执行机器可读指令的服务器计算机。每个cpu又可以在一个或多个硬件线程上执行指令。另一方面,每个硬件加速部件可对应于用于实现功能的硬件逻辑,例如现场可编程门阵列(fpga)设备,大规模并行处理器阵列(mppa)设备,图形处理单元(gpu),专用集成电路(asic),多处理器片上系统(mpsoc),等等。

术语“硬件”加速部件还旨在广义地涵盖利用硬件设备来执行功能的不同方式,例如至少包括:a)至少一些任务以硬asic逻辑等实现的情况;b)至少一些任务以软(可配置)fpga逻辑等实现的情况;c)至少一些任务作为软件在fpga软件处理器覆盖等上运行的情况;d)至少一些任务在软处理器等的mppa上运行的情况;e)至少一些任务作为软件而在硬asic处理器等上运行的情况,等等,或其任何组合。类似地,数据处理系统102可以适应软件平面104中软件驱动设备的不同表现。

为了简化对硬件加速部件的重复参考,下面的解释将这些设备简称为“加速部件”。此外,下面的说明将呈现其中加速部件对应于fpga设备的主要示例,但是如上所述,可以使用其他类型的加速部件来构建数据处理系统102。此外,可以使用加速部件的异构集合来构建硬件加速平面106,包括具有不同的相应处理能力和架构的不同类型的fpga设备,fpga设备和其他设备的混合,等等。

主机部件通常使用时间执行范例来执行操作,例如通过使用其cpu硬件线程中的每一个来一个接一个地执行机器可读指令。相反,加速部件可以使用空间范例执行操作,例如通过使用大量的并行逻辑元件来执行计算任务。因此,与软件驱动的主机部件相比,加速部件可以在更短的时间内执行一些操作。在数据处理系统102的上下文中,与术语“加速部件”相关联的修饰词“加速”反映了其加速由主机部件执行的功能的潜力。

在一个示例中,数据处理系统102对应于包括多个计算机服务器的数据中心环境。计算机服务器对应于图1所示的软件平面104中的主机部件。在其他情况下,数据处理系统102对应于企业系统。在其他情况下,数据处理系统102对应于使用访问两个或更多个加速部件的至少一个主机部件的用户设备或器件等。这些示例是作为示例而非限制的方式引用的。其他应用也是可能的。

在一种实现方式中,数据处理系统102中的每个主机部件通过本地链路耦合到至少一个加速部件。处理设备的基本单元在这里被称为“服务器单元部件”,因为该设备可以被分组在一起并且作为数据处理系统102内的单个可服务单元来维护(虽然不一定如此)。服务器单元部件中的主机部件被称为“本地”主机部件,以将其与其他服务器单元部件相关联的其他主机部件区分开来。类似地,服务器单元部件的加速部件被称为“本地”加速部件,以将它们与和其他服务器单元部件相关联的其他加速部件区分开。

例如,图1示出了说明性的本地主机部件108,该本地主机部件108通过本地链路112(例如,如下所述,快速外围部件互连(pcie)链路)耦合到本地加速部件110。本地主机部件108和本地加速部件110的配对形成单个服务器单元部件的至少一部分。更一般地,图1示出了软件平面104通过许多个体本地链路耦合到硬件加速平面106,在图1中统称为localh-locals耦合114。

本地主机部件108还可以间接地与硬件加速平面106中的任何其他远程加速部件进行通信。例如,本地主机部件108可以经由本地加速部件110访问远程加速部件116。更具体地,本地加速部件110经由链路118与远程加速部件116通信。

在一种实现方式中,公共网络120被用于将软件平面104中的主机部件耦合到其他主机部件,并且将硬件加速平面106中的加速部件耦合到其他加速部件。也就是说,两个主机部件可以使用相同的网络120来彼此通信,两个加速部件也是如此。作为另一特征,软件平面104中的主机部件之间的交互独立于硬件加速平面106中的加速部件之间的交互。

这意味着,例如,从软件平面104内的主机部件的角度而言,两个或更多个加速部件可以以透明的方式彼此通信,而在主机部件的指导之外,并且主机部件没有“意识到”在硬件加速平面106中发生的特定交互。然而,主机部件可以通过发出对由硬件加速平面106托管的服务的请求来发起发生在硬件加速平面106中的交互。

根据一个非限制性实现方式,数据处理系统102使用以太网协议在公共网络120上传输ip分组。在一种实现方式中,服务器单元部件中的每个本地主机部件被给予一个单个物理ip地址。在同一服务器单元部件中的本地加速部件可以采用相同的ip地址。服务器单元部件可以以不同的方式确定输入的分组是去往本地主机部件而不是本地加速部件。

例如,去往本地加速部件的分组可以被制定为指定特定端口的用户数据报协议(udp)分组。另一方面,主机定义的分组不以这种方式制定。在另一种情况下,基于每个分组中的状态标志的值(例如,在分组的报头或主体中),可以区分属于硬件加速平面106的分组与属于软件平面104的分组。

鉴于上述特性,数据处理系统102可被概念化为形成共享相同物理通信链路的两个逻辑网络。与两个逻辑网络相关联的分组可以以上述方式通过它们各自的业务类别彼此区分。但是在其他实现方式中(例如,如以下关于图8所述),数据处理系统102可以使用两个不同的物理网络来分别处理主机到主机业务和硬件到硬件业务。此外,在使用公共网络120的实现方式中,主机到主机网络基础设施不需要完全与硬件到硬件网络基础设施相同。也就是说,这两种基础设施在大部分网络资源被共享的意义上是共同的,但并不一定它们全部的网络资源都被共享。

最后,管理功能122用于管理数据处理系统102的操作。如下面将更详细地阐述的,可以使用不同的控制架构在物理上实现管理功能122。例如,在一个控制架构中,管理功能122可以包括耦合到一个或多个全局管理部件的多个本地管理部件。每个本地管理部件和全局管理部件可以用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。

在示例中,管理功能122可以包括执行不同的相应逻辑功能(其可以以不同的方式物理地实现)的多个子部件。位置确定部件124例如基于存储在数据存储库126中的当前分配信息来识别数据处理系统102内的服务的当前位置。位置确定部件124可以用具有存储器存储指令的一个或多个计算机处理器来实现,或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。

如本文所使用的,服务指的是由数据处理系统102执行的任何功能。例如,服务可以对应于加密功能。另一服务可以对应于文档排序功能。另一服务可以对应于数据压缩功能。又一服务可以对应于图像分类功能。再一服务可能对应于神经网络功能,等等。

在操作中,位置确定部件124可以接收对服务的请求。作为响应,如果与服务相关联的地址存在于数据存储库126中,则位置确定部件124返回该地址。该地址可以标识托管所请求的服务的特定加速部件。

服务映射部件(smc)128将服务映射到特定的数据处理系统102部件。smc128可以用具有存储器存储指令的一个或多个计算机处理器,或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。smc128可以根据smc128接收到的调用smc128的操作的触发事件的类型以至少两种模式操作。在第一模式中,smc128处理由租户功能实例所做的对服务的请求。租户功能实例可以对应于在特定的本地主机部件上运行的软件程序,或者更具体地,对应于在虚拟机上执行的程序,该程序又与特定的本地主机部件相关联。该软件程序可能会在执行过程中请求服务。

smc128通过确定数据处理系统102中的适当部件(或多个部件)来处理该请求以提供服务。考虑可能的部件包括:本地加速部件(与请求起源的本地主机部件相关联);远程加速部件;和/或本地主机部件本身(在本地主机部件上将以软件实现该服务)。smc128基于一个或多个映射考虑(例如,所请求的服务是否属于线路速率服务或其他负载平衡和功率管理考虑)来作出其确定。

在另一操作方式中,smc128通常以后台和全局模式操作,基于数据处理系统102中的全局条件向数据处理系统102部件分配服务(而不是像在第一模式中那样处理来自租户功能实例的个体请求,或除了处理来自租户功能实例的个体请求)。例如,smc128可以响应于影响一个或多个服务的需求变化来调用其分配功能。在此模式中,smc128再次基于一个或多个映射考虑(例如与服务相关联的历史需求等)来作出其确定。

smc128可以与位置确定部件124交互以执行其功能。例如,当smc128试图确定由加速部件提供的已经分配的服务的地址时,smc128可以咨询数据存储库126。当smc128将服务映射到一个或多个加速部件时,例如通过存储与服务相关的那些加速部件的地址,smc128也可以更新数据存储库126。

虽然在图1中未示出,但smc128的子部件也管理多部件服务。多部件服务是由多个加速部件组成的服务。

为了方便起见,图1示出了与软件平面104和硬件平面106中的部件分离的管理功能122。但是如下面将要描述的,可以使用软件平面104和/或硬件平面106的资源来实现管理功能122的任何方面。当通过硬件平面106实现时,可以像任何服务一样加速管理功能。

图2示出了图1的数据处理系统102的操作的第一例子,对应于单个事务或单个事务的一部分。在操作(1)中,第一主机部件202在执行单个计算任务的过程中与第二主机部件204通信。第二主机部件204然后请求使用在硬件加速平面106中实现的服务(虽然第二主机部件204可能不“知道”服务在何处被实现,除了知道服务可以在指定的地址处被访问)。

在许多情况下,在单个加速部件上实现所请求的服务(虽然可能存在多个冗余的这种加速部件可供选择)。但是在图2的特定示例中,所请求的服务对应于遍布在加速部件的集合(或集群)上的多部件服务,其中每个加速部件执行服务的分配部分。图表结构可以指定个体加速部件在集合中被耦合在一起的方式。

在一些实现方式中,图表结构还标识至少一个头部部件。头部部件对应于接触点,数据处理系统102中的实体可以通过接触点与硬件加速平面106中的多部件服务交互。头部部件还可以用作由图表结构定义的处理管线中的初始处理阶段。在图2的特定情况下,假设加速部件206对应于本地加速部件206(其本地链接到本地主机部件204),并且加速部件208是多部件服务的头部部件。

在操作(2)和(3)中,请求本地主机部件204经由其本地加速部件206访问加速部件208。加速部件208然后执行其多部件服务的一部分以生成中间输出结果。在操作(4)中,加速部件208然后调用执行多部件服务的另一相应部分的另一加速部件210,来生成最终结果。在操作(5)、(6)和(7)中,硬件加速平面106通过上述相同的部件链但是以相反的方向将最终结果连续地转发回请求本地主机部件204。注意,包括限定返回路径的流操作的上述数据流操作是作为示例引用的,而非限制。其他多部件服务可以使用指定任何其他流路径的其他图表结构。例如,加速部件210可以将最终结果直接转发到本地加速部件206。

首先,注意到在硬件加速平面106中发生的操作是以在软件平面104中执行的操作的独立方式来执行的。换句话说,软件平面104中的主机部件不管理硬件加速平面106中的操作。然而,主机部件可以通过发布对由硬件加速平面106托管的服务的请求来调用硬件加速平面106中的操作。

其次,注意,硬件加速平面106以对请求主机部件透明的方式执行其事务。例如,本地主机部件204可能“不知道”它的请求如何在硬件加速平面中被处理,包括服务对应于多部件服务的事实在内。

第三,注意到在该实现方式中,软件平面104中的通信(例如,对应于操作(1))使用与硬件加速平面106中的通信(例如,对应于操作(3)-(6))相同的公共网络120进行。操作(2)和(7)可以通过本地链路进行,对应于图1所示的localh-locals耦合114。

图2所示的多部件服务类似于环,因为一系列加速部件在第一方向上被穿越以达到最终结果。最终结果然后通过相同系列的加速部件在相反方向被传播回头部部件。但是如上所述,其他多部件服务可以使用具有不同的相应流结构的加速部件的不同集合。

例如,图3示出了图1的数据处理系统102的操作的第二示例,与图1的示例相比,其采用不同的流结构。更具体地,在操作(1)中,本地主机部件(未示出)向其本地加速部件302发送请求。在这种情况下,假设本地加速部件也是服务的头部部件。在操作(2)中,头部部件然后可以将多个消息转发到多个相应的加速部件。接收到消息的每个加速部件可以与其他加速部件并行地执行多部件服务的一部分。(注意,图3可能仅表示更完整事务的一部分)。

此外,多部件服务不一定需要采用单个头部部件或任何头部部件。例如,多部件服务可以采用全部执行相同功能的加速部件的集群。数据处理系统102可以被配置为通过联系集群中的任意成员来调用这种多部件服务。该加速部件可以被称为头部部件,因为它是要被访问的第一部件,但是否则它没有特殊的状态。在其他情况下,主机部件可以最初将多个请求分发给加速部件的集合中的多个成员。

图4示出了代表图1的数据处理系统102的一种实现方式的数据中心402的一部分。特别地,图4示出了数据中心402中的一个机架。机架包括多个服务器单元部件(404、406、...、408),其中的每一个服务器单元部件都耦合到架顶式(tor)交换机410。tor指的是将机架中的部件耦合到数据中心的其他部分的交换机。其他机架虽然未示出,但可以具有相似的架构。机架是用于容纳或以其他方式分组多个处理部件的物理结构。

图4还示出了一个代表性服务器单元部件404的说明性组成。服务器单元部件404包括本地主机部件412,其包括一个或多个中央处理单元(cpu)(414、416、...)以及本地加速部件418。本地加速部件418经由本地链路420直接耦合到本地主机部件412。本地链路420例如可以被实现为pcie链路。本地加速部件418还通过网络接口控制器(nic)422间接耦合到本地主机部件412。

最后,本地加速部件418耦合到tor交换机410。因此,在该特定实现方式中,本地加速部件418表示本地主机部件412通过其与数据中心402中的其他部件(包括其他主机部件和其他加速部件)交互的唯一路径。除了其他效果之外,图4的架构允许本地加速部件418对从tor交换机410接收到(和/或发送到tor交换机410)的分组执行处理(例如,通过执行加密、压缩等),而不增加本地主机部件412执行的基于cpu的操作的负担。

本地主机部件412可以通过本地链路420或经由nic422与本地加速部件418通信。不同的实体可以在不同的相应环境下利用这两个路径。例如,假设在本地主机部件412上运行的程序请求服务。在一种实现方式中,假设本地主机部件412提供位置确定部件124和数据存储库126的本地实例。或者全局管理部件可以提供位置确定部件124及其数据存储库126。在任一情况下,本地主机部件412可以咨询数据存储库126以确定服务的地址。本地主机部件412然后可以使用标识的地址经由nic422和tor交换机410来访问该服务。

在另一实现方式中,假设本地加速部件418提供位置确定部件124和数据存储库126的本地实例。本地主机部件412可以经由本地链路420访问本地加速部件418。本地加速部件418然后可以咨询数据存储库126以确定服务的地址,本地加速部件418基于该地址经由tor交换机410访问该服务。访问该服务的其他方式也是可行的。

图5是图4的数据中心402的更全面的描述。数据中心402包括多个机架(502-512)。每个机架包括多个服务器单元部件。每个服务器单元部件反过来可以具有上面在图4中描述的架构。例如,代表性服务器单元部件514包括本地主机部件(s)516、网络接口控制器(n)518和本地加速部件(h)520。

图5中所示的路由基础设施对应于上面参考图1描述的公共网络120的一种实现方式。路由基础设施包括多个tor交换机522和更高级交换基础设施524。更高级交换基础设施524将tor交换机522连接在一起。更高级交换基础设施524可以具有任何架构,并且可以由任何路由协议驱动。在图5所示例子中,更高级交换基础设施524至少包括汇聚交换机526、核心交换机528等的集合。通过所示基础设施路由的业务可以对应于以太网ip分组。

图5中所示的数据中心402可以对应于在单个地理位置处提供的一组资源,或在多个地理位置处分布的分布式资源集合(例如,位于世界不同地区的多个个人贡献数据中心)。在分布式上下文中,管理功能122可以基于诸如以下的任何映射考虑,将工作从第一贡献数据中心发送到第二贡献数据中心:(1)确定加速部件在第二贡献数据中心处可用;(2)确定加速部件被配置为在第二贡献数据中心处执行期望的一个或多个服务;和/或(3)确定加速部件不仅被配置为执行期望的一个或多个服务,而且它们立即可用(例如,“在线”)以执行那些服务,等等。如这里所使用的,术语“全局”通常是指比与个体服务器单元部件相关联的本地域范围更广的任何范围。

通常注意到,虽然图4和5集中于使用相对广泛的数据处理系统(对应于数据中心),但是这里阐述的一些原理可以应用于较小的系统,包括单个本地主机部件(或其他类型的部件)耦合到多个加速部件(包括本地加速部件和一个或多个远程加速部件)的情况。这种更小的系统甚至可以被体现在用户设备或器件等中。用户设备可以具有使用本地加速资源和/或远程加速资源的选项。

与图4中所示的架构相比,图6示出了实现服务器单元部件602的替代方式。如图4的情况一样,图6的服务器单元部件602包括由一个或多个cpu(606、608、...)组成的本地主机部件604、本地加速部件610以及用于将本地主机部件604与本地加速部件610耦合的本地链路612。与图4的情况不同的是,服务器单元部件602实现网络接口控制器(nic)614,作为本地加速部件610的内部部件,而不是作为分离的部件。

与图4所示的架构相比,图7示出了实现服务器单元部件702的另一种方式。在图7的情况下,服务器单元部件702包括任何数目n的本地主机部件(704、...、706)以及任意数目m的本地加速部件(708、...、710)(服务器单元部件702的其他部件从图中被省略以便于解释)。

例如,服务器单元部件702可以包括耦合到两个本地加速部件的单个主机部件。这两个加速部件可以执行不同的相应任务。例如,可以使用一个加速部件来处理输出到其本地tor交换机的业务,而另一加速部件可以用来处理来自tor交换机的输入业务。另外,服务器单元部件702可以在任何本地加速部件(708、...、710)上加载任何服务。

还要注意的是,在上述示例中,服务器单元部件可以指部件的物理分组,例如,通过在数据中心的机架内形成单个可服务单元。在其他情况下,服务器单元部件可以包括一个或多个主机部件以及一个或多个加速部件,这些部件不必一起被容纳在单个物理单元中。在这种情况下,本地加速部件可以被认为是逻辑上与其相应的本地主机部件相关联,而不是物理上与其相应的本地主机部件相关联。

替代地或另外,本地主机部件以及一个或多个远程加速部件可以在单个物理部件(例如,单个mpsoc-fpga管芯)上实现。网络交换机也可以并入到该单个部件中。

图8示出了与图1所示相比的替代数据处理系统802。如图1的数据处理系统102一样,数据处理系统802包括软件平面104和硬件加速平面106、以及用于将本地主机部件连接到相应的本地加速部件的localh-locals耦合114。但是与图1的数据处理系统102不同,数据处理系统802包括用于将主机部件耦合在一起的第一网络804,以及用于将硬件部件耦合在一起的第二网络806,其中第一网络804至少部分地不同于第二网络806。

例如,第一网络804可以对应于图5中所示的数据中心交换基础设施的类型。第二网络806可以对应于用于将加速部件连接在一起的具有任何网络拓扑的专用链路。例如,第二网络806可以对应于p×r圆环形网络。在圆环形网络中的每个加速部件经由适当的电缆链路等耦合到东、西、北和南邻近的加速部件。可以替代地使用具有任何相应大小和纬度的其他类型的网络。

在其它情况下,由(例如,在单个管芯上实现的)单个处理部件提供的本地硬cpu和/或软cpu和/或加速逻辑可以经由不同网络耦合到其他处理部件上的(例如,如在其他管芯、板、机架等上实现的)其他元件。个体服务本身可以利用一个或多个递归的本地互连网络。

进一步注意,上面的描述是在发布由加速部件满足的服务请求的主机部件的上下文中构建的。但是替代地或另外,任何加速部件还可以请求可以被任何其他部件(例如,另一加速部件和/或甚至主机部件)满足的服务。smc128可以以与上述类似的方式来处理这样的请求。实际上,本文描述的某些特征可以自己在硬件加速平面上实现,而没有软件平面。

更一般而言,某些特征可以由请求可由第一部件满足的服务的任何第一部件和/或由相对于第一部件的一个或多个本地部件和/或由相对于第一部件的一个或多个远程部件实现。然而,为了便于解释,下面的描述将继续主要在提出请求的实体对应于本地主机部件的上下文中进行构建。

最后,其他实现方式可以采用不同的策略来将主机部件耦合到硬件部件,例如除了图8中所示的localh-locals耦合114以外。

图9示出了表示图1的数据处理系统102的一个说明性操作方式的过程902。在框904中,本地主机部件发出对服务的请求。在框906中,本地主机部件接收对该请求的回复,该回复可以标识服务的地址。在替代实现方式中,相关联的本地加速部件可以在从本地主机部件接收到请求之后执行框904和906。换句话说,本地主机部件或本地加速部件都可以执行地址查找功能。

在框908中,假设已经标识的地址属于由本地加速部件在本地实现的功能,则相关联的本地加速部件可以在本地执行服务。替代地或另外,在框910中,本地加速部件将请求路由到远程加速部件。如上所述,本地加速部件被配置为在不涉及本地主机部件的情况下执行到远程加速部件的路由。此外,多个主机部件在数据处理系统102中通过相同的物理网络彼此通信,多个加速部件同样如此。

数据处理系统102具有许多有用的特性。首先,数据处理系统102使用公共网络120(除了图8的示例之外),这避免了与用于将加速部件耦合在一起的定制网络相关联的费用。其次,公共网络120使得将加速平面添加到现有数据处理环境(例如数据中心)成为可能。并且在安装之后,可以有效地维护得到的数据处理系统102,这是因为它利用了在现有数据处理环境中找到的现有物理链路。第三,例如,鉴于本地加速部件可以与现有服务器单元部件集成的上述方式,数据处理系统102集成了加速平面106,而没有施加大的附加功率要求。第四,数据处理系统102提供了高效且灵活的机制,用于允许主机部件访问由硬件加速平面106提供的任何加速资源,例如,不需要将主机部件狭窄地配对到特定的固定加速资源,并且不会因管理硬件加速平面106本身而加重主机部件的负担。第五,数据处理系统102通过智能地将加速资源分散在硬件平面106内而提供了一种用于管理这些资源的有效机制,由此:(a)减少资源的过度利用和利用不足(例如,对应于“搁浅的容量”问题);(b)便于这些服务的消费者快速访问这些服务;(c)适应由某些消费者和/或服务所规定的加强处理要求,等等。上述效果是说明性的,而不是详尽的。数据处理系统102还提供了其他有用的效果。

图10示出了用于管理图1的数据处理系统102的管理功能122的一种实现方式的概述。更具体地说,图10描绘了由管理功能122(包括其主要引擎smc128)执行的功能的逻辑视图。不同的子部件对应于由管理功能122执行的不同主要功能。下面描述的图17-20显示了逻辑功能的各种可能的物理实现方式。

如上所述,位置确定部件124基于存储于数据存储库126中的当前分配信息来识别数据处理系统102内的服务的当前位置。在操作中,位置确定部件124接收对服务的请求。作为响应,它返回服务的地址(如果存在于数据存储库126内的话)。地址可以标识实现服务的特定加速部件。

数据存储库126可以维护将服务映射到地址的任何类型的信息。在图10所示的小节选中,数据存储库126将少量服务(服务w、服务x、服务y和服务z)映射到当前被配置为提供这些服务的加速部件。例如,数据存储库126指示用于服务w的配置映像当前安装在具有地址a1、a6和a8的设备上。地址信息可以用任何方式表达。这里,地址信息以高级的符号形式表示以便于解释。

在一些实现方式中,数据存储库126还可以可选地以任何方式存储表征每个当前服务到部件分配的状态信息。通常,服务到部件分配的状态信息指定了在数据处理系统102内处理在其分配的部件(或多个部件)上实现的分配服务的方式,例如通过指定其持久化级别,指定其访问权限(例如,“所有权”)等。在一个非限制性实现方式中,例如,可以将服务到部件分配指定为保留的或非保留的。

当执行配置操作时,smc128可以在确定是否适合于改变分配时考虑与分配相关联的保留/非保留的状态信息,例如以满足当前的对服务的请求,对一个或多个服务的需求的改变等。例如,数据存储库126指示具有地址a1、a6和a8的加速部件当前被配置为执行服务w,但是只有对加速部件a1和a8的分配被认为是保留的。因此,与其他两个加速部件相比,smc128将把对加速部件a6的分配视为用于重新分配(重新配置)更适当的候选。

另外或替代地,数据存储库126可以提供指示服务到部件分配是要由租户功能的所有实例共享还是专用于租户功能(或服务的一些其他指示的消费者)的一个或多个特定实例。在前者(完全共享)的情况下,租户功能的所有实例都会争夺由加速部件提供的相同资源。在后者(专用)情况下,只有那些与服务分配相关联的客户端才被允许使用分配的加速部件。图10以高级方式示出了在具有地址a3的加速部件上运行的服务x和y被保留以供租户功能的一个或多个指定实例使用,而租户功能的任何实例可以使用其他服务到部件分配。

smc128还可以与提供可用性信息的数据存储库1002交互。可用性信息识别具有空闲容量来实现一个或多个服务的加速部件池。例如,在一种使用方式中,smc128可以确定分配一个或多个加速部件作为功能的提供者是合适的。为此,smc128借助数据存储库1002来找到具有空闲容量来实现该功能的加速部件。然后,smc128将该功能分配给这些自由加速部件中的一个或多个。这样做会改变所选加速部件的可用性相关状态。

smc128还管理和维护数据存储库1002中的可用性信息。这样,smc128可以使用不同的规则来确定加速部件是可用还是不可用。在一种方法中,smc128可以将当前正被使用的加速部件视为不可用,而将当前未使用的加速部件视为可用。在其他情况下,加速部件可以具有不同的可配置域(例如,瓦片),其中一些当前正被使用,而另一些当前未被使用。

这里,smc128可以通过表达加速部件的当前未被使用的处理资源的一部分来指定该加速部件的可用性。例如,图10表示具有地址a1的加速部件的处理资源的有50%是可用的。另一方面,具有地址a2的加速部件是完全可用的,而具有地址a3的加速部件是完全不可用的。个体加速部件可以以不同的方式向smc128通知它们的相对利用水平,如下面将更详细描述的。

在其他情况下,smc128可以在注册加速部件是否可用时考虑对该加速部件的未决请求。例如,smc128可以指示加速部件不可用,因为它被安排为将服务输送给租户功能的一个或多个实例,即使它在当前时间可能不参与提供该服务。

在其他情况下,smc128也可以注册可用的每个加速部件的类型。例如,数据处理系统102可对应于支持具有不同物理特性的加速部件的异构环境。在这种情况下,可用性信息不仅可以指示可用处理资源的身份,还可以指示这些资源的类型。

在其他情况下,当将加速部件注册为可用或不可用时,smc128还可以考虑服务到部件分配的状态。例如,假设特定的加速部件当前被配置为执行特定的服务,并且此外假设分配已经被指定为保留的而不是非保留的。单独考虑加速部件的保留状态,而不管服务当前是否正被主动用于执行功能,smc128可以将该加速部件指定为不可用(或其一部分不可用)。实际上,至少在某些情况下,加速部件的保留状态因此用作防止smc128重新配置加速部件的锁。

现在参考smc128自身的核心映射操作,smc128响应于触发事件而将服务分配或映射到加速部件。更具体地,取决于已经接收到的触发事件的类型,smc128以不同模式操作。在请求驱动模式下,smc128通过租户功能处理对服务的请求。这里,每个触发事件对应于对至少部分驻留在特定本地主机部件上的租户功能实例的请求。响应于本地主机部件的每个请求,smc128确定实现该服务的适当部件。例如,smc128可以从以下中选择:本地加速部件(与提出请求的本地主机部件相关联)、远程加速部件或本地主机部件本身(在本地主机部件上将以软件实现服务)或其一些组合。

在第二后台模式中,smc128通过向数据处理系统102内的加速部件全局分配服务来操作,以满足数据处理系统102中的总体预期需求和/或满足其他系统范围目标和其他因素(而不是狭隘地集中于主机部件的个体请求)。这里,接收到的每个触发事件对应于数据处理系统102中作为整体的一些条件,其保证服务的分配(或重新分配),例如服务需求的变化。

然而,注意,上述模式不是相互排斥的分析领域。例如,在请求驱动模式下,smc128可能试图实现至少两个目标。作为第一主要目标,smc128将试图找到满足对服务的突出请求的加速部件(或多个部件),同时也整体满足与数据处理系统102相关的一个或多个性能目标。作为第二目标,smc128还可以可选地考虑其服务分配相对于租户功能的其他实例对该服务的未来使用的长期影响。换句话说,第二目标涉及恰好由租户功能的特定实例的请求所触发的后台考虑。

例如,考虑以下简化的情况。租户功能实例可以对服务进行请求,其中该租户功能实例与本地主机部件相关联。smc128可以通过配置本地加速部件而执行服务来响应该请求。在做出这个决定时,smc128首先可以试图找到满足租户功能实例的请求的分配。但是smc128也可以基于以下来进行分配:确定许多其他主机部件已经请求了相同的服务,并且这些主机部件大部分与已经生成当前服务请求的租户功能实例位于相同的机架中。换句话说,这个补充发现进一步支持将服务放置在机架内加速部件上的决定。

图10将smc128描绘为可选地包括执行不同的相应分析的多个逻辑部件。作为分析的第一可选部件,smc128可以使用状态确定逻辑1004来定义其正在进行的分配的状态,例如,保留的或非保留的、专用的或完全共享的,等等。例如,假设smc128从租户功能实例接收到对服务的请求。作为响应,smc128可以决定配置本地加速部件以提供服务,并且在该过程中将该分配指定为非保留的,例如在初始假设下,该请求可以是“一次性”请求服务。

在另一种情况下,假设smc128额外地确定相同的租户功能实例已经在短时间内重复地提出对相同服务的请求。在这种情况下,smc128可以做出与上述相同的分配决定,但是这次smc128可以将其指定为保留的。smc128还可以可选地将服务指定为仅专用于进行请求的租户功能。通过这样做,smc128可以使得数据处理系统102能够更有效地满足租户功能实例将来对该服务的请求。换句话说,保留状态可以减少smc128稍后从本地加速部件移动服务的可能性,其中本地加速部件中被本地主机部件大量使用。

另外,租户功能(或本地主机部件)的实例可以明确地请求授予对本地加速部件的保留和专用的使用。状态确定逻辑1004可以使用不同的特定于环境的规则来确定是否遵守该请求。例如,状态确定逻辑1004可以决定遵守该请求,只要没有接收到保证覆写请求的其他触发事件。例如,状态确定逻辑1004可以复写该请求,例如在其寻求完成另一请求时,所述另一请求基于任何特定于环境的原因被确定为紧迫性比比租户功能的请更大。

在一些实现方式中,注意,租户功能(或本地主机部件或服务的一些其他消费者)的实例可以独立地控制其本地资源的使用。例如,本地主机部件可以将利用信息传递到管理功能122,利用信息指示本地主机部件的本地加速部件不可用或不完全可用,而不管本地加速部件此刻是否实际上正在忙碌。这样做,本地主机部件可以防止smc128“窃取”其本地资源。不同的实现方式可以使用不同的特定于环境的规则来确定实体是否被允许以上述方式限制对其本地资源的访问,并且如果是,则在什么情况下。

在另一示例中,假设smc128确定对特定服务的需求普遍增加。作为响应,smc128可以找到对应于加速部件的“池”的规定数目的自由加速部件,然后将该加速部件池指定为用于提供特定服务的保留(但是完全共享)的资源。之后,smc128可以检测对特定服务的需求的普遍下降。作为响应,smc128可以例如通过将之前被注册为“保留的”的一个或多个加速部件的状态改变为“非保留的”,来减少保留的加速部件的池。

注意,上面描述的状态的特定维度(保留与非保留,专用与完全共享)通过说明而非限制的方式被引用。其他实现方式可以采用任何其他状态相关的维度,或者可以仅容纳单个状态指定(并且因此省略使用状态确定逻辑1004的功能)。

作为分析的第二部件,smc128可以使用尺寸确定逻辑1006来确定适合于提供服务的加速部件的数目。smc128可以基于与服务相关联的处理需求的考虑以及可用于满足那些处理需求的资源来做出这样的确定。

作为分析的第三部件,smc128可以使用类型确定逻辑1008来确定适合于提供服务的加速部件的类型。例如,考虑数据处理系统102具有各自的能力不同的加速部件的异构集合的情况。类型确定逻辑1008可以确定适合于提供服务的特定类型的加速部件中的一个或多个。

作为分析的第四部件,smc128可以使用布置确定逻辑1010来确定适合于解决特定触发事件的特定加速部件(或多个部件)。这个决定反过来可以具有一个或多个方面。例如,作为其分析的一部分,布置确定逻辑1010可以确定是否适合配置加速部件来执行服务,其中该部件当前未被配置为执行服务。

分析的上述方面以说明而非限制的方式被引用。在其他实现方式中,smc128可以提供分析的额外阶段。

通常,smc128基于一个或多个映射考虑来执行其各种分配确定。例如,一个映射考虑可以涉及在数据存储库1002中提供的历史需求信息。但是,注意,smc128不需要在所有情况下都执行多因素分析。在一些情况下,例如,主机部件可以对与单个固定位置相关联的服务进行请求,例如对应于本地加速部件或远程加速部件。在那些情况下,smc128可以简单地延迟到位置确定部件124以将服务请求映射到服务的地址,而不是以不同方式评估执行服务的成本和益处。在其他情况下,数据存储库126可以将多个地址与单个服务相关联,每个地址与可以执行服务的加速部件相关联。smc128可以使用任何映射考虑来将服务请求分配到特定地址,例如负载平衡考虑。

作为其操作的结果,smc128可以用将服务映射到可以找到那些服务的地址的信息(假设该信息已经被smc128改变)来更新数据存储库126。smc128还可以存储与新的服务到部件分配有关的状态信息。

为了配置一个或多个加速部件来执行功能(如果还没有如此配置的话),smc128可以调用配置部件1014。配置部件可以用具有存储器存储指令的一个或多个计算机处理器,或例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。在一个实现方式中,配置部件1014通过向加速部件发送配置流来配置加速部件。配置流指定要“被编程”到接收方加速部件中的逻辑。配置部件1014可以使用不同的策略来配置加速部件,下文阐述其中的几个。

故障监视部件1016确定先前配置的加速部件是否出现故障。故障监视部件1016可以用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。smc128可以通过用备用加速部件代替故障的加速部件来响应故障通知。

图11提供了当smc128应用于处理主机部件上运行的租户功能实例的请求的任务时的一种操作方式的概述。在所示场景中,假设主机部件1102实现租户功能的多个实例(t1、t2、...、tn)。租户功能的每个实例可以对应于至少部分地在主机部件1102上执行的软件程序,例如在使用主机部件1102(在其他可能的主机部件之中)的物理资源运行的虚拟机中。此外,假设租户功能的一个实例通过生成对特定服务的请求而开始图11中所示的事务。例如,租户功能可以执行照片编辑功能,并且可以调用压缩服务作为其整体操作的一部分。或者租户功能可以执行搜索算法,并且可以调用排名服务作为其整体操作的一部分。

在操作(1)中,本地主机部件1102可以将其对服务的请求发送到smc128。在操作(2)中,除了其他分析之外,smc128可以确定至少一个适当的部件来实现服务。在这种情况下,假设smc128确定远程加速部件1104是实现服务的最合适的部件。smc128可以从位置确定部件124获得加速部件1104的地址。在操作(3)中,smc128可以例如以与服务相关联的地址的形式将其应答传送给本地主机部件1102。在操作(4)中,本地主机部件1102可以经由其本地加速部件1106调用远程加速部件1104。处理租户功能的请求的其他方式是可能的。例如,本地加速部件1106可以查询smc128,而不是或除了本地主机部件102。

路径1108表示其中代表性加速部件1110(和/或其相关联的本地主机部件)将利用率信息传送到smc128的示例。利用率信息可以标识加速部件1110是否整体或部分可用或不可用。利用率信息还可以可选地指定加速部件1110拥有的可用的处理资源的类型。如上所述,还可以选择利用率信息以有目的地阻止smc128稍后利用加速部件1110的资源,例如通过全部或部分地指示资源不可用。

虽然未示出,但是任何加速部件也可以对smc128进行针对特定资源的定向请求。例如,主机部件1102可以明确要求使用其本地加速部件1106作为保留和专用资源。如上所述,smc128可以使用不同的特定于环境的规则来确定是否遵守这样的请求。

此外,虽然未示出,但是除主机部件之外的其他部件也可以提出请求。例如,硬件加速部件可以运行租户功能的实例,该租户功能的实例发布对可以由自身、另一硬件假设部件(或多个部件)、主机部件(或多个部件)等或其任何组合来满足的服务的请求。

图12-15示出了用于处理由驻留在主机部件上的租户功能对服务的请求的各个不同的选项。从图12开始,假设本地主机部件1202包括至少两个租户功能实例t1(1204)和t2(1206),这两者同时运行(但实际上,本地主机部件1202可以托管多个租户功能实例)。租户功能的第一实例t1需要加速服务a1来执行其操作,而租户功能的第二实例t2需要加速服务a2来执行其操作。

进一步假设本地加速部件1208例如经由pcie本地链路等耦合到本地主机部件1202。在当前时间,本地加速部件1208托管用于执行加速服务a1的al逻辑1210和用于执行加速服务a2的a2逻辑1212。

根据一个管理决定,smc128将t1分配给a1逻辑1210,并将t2分配给a2逻辑1212。然而,smc128的这个决定不是固定的规则。smc128可以基于多种因素作出决定,其中一些因素可能反映了相互矛盾的考虑。这样,基于其他因素(此时未描述),smc128可以选择以与图2所示不同的方式将工作分配给加速逻辑。

在图13的场景中,主机部件1302具有与上述相同的服务需求的租户功能的相同实例(1304、1306)。但是在这种情况下,本地加速部件1308仅包括用于执行服务a1的al逻辑1310。也就是说,它不再托管用于执行服务a2的a2逻辑。

响应于上述场景,smc128可以选择将t1分配给加速部件1308的a1逻辑1310。然后,smc128可以将t2分配给远程加速部件1314的a2逻辑1312,该远程加速部件1314已经被配置为执行该服务。再次,所示的分配在这里以说明的精神而非限制进行阐述。smc128可以基于输入考虑的另一组合来选择不同的分配。在一种实现方式中,本地主机部件1302和远程加速部件1314可以可选地压缩它们发送给彼此的信息,例如以减少带宽的消耗。

注意,主机部件1302经由本地加速部件1308访问a2逻辑1312。但是在另一种情况下(未示出),主机部件1302可以经由与加速部件1314相关联的本地主机部件(未示出)来访问a2逻辑1312。

图14呈现了另一种场景,其中主机部件1402具有与上述相同的服务需求相同的租户功能实例(1404、1406)。在这种情况下,本地加速部件1408包括用于执行服务a1的a1逻辑1410以及用于执行服务a3的a3逻辑1412。响应于上述场景,smc128可以使用(图10的)配置部件1006来重新配置加速部件1408,使得其包括a2逻辑1414而不是a3逻辑1412(如图14的底部所示)。然后,smc128可以将t2分配给a2逻辑1414。虽然未示出,但smc128可以替代地或另外决定重新配置任何远程加速部件以执行a2服务。

通常,smc128可以以完全或部分的方式执行配置以满足租户功能实例的任何请求。smc128通过重新配置由加速部件提供的所有应用逻辑来执行完全配置。smc128可以通过重新配置由加速部件提供的应用逻辑的一部分(例如,一个或多个瓦片)来执行部分配置,使其他部分(例如,一个或多个瓦片)在重新配置期间保持完整和可操作。smc128在其后台操作模式下的操作也是如此,如下所述。还应注意,在确定a3逻辑1412是否是用于重新配置的有效候选(例如,服务是否被认为是保留的,是否存在针对该服务的未决请求等)时,额外因素可能起作用。

图15呈现了另一种场景,其中主机部件1502具有与上述相同的服务需求相同的租户功能实例(1504、1506)。在这种情况下,本地加速部件1508仅包括用于执行服务a1的al逻辑1510。响应于上述场景,smc128可以将t1分配给a1逻辑1510。此外,假设smc128确定对于任何加速部件来执行a2服务是不可行的。作为响应,如果事实上本地a2软件逻辑1512在主机部件1502处可用,则smc128可以指示本地主机部件1502将t2分配给本地a2软件逻辑1512。smc128可以基于各种理由作出图15的决定。例如,smc128可以得出结论:硬件加速是不可能的,因为针对该服务当前不存在配置映像。或者配置映像可能存在,但是smc128推断在任何加速设备上没有足够的容量来加载和/或运行这样的配置。

最后,上面的例子是在主机部件上运行的租户功能实例的上下文中被描述的。但是如上所述,租户功能的实例可以更一般地对应于服务请求者,并且那些服务请求者可以在包括加速部件的任何部件上运行。因此,例如,在加速部件上运行的请求者可以生成对由一个或多个其他加速部件和/或由其自身和/或由一个或多个主机部件执行的服务的请求。smc128可以以上述任何方式处理请求者的请求。

图16提供了当在后台模式下操作时smc128的一种操作方式的概述。在操作(1)中,smc128可以接收发起smc128的操作的某种类型的触发事件。例如,触发事件可以对应于影响服务的需求改变等。在操作(2)中,响应于触发事件,smc128基于数据存储库1002中的一个或多个映射考虑因素和可用性信息,例如通过将服务分配给加速部件,来确定一个或多个服务到加速部件的分配。在操作(3)中,smc128执行其分配决定。作为该过程的一部分,smc128可以调用配置部件1014来配置已被分配为执行服务的加速部件,假设这些部件尚未被配置为执行服务。smc128还更新数据存储库126中的服务位置信息,并且如果合适的话,更新数据存储库1002中的可用性信息。

在图16的特定例子中,smc128分配加速部件的第一组1602来执行第一服务(“服务y”),并且分配加速部件的第二组1604来执行第二服务(“服务z”)。在实际实践中,分配的一组加速部件可以具有任意数目的成员,并且这些成员可以以任何方式分布在硬件加速平面106上。然而,smc128可以试图以特定方式将与服务相关联的加速部件分组,以实现令人满意的带宽和延迟性能(以及其他因素)。smc128可以在分配与单个多部件服务相关联的加速部件时应用进一步的分析,如也在下面更详细地描述的。

smc128还可以在后台模式下操作以将实施特定服务的一个或多个加速部件分配给租户功能的至少一个实例,而不必要求租户功能每次都对该特定服务提出请求。例如,假设租户功能的实例定期使用对应于图16中的“服务z”的压缩功能。smc128可以前摄地将一个或多个专用加速部件1604至少分配给租户功能的该实例。当租户功能需要使用服务时,其可以从与已经分配给它的加速部件1604相关联的可用地址池中抽取。可以相对租户功能的一组实例(而不是单个实例)执行相同的专用映射操作。

图17示出了图10的管理功能122的第一物理实现方式。在这种情况下,在单个全局管理部件(mg)1702上或多个全局管理部件(1702、…、1704)上提供管理功能122。全局管理部件(1702、…、1704)中的每一个可以用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。多个全局管理部件(1702、...、1704)在使用时可以提供冗余逻辑和信息,以实现期望的负载平衡和故障管理性能。在一种情况下,每个全局管理部件可以在可以对应于主机部件之一的计算机服务器设备或专用管理计算设备上实现。在操作中,任何个体主机部件(s)或加速部件(h)可以经由图1所示的公共网络120与全局管理部件交互。

图18示出了图10的管理功能122的第二物理实现方式。在这种情况下,每个服务器单元部件(例如代表性服务器单元部件1802)提供至少一个本地管理部件(ml)1804。例如,本地主机部件1806可以实现本地管理部件1804(例如,作为其监督功能的一部分),或者本地加速部件1808可以实现本地管理部件1804,或者服务器单元部件1802内的一些其他部件可以实现本地管理部件1804(或其某种组合)。

数据处理系统102还包括一个或多个全局管理部件(1810、…、1812)。全局管理部件(1810、…、1812)中的每一个可以用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。每个全局管理部件(1810、...、1812)可以以上面关于图17描述的方式提供冗余逻辑和信息。如上所述,管理功能122共同呈现数据处理系统102中的所有本地和全局管理部件。

图18的架构可以例如以下面的方式实现smc128的请求驱动方面。本地管理部件1804可以首先确定本地加速部件1808是否可以执行由租户功能请求的服务。在本地加速部件1808不能执行该任务的情况下,全局管理部件(mg)可以执行其他决定,例如识别远程加速部件来执行服务。另一方面,在图17的架构中,单个全局管理部件可以执行关于将请求映射到加速部件的所有决定。

此外,本地管理部件1804可以在任何基础上(例如定期和/或事件驱动的基础(例如,响应于利用率的改变))将利用率信息发送到全局管理部件。全局管理部件可以使用利用率信息来更新其在数据存储库1002中的可用性信息的主记录。

图19示出了图10的管理功能122的第三物理实现方式。在这种情况下,每个服务器单元部件都存储其自己的专用本地管理部件(ml)(其可以由本地主机部件实现为其监督功能的一部分,由本地加速部件实现,由某种其他本地部件实现或由其某种组合实现)。

例如,服务器单元部件1902提供本地管理部件1904以及本地主机部件1906和本地加速部件1908。类似地,服务器单元部件1910提供本地管理部件1912以及本地主机部件1914和本地加速部件1916。本地管理部件的每个实例存储关于相同部件的其他实例的冗余逻辑和信息。

可以使用已知的分布式系统工具来确保该部件的所有分布式版本包含相同的逻辑和信息,例如foresthill,maryland的apachesoftwarefoundation提供的zookeeper工具。(此外需注意,可以使用相同的技术来维持本小节中描述的其他示例中的冗余逻辑和信息)。管理功能122共同地呈现数据处理系统102中的所有本地管理部件,如前所述。也就是说,在这个示例性实现方式中没有中央全局管理部件。

图20示出了图10的管理功能122的第四物理实现方式。在这种情况下,管理功能122体现了各个管理部件的层级结构。例如,在一个仅代表性的结构中,每个服务器单元部件包括低级别本地管理部件(ml3)(其可以由本地主机部件、本地加速部件、某种其他本地部件或其某种组合来实现)。

例如,服务器单元部件2002提供低级别本地管理部件2004以及本地主机部件2006和本地加速部件2008。类似地,服务器单元部件2010提供低级别本地管理部件2012以及本地主机部件2014和加速部件2016。

该结构的下一管理层至少包括中级别管理部件2018和中级别管理部件2020。中级别管理部件2018和中级别管理部件2020中的每一个可以用具有存储器存储指令的一个或多个计算机处理器,或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。该结构的顶级别包括单个全局管理部件2022(或多个冗余的这种全局管理部件)。所示出的控制架构因此形成具有三个级别的结构,但是该架构可以具有任意数目的级别。

在操作中,低级别管理部件(2004、2012、...)处理直接影响与个体服务器单元部件相关联的资源的特定低级别管理决策。中级别管理部件(2018、2020)可以作出影响数据处理系统102的相关部分(例如单个机架或一组机架)的决策。顶级别管理部件(2022)可以作出广泛应用于整个数据处理系统102的全局决策。

图21-24示出了用于配置加速部件的不同的相应策略,对应于实现图10的配置部件1014的不同方式。从图21开始,全球管理部件2102可以访问提供一个或多个配置映像的数据存储库2104。每个配置映像都包含可用于实现对应服务的逻辑。全局管理部件2102可以通过将配置流(对应于配置映像)转发到加速部件来配置加速部件。

例如,在一种方法中,全局管理部件2102可以将配置流发送到与特定服务器单元部件2108相关联的本地管理部件2106。本地管理部件2106然后可以基于接收到的配置流来协调本地加速部件2110的配置。替代地,本地主机部件2112可以代替或除了本地管理部件2106外执行上述操作。

图22示出了配置加速部件的另一种策略。在这种情况下,全局管理部件2202向服务器单元部件2206的本地管理部件2204发送指令。作为响应,本地管理部件2204访问本地数据存储库2208中的配置映像,然后使用它来配置本地加速部件2210。替代地,本地主机部件2212可以代替或除了本地管理部件2204外执行上述操作。

图23示出了用于配置本地加速部件2302的另一种技术。在该方法中,假设加速部件2302包括应用逻辑2304,该应用逻辑2304反过来由当前模型2306管理(其中模型对应于以特定方式执行功能的逻辑)。进一步假设加速部件2302可以访问本地存储器2308。本地存储器2308存储与一个或多个其他模型(模型1、...、模型n)相关联的配置映像。

当被触发时,本地模型加载部件2310可以将与当前模型2306相关联的配置置换为与本地存储器2308中的另一模型相关联的配置。模型加载部件2310可以由加速部件2302本身、本地主机部件、本地管理部件等或其某种组合实现。在一种实现方式中,因为需要替换应用逻辑2304使用的一些逻辑而不是以大规模方式替换整个应用逻辑2304,所以可以在比整个应用逻辑2304的整体重新配置更少的时间内执行图23所示的配置操作。

最后,图24示出了具有支持部分配置的应用逻辑2402的加速部件。管理功能122可以通过将应用1(2404)与应用2(2406)分开配置来利用该功能,反之亦然。

图25示出了在图1的数据处理系统102中实现加速部件2502的一种方式,其可以在物理上被实现为fpga设备。注意,下面提供的细节是在说明而非限制的精神下提出的。其他数据处理系统可以使用具有与图25所示相比以一种或多种方式变化的架构的加速部件。此外,其他数据处理系统可以采用包括具有不同类型的加速部件的异构设计。

从高级别角度来看,加速部件2502可以被实现为具有不同功能层的层级结构。在最低级别,加速部件2502提供“外壳”,其提供在大多数应用场景中通常保持相同的基本接口相关部件。位于外壳内部的核心部件2504可以包括“内壳”和应用逻辑2506。内壳对应于除了应用逻辑2506之外的核心部件2504中的所有资源,并且表示在特定一组应用场景中保持相同的第二级别资源。应用逻辑2506本身表示最容易改变的最高级别的资源。然而请注意,加速部件2502的任何部件可以在技术上被重新配置。

在操作中,应用逻辑2506以与软件实现应用与其底层操作系统资源交互的方式类似的方式与外壳资源和内壳资源交互。从应用开发的角度来看,使用公共外壳资源和内壳资源可以使开发人员不必为他或她创建的每个应用重新创建这些公共部件。这种策略还降低了开发人员可能以导致整体数据处理系统102内的问题的方式来改变核心内壳或外壳功能的风险。

参考外壳,加速部件2502包括用于将加速部件2502耦合到网络接口控制器(经由nic接口2510)和本地架顶式交换机(经由tor接口2512)的桥2508。

桥2508支持两种模式。在第一节点中,桥2508提供数据路径,该数据路径允许来自nic或tor的业务流入加速部件2502,并且来自加速部件2502的业务流出到nic或tor。加速部件2502可以对其“拦截”的业务执行任何处理,例如压缩、加密等。在第二模式中,桥2508支持允许业务在nic和tor之间流动而无需进一步由加速部件2502处理的数据路径。在内部,桥2508可以包括缓冲接收到的分组的各种fifo(2514、2516)以及将分组路由到其期望目的地的各种选择器和仲裁逻辑。旁路控制部件2518控制桥2508是以第一模式还是以第二模式操作。

存储器控制器2520管理加速部件2502和本地存储器2522(例如dram存储器)之间的交互。存储器控制器2520可以执行错误校正作为其服务的一部分。

主机接口2524提供使加速部件2502能够与本地主机部件(图25中未示出)交互的功能。在一种实现方式中,主机接口2524可以使用快速外围部件互连(pcie),结合直接存储器访问(dma)来与本地主机部件交换信息。

最后,壳体还可以包括各种其他特征2526,例如时钟信号发生器、状态led、错误校正功能,等等。

在一种实现方式中,内壳可以包括路由器2528,用于在加速部件2502的各种内部部件之间以及在加速部件2502和外部实体(经由传输部件2530)之间路由消息。传输部件2530可以用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。每个这种端点都与相应的端口相关联。例如,路由器2528耦合到存储器控制器2520、主机接口2524、应用逻辑2506和传输部件2530。

传输部件2530制定用于传输到远程实体(例如远程加速部件)的分组,并从远程加速部件(例如远程加速部件)接收分组。

当启动时,3端口交换机2532通过在nic和tor之间以及在nic或tor与和加速部件2502相关联的本地端口之间路由分组来接管桥2508的功能。

最后,可选诊断记录器2534将关于由路由器2528、传输部件2530和3端口交换机2532执行的操作的事务信息存储在循环缓冲器中。例如,事务信息可以包括关于分组的起源和目的地ip地址、主机特定数据、时间戳等的数据。技术人员可以研究事务信息的日志,以试图诊断加速部件2502中的故障或次优性能的原因。

图26示出了包括分离的可配置域(2604、2606、...)的加速部件2602。配置部件(例如,图10的配置部件1014)可以配置每个可配置域而不影响其他可配置域。因此,配置部件可以配置一个或多个可配置域,而其他可配置域基于其各自的不受干扰的配置执行操作。

在一些实现方式中,图1的数据处理系统102可以动态地重新配置其加速部件以解决任何映射考虑。该重新配置可以在部分和/或全部服务的基础上执行,并且可以在周期性和/或事件驱动的基础上执行。实际上,在一些情况下,数据处理系统102可以看起来不断地通过重新配置其加速逻辑来使其本身适应数据处理系统102中的变化条件。

图27示出了本地主机部件2702可以经由图25所示的主机接口2524将信息转发到其本地加速部件2704的功能(例如,结合dma存储器传送使用pcie)。在一个非限制性协议中,在操作(1)中,主机逻辑2706将待处理的数据放置在与主机逻辑2706相关联的主存储器中的内核固定输入缓冲器2708中。在操作(2)中,主机逻辑2706指示加速部件2704取回数据并开始进行处理。然后,主机逻辑的线程进入休眠,直到其从加速部件2704接收到通知事件,或者其继续异步地处理其他数据。在操作(3)中,加速部件2704传输来自主机逻辑的存储器的数据,并将其放置在加速部件输入缓冲器2710中。

在操作(4)和(5)中,应用逻辑2712从输入缓冲器2710取回数据,进行处理以生成输出结果,并将输出结果放置在输出缓冲器2714中。在操作(6)中,加速部件2704将输出缓冲器2714的内容复制到主机逻辑的存储器的输出缓冲器中。在操作(7)中,加速部件通知主机逻辑2706数据已准备好供主机逻辑2706取回。在操作(8)中,主机逻辑的线程唤醒,并消耗输出缓冲器2716中的数据。主机逻辑2706然后可以丢弃输出缓冲器2716的内容,这允许加速部件2704在下一事务中重新使用输出缓冲器2716。

图28示出了图25中引入的路由器2528的一种实现方式。路由器包括:用于从相应端口接收消息的任意数目的输入单元(这里是四个,2802、2804、2806、2808),以及用于将消息转发到相应端口的输出单元(这里是四个,2810、2812、2814、2814)。如上所述,与端口相关联的端点包括存储器控制器2520、主机接口2524、应用逻辑2506和传输部件2530。交叉开关部件2818基于与消息相关联的地址信息将来自输入端口的消息转发至输出端口。交叉开关部件2818可以用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。更具体地,消息包括多个“微片(flit)”,路由器2528逐微片地发送消息。

在一个非限制性实现方式中,路由器2528支持用于在同一物理链路上发送不同类别的业务的多个虚拟信道(例如八个)。也就是说,路由器2528可以为应用逻辑2506实现多个业务的那些场景支持多个业务类别,并且这些服务需要在单独的业务类别上进行通信。

路由器2528可以使用基于信用的流技术来管理对路由器的资源(例如,其可用的缓冲空间)的访问。在该技术中,输入单元(2802-2808)向上游实体提供信用,信用对应于在其缓冲器中可用的确切数数目的微片。信用授予上游实体将其数据传输到输入单元(2802-2808)的权利。更具体地,在一种实现方式中,路由器2528支持可以在多个虚拟信道之间共享的“弹性”输入缓冲器。输出单元(2810-2816)负责跟踪其下游接收器中的可用信用,并且向请求将微片发送到给定输出端口的任何输入单元(2802-2808)提供授权。

图29示出了图25中介绍的传输部件2530的一种实现方式。传输部件2530可以提供注册接口以建立节点之间的连接。也就是说,每个这种连接是单向的,并将源部件上的发送队列链接到目的地部件上的接收队列。软件过程可以在传输部件2530可以发送或接收数据之前通过静态分配连接来建立连接。数据存储库2902存储控制连接状态的两个表-发送连接表和接收连接表。

分组处理部件2904处理从路由器2528到达的、去往远程端点(例如,另一加速部件)的消息。分组处理部件2904通过缓冲和分组化消息来这样做。分组处理部件2904还处理从一些远程端点接收到的去往路由器2528的分组。分组处理部件2904可以用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。

对于从路由器2528到达的消息,分组处理部件2904将每个消息请求与发送连接表中的发送连接表条目进行匹配,例如使用与该消息相关联的头部信息和虚拟信道(vc)信息作为查找项目,如由路由器2528提供的。分组处理部件2904使用从发送连接表条目取回的信息(例如序列号、地址信息等)来构造它发送到远程实体的分组。

更具体地,在一种非限制性方法中,分组处理部件2904将分组封装在udp/ip以太网帧中,并将它们发送到远程加速部件。在一种实现方式中,分组可以包括以太网报头,随后是ipv4报头,随后是udp报头,随后是传输报头(具体地与传输部件2530相关联),随后是有效载荷。

对于从网络到达的分组(例如,在3端口交换机2532的本地端口上接收到的),分组处理部件2904将每个分组与在分组报头中提供的接收可连接表条目进行匹配。如果存在匹配,则分组处理部件取回条目的虚拟信道字段,并使用该信息将接收到的消息转发到路由器2528(根据路由器2528使用的信用流技术)。

故障处理部件2906缓存所有发送的分组,直到它从接收节点(例如,远程加速部件)接收到确认(ack)。如果用于连接的ack没有在指定的超时时段内到达,则故障处理部件2906可以重传该分组。故障处理部件2906将重复这种重传达预定次数(例如128次)。如果在所有这些尝试之后分组仍保持未被确认,则故障处理部件2906可丢弃该分组并释放其缓冲器。故障处理部件2906可以用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。

图30示出了3端口交换机2532的一种实现方式。3端口交换机2532用于安全地将加速部件生成的网络分组插入(和移除)到数据中心网络,而不损害主机到tor网络业务。

3端口交换机2532连接到nic接口2510(对应于主机接口)、tor接口2512和与本地加速部件2502本身相关联的本地接口。3端口交换机2532可以被概念化为包括接收接口(3002、3004、3006),用于分别从主机部件、tor交换机接收分组,以及用于在本地加速部件处接收分组。3端口交换机2532还包括传输接口(3008、3010、3012),用于分别向tor交换机和主机部件提供分组,并接收由本地加速部件发送的分组。

分组分类器(3014、3016)例如基于由从主机部件或tor交换机接收到的分组指定的状态信息来确定所述分组的类别。在一种实现方式中,每个分组或者被分类为属于无损流(例如,远程直接存储器存取(rdma)业务)或者有损流(例如,传输控制协议/互联网协议(tcp/ip)业务)。属于无损流的业务不容许分组丢失,而属于有损流的业务可以容许一些分组丢失。

分组缓冲器(3018、3020)将输入分组存储在不同的相应缓冲器中,这取决于这些分组所属的业务类别。如果缓冲器中没有可用空间,则丢弃分组。在一种实现方式中,3端口交换机2532对由本地加速部件(经由本地端口)提供的分组不提供分组缓冲,这是因为应用逻辑2506可以通过使用“反压”来调节分组的流动。仲裁逻辑3022在可用分组中进行选择并发送所选分组。

如上所述,去往本地加速部件的业务被封装在固定端口号上的udp/ip分组中。3端口交换机2532检查输入分组(例如,从tor接收到的分组),以确定它们是否是正确端口号上的udp分组。如果是,则3端口交换机2532在本地rx端口接口3006上输出分组。在一种实现方式中,到达本地tx端口接口3012的所有业务从tortx端口接口3008被发送出,但是也可以将其发送到主机tx端口接口3010。此外,注意,图30指示加速部件2502拦截来自tor的业务,但不拦截来自主机部件的业务;但其也可以被配置为拦截来自主机部件的业务。

pfc处理逻辑3024允许3端口交换机2532将优先级流控制帧插入传输到tor或主机部件的业务流。也就是说,对于无损业务类别,如果分组缓冲器填满,则pfc处理逻辑3024将pfc消息发送到链路伙伴,请求暂停该类别上的业务。如果在主机rx端口接口3002或torrx端口接口3004上接收到无损业务类别的pfc控制帧,则3端口交换机2532将停止在接收到控制消息的端口上发送分组。

图31示出了主机部件3102的一种实现方式,其对应于图1所示的任一主机部件(s)。主机部件3102可以包括一个或多个处理设备3104,例如一个或多个中央处理单元(cpu),其中的每一个可以实现一个或多个硬件线程。主机部件3102还可以包括用于存储任何种类的信息(例如代码、设置、数据等)的任何存储资源3106。例如但不限于,存储资源3106可以包括任何类型的ram、任何类型的rom、闪存设备、硬盘、光盘等等中的任何一个。更一般地,任何存储资源都可以使用任何技术来存储信息。此外,任何存储资源都可以提供易失性或非易失性信息保留。此外,任何存储资源可以表示主机部件3102的固定或可移除部件。

在一种情况下,当处理设备3104执行存储于任何存储资源或存储资源的组合中的关联指令时,主机部件3102可以执行与本地租户功能相关联的任何操作。主机部件3102还包括用于与任何存储资源(例如,硬盘驱动机构、光盘驱动机构等)交互的一个或多个驱动机构3108。

主机部件3102还包括输入/输出模块3110,用于(经由输入设备3112)接收各种输入,并且用于(经由输出设备3114)提供各种输出。一个特定的输出机制可以包括呈现设备3116和关联的图形用户界面(gui)3118。主机部件3102还可以包括一个或多个网络接口3120,用于经由一个或多个通信管道3122与其他设备交换数据。一个或多个通信总线3124将上述部件通信地耦合在一起。

通信管道3122可以以任何方式被实现,例如通过局域网、广域网(例如互联网)、点对点连接等或其任何组合来实现。通信管道3122可以包括由任何协议或协议组合所管理的硬连线链路、无线链路、路由器、网关功能、名称服务器等的任何组合。

图32提供了用于生成和应用多部件服务的功能的概述。smc128包括多部件管理部件(mcmc)3202。mcmc3202与(图10的)配置部件1014交互以配置加速部件的集合(集群)。此后,mcmc3202管理所述集合。mcmc3202还存储有关集合中加速部件之间的连接的信息。例如,对于集合中的每个成员,mcmc3202可以存储其上游部件(如果有的话)及其下游部件(如果有的话)。

图32还示出了执行多部件服务的加速部件(3206、3208、...、3210)的一个说明性集合3204。加速部件(3206、3208、...、3210)的该特定集合3204被构造为环。但其他集合可能会展示其他流程结构。在集合3204内,加速部件3206表示多部件服务的头部部件。

mcmc3202还从上面在图10的上下文中介绍的故障监视部件1016接收故障报告。故障报告指示两个加速部件之间的链路是否发生故障,例如,它可能表现为无法通过链路交换消息。如果确认故障,则mcmc3202可以通过用适当配置的备用加速部件置换出一个或多个故障加速部件来修复多部件服务。为了执行该任务,mcmc3202可以从备用加速部件池3212(例如,包括加速部件(3214、3216、…、3218))中抽取。例如,假设集合3204中的加速部件3208发生故障,该加速部件执行多部件服务的特定部分。mcmc3202可以将该部件3208替换为池中已经配置为执行相同功能的另一部件。替代地,mcmc3202可以与配置部件1014交互,以在其分配到集合3204之前以动态方式配置备用部件。mcmc3202存储关于在任何给定时间可用的备用部件3212的信息,例如作为数据存储库1002中的可用性信息的一部分。

功能解析部件3220可以将功能解析为多个部分以创建多部件服务。功能解析部件3220然后可以将描述功能已经被解析的方式的指令转发到mcmc3202。mcmc3202使用这些指令来配置多部件服务中的加速部件(3206、3208、...、3210)。功能解析部件3220可以用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。

图33示出了可以使用图32的功能创建和应用的加速部件(3304-3314)的另一简化集合3302。集合3302包括头部部件3304,其分支成两条平行路径,包括由加速部件3306和3308组成的第一路径,以及由加速部件3310和3312组成的第二路径(虽然分支可以具有任意数目的部件)。

图34示出了可以由图32的功能生成和应用的加速部件的另一种类型的集合3402。这里,该图通常显示可以将加速部件排列以形成三维流结构。

更一般地,在一些情况下,多部件服务可以基于定义其加速部件之间的固定互连的图表结构。这种类型的多部件服务在被调用时将使用相同的一组加速部件,并以由其图表结构定义的固定方式在这些部件之间传递信息。在其他情况下,多部件服务可以基于一个或多个因素在运行时动态地改变其图表结构。这样,多部件服务可以针对不同的调用使用不同的加速部件,和/或可以针对不同的调用在加速部件之间采用不同的流。

例如,考虑执行图像识别的多部件服务。多部件服务可以调用加速部件的第一集合以处理第一类型的输入数据。多部件服务可以调用加速部件的第二集合以处理第二类型的输入数据。替代地或另外,多部件服务可以基于实时性能条件(例如,加速部件和/或链路的所经历的拥塞)动态地调用不同的加速部件和/或流。

图35示出了在上文介绍的图32的功能解析部件3220的说明性实现方式。功能解析部件3220可以包括可用资源分析部件(arac)3502,用于确定可用于构建多部件服务的加速部件3504的能力。例如,arac3502可以查询(图10的)数据存储库1002中的可用性信息,以确定可用的加速部件的数目、每个加速部件的总处理能力、以及当前可用于实现多部件服务的一部分的每个加速部件中的处理能力的量(和类型)。

功能分析部件3506可以研究将被划分为多个部分的功能本身。功能分析部件3506可以根据功能的性质以不同方式执行该操作。考虑涉及相对多次地重复相同的基本操作的功能。功能分析部件3506可以确定操作被执行的总次数以及与操作的每次迭代相关联的计算负载。功能分析部件3506可以用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。

功能分析部件3506还可以识别功能流内的自然转换。例如,功能可以由多个阶段来表征,并且这些阶段可以映射到多部件服务的相应部分,并且在这些部分之间具有转换。另外或者替代地,功能可以调用子例程的集合,并且这些子例程可以映射到多部件服务的相应部分,并且具有到子例程的转换和来自子例程的转换。

更一般地,功能可以包括任何类型的编程调用,例如,其中一个代码模块调用另一代码模块。功能解析部件3220可将这些调用视为划分功能的自然点,从而有效地用从一个加速部件到下一加速部件的调用来取代内部编程调用。此外,当功能具有多个部分或阶段时,功能分析部件3506还可以确定与每个部分相关联的处理工作量。

划分生成部件3508使用arac3502和功能分析部件3506的结果来生成该功能到待分配给相应分配部件的多个部分的分配。例如,考虑功能分析部件3506已经确定功能涉及重复特定任务一定次数(例如通过执行montecarlo模拟算法的一千万次迭代)的情况。划分生成部件3508可以将全部数目的任务分成适当大小的区块,以分配给可用的个体加速部件。更具体地,划分生成部件3508可以选择足以执行任务总数的多个加速部件,然后根据每个加速部件的特定可用容量为每个这样的加速部件分配适当的部分。划分生成部件3508还可以利用由功能分析部件3506识别的自然转换信息来选择特定的划分点,例如使得内部编程单元被重新调整为从一个加速部件到另一个的调用。划分生成部件3508可以用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。

在其他情况下,功能解析部件3220可以识别将功能划分为多个部分的有限数目的可能方式,并且可以识别影响其总体期望性的每个选项的结果特性(例如,在计算速度、成本、功耗、热分布和/或任何其它因素的方面)。功能解析部件3220然后可以选择最有利的划分选项。例如,功能解析部件3220可以将分数分配给反映其特性特征的加权组合的每个选项,然后选择具有最有利分数的选项。可以基于环境特定的考虑来选择权重。在其他情况下,功能解析部件3220可以应用已知的搜索算法(例如最佳优先)来在选项空间内找到合适的解决方案。

在另一种场景中,假设功能具有多个阶段,功能解析部件3220将多个阶段映射到不同加速部件。但假设一个阶段比其他阶段更劳动密集。为了避免与该阶段相关联的处理中的瓶颈,功能解析部件3220可以为该阶段分配并行操作的两个或更多个加速部件。

功能解析部件3220可以应用于不同的使用上下文中。在一个使用上下文中,功能解析部件3220提供了一个工具,开发人员可以与该工具交互以手动探索不同划分选项。

在另一使用上下文中,功能解析部件3220至少以部分自动化的方式进行操作。例如,假设数据处理系统102提供至少一个多部件服务。进一步假设,在任何给定的时间,多部件服务采用基于当前划分策略构建的加速部件的集合。在触发事件时,数据处理系统102可以动态地调用功能解析部件3220,以鉴于数据处理系统102中的普遍条件来确定当前划分策略是否继续适当。例如,功能解析部件3220可以在数据处理系统102的操作期间以周期性基础和/或以事件驱动基础执行该操作。如果策略不再合适,则功能解析部件3220动态地更新与多部件服务相关联的部分的分配,然后部署得到的新的多部件服务。

之前选择的划分策略可能由于一个或多个原因而不再合适。例如,数据处理系统102可以包含与最初遇到的可用资源不同的一组可用资源,这可以保证对多部件服务的重新划分。另外或替代地,数据处理系统102可能遇到实时性能约束,其可能在每次调用多部件服务时不同。

另外或替代地,待执行的任务本身的性质可以基于各种因素而改变。例如,如上所述,取决于馈送给多部件服务的输入信息的性质和/或客户要求的性质等等,多部件服务可以具有不同的处理要求。

为了引用特定场景,假设多部件服务对应于迭代算法,该迭代算法取决于馈送给它的输入数据的性质和/或基于顾客指定的置信度量度,来调用不同数目的重复性任务。为了解决这种情况,功能解析部件3220可以基于功能解析部件3220在处理数据集时遇到的实时数据处理需求来动态地重新分配算法。例如,考虑图33中所示的集合3302的类型。功能解析部件3220可以响应于功能解析部件3220遇到的实时处理需要,动态地减少或增加集合3302中的分支数目,以分别减少或增加其处理能力。

在一种情况下,功能解析部件3220对应于在一个或多个软件驱动的计算设备(例如,图1中所示的主机部件之一,或专用计算机服务器)上运行的程序。替代地或另外,即使没有来自软件平面104的帮助,加速部件(或多个部件)也可以实现功能解析部件3220的一些方面。例如,加速部件可以自动检测其本地处理或集合中其他加速部件的处理中的拥塞。

例如,加速部件可以确定无论出于何种原因都没有在指定的时间量内产生其输出结果。作为响应,加速部件可以自动生成其自身的重复版本,在其上并行操作以减轻拥塞。例如,再次参照图33,在检测到一个或多个分支或节点中的处理正变得拥塞或者以其他方式表现不佳时,加速部件可以自动增加或减少并行分支或单个节点的数目。

图36示出了使用加速部件的集合实现的说明性多部件服务的更详细的示例。总之,多部件服务为查询和文档的配对分配排名分数。排名分数定义了文档与查询的相关性。传统上,诸如任务完全通过应用由机器学习产生的模型在软件中执行。

在本实现方式中,主机部件3602可以通过向多部件服务的第一加速部件发送请求来调用服务,所述第一加速部件对应于头部部件3604。更具体地,图36通过在操作(1)中示出主机部件3602直接与头部部件3604交互而简化第一操作。更一般地,主机部件3602直接与其本地加速部件交互,所述本地加速部件可以对应于或可以不对应于头部部件3604。如果本地加速部件不是头部部件3604,则本地加速部件将请求转发给头部部件3604。

请求本身可以包括各种信息项目,例如描述在考虑中的文档内的查询术语的位置的一个或多个命中向量等。该请求还可以指定软件生成的特征的集合。出于任何特定于环境的原因(例如,因为这样的计算不能很好地映射到硬件资源),这些软件生成的特征是用软件(而不是硬件)来计算的。

头部部件3604执行两个角色。首先,头部部件3604计算数值分数,在此被称为“特征值”,其被用作下游加速部件的输入信息。例如,一个这样的特征值可以标识查询词在考虑中的文档中出现的次数。另一特征值可以是查询词以连续次序出现的次数,等等。头部部件3604还可以执行队列管理角色,下面将更详细地描述。

与由头部部件3604执行的计算相比,接下来的两个加速部件(3606、3608)执行更复杂的计算,这里称为“自由形式表达式”(ffe)。例如,如下面更详细描述的,ffe加速部件3606和3608可以使用由头部部件3604确定的特征值来执行算数运算。虽然在图3中示出了两个ffe加速部件3606和3608,但本领域的普通技术人员将理解,可以使用多于或少于两个ffe加速部件。序列中的下一加速部件3610压缩到目前为止计算出的特征值。

最后三个加速部件(3612、3614、3616)使用到目前为止计算出的所有特征值作为计分计算的输入信息,并且使用任何环境特定分数计算方程或算法,来生成最终排名分数。上述一系列加速部件然后将最终分数发送回头部部件3604,然后发送到主机部件3602。

一般来说,图36中的标号箭头反映了构成多部件服务的加速部件执行的操作序列。这里,流结构呈现为环形式,其中计算在环的第一方向上流动,并且最终结果在环的相反方向上流动。但再一次地,许多其他流结构是可行的。标签s1、s2、...、s6表示与图36所示的相应加速部件相关联的本地主机部件。

图37示出头部部件3604中用于计算特征值的功能。该功能包括流处理部件3702,用于将(例如,与命中向量相关联的)输入流分裂成多个子流3704。然后,特征状态机3706的集合在子流上并行操作以生成特征值。特征收集部件3708收集来自特征状态机的特征值,并使其可用于下游加速部件。特征收集部件3708可以用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似设备中实现的专用逻辑门阵列来实现。虽然未示出,但执行更高级特征计算的加速部件(35606、3608)也可以利用并行计算资源。

图38示出了可以由图36的头部部件3604实现的队列管理器部件3802。队列管理器部件3802通过改变图36的加速部件的集合所使用的模型来操作,以适应要求不同模型的请求。更具体地,从主机部件3602接收到的不同请求对应于以不同自然语言表达的查询。不同的语言又提示队列管理器部件3802加载不同的相应模型以处理不同的请求。例如,如果接收到的查询以法语表达,则队列管理器部件3802将尝试将法语相关模型加载到多部件服务中,来作用于该查询(如果该模型尚未被加载的话)。

更具体地,队列管理器部件3802可以在本地存储器3804中维护多个队列。每个队列与不同的相应模型相关联。例如,队列1与模型1关联,队列2与模型2关联,队列3与模型3关联,等等。

队列管理器部件3802包括请求处理部件3806和模型加载部件3808。模型加载部件3808可以用具有存储器存储指令的一个或多个计算机处理器或者例如在fpga、asic或其他类似的设备中实现的专用逻辑门阵列来实现。在操作中,请求处理部件3806例如通过将上述法语查询添加到法语队列来将每个输入请求添加到适当的队列。请求处理部件3806还基于任何策略在队列中进行选择以进行处理,例如通过在轮询基础、队列充满度基础、优先级基础等或其任何组合在队列中进行选择。这样的政策通常可以寻求在队列和请求之间的公平仲裁,同时也减少了选择新队列的频率(以及因此加载新模型的频率)。在切换到新队列(例如,其中具有z个未处理请求)时,模型加载部件3808将与该队列相关联的模型加载到加速部件3810中,然后将队列中的请求提交到加速部件3810以基于加载的新模型进行处理。

图39是示出图35的功能解析部件3220的一种操作方式的过程3902。在框3904中,功能解析部件3220接收关于要被划分的功能的信息,以及关于可用加速部件的信息。在框3906中,功能解析部件3220将该功能划分为两个或更多个部分,以分配给相应的加速部件。在框3908中,功能解析部件3220使用配置部件1006来配置具有在框3906中识别出的部分的加速部件(如果尚未配置的话)。在框3910中,功能解析部件3220确定数据处理系统102中的条件(和/或功能本身的性质)是否保证对功能进行重新划分。如果是,则过程2802返回到框3904。

图40示出了描述在实现多部件服务的加速部件集合内的特定加速部件的操作的过程4002。在框4004中,例如通过识别上游部件(如果有的话)和下游部件(如果有的话),加速部件接收标识特定加速部件与集合中的其他加速部件的连接的设置信息。在框4006中,特定加速部件从上游部件或者从请求使用多部件服务的请求主机部件接收输入信息。在框4008中,特定加速部件执行其分配的操作以生成输出信息。在框4010中,特定加速部件将输出信息发送到下游部件或请求主机部件。

图41是描述处理实现多部件服务的加速部件的集合中的故障的一种方式的过程4102。在框4104中,管理功能122确定加速部件是否故障。在框4106中,管理功能122用从备用加速部件池中选择的备用加速部件置换故障的加速部件。备用加速部件可能已经被配置为执行故障的加速部件的角色,或者可以将其配置为以按需方式执行该角色。

再次参考图1,如上所述,数据处理系统102可以被配置为执行各种服务。深度神经网络(dnn)是可以由数据处理系统102实施的一类服务。已经示出dnn在诸如图像和语音识别之类的人类识别任务方面达到了最新的准确度。

dnn可以包括多个不同的处理“层”,包括线性层(在本文中也被称为“完全连接层”)和卷积层。卷积层的输出可以利用子采样卷积输出的“池化”操作和非线性化步骤(例如应用于输出的s形或双曲正切)来处理。

在一种实现方式中,smc128将dnn划分为多个片段,将dnn层的第一片段(例如,一个或多个卷积层)映射到一个或多个加速部件,并且将dnn层的第二片段(例如完全连接层)映射到一个或多个主机部件。

如本文所使用的,“卷积神经网络”或(cnn)是指包括一个或多个卷积层的神经网络,并且还可以包括在一些或全部卷积层之后应用的池化和/或非线性化操作。

图42是描绘包括三个三维(3d)体积(4204、4206、4208)的3dcnn4202的简化图。每个3d体积(4204、4206、4208)表示层的输入,并且被转换成馈送给后续层的新的3d体积。在图42的示例中,存在两个卷积层4210和4212。体积4204(具有3个平面)是卷积层4210的输入,卷积层4210生成体积4206(具有h个平面),该体积4206又是卷积层4212的输入,卷积层4212生成体积4208(具有k个平面)。

在实现方式中,体积4204包括在d=3个平面(例如,r、g、b)中的图像数据,每个平面包括图像数据(例如,像素数据)的j×j阵列。本领域的普通技术人员将理解,可以使用多于或少于三个平面,每个平面不需要包括正方形阵列,并且可以使用除图像数据以外的数据。维度为lxlxd的3d输入体积4214与维度为lxlxd且步幅为s的h个权重内核(例如,权重内核4216)进行卷积。每个权重内核(例如,权重内核4216)横跨输入体积(例如,体积4204)以类滑动窗口方式位移(具有由步幅s限定的位移偏移)。在每次位移期间,3d权重内核中的每个权重与来自输入体积4214的重叠区域的相应的成对输入元素相乘并相加。

例如,图43a-43d示出了第一体积4302与第一组内核权重4304的示例性卷积,以生成第二体积4308的第一平面4308x(如图43d所示),并且还示出了第一体积4302与第二组内核权重4306的卷积,以生成第二体积4308的第二平面4308y。第一体积4302包括3个平面(4302r、4302g、4302b),每个平面包括9x9阵列的图像数据。第一组内核权重4304和第二组内核权重4308中的每一个具有维度3x3x3。第二体积4308包括h个平面(4308x、4308y、...、4308q),每个平面包括4x4阵列的数据。

如图43a所示,第二体积4308的第一平面4308x的数据值x0是通过将第一组内核权重4304中的每个权重与来自第一输入体积(4302r0、4302g0、4302b0)的重叠区域的每个成对输入元素相乘来确定的,如下:

第一组内核权重4304然后滑动第一体积4302的s=2个水平数据值。如图43b中所示,通过将第一组内核权重4304中的每个权重与来自第二输入体积(43021、4302g1、4302b1)的重叠区域的每个成对输入元素相乘来确定第二体积4308的第一平面4308x的数据值x1,如下:

该过程继续,第一组内核权重4304每次迭代滑动第一体积4302的s=2个水平值,直到第一平面4308x的第一行数据值(x0、x1、x3、x3)完成。第一组内核权重4304然后向下滑动s=2行并返回到第一体积4302的最左列,以计算第一平面4308x的第二行数据值(x4、x5、x6、x7)。该过程继续,直到第一平面4308x的全部四行数据值完成。

如图43c所示,通过将第二组内核权重4304中的每个权重与来自第五输入体积(4302r4、4302g4、4302b4)的重叠区域的每个成对输入元素相乘来确定第二体积4308的第二平面4308y的数据值y4,如下:

该过程继续,直到第二体积4308的第二平面4308y的全部数据值完成,并且还对h个权重体积中的每个继续以生成第二体积4308中的h个平面。再次参考图42,体积4206然后变成卷积层4212的输入层,卷积层4212包括k个权重体积以生成体积4208的k个平面。

如上所述,dnn经常被组织成交替的卷积和最大池化神经网络层,随后是多个完全连接的层。虽然dnn可完全以cpu上的软件实现,但是一个或多个dnn层可以在图1的数据处理系统102的一个或多个加速部件中实现。在一种实现方式中,smc128将dnn划分成多个片段,将dnn层的第一片段(例如,一个或多个卷积层)映射到一个或多个加速部件,并且将dnn层的第二片段(例如,完全连接层)映射到一个或多个主机部件。

图44示出了在加速部件4402上实现卷积层,加速部件4402可以在物理上实现为fpga设备。加速部件4402包括输入缓冲器阵列4404、内核权重缓冲器阵列4406、功能单元阵列4408和输出缓冲器阵列4410。加速部件4402执行输入数据的d个平面的输入体积与m组内核权重数据weights0、weights1、…、weightsm-1的卷积,以生成输出数据的m个平面的输出体积。

输入缓冲器阵列4404包括输入数据缓冲器ipd0、ipd1、...、ipdn-1,用于分别接收d维输入数据的n个切片slice0、slice1、...、slicen-1。为了简单起见,剩余的讨论将假设d=3。在实现方式中,输入数据被分割成输入数据的水平切片,例如图45中图示的。为了简化附图,示出了输入数据的3d体积的单个输入平面4502。

平面4502是输入数据的17x17阵列(数据值被描绘为符号,而实际输入数据值通常是数值)。输入平面4502被分割成n=8个切片slice0、slice1、...、slice7,每个切片包括3x3x17的输入数据阵列(用于3d体积)。在实现方式中,每个切片与前一切片重叠以说明滑动s(例如,在该示例中s=2)。再次参考图44,输入数据的3d切片slice0、slice1、...、slicen-1从片外存储器(例如,dram)分别被加载到输入数据缓冲器ipd0、ipd1、…、ipdn-1。本领域的普通技术人员将理解,输入平面4502的切片替代地可以是不重叠的。

内核权重缓冲器阵列4406包括m个权重数据缓冲器ibw0、ibw1、...、ibwm-1。在实现方式中,内核权重数据weights0、weights1、…、weightsm-1从片外存储器(例如,dram)分别被加载到权重数据缓冲器ibw0、ibw1、...ibwm-1中。在另一实现方式中,在运行时,内核权重数据weights0、weights1、…、weightsm-1分别被存储在权重数据缓冲器ibw0、ibw1、...ibwm-1中。每个内核权重数据weights0、weights1、…、weightsm-1对应于输出体积中的单独平面,并且具有维度lxlxd和步幅s。

功能单元阵列4408包括功能单元fu0,0、fu0,1、…、fun-1,m-1的nxm阵列。例如,第一列包括功能单元fu0,0、fu1,0、fu2,0、…、fun-1,0,第二列包括功能单元fu0,1、fu1,1、fu2,1、…、fun-1,1,等等。将列中的功能单元从上到下串联耦合。

输入数据缓冲器ipd0、ipd1、...、ipdn-1中的输入数据被馈送到功能单元阵列4408的对应行中的每个功能单元。也就是说,输入数据缓冲器ipd0中的输入数据被馈送到功能单元fu0,0、fu0,1、…、fu0,m-1的每一个中,输入数据缓冲器ipd1中的输入数据被馈送到功能单元fu1,0、fu1,1、…、fu1,m-1的每一个中,以此类推。

权重数据缓冲器ibw0、ibw1、...ibwm-1中的内核权重被馈送到对应列中的每个功能单元。也就是说,权重数据缓冲器ibw0中的内核权重被馈送到功能单元fu0,0、fu1,0、fu2,0、…、fun-1,0中的每一个,权重数据缓冲器ibw1中的内核权重被馈送到功能单元fu0,1、fu1,1、fu2,1、…、fun-1,1中的每一个,以此类推。

功能单元fu0,0、fu0,1、…、fun-1,m-1使用来自输入数据缓冲器ipd0、ipd1、...、ipdn-1的输入值和来自权重数据缓冲器ibw0、ibw1、...、ibwm-1的内核权重执行卷积操作。同一列中的功能单元针对输出体积的单个平面在输入数据的切片slice0、slice1、...、slicenn-1上执行n个并行卷积操作。也就是说,功能单元fu0,0、fu1,0、fu2,0、…、fun-1,0针对输出体积的第一平面对输入数据的所有n个切片slice0、slice1、...、slicenn-1执行卷积运算,功能单元fu0,1、fu1,1、fu2,1、…、fun-1,1针对输出体积的第二平面对输入数据的所有n个切片slice0、slice1、...、slicenn-1执行卷积运算,以此类推。

在同一行中的功能单元针对输出体积的所有m个平面对输入数据的单个切片(slice0、slice1、...、slicenn-1)执行m个并行卷积操作。也就是说,功能单元fu0,0、fu0,1、fu0,2、…、fu0,m-1针对输出体积的所有m个平面对输入数据的切片slice0上执行m个卷积运算,功能单元fu1,0、fu1,1、fu1,2、…、fu1,m-1针对输出体积的所有m个平面对输入数据的切片slice1上执行m个卷积运算,以此类推。

图46示出了示例性功能单元4602,其包括乘法器部件4604和加法器部件4606、累加寄存器4608、移位寄存器4610以及多路复用器4612和4614。乘法器部件4604将输入值和权重相乘,并将结果提供给加法器4606。累加寄存器4608累加相乘结果,直到终止信号被断言。当终止信号被断言时,累加寄存器4608将累加值提供给移位寄存器4610。移位寄存器4610将累加值移位到功能单元4602下面的邻近功能单元。

诸如功能单元4602之类的每个功能单元通过lxlxd(内核体积大小)周期累加输入值和权重乘法。终止信号在完成最后的乘法之后触发,因为累加寄存器4608此时具有正确的卷积值。随着累加值移动到移位寄存器4610,下一卷积将继续,其中累加值被初始化为0。

再次参考图44,同一列中每个功能单元的卷积结果值将通过移位寄存器链在垂直方向上逐个移出到对应的输出数据缓冲器ob0、ob1、...、obm-1。因此,每个周期都可以发生乘法和累加。

如上所述,功能单元阵列4408包括功能单元fu0,0、fu0,1、…、fun-1,m-1的n×m阵列。在加速部件4402在物理上被实现为fpga设备的实现方式中,维度n和m在运行时可以是软件可重配置的。例如,在n=8且m=128的第一实例中,功能单元阵列4408可以被配置为8x128的功能单元阵列。在n=64和m=16的第二实例中,功能单元阵列4408可以被配置为64x16的功能单元阵列,等等。

在加速部件4402的实现方式中,输入数据被馈送到功能单元阵列4408中的功能单元的行,并且权重数据被馈送到功能单元阵列4408中的功能单元的列。本领域的普通技术人员将理解,输入数据替代地可以被馈送到功能单元阵列4408中的功能单元的列,并且权重数据可以被馈送到功能单元阵列4408中的功能单元的行。

在输出体积包括比功能单元的列的可用数目多的平面的情况下,卷积层可以在多个加速部件上被实现。例如,如果输出体积包括256个平面,则第一加速部件可以配置有具有128列的功能单元阵列,所述列被馈送有内核权重数据weights0、weights1、...、weights127;并且第二加速部件可以配置有具有128列的功能单元阵列,所述列被馈送有内核权重数据weights128、weights129、...、weights255。在这样的实现方式中,在运行时,内核权重数据存储于每个加速部件的权重数据缓冲器ibw0、ibw1、...ibwm-1中,避免了从外部dram加载内核权重数据的需要。

替代地,卷积层可以在单个加速部件上被实现,并且功能单元阵列可以运行多次迭代,为每次迭代加载新的内核权重。因此,如果输出体积包括256个平面,则可以将加速部件配置有具有128列的功能单元阵列,所述列在第一迭代中被馈送有内核权重数据weights0、weights1、...、weights127,并在第二迭代中被馈送有内核权重数据weights128、weights129、...、weights255。

图47示出了包括多个卷积层的cnn在加速部件4702上的实现方式,加速部件4702在物理上可以被实现为fpga设备。加速部件4702包括输入双缓冲器阵列4704、内核权重缓冲器阵列4406、功能单元阵列4408、输出缓冲器阵列4410、控制器部件4706以及fifo阵列和环形仲裁器4708。输入双缓冲器阵列4704包括用于分别接收d维输入数据的n个切片slice0、slice1、...slicen-1的两组输入数据缓冲器ipd0、ipd1、…、ipdn-1。为了简单起见,剩余的讨论将假设d=3。本领域的普通技术人员将理解,内核权重缓冲器阵列4406也可以包括双缓冲器阵列。

加速部件4702实现多个卷积层,其中一个卷积层的输出从输出缓冲器阵列4410反馈到输入双缓冲器阵列4404,以向下一连续的卷积层提供输入。不希望受到任何特定理论的束缚,相信当计算中间输出特征层以及跨层时,该cnn实现方式可以减少去往和来自片外dram的冗余数据传输。

图48是示出图47的加速部件4702的一种操作方式的过程4802。在步骤4804处,控制器部件4706从片外dram取回输入数据,并将输入数据加载到第一组输入数据缓冲器ipd0、ipd1、...、ipdn-1中。在实现方式中,控制器部件4706从片外dram取回输入数据,将输入数据分割成n个切片slice0、slice1、...、slicen-1,并将输入数据的n个切片加载到第一组输入数据缓冲器ipd0、ipd1、…、ipdn-1中。

在步骤4806处,控制器部件4706从片外dram中取回第一卷积层的第一组内核权重,并将第一组权重数据加载到权重数据缓冲器ibw0、ibw1、...、ibwm-1中。在步骤4808处,输入数据的n个切片slice0、slice1、...、slicen-1和m组内核权重数据weights0、weights1、…、weightsm-1被加载到功能单元阵列4408中。

在步骤4810处,功能单元阵列4408执行卷积运算,并将卷积结果输出到输出数据缓冲器ob0、ob1、...、obm-1。在步骤4812处,卷积结果从输出缓冲器ob0、ob1、...、obm-1移位到fifo阵列和环形仲裁器4708。

在步骤4814处,控制器4706确定是否要处理任何额外的卷积层。如果否,则过程4802结束。如果是,则在步骤4816处,fifo阵列和环形仲裁器4708将输出结果反馈给下一(例如,第二)组输入缓冲器ipd0、ipd1、...、ipdn-1。在步骤4806处,控制器部件4706从dram取回下一(例如第二)卷积层的下一组内核权重,下一卷积层使用先前(例如,第一)卷积层的输出作为输入。

再次参考图47,加速部件4702不包括被配置为对卷积层输出应用非线性函数和池化操作的功能单元。如果需要这样的操作,则卷积输出可以被写回到片外存储器,并且主机部件上的cpu可以对卷积输出应用非线性函数和池化操作。控制器部件4706从片外dram取回经处理的数据,并将经处理的数据作为输入数据加载到输入数据缓冲器ipd0、ipd1、...、ipdn-1中,用于下一卷积操作。

图49示出了包括多个卷积层、池化和非线性操作的cnn在加速部件4902上的实现方式,加速部件4902在物理上可以被实现为fpga设备。加速部件4902包括输入双缓冲器阵列4404、内核权重缓冲器阵列4406、功能单元阵列4408、输出缓冲器阵列4410、控制器部件4904以及fifo阵列和环形仲裁器4708,如在图47的加速部件4702中,并且执行针对加速部件4702的上述卷积运算。

为了避免需要将卷积输出数据传送到cpu以执行诸如偏置补偿、非线性函数和池化操作之类的操作,加速部件4902包括偏置阵列4906、非线性函数阵列4908、池化阵列4910和池化控制器部件4912,用于对加速部件4902执行这些操作。

特别地,输出数据缓冲器ob0、ob1、...obm-1中的卷积输出是偏置阵列4906的输入,偏置阵列4906包括偏置部件,被配置为分别将对应的偏置值+b0、+b1、+b2、...、+bm-1添加到存储于输出数据缓冲器ob0、ob1、...、obm-1中的卷积结果。在实现方式中,控制器部件4904可以一次为所有卷积层从dram加载偏置值+b0、+b1、+b2、...、+bm-1,或者可以为每个卷积层加载偏置值+b0、+b1、+b2、...、+bm-1的新组

非线性函数阵列4908包括非线性函数部件fn0、fn1、fn2、...、fnm-1,其被配置为将非线性函数(例如,s形、双曲正切等)应用于偏置部件的输出+b0、+b1、+b2、...、+bm-1。

池化阵列4910包括池化部件mp0、mp1、mp2、...、mpm-1,其对非线性函数部件fn0、fn1、fn2、...、fnm-1的输出执行池化操作。特定地,池化控制器4912从输出数据缓冲器ob0、ob1、...obm-1中选择矩形块,并且对每个块进行子采样以根据该块产生单个输出。存在若干方式来进行这种池化,例如取平均值或最大值,或者是块中神经元的学习的线性组合。

不希望被任何特定理论束缚,相信当计算中间输出特征层时,该cnn操作可以减少去往和来自dram的冗余数据传输。特别地,如上所述,因为一个卷积层的输出被反馈作为下一卷积层的输入,所以中间卷积层的输出数据不需要从加速部件4702传递到dram,并且到中间卷积层的输入不需要被从dram转移到加速部件4702。就此而言,不希望被任何特定理论束缚,相信加速部件4702可以减少实现cnn所需的存储器带宽需求。

在上述每个加速部件4402、4702和4902中,输入数据和权重数据从片外dram加载到输入数据缓冲器ipd0、ipd1、...、ipdn-1和权重数据缓冲器ibw0、ibw1、...、ibwm-1。在实现方式中,当数据从主机部件被转发到加速部件(例如,经由pcie接口)时,以软件执行数据交织。

数据交织是将数据字调度到dram字上直接映射到加速部件的对应输入缓冲器(数据和权重)中的槽中的操作。在实现方式中,在dram获取操作期间在硬件级使用具有数据字宽度转换能力的fifo。fifo将dram数据宽度转换为输入缓冲器阵列的正确宽度。

例如,如果dram字宽是1024位,则每个输入数据字是16位,并且存在8输入数据缓冲器(ipd0、ipd1、...、ipd7和权重数据缓冲器ibw0、ibw1、...、ibw7),每个dram字可以存储64个数据字(1024/16)。64个数据字将在每个dram字中进行调度,从而当硬件fifo将dram字从1024位转换为128位时,每个数据字可以被直接馈送到其对应的输入缓冲器。这允许在不需要交叉开关来引导数据的情况下转发数据,并且还允许在每个输入数据缓冲器(ipd0、ipd1、...、ipd7和权重数据缓冲器ibw0、ibw1、...、ibw7)中并行存储值。

如上所述,dnn可以包括多个不同的处理层,包括卷积层和线性层。在实现方式中,smc128(图1)将dnn划分为多个片段,将dnn层的第一片段(例如,一个或多个卷积层)映射到一个或多个加速部件,并且将dnn层的第二片段(例如,完全连接的层)映射到一个或多个主机部件。

图50是图形地描绘包括三个卷积层(5004、5006、5008)和两个线性层(5010、5012)的示例性dnn5002的框图。在实现方式中,smc128将dnn5002划分成多个片段(例如,两个片段),将dnn5002的第一数目的层映射到主机部件,并将dnn5002的第二数目的层映射到加速部件。在实现方式中,smc128将dnn5002划分到单个服务器部件上的主机部件和加速部件。在另一实现方式中,smc128将dnn5002划分到多个服务器部件上的主机部件和加速部件。

图51示出了服务器单元部件5102的实现方式,服务器单元部件5102包括被配置为实现dnn(例如,图50的dnn5002)的主机部件5104和加速部件5106。主机部件5104和加速部件5106经由本地链路5108(例如,pcie链路)耦合。主机部件5104包括耦合到存储器5114(例如dram)的一个或多个cpu(5110、5112、...)。加速部件5106耦合到片外存储器5116,例如dimms。

存储器5114具有第一存储器带宽,并且存储器5116具有第二存储器带宽,并且第二带宽通常低于第一存储器带宽。例如,第一存储器带宽可以是大约100gb/秒,而第二存储器带宽可以是大约20gb/秒,但是也可以使用其他存储器带宽值。

在实现方式中,服务器单元部件5102被配置为实现dnn,例如图50的dnn5002。特别地,服务器单元部件5102被配置为在主机部件5104的cpu(5110、5112、...)上实现dnn5002的第一数目的层,并且在加速部件5106上实现dnn5002的第二数目的层。

在实现方式中,在主机部件5104上实现线性层(5010、5012),并且在加速部件5106上实现卷积层(5004、5006、5008)。在实现方式中,使用上面结合图47和49描述的反馈技术在加速部件5106上实现卷积层(5004、5006、5008)。

如上所述,存储器5114通常具有比存储器5116更高的存储器带宽。因此,在实现方式中,smc128将dnn(例如,dnn5002)划分成两个片段,将dnn的具有较高存储器带宽要求的第一数目的层(例如,线性层(5010、5012))映射到主机部件(例如,主机部件5104),并且将dnn的具有较低存储器带宽要求的第二数目的层(例如,卷积层(5004、5006、5008))映射到加速部件(例如,加速部件5106)。

图52是示出smc128在服务器单元部件上实现dnn的一种操作方式的过程5202。在步骤5204处,smc128接收dnn配置和层信息。在步骤5206处,smc128将接收到的dnn5002划分为多个片段(例如,两个片段)。例如,smc128可以将接收到的dnn划分为包含具有较高存储器带宽要求的层(例如,线性层)的第一片段,以及包含具有较低存储器带宽要求的层(例如,卷积层)的第二片段。在步骤5208处,smc128配置主机部件以实现第一片段中的层。在步骤5210处,smc128配置加速部件以实现第二片段中的层。

不希望被任何具体理论所束缚,与完全在主机部件上或完全在加速部件上实现dnn相比,相信将dnn划分成较高的存储器带宽层(例如,线性层)和较低的存储器带宽层(例如,卷积层),并且利用上述cnn加速技术将较高的存储器带宽层分配给主机部件和将较低的存储器带宽层分配给加速部件,可以更高效地实现dnn。

另外,不希望受到任何特定理论的限制,相信跨主机-fpga分裂cnn和dnn可以减少cpu高速缓存未命中,并且可以加速非线性层的执行。另外,cpu通常具有更大的高速缓存,使其更适合具有非常大数目的权重(大约几十到几百兆字节的量级)的线性层。

技术的说明性方面

以下概述提供了本文阐述的技术的说明性方面的非穷尽性列表。

根据第一方面,提供一种用于在服务器部件上实现深度神经网络的方法,所述服务器部件包括具有cpu的主机部件和耦合到所述主机部件的硬件加速部件。所述深度神经网络包括多个层。所述方法包括:将所述深度神经网络划分为第一片段和第二片段,所述第一片段包括所述多个层的第一子集,所述第二片段包括所述多个层的第二子集;配置所述主机部件来实现第一片段;并且配置所述硬件加速部件来实现第二片段。

根据第二方面,多个层包括线性层和卷积层;所述第一片段包括线性层;以及所述第二片段包括卷积层。

根据第三方面,多个层包括线性层和多个卷积层;所述第一片段包括线性层;以及所述第二片段包括多个卷积层。

根据第四方面,所述多个层还包括非线性函数和池化层,并且所述第二片段包括所述非线性函数和池化层。

根据第五方面,所述多个层包括具有第一存储器带宽要求的第一层和具有第二存储器带宽要求的第二层;所述第一片段包括第一层;以及所述第二片段包括第二层。

根据第六方面,所述硬件加速部件包括以下中的一个或多个:现场可编程门阵列设备、大规模并行处理器阵列设备、图形处理单元、以及专用集成电路。

根据第七方面,所述服务器部件包括数据中心服务器部件。

根据第八方面,所述方法还包括配置所述硬件加速部件来实现多层卷积神经网络。

根据第九方面,所述硬件加速部件包括n行和m列功能单元的可重新配置阵列,每个功能单元被配置为执行输入数据和权重数据的卷积。

根据第十方面,提供了一种被配置为实现包括多个层的深度神经网络的服务器部件。所述服务器部件包括:包括cpu的主机部件;耦合到所述主机部件的硬件加速部件;以及控制器部件。所述控制器部件被配置为:将所述深度神经网络划分成第一片段和第二片段,所述第一片段包括所述多个层的第一子集,所述第二片段包括所述多个层的第二子集;配置所述主机部件来实现第一片段;并且配置所述硬件加速部件来实现第二片段。

根据第十一方面,所述多个层包括线性层和卷积层;所述第一片段包括线性层;以及所述第二片段包括卷积层。

根据第十二方面,所述多个层包括线性层和多个卷积层;所述第一片段包括线性层;以及所述第二片段包括多个卷积层。

根据第十三方面,所述多个层还包括非线性函数和池化层,并且所述第二片段包括所述非线性函数和池化层。

根据第十四方面,所述多个层包括具有第一存储器带宽要求的第一层和具有第二存储器带宽要求的第二层;所述第一片段包括第一层;以及所述第二片段包括第二层。

根据第十五方面,所述硬件加速部件包括以下中的一个或多个:现场可编程门阵列设备、大规模并行处理器阵列设备、图形处理单元、以及专用集成电路。

根据第十六方面,所述服务器部件包括数据中心服务器部件。

根据第十七方面,所述控制器部件配置所述硬件加速部件来实现多层卷积神经网络。

根据第十八方面,所述硬件加速部件包括n行和m列功能单元的可重新配置阵列,每个功能单元被配置为执行输入数据和权重数据的卷积。

根据第十九方面,提供了一种用于在服务器部件上实现深度神经网络的方法,所述服务器部件包括具有cpu的主机部件和耦合到所述主机部件的硬件加速部件,所述深度神经网络包括多个线性层和多个卷积层。所述方法包括:配置主机部件来实现线性层,并配置硬件加速部件来实现卷积层。

根据第二十方面,所述硬件加速部件包括以下中的一个或多个:现场可编程门阵列设备、大规模并行处理器阵列设备、图形处理单元、以及专用集成电路。

虽然已经以特定于结构特征和/或方法动作的语言描述了技术方案,但是应当理解的是,随附权利要求中限定的技术方案不一定限于上面描述的具体特征或动作。而是,上述的具体特征和动作被公开为实施权利要求的示例性形式。

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