具有计算参数分发器的转送元件数据平面的制作方法

文档序号:24715843发布日期:2021-04-16 14:21阅读:136来源:国知局
具有计算参数分发器的转送元件数据平面的制作方法
具有计算参数分发器的转送元件数据平面


背景技术:

1.近年来,许多网络操作已迁移到执行虚拟机或容器的数据计算服务器,因为这些服务器具有额外的计算资源并可以处置一定量的网络操作。然而,与此同时,网络转送元件的处理能力已大幅提高,而这种处理能力在许多常见的网络部署中经常仍未被开发。此外,最快的网络转送元件中的一些的分组处理线速率远高于数据计算服务器的计算能力。因此,如下做法将是有益的:使用网络转送元件的分组处理数据平面管线来吸收来自数据计算服务器的数据计算操作中的一些,使得可以在网络中以显著更快的速率执行这些操作。


技术实现要素:

2.本发明的一些实施例提供了一种数据平面转送电路(数据平面),其具有参数收集电路,所述参数收集电路存储由网络中的第一组机器发送的参数值,并将所述参数值分发至所述网络中的第二组机器。在一些实施例中,第一组机器和第二组机器是同一组机器,而在其他实施例中,它们是不同组的机器(例如,一组具有至少一个机器不在另一组)。在一些实施例中,所述机器是虚拟机(vm)、容器或独立式计算机/服务器。而且,在一些实施例中,所述机器执行分布式计算操作,并且由第一机器组和所述数据平面分发的参数值是与所述分布式计算操作相关联的参数值。
3.为了执行其转送操作,所述数据平面包括若干数据消息处理阶段(stage),其被配置成处理与由所述数据平面接收的数据消息相关联的数据元组。在一些实施例中,所述数据平面的消息处理阶段被组织成若干入口消息处理阶段和出口消息处理阶段,它们通过称为通信量管理器的纵横开关来通信链接。在一些实施例中,所述数据平面消息处理阶段的部分也被配置成实现所述参数收集电路。在其他实施例中,所述数据平面具有专用参数收集电路,其不使用改换目的的(re

purposed)消息处理阶段用于参数分发操作。
4.在一些实施例中,所述数据平面的消息处理阶段的操作由本地或远程控制平面来配置。在一些实施例中,本地控制平面由控制软件层来实现,所述控制软件层由所述转送元件的一个或多个通用处理器(例如,cpu)来执行,而远程控制平面由控制软件层来实现,所述控制软件层由另一转送元件或远程计算机(例如,服务器)的一个或多个cpu来执行。
5.在一些实施例中,所述数据平面的参数收集电路包括参数提取电路,以从所述数据消息的子集提取由第一组机器计算和分发的参数值。在一些实施例中,所述参数值作为键值对存储在所述数据平面从第一组机器接收的数据消息的子集的头部中。例如,在一些实施例中,来自第一组机器的每个数据消息的头部包括:(1)层4端口(例如,udp源端口)值,其指定所述数据消息包含键值对;以及(2)选项字段,其存储所述键(即参数)及其值。在其他实施例中,当以特定顺序指定键值时,层4选项字段仅包括所述键值(而不包括键),所述特定顺序可以用于将存储在所述头部中的不同的值与不同的键相关联。仍其他实施例使用其他技术来存储和检索来自第一组机器的数据消息的有效载荷和/或头部中的参数值。
6.所述参数收集电路包括一组一个或多个存储,所述参数提取电路将所提取的参数值存储在其中。所述收集电路还包括参数转送电路,其要检索所存储的参数值并将检索到
的参数值转送到第二组机器。在一些实施例中,所述参数转送电路在由第一组中的所有机器分发的所有参数值都存储在了该组存储中之后检索并转送所存储的参数值。在其他实施例中,所述参数转送电路基于其他准则(例如,在计时器测量的持续时间之后)来检索所存储的参数值并将其转送到第二组机器。
7.在一些实施例中,所述参数转送电路包括数据消息生成器,其生成若干数据消息以存储检索到的参数值以转送到第二组机器。在一些实施例中,所述数据消息生成器通过复制最后的数据消息来生成数据消息,所述最后的数据消息提供最后一组一个或多个参数值,以完成从第一机器收集的参数值群组。在一些实施例中,所述数据消息生成器由所述数据平面通信量管理器来实现,所述数据平面通信量管理器将数据消息从所述数据平面的入口消息处理管线转送到其出口消息处理管线。
8.在一些实施例中,所述通信量管理器包括镜像缓冲器,其包括存储包含在由第一组机器发送的数据消息中的参数值的一组存储。在一些实施例中,所述数据平面(例如,入口处理管线或出口处理管线的消息处理阶段)实现位图生成器,其生成位图以跟踪从不同的第一组机器接收的不同参数值组。当所述位图指示已接收到了来自所有第一组机器的所有参数值组时,所述通信量管理器的数据消息生成器从所述镜像缓冲器检索所存储的参数值,针对每个第二组机器生成一个或多个消息,将检索到的所存储的参数值嵌入到每个生成的消息中,并将所生成的数据消息提供至一个或多个出口管线以转送到第二组机器。在一些实施例中,所生成的消息必须再循环回到所述入口管线,以标识应针对每个第二组机器处理每个消息的出口管线。
9.在一些实施例中,所述数据平面电路并非使用所述通信量管理器中的镜像缓冲器来存储来自第一组机器的参数值,而是使用所述数据平面中的有状态处理单元的有状态存储来存储这些值。具体地,在一些实施例中,至少一组消息处理阶段包括有状态处理单元(例如,有状态算术逻辑单元,alu)和用于这些处理单元的有状态存储(例如,有状态寄存器或表)。
10.在一些实施例中,所述数据平面具有解析器,其从接收到的数据消息提取头部,并将该头部格式化为头部向量(hv)以供所述数据平面消息处理阶段进行处理。头部向量可以由连续的消息处理阶段进行修改,作为其消息处理操作的一部分。在处理针对来自第一组机器的数据消息的头部向量时,消息处理阶段可以确定所述头部向量包含来自第一组机器的一个或多个参数值(例如,通过将一个或多个头部向量属性与存储在所述消息处理阶段中的匹配规则进行匹配)。基于该确定,所述处理阶段可以引导其有状态处理单元将一个或多个参数值存储在其有状态存储中,和/或标记所述头部向量,使得一个或多个后续消息处理阶段的一个或多个后续有状态处理单元可以将所述参数值存储在其有状态存储中。
11.在一些实施例中,用于实现所述参数收集电路的有状态处理单元和存储全部都是一个或多个入口管线的一部分。在其他实施例中,所述参数收集电路由所述入口和出口管线二者的有状态处理单元和存储来实现。在仍其他实施例中,用于实现所述参数收集电路的有状态处理单元和存储全部都是一个或多个出口管线的一部分。在所述有状态处理单元和存储在一个或多个出口管线中的实施例中的一些中,使用一个或多个入口管线来移位所述头部向量中的参数值,以便于交错对这些参数值的存储。
12.在一些实施例中,第一机器组中的每个机器分发一组若干个参数值,其中每个机
器的分发的参数值组中的每个参数值在由第一组中的每个其他机器分发的每个其他参数值组中具有相关联的参数值。例如,在一些实施例中,第一组包括四个机器1

4,并且每个机器分发针对三个参数a

c的三个值。在此示例中,针对参数a的四个值(来自机器1、2、3和4的a1、a2、a3和a4)是相关联的,因为它们是针对同一参数的值,针对参数b的四个值(来自机器1、2、3和4的b1、b2、b3和b4)是相关联的,因为它们是针对同一参数的值,并且针对参数c的四个值(来自机器1、2、3和4的c1、c2、c3和c4)是相关联的,因为它们是针对同一参数的值。
13.在一些实施例中,所述数据平面的参数收集电路的参数转送电路以交错的方式发送所存储的参数值(即,存储在所述数据平面中的值),所述交错的方式将从不同机器收集的各组相关联的值置于彼此相邻。例如,对于上述示例,在一些实施例中,所述参数转送电路向机器1

4中的每一个发送消息,其中所有参数a值彼此相邻,所有参数b值彼此相邻,并且所有参数c值彼此相邻(例如,所述消息将包含:a1、a2、a3、a4、b1、b2、b3、b4、c1、c2、c3、c4)。
14.为了辅助输出交错,在一些实施例中,所述参数提取电路交错由每个机器分发的参数值的存储,使得各组相关联的参数值存储在相同的存储位置、邻近的存储位置和/或类似地寻址的存储位置中。例如,在这些实施例中的一些中,所述参数提取电路使用交错存储模式来存储不同机器的参数值,以便简化对这些参数值的输出的交错。在一些实施例中,所述参数提取电路还移位所述头部向量中的参数值中的一些,以便于所述参数值的交错存储(例如,移位来自机器1的参数值,使得它们可以与来自机器2的其相关值相邻地存储)。
15.在一些实施例中,所述参数提取电路旋转其对于机器的不同子集的参数值的交错存储,以便确保期望组的相关联的参数值彼此相邻地存储或存储在一组相关联或相关的存储位置中。旋转存储模式的一个示例将是将机器1和2的第一参数值存储在较早的第一有状态存储中,而将机器3和4的第一参数值存储在较迟的第二有状态存储中,但是然后将机器1和2的第二参数值存储在较迟的第二有状态存储中,而将机器3和4的第二参数值存储在较早的第一有状态存储中。
16.在一些实施例中,一旦所述参数收集电路处理了由第一组机器分发的所有参数值,所述参数收集电路就对其收集的参数值执行计算并分发所述计算的结果。所述计算是聚合操作(例如,相加、求平均等),其组合由第一组机器分发的参数值的对应子集。例如,在一些实施例中,每个第一组机器分发四个多位(multi

bit)参数值a、b、c和d,其中的每一个对应于由其他第一组机器中的每一个分发的一个参数值。在这些实施例中的一些中,所述参数收集电路将所有的a、b、c和d相加,并在其加上了其从最后的第一组机器接收到的最后一组参数值a

d之后将所得到的和分发至第二组机器。
17.例如,在一些实施例中,所述数据平面被配置成从处理已知的输入/输出训练集以训练神经网络的权重的若干机器收集并聚合各组权重梯度。在这些实施例中的一些中,所述数据平面将其针对所述若干权重中的每个权重从ml机器105收集的不同权重梯度相加,并然后将针对这些权重中的每个权重的聚合权重梯度分发至机器。为了执行其聚合操作,所述数据平面将其从机器接收的浮点权重梯度转换成其聚合的定点权重梯度,并然后将聚合的定点权重梯度转换回聚合的浮点权重梯度,所述数据平面将所述聚合的浮点权重梯度分发回ml机器。
18.前面的发明内容旨在用作对本发明的一些实施例的简要介绍。其并不打算作为对
本文献公开的所有发明主题的介绍或概述。接下来的具体实施方式和在具体实施方式中提到的附图将进一步描述在发明内容中描述的实施例以及其他实施例。因此,为了理解本文献描述的所有实施例,需要全面回顾发明内容、具体实施方式和附图。此外,所要求保护的主题不受发明内容、具体实施方式和附图中的例证性细节的限制,而是应由所附权利要求来限定,因为所要求保护的主题可以以其他特定形式来体现而不脱离所述主题的精神。
附图说明
19.在所附权利要求中阐明了本发明的新颖特征。然而,出于解释的目的,在以下各图中阐述了本发明的若干实施例。
20.图1图示了具有数据平面电路的转送元件的示例,该数据平面电路可以被配置成实现一些实施例的全局聚集参数收集电路。
21.图2图示了生成若干复制数据消息的一些实施例的复制过程的示例,其中所提取和存储的权重梯度组可以被嵌入并分发至ml机器。
22.图3

6图示了在四个salu表(例如,四个寄存器组)中的四个salu存储位置(例如,四个salu寄存器),其由相同的地址值(例如,由通过对一组头部向量值求散列而生成的相同的散列索引值)来标识。
23.图7图示了在一些实施例中的参数收集电路发送给每个ml机器的四个数据消息中所包括的权重梯度的序列。
24.图8图示了在图3

7的全局聚集示例中在十二个ml机器a

l与数据平面之间交换的数据消息。
25.图9图示了一些实施例的匹配动作单元。
26.图10概念性地图示了在一些实施例中参数收集电路执行的过程。
27.图11图示了在一些实施例中当数据平面以全局归约实现方式操作时在数据平面与ml机器之间的交互。
28.图12概念性地图示了在一些实施例中当数据平面被配置成执行全局归约操作时在一些实施例中的参数收集电路的组件。
29.图13概念性地图示了在一些实施例中参数收集电路执行的过程。
30.图14图示了16位浮点值、其对应的43位定点值、以及用来存储43位定点值的两个容器的示例。
31.图15图示了一些实施例执行的以下操作:将浮点权重梯度wi转换成定点权重梯度,将经转换的权重梯度与针对该梯度的相关联权重所维持的总si相加,并将定点权重梯度和转换成浮点权重梯度和。
具体实施方式
32.在本发明的以下详细描述中,阐述并描述了本发明的众多细节、示例和实施例。然而,对于本领域技术人员而言将显而易见的是,本发明不限于所阐述的实施例,并且可以在没有所讨论的具体细节和示例中的一些的情况下实践本发明。
33.一些实施例提供了具有数据平面转送电路的网络转送元件,数据平面转送电路具有参数收集电路以存储和分发由网络中的若干机器计算出的参数值。在一些实施例中,机
器执行分布式计算操作,并且所计算的参数值是与分布式计算操作相关联的参数值。在一些实施例中,数据平面转送电路(数据平面)的参数收集电路(1)存储由第一组机器计算和发送的一组参数值,以及(2)一旦它收集了来自第一组中的所有机器的该组参数值,就将所收集的参数值分发至第二组机器。在一些实施例中,第一组机器和第二组机器是同一组机器,而在其他实施例中,它们是不同组的机器(例如,一组具有至少一个机器不在另一组)。
34.在一些实施例中,一旦所述参数收集电路处理了由第一组机器分发的所有参数值,所述参数收集电路就对其收集的参数值执行计算并分发所述计算的结果。所述计算是聚合操作(例如,相加、求平均等),其组合由第一组机器分发的参数值的对应子集。例如,在一些实施例中,每个第一组机器分发四个多比特参数值a、b、c和d,其中的每一个对应于由其他第一组机器中的每一个分发的一个参数值。在这些实施例中的一些中,所述参数收集电路将所有的a、b、c和d相加,并在其加上了其从最后的第一组机器接收到的最后一组参数值a

d之后将所得到的和分发至第二组机器。
35.在下面的讨论中,“全局归约(all reduce)”指代这样的参数收集电路实施例:其对所收集的参数值执行聚合计算以将这些值归约至一组聚合参数值,这些实施例将该组聚合参数值分发至第二组机器。另一方面,该讨论使用“全局聚集(all gather)”来指代这样的参数收集电路实施例:其仅收集和分发由第一组机器发送的参数值。下面提供的“全局归约”和“全局聚集”示例中的若干示例是针对一些实施例的机器训练学习过程。本领域技术人员将认识到,其他实施例将数据平面的“全局归约”和“全局聚集”操作用于其他分布式计算应用。
36.在本文献中,数据消息指代跨网络以特定格式发送的位的集合。本领域技术人员将认识到,术语“数据消息”在本文中可以用来指代可以跨网络发送的各种格式的位的集合,诸如以太网帧、ip分组、tcp段、udp数据报等。同样,如本文献中使用的,对l2、l3、l4和l7层(或层2、层3、层4和层7)的指代是分别对osi(开放系统互连)层模型的第二数据链路层、第三网络层、第四传输层和第七应用层的指代。
37.图1图示了具有数据平面电路120的转送元件100的示例,该数据平面电路120可以被配置成实现全局聚集参数收集电路150。该参数收集电路存储由若干机器105计算和发送的参数值,并且然后,一旦其收集了来自所有机器的参数值就将所收集的参数值分发至相同的机器。在一些实施例中,所述机器是虚拟机(vm)、容器、和/或独立式计算机/服务器。
38.不同的实施例使用参数收集电路150为不同的分布式计算应用收集不同类型的参数值。在图1以及其他图中图示的示例中,参数值是与机器学习操作相关联的权重值梯度。在其他实施例中,所收集的参数值是其他类型的参数值。
39.在图1中,机器105执行机器学习(ml)训练过程,该训练过程产生需要在机器之间共享的权重值梯度。具体地,机器105处理输入/输出训练集以训练神经网络的权重值,其中不同的机器处理不同批次的已知输入/输出训练集并执行反向传播操作以调整神经网络的权重值。在该环境中,机器需要共享它们为神经网络中的神经元之间的边缘计算的权重值梯度。因此,一旦机器105计算了一组权重值梯度,机器105就将这些梯度嵌入数据消息中(例如,将其嵌入在分组的udp头部中),并通过连接机器105的网络110传输这些数据消息(例如,分组)。
40.转送元件100在网络110内转送数据消息。转送元件100可以是任何类型的转送元
件,诸如交换机、路由器、网桥等。在图1中,转送元件被部署为网络内部的非边缘转送元件,以在机器105之间转送数据消息。在其他情况下,转送元件100被部署为网络边缘处的边缘转送元件,以连接到用作数据消息的源和目的地的计算装置(例如,独立式或主机计算机)。作为非边缘转送元件,转送元件100在网络中的转送元件之间(即,通过居间网络结构110)转送数据消息。作为边缘转送元件,转送元件从和向边缘计算装置彼此转送数据消息、将数据消息转送到其他边缘转送元件和/或倒非边缘转送元件。
41.如图所示,转送元件100包括(1)数据平面电路120(“数据平面120”),其执行转送元件100的转送操作以将由转送元件接收的数据消息转送到其他装置,以及(2)配置数据平面电路的控制平面电路125(“控制平面125”)。转送元件100还包括物理端口112,其从转送元件100外部的装置接收数据消息、并将数据消息传输到转送元件100外部的装置。
42.控制平面125配置数据平面120以执行其消息转送和参数收集操作。在一些实施例中,控制平面包括:(1)执行指令的一个或多个处理器(诸如具有多个处理核或单元的微处理器),以及(2)存储在由处理器执行时实行控制平面操作的用于过程的指令的存储器。这些指令可以由以下各方来指定:(1)包括控制平面125和数据平面120的网络转送元件100的制造商,(2)部署和维持网络转送100的网络管理者,或者(3)在监视网络状况的网络转送元件和/或服务器上执行的一个或多个自动化过程。控制平面处理器或控制平面的另一电路通过控制/数据平面接口与数据平面通信(例如,以配置数据平面或以接收来自数据平面的统计信息)。
43.数据平面电路120包括端口115,端口115接收数据消息以进行处理并在数据消息已被处理之后传输数据消息。数据平面120的一些端口115与转送元件100的物理端口112相关联,而其他端口115与数据平面120的其他模块相关联。例如,在一些实施例中,一个或多个端口115是再循环端口,其将由出口管线142处理的数据消息再循环回入口管线140。数据平面120还包括消息生成器135、多个入口管线阶段140、多个出口管线阶段142和通信量管理器144。在一些实施例中,数据平面被实现在专用集成电路(asic)上,并且其组件在该集成电路上定义。
44.消息生成器生成数据平面中的消息。在一些实施例中,这些消息可以引导数据平面中的电路执行某些操作或将数据存储在消息中,以导出到控制平面或通过网络到另一装置。入口和出口管线处理由转送元件接收的数据消息,以便将这些消息转送到它们在网络中的目的地。在一些实施例中,通信量管理器144包括纵横开关,其将消息从入口管线引导到出口管线。
45.每个入口或出口管线包括若干可配置的(即,可编程的)消息处理阶段132,其可以被配置成执行转送元件100的数据平面转送操作以处理数据消息并将其转送到它们的目的地。这些消息处理阶段通过处理与数据平面120接收的数据消息相关联的数据元组(例如,消息头部)以便确定如何转送消息来执行这些转送操作。
46.在该示例中,消息处理阶段是匹配动作单元(mau)132。如下面参考图9进一步描述的,在一些实施例中,mau是包括匹配表的电路,匹配表存储用于与经处理的数据消息的数据元组(例如,头部向量)进行匹配的多个记录。当数据消息与匹配记录匹配时,mau然后执行由与所标识的匹配记录相关联的动作记录(例如,由所标识的匹配记录标识的动作记录)所指定的动作。
47.在一些实施例中,mau还包括一组有状态alu(例如,四个alu),其基于由头部向量和/或匹配表指定的参数来执行算术操作。alu可以将其操作的结果存储在它们访问的有状态表中、和/或可以将这些结果写入头部向量中(例如,直接地或通过引导另一动作alu将这些结果写入头部向量中)以供其他mau阶段处理。
48.除mau阶段外,每个入口或出口管线还包括解析器130和逆解析器(deparser)134。管线的解析器130从管线接收的数据消息提取消息头部以进行处理。在一些实施例中,所提取的头部是以头部向量(hv)的格式,连续的消息处理阶段132作为其消息处理操作的一部分对所提取的头部进行处理并且在某些情况下对其进行修改。当管线的消息处理阶段132对头部向量进行操作时,管线的解析器130将消息的有效载荷传递给逆解析器134。在一些实施例中,解析器还将消息头部连同有效载荷一起传递给逆解析器134(即,解析器将整个消息传递给逆解析器)。
49.当管线完成处理数据消息并且必须将消息提供至通信量管理器(在入口管线的情况下)或端口115(在出口管线的情况下)以转送到消息的下一跳(例如,到其目的地计算节点或下一转送元件)时,在一些实施例中,管线的逆解析器134从由管线的最后一个消息处理阶段处理的消息的头部向量产生数据消息头部,并将此头部与数据消息的有效载荷组合。在一些实施例中,逆解析器134使用从解析器130接收的头部的一部分来从其相关联的头部向量重建消息。
50.如图1所示,在一些实施例中,数据平面消息处理阶段的部分也被配置成实现参数收集电路150。如上所述,在一些实施例中,本地控制平面125配置数据平面120以执行其消息转送和参数收集操作。在其他实施例中,远程控制平面配置数据平面120以实现其转送电路和/或参数收集电路。在一些实施例中,远程控制平面由控制软件层来实现,该控制软件层由另一转送元件或远程计算机(例如,服务器)的一个或多个cpu来执行。
51.在一些实施例中,参数收集电路150电路检查由数据平面接收的每个数据消息,以确定该数据消息是否来自机器105之一。如果不是,则该电路不处理该数据消息;该消息仅由数据平面的消息处理阶段132处理并转送到其目的地。另一方面,当该数据消息源自ml机器105时,参数收集电路150从数据消息头部提取若干权重梯度(例如,32个梯度),并将这些值存储在若干mau阶段132的有状态alu(salu)中。一旦参数收集电路150将权重梯度存储在了来自所有机器105的特定组的权重梯度中,在一些实施例中,参数收集电路就将所有收集的权重梯度分发至机器105。在其他实施例中,参数收集电路基于其他准则(例如,在计时器测量的持续时间之后)来检索所存储的参数值并将其转送到机器105。
52.在一些实施例中,参数值作为键值对存储在数据平面从第一组机器(例如,ml机器)接收的数据消息的头部中。例如,在一些实施例中,来自第一组机器的每个数据消息的头部包括:(1)层4端口(例如,udp源端口)值,其指定所述数据消息包含键值对;以及(2)选项字段,其存储所述键(即参数)及其值。在其他实施例中,当以特定顺序指定键值时,层4选项字段仅包括所述键值(而不包括键),所述特定顺序可以用于将存储在头部中的不同的值与不同的键相关联。
53.仍其他实施例使用其他技术来存储和检索来自第一组机器的数据消息的有效载荷和/或头部中的参数值。例如,在一些实施例中,将ips(网络内参数服务器)头部置于udp头部之后,并且该ips头部之后是权重梯度,如下面的示例所示。
以太网,ip,udp,ips头部,权重0,权重1,...在一些实施例中,ips头部具有两个字段:用于示出在数据平面中要将参数值放在何处的存储器索引,以及用于标识(与接收的权重梯度相关联的)一组权重在神经网络的权重总数中的位置的标识符。
54.在其他实施例中,将ips头部置于以太网头部之后,诸如以太网,ips头部,权重0,权重1,...当ml机器是专门的ml卡而不是带有gpu的服务器时,这很有用。对于这样的专门机器,不希望为了ip和udp头部浪费带宽,因为在ml卡与转送元件之间交换消息仅需要以太网头部。
55.图1概念性地图示了参数收集电路150包括参数提取器152、参数存储154和参数转送电路156。参数提取器152从由ml机器105发送的消息提取权重梯度,并将这些提取的权重梯度存储在参数存储154中。一旦从所有ml机器105收集了一组权重梯度中的所有权重梯度,参数转送电路156就检索所有存储的权重梯度,并在一个或多个消息中将它们转送回所有ml机器105。
56.在一些实施例中,参数提取器152和参数存储154由多个mau阶段132实现。具体地,如上所述,数据平面解析器130从接收到的数据消息提取头部,并将该头部格式化为头部向量(hv)以供数据平面消息处理阶段132进行处理。头部向量可以由连续的消息处理阶段作为其消息处理操作(例如,转送操作和/或参数收集操作)的一部分进行修改。
57.在一些实施例中,当处理来自ml机器105的数据消息的头部向量时,入口管线中的初始mau阶段标识该数据消息源自ml机器之一(例如,通过匹配头部向量中的一个或多个源网络地址值与存储在mau阶段的匹配表中的匹配规则)。然后,该mau阶段使其动作alu标记头部向量,以指示其包含来自ml机器的权重梯度。为了打包权重梯度的存储,在一些实施例中,该mau阶段还使其动作alu执行移位操作,以移位来自某些ml机器的权重梯度,如下面进一步描述的。在其他实施例中,入口管线中的一个或多个其他mau阶段执行该移位操作。
58.在入口管线的末尾,将此消息的头部向量与消息有效载荷组合,并将组合的消息提供至通信量管理器(tm)。基于将消息指明为包含权重梯度的消息,在一些实施例中,通信量管理器144将该消息置于tm出口队列(未示出)中,该tm出口队列与被指明用于处理由ml机器分发的特定权重梯度组的出口管线142相关联。
59.数据消息从该tm出口队列传递到其对应的出口管线142,出口管线142使其解析器130将消息分离成其有效载荷和头部向量,将有效载荷(或整个消息)沿旁路路径传递到该管线的逆解析器134,并将头部向量传递到该管线的第一mau阶段132。在一些实施例中,该出口处理管线的salu和有状态表形成参数提取器电路152和参数存储154。例如,在一些实施例中,出口管线具有十二个mau阶段,其每一个都具有四个salu,可以在四个salu表中存储两个16位权重梯度。这允许每个出口管线从12个ml机器105收集32个16位权重梯度。
60.在这种方法下,每当消息的头部向量到达这些出口mau 132之一时,mau的匹配表就确定头部向量包含需要提取的若干权重梯度,并引导其相关联的salu提取权重梯度。然后,salu提取权重梯度并将这些梯度存储在alu的相关联的有状态表中。例如,如下面进一步描述的,在一些实施例中,每个出口salu将来自两个不同ml机器105的两个16位梯度存储在每个32位有状态表记录中(例如,在每个32位salu寄存器中)。
61.在一些实施例中,一个入口或出口mau阶段维持位图(例如,在mau的salu中),该位图对于发送了其权重梯度组的每个ml机器具有一个位。每次该mau阶段确定它处理的头部向量对应于来自其中一个ml机器的数据消息时,它都会改变其位图中的针对该ml机器的位值以进行设置(例如,将该值从0改为1)。一旦位图中的所有位都已被设置,该mau阶段就确定已从所有ml机器接收到所有权重梯度组。因此,在这些实施例中,该mau阶段在头部向量中设置值以指示该头部向量完成了对来自所有ml机器的相关加权梯度组的收集。在一些实施例中,该mau阶段部分地实现参数转送电路156。在其他实施例中,代替位图,数据平面使用其他方案(例如,计数器)来确定数据平面何时具有来自所有ml机器的权重梯度组。
62.一旦头部向量被标记为提供来自最后的ml机器的最后的权重梯度组的头部向量,在一些实施例中,数据平面120就使用该头部向量来生成若干复制数据消息,所提取和存储的权重梯度组可以嵌入其中并分发至ml机器。图2图示了一些实施例中的该操作的示例。具体地,图2图示了三个操作阶段205、210和215。第一操作阶段205示出了对头部向量进行处理,以在出口mau阶段中存储最后一组权重梯度,这完成了来自若干ml机器的若干组权重梯度(例如,来自十二个ml机器a

l的两组32个权重梯度0

31)的群组的收集。
63.第二操作阶段210示出了将该头部向量转换回数据消息,通过入口管线140将该数据消息馈送回通信量管理器144。在此阶段,入口管线将数据消息转换回头部向量,并基于由位图生成mau将其标记为最后的头部向量来标记头部向量以供复制。该头部向量被转换成数据消息,然后将该数据消息提供给通信量管理器144。
64.在第三操作阶段215,通信量管理器144然后检测复制标记,并基于该标记使其复制引擎220生成该消息的若干复制副本(例如,47个)。然后将这些副本加上原始数据消息转换成头部向量,该头部向量由存储权重梯度的完整群组的出口管线进行处理。然后,该出口管线中的mau检索权重梯度的不同子群组,并将这些检索到的子群组存储在不同的头部向量中。在一些实施例中,每个复制体存储与若干其他(例如,11个)复制体相同但是寻址到不同的ml机器(例如,寻址到12个ml机器之一)的权重梯度子群组。
65.例如,在其中12个ml机器各自产生32个权重梯度的一些实施例中,需要将384个权重梯度分发至每个ml机器。在这些实施例中的一些中,每个数据消息最多只能携带96个梯度,因此使用四个数据消息来向每个ml机器提供384个梯度。除了最后的再循环数据消息之外,针对十二个客户端中的每一个的四个消息还需要tm 144生成47个复制体。在一些实施例中,tm 144基于它接收到的用于对其操作进行编程的配置数据来标识每个复制/再循环的数据消息的目的地地址。在其他实施例中,在第二阶段210中处理再循环的数据消息的入口管线为十二组的四个数据消息指定目的地地址。在上面的示例中,参数转送电路156由以下各项来实现:位图生成mau;数据平面电路,其将最终的数据消息再循环回入口管线;入口管线,其标记再循环消息以供复制;tm,其复制再循环消息;以及出口mau阶段,其从其salu表检索权重梯度的不同子群组,并将其存储在复制/再循环消息的头部向量中。
66.在参数收集电路150发送回ml机器的数据消息中,该电路交错由不同ml机器发送的权重梯度,使得针对神经网络中的相同权重的权重梯度彼此相邻。由此,在从这些梯度执行计算(例如,产生平均值)之前,ml机器不必花费资源来聚集针对相同权重的权重梯度。换言之,在一些实施例中,参数收集电路150以交错的方式(使针对相同权重的梯度合并并一起报告)将权重梯度报告回ml机器,以便释放ml机器的计算资源用于其他操作。
67.为了辅助权重梯度在发送给ml机器的数据消息中的交错,在一些实施例中,参数收集电路150对由不同ml机器发送的权重梯度的存储进行交错,使得针对相同权重的权重梯度存储在相同的存储位置、邻近的存储位置和/或类似地寻址的存储位置中。为了进一步辅助这种交错,在一些实施例中,参数收集电路移位来自某些ml机器的权重梯度,使得与相同权重有关的两个或更多个梯度可以存储在相同的存储位置中(例如,针对相同权重的两个16位梯度可以存储在相同的32位salu寄存器位置中)。
68.图3

6图示了针对本发明的一些实施例的该交错存储的示例。在该示例中,每个出口mau阶段具有四个salu,这四个salu访问四个有状态表(例如,四组salu寄存器)以存储由12个ml机器105分发的32个16位权重梯度。机器由字母a到l来标识,而梯度由数字0

31来标识。由相同数字标识的梯度是与神经网络中的相同权重(例如,权重1、权重2等)相对应的梯度。
69.对于十二个出口mau阶段中的每一个,图3

6中的每一个图示了在四个salu表(例如,四个寄存器组)中的四个salu存储位置(例如,四个salu寄存器),其由相同的地址值(例如,由通过对一组头部向量值求散列而生成的相同的散列索引值)来标识。图3中的共同寻址位置存储来自所有机器a

l的权重梯度0

7,图4中的共同寻址位置存储来自所有机器a

l的权重梯度8

15,图5中的共同寻址位置存储来自所有机器a

l的权重梯度16

23,并且图6中的共同寻址位置存储来自所有机器a

l的权重梯度24

31。
70.同样,在该示例中,针对ml机器a、c、e、g、i和k的梯度被上移(即,向左移位)16位,使得它们可以分别与来自ml机器b、d、f、h、j和l的梯度相邻地存储。在一些实施例中,入口管线解析器130最初将每个16位权重梯度作为低16位存储在头部向量中的32位容器中。随后,在这些实施例中,一个或多个入口mau阶段(例如,这些阶段的动作alu)对来自ml机器a、c、e、g、i和k的权重梯度执行16位左移。如图所示,这允许将来自机器a和b的16位梯度存储在相同的32位寄存器位置中,将来自机器c和d的16位梯度存储在相同的32位寄存器位置中,将来自机器e和f的16位梯度存储在相同的32位寄存器位置中,将来自机器g和h的16位梯度存储在相同的32位寄存器位置中,将来自机器i和j的16位梯度存储在相同的32位寄存器位置中,并且将来自机器k和l的16位梯度存储在相同的32位寄存器位置中。
71.图3

6还图示了通过为不同的ml机器对以不同的方式产生存储地址索引值,参数收集电路可以针对不同的ml机器对使用不同的旋转存储模式。例如,对于来自ml机器a和b的梯度,参数收集电路产生索引值以在前两个出口mau阶段中存储梯度0

7、在后两个出口mau阶段中存储梯度8

15、在出口mau阶段8和9中存储梯度16

23、并且在出口mau阶段6和7中存储梯度24

31。另一方面,对于来自ml机器c和d的梯度,参数收集电路产生索引值以在出口mau阶段2和3中存储梯度0

7、在前两个出口mau阶段中存储梯度8

15、在后两个出口mau阶段中存储梯度16

23、并且在出口mau阶段8和9中存储梯度24

31。
72.这种旋转存储方法使得更易于一起读出来自所有机器a

l的权重梯度0

7,一起读出来自所有机器a

l的权重梯度8

15,一起读出来自所有机器a

l的权重梯度16

23,并且一起读出来自所有机器a

l的权重梯度24

31。具体地,对于图2中图示的复制方法,每个出口mau阶段将在四个再循环/复制消息的每一个中存储梯度值,所述梯度值存储在该阶段的salu寄存器中的一个共同索引地址位置。因此,在图3中存储的梯度值将存储在这四个消息中的第一消息中,在图4中存储的梯度值将存储在第二消息中,在图5中存储的梯度值将存
储在第三消息中,并且在图6中存储的梯度值将存储在第四消息中。
73.对于图3

6中图示的示例(具有十二个ml机器a

l和32个梯度0

31),图7图示了在一些实施例中参数收集电路150发送到每个ml机器105的四个数据消息705

720中包括的权重梯度的序列。如图所示,数据消息705包括来自所有机器a

l的权重梯度0

7,首先是权重0梯度,接下来顺次是其他权重的所有梯度,直到第7个权重的梯度。类似地,数据消息710包括来自所有机器a

l的权重梯度8

15,首先是权重8梯度,接下来顺次是其他权重的所有梯度,直到第15个权重的梯度。
74.数据消息715包括来自所有机器a

l的权重梯度16

23,首先是权重16梯度,接下来顺次是其他权重的所有梯度,直到第23个权重的梯度。最后,数据消息720包括来自所有机器a

l的权重梯度24

31,首先是权重24梯度,接下来顺次是其他权重的所有梯度,直到第31个权重的梯度。
75.图8图示了在图3

7的全局聚集示例中在十二个ml机器a

l与数据平面120之间交换的数据消息。如图所示,每个ml机器发送数据消息,所述数据消息具有由数字0

31和与ml机器相关联的字母来标识的32个权重梯度(例如,由ml机器a发送的a0

a31,由ml机器b发送的b0

b31,依此类推)。该图还示出了在收集了来自所有ml机器a

l的权重梯度之后,数据平面120将图7的四个消息705

720发送到每个ml机器。
76.这些消息包含所有收集的权重梯度,其中,消息705包括权重梯度a0

l7,消息710包括权重梯度a8

l15,消息715包括权重梯度a16

l23,并且消息720包括权重梯度a24

l31,如图7中图示的。对于32个权重中的每一个,在一些实施例中,每个ml机器m

l如下计算平均权重梯度:将其针对该权重接收的梯度相加并然后将该和除以ml机器的数量(在该示例中为十二个)。
77.上面描述的实施例在从salu寄存器检索所存储的权重梯度期间保持索引值不变,但是在将梯度存储在salu寄存器中期间改变索引值。另一方面,其他实施例在从salu寄存器检索所存储的权重梯度期间改变索引值,但是在将梯度存储在salu寄存器中期间保持索引值不变。
78.不同的实施例使用不同的方法来确保数据平面的不同阶段针对相同的参数标识符生成相同的存储器索引。一些实施例基于共同的散列函数来生成对存储器索引的散列标识符。在这些实施例中,当接收到存储器索引的结果时,这些mau推向下一个存储器索引。在其他实施例中,mau阶段保持参数的有序列表。当他们聚集存储器索引的结果时,mau阶段推向下一个存储器索引。此方法假设没有分组丢失或重排序。仍其他实施例使用转送元件中的电路,其引导mau阶段针对特定存储器索引使用特定标识符来发送。在从存储器索引发送结果时,数据平面还包括应针对该存储器索引发送的下一个参数的标识符。
79.其他实施例还在数据平面120中以不同方式实现参数收集电路150。例如,其他实施例以与上述示例性实施例不同数量的阶段和/或不同数量的salu和有状态表来实现参数提取器152、参数存储154和参数转送电路156。虽然描述了其中出口mau阶段用于实现参数存储154的若干实施例,但是其他实施例使用入口mau的salu来实现参数存储154中的一些或全部。仍其他实施例使用入口和出口mau二者的salu来实现参数存储154。
80.在其他实施例中,数据平面具有专用参数收集电路,其不使用改换目的的消息处理阶段用于参数分发操作。替换地,其他实施例使用其他数据平面配置来实现参数收集电
路150。例如,在一些实施例中,通信量管理器144包括镜像缓冲器,其包括存储包含在由ml机器发送的数据消息中的参数值的一组存储。当实现位图生成器的mau确定了最后的ml机器已提供了具有梯度群组中的最后的权重梯度组的数据消息时,该mau设置消息的相关联头部向量中的位,以向通信量管理器通知:在处理此消息之后,通信量管理器应具有了在梯度群组中的所有梯度。
81.基于此设置,通信量管理器从镜像缓冲器检索所存储的参数值,为每个ml机器生成一个或多个消息,将检索到的所存储的参数值嵌入每个所生成的消息中,并将所生成的数据消息提供至一个或多个出口管线以供转送到ml机器。在一些实施例中,所生成的消息必须再循环回到入口管线,以标识应针对每个ml机器处理每个消息的出口管线。在其他实施例中,tm被配置有这些ml机器的地址。
82.图9图示了一些实施例的匹配动作单元132。如上所述,在一些实施例中,入口管线140或出口管线142具有若干mau阶段132,每个mau阶段132包括消息处理电路,以用于转送接收到的数据消息和/或基于与数据消息相关联的头部向量来执行有状态操作。在一些实施例中,转送元件100的控制平面125或远程控制平面将数据平面120的mau阶段132配置成不仅实现这些mau阶段的转送操作,而且还实现所述mau阶段132中的一些执行的参数收集操作。通过处理存储在为数据消息生成的头部向量中的值来执行这些操作。
83.通过数据平面的以下能力而使得能够实现数据平面的有状态操作:即存储数据平面从处理较早的数据消息而生成的用于处理后续数据消息的数据的能力。为了执行有状态参数收集操作,在一些实施例中,参数收集mau阶段132使用其有状态alu 910及其相关联的有状态表915,如图9所示。除了有状态alu 910和有状态表915之外,在一些实施例中,mau阶段132具有一组一个或多个匹配表905、动作纵横开关930、动作参数存储器920、动作指令存储器925以及动作alu 935。
84.匹配表组905可以比较接收到的消息的头部向量中的一个或多个字段,以标识一个或多个匹配流条目(即,与消息的hv匹配的条目)。在一些实施例中,匹配表组905可以包括tcam(三元内容可寻址存储器)表或精确匹配表。在一些实施例中,可以在以下地址处访问匹配表组:(1)作为从消息的头部向量的一个或多个字段提取的值的地址,或者(2)作为该提取值的散列的地址。在一些实施例中,本地控制平面或远程控制平面提供流条目(例如,流匹配标识符和/或动作标识符)以存储在一个或多个匹配表和相关联的动作表中。
85.在一些实施例中,存储在匹配表记录中的值提供了要在动作参数存储器920和动作指令存储器925中访问和处理的记录的地址,所述值与消息的流属性匹配、或者在来自一个或多个消息流属性的散列生成的地址处访问。联合地或替换地,在一些实施例中,匹配表记录在动作指令存储器中具有相关联的记录和/或在动作参数存储器中具有相关联的记录,所述相关联的记录指定要执行的动作指令和/或要处理的动作参数。由mau阶段132执行的动作可以包括转送元件必须对接收到的数据消息执行以对数据消息进行处理的动作(例如,丢弃消息、或者将消息转送到其目的地机器、或转送到其他居间转送元件)。
86.而且,在一些实施例中,存储在匹配表记录中的与消息的流标识符匹配或在散列生成的地址处访问的值可以提供针对有状态表组915中的一个或多个记录的地址和/或参数,并且可以提供针对该组有状态alu 910的指令和/或参数。如图所示,有状态alu 910和有状态表915还接收经处理的消息的头部向量。头部向量可以包括用于有状态alu的指令
和/或参数,同时包含针对有状态表915的地址和/或参数。
87.在一些实施例中,有状态alu 910执行一个或多个有状态操作,而有状态表915存储由有状态alu 910使用和生成的有状态数据。在一些实施例中,有状态alu与消息处理管线的数据流同步地(即,以数据平面120的数据线速率同步地)执行操作。这样,有状态alu可以在每个时钟周期处理不同的头部向量,从而确保有状态alu将能够与消息处理管线的数据流同步地操作。
88.在一些实施例中,本地或远程控制平面提供配置数据以对数据平面120的mau 132的有状态alu 910进行编程。有状态alu 910将动作参数输出到动作纵横开关930。动作参数存储器920也向该纵横开关930输出动作参数。动作参数存储器920从其记录检索其输出的动作参数,所述记录是通过由匹配表组905提供的地址而标识的。在一些实施例中,动作纵横开关930将从有状态alu 910和动作参数存储器920接收的动作参数映射到动作alu 935的动作参数总线940。该总线将动作参数提供至该alu 935。对于不同的数据消息,动作纵横开关930可以将来自有状态alu 910和存储器920的动作参数以不同的方式映射到该总线940。纵横开关可以将来自这些源中的任一者的动作参数整体提供至该总线940,或者纵横开关可以同时选择这些参数的不同部分用于该总线。
89.动作alu 935还从动作指令存储器925接收要执行的指令。该存储器925从其记录检索指令,所述记录是通过由匹配表组905提供的地址而标识的。动作alu 935还接收针对mau处理的每个消息的头部向量。这样的头部向量还可以包含要处理的指令的一部分或全部和/或用于处理指令的参数。
90.在一些实施例中,动作alu 935是超长指令字(vliw)处理器。动作alu 935基于在动作参数总线940上接收的或包含在头部向量中的参数来执行(来自指令存储器925或头部向量的)指令。动作alu将其操作的输出存储在头部向量中,以便实行其mau阶段132的消息转送操作和/或有状态操作。动作alu的输出形成用于下一个mau阶段或逆解析器的修改后的头部向量(hv')。在一些实施例中,这样的动作的示例包括:(1)对头部向量中的权重梯度中的一些进行位移位,以及(2)将存储在salu表中的参数写入头部向量中。
91.在其他实施例中,mau阶段132的匹配表905以及动作表915、920和925也可以通过其他方法来访问。例如,在一些实施例中,每个动作表915、920或925可以通过直接寻址方案、间接寻址方案和独立寻址方案来寻址。所使用的寻址方案取决于mau阶段的配置,在一些实施例中,所述配置对于正在处理的所有数据消息是固定的,而在其他实施例中,所述配置对于正在处理的不同数据消息可以是不同的。
92.在直接寻址方案中,动作表使用与用于在匹配表组905中寻址匹配流条目相同的地址。如在匹配表905的情况中,该地址可以是散列生成的地址值或来自头部向量的值。具体地,动作表的直接地址可以是mau的散列生成器(未示出)通过对来自消息的头部向量的一个或多个字段的值求散列而生成的散列地址。替换地,该直接地址可以是从头部向量的一个或多个字段提取的值。
93.另一方面,间接寻址方案通过使用地址值来访问动作表,所述地址值是从在匹配表组905中针对消息的头部向量标识的一个或多个记录提取的。如上所述,在一些实施例中,通过直接寻址或记录匹配操作来标识匹配表记录。
94.独立地址方案类似于直接寻址方案,不同之处在于它不使用用于访问匹配表组
905的相同地址。与直接寻址方案类似,独立寻址方案中的表地址可以是从消息的头部向量的一个或多个字段提取的值,也可以是该提取值的散列。在一些实施例中,不是所有的动作表915、920和925都可以通过这三个寻址方案来访问,例如,在一些实施例中,动作指令存储器925仅通过直接和间接寻址方案来访问。而且,其他寻址方案用于寻址所述表中的一些(例如,动作表)。
95.图10概念性地图示了在一些实施例中参数收集电路150执行的过程1000。在一些实施例中,实现参数收集电路150的mau阶段132具有图9中图示的mau电路架构。在一些实施例中,针对由数据平面120处理的从每个特定ml机器接收到的每个数据消息执行过程1000。如图所示,数据平面120最初确定(在1005处)数据消息是否来自ml机器。在一些实施例中,入口mau阶段132如下进行该确定:通过将接收到的数据消息的源信息(例如,mau正在处理的消息的相关联头部向量中的源ip地址和/或源端口地址)与其匹配表905中的记录进行匹配。
96.当数据消息不是来自ml机器时,过程1000结束,并且数据平面120根据其配置的转送操作来处理此消息的头部向量,以便沿此数据消息的路径将其转送到消息的目的地。替换地,当数据消息来自特定的ml机器时,(确定了该消息来自特定的ml机器的)入口mau阶段标记(在1010处)头部向量,以指示其包含来自特定ml机器的权重梯度。
97.接下来,在1015处,该mau阶段或另一mau阶段使其salu 910设置在其有状态alu表915中维持的位图中的位,以标识该特定的ml机器已提供了其针对特定的权重群组的一组权重梯度。在一些实施例中,在处理了该权重梯度组之后(即,在存储了该组中的梯度之后)设置该位。在设置位图时(在1015处),在一些实施例中,salu 910还输出位图,使得salu 910、其相关联的动作alu 935或后续mau 132可以分析位图并确定是否已设置了所有的位以指示所有的ml机器都已提供了其针对特定的权重群组的权重梯度组。当mau阶段确定了位图指示所有的ml机器均已提供了其权重梯度组时,该阶段的动作alu标记头部向量,以指示此向量的数据消息已提供了针对该特定的权重群组的最后的权重梯度组。
98.在1020处,当某些ml机器(例如,机器a、c、e、g、i和k)发送权重梯度时,入口mau 132的动作alu将权重梯度向左移位16位。该移位允许这些机器的权重梯度最终存储在与来自其他机器(例如,机器b、d、f、h和l)的对应权重梯度相同的寄存器中,如图3

6所示。
99.在一些实施例中,入口管线解析器130最初将每个16位权重梯度存储在头部向量中针对该梯度(即,针对该权重)的32位容器的最低有效16位中。在一些实施例中,当数据消息来自需要对其梯度进行移位的ml机器的子集时,一个或多个头部向量属性(例如,源ip/端口地址、ml机器标识符等)匹配入口mau中的匹配表的记录。该匹配记录具有相关联的动作记录,所述动作记录引导该阶段的动作alu将16位梯度从其容器的最低有效16位移位到其最高有效16位。
100.在1025处,过程1000然后根据针对该权重梯度配置的存储模式和数据消息的源ml机器来从其在头部向量中的容器提取每个权重梯度,并将它们存储在出口mau的salu寄存器中。上面参考图3

6描述了这样的存储模式的示例。在一些实施例中,该示例中的模式有十二个出口mau阶段中的八个存储了由每个ml机器分发的32个权重梯度中的四个权重梯度。
101.接下来,在1030处,过程1000确定该数据消息是否是最后的梯度消息,该最后的梯
度消息提供了针对该权重群组的最终权重梯度组。在一些实施例中,在若干mau阶段已针对最后的数据消息存储了所有权重梯度之后,最终的mau阶段或该mau阶段之后的mau阶段然后更新位图,从更新的位图确定已收集了所有权重梯度组,并然后标记最后的数据消息的头部向量,以再循环回通过入口和出口管线,使得可以从mau阶段检索所存储的权重梯度。其他实施例在1035处以不同的方式执行确定和操作。
102.在1035处,tm 144从最后的数据消息为每个ml机器生成若干复制的数据消息。然后,它将这些复制的数据消息传递通过存储所有收集的权重梯度的出口mau管线。然后,这些出口mau阶段根据期望的报告模式(例如,图7中所示的模式)将所收集的权重梯度存储在与每个ml机器的数据消息相关联的头部向量中。在一些实施例中,出口mau的每个salu从其salu寄存器输出期望的权重梯度,并且出口mau的动作alu将输出的权重梯度写入期望的32位容器中、在头部向量中的期望位置。然后,这些头部向量由出口管线逆解析器134打包为数据消息,这些数据消息通过直接有线连接或通过居间网络结构转送到ml机器。
103.在一些实施例中,数据平面120被配置成执行全局归约参数收集操作而不是全局聚集参数收集操作。例如,在一些实施例中,数据平面120将其从ml机器105针对神经网络中的相同权重值收集的不同权重梯度相加,并将针对神经网络中的若干权重中的每个权重的聚合权重梯度分发至ml机器。为了执行其全局聚集操作,数据平面120将其从ml机器接收的浮点权重梯度转换成其聚合的定点权重梯度,并然后将聚合的定点权重梯度转换回聚合的浮点权重梯度,数据平面120将所述聚合的浮点权重梯度分发回ml机器。
104.图11图示了当数据平面120以全局归约实现方式操作时在数据平面120与ml机器105之间的交互。类似于图8,图11示出了数据平面从十二个ml机器a

l接收32个权重梯度0

31。然而,不同于其全局聚集操作,数据平面在其全局归约操作期间将接收到的对应于同一权重i的权重梯度相加,并然后将针对每个权重i具有一个聚合si值的一个数据消息分发至ml机器。
105.对于32个权重中的每个权重,s值等于数据平面从十二个ml机器a

l针对该权重接收的十二个权重梯度的总和,如图11所示。然后,每个ml机器a

l通过将针对每个权重梯度i接收到的梯度和si除以ml机器的数量(在此示例中为十二个)来计算针对每个权重的平均梯度。
106.图12概念性地图示了在一些实施例中当数据平面120被配置成执行全局归约操作时参数收集电路1250的组件。如图所示,参数收集电路1250概念性地包括参数提取器1252、浮点到定点转换器1253、计算引擎1254、参数存储1255、参数转送电路1256和定点到浮点转换器1257。
107.在一些实施例中,在检查接收到的数据消息的头部向量时,参数提取器152确定该数据消息源自ml机器105并且包含一组权重梯度。在一些实施例中,以浮点格式(例如,半精度浮点格式)接收权重梯度。当数据平面120以定点格式执行其梯度相加时,参数提取器152使浮点到定点转换器1253将存储在头部向量中的每个梯度转换成定点格式。如下面进一步描述的,在一些实施例中,该转换器将每个梯度值从存储在头部向量中的32位容器中的16位浮点格式转换成43位定点值,所述定点值作为21位和22位值存储在两个32位容器y和z中。
108.然后,计算引擎1254将针对权重的每个经转换的定点梯度值与针对该权重存储在
存储1255中的聚合梯度值相加。当所接收的数据消息是来自ml机器群组的提供第一组权重梯度的第一数据消息时,计算引擎1254仅将针对每个权重的经转换的定点梯度值保存在针对该权重的存储1255中。在所接收的数据消息具有针对32个权重的32个梯度并且每个梯度作为16位半精度浮点值被接收、且所述16位半精度浮点值被转换成存储在两个32位容器y和z中的43位定点值的实施例中,计算引擎1254将针对权重的32位容器y和z的值加到存储1255中针对该权重的两个32位存储位置。再次地,当所接收的数据消息是来自ml机器群组的提供第一组权重梯度的第一数据消息时,计算引擎1254仅将针对权重的32位容器y和z的值保存在存储1255中针对该权重的两个32位存储位置中。
109.一旦已接收到来自所有ml机器的所有权重梯度组并且计算引擎1254已产生了针对每个权重的总和(即,通过将参数收集电路1250针对每个权重接收的所有梯度相加),参数转送电路1256就将所生成的总和嵌入它发送到若干(例如十二个)ml机器的若干(例如十二个)数据消息中。在参数收集电路1250发送这些消息之前,定点到浮点转换器1257将每个梯度和从定点格式转换成浮点格式。
110.图13概念性地图示了在一些实施例中参数收集电路1250执行的过程1300。在一些实施例中,实现参数收集电路1250的mau阶段132具有上面参考图9描述的mau电路架构。在一些实施例中,针对由数据平面120处理的从每个特定ml机器接收到的每个数据消息执行过程1300。如图所示,数据平面120最初确定(在1305处)数据消息是否来自ml机器。在一些实施例中,入口mau阶段132如下进行该确定:通过将接收到的数据消息的源信息(例如,mau正在处理的消息的相关联头部向量中的源ip地址和/或源端口地址)与其匹配表905中的记录进行匹配。
111.当数据消息不是来自ml机器时,过程1300结束,并且数据平面120根据其配置的转送操作来处理此消息的头部向量,以便沿此数据消息的路径将其转送到消息的目的地。替换地,当数据消息来自特定的ml机器时,(确定了该消息来自特定的ml机器的)入口mau阶段标记(在1307处)头部向量,以指示其包含来自特定ml机器的权重梯度。
112.接下来,在1310处,该mau阶段或另一mau阶段使其salu 910设置在其有状态alu表915中维持的位图中的位,以标识该特定的ml机器已提供了其针对特定的权重群组的一组权重梯度。在一些实施例中,在已处理了该权重梯度组之后(即,在已将该组中的梯度加到针对权重群组维持的梯度和之后)设置该位。在设置位图时(在1310处),在一些实施例中,salu 910还输出位图,使得salu 910、其相关联的动作alu 935或后续mau 132可以分析位图并确定是否已设置了所有的位以指示所有的ml机器都已提供了其针对特定的权重群组的权重梯度组。当mau阶段确定了位图指示所有的ml机器均已提供了其权重梯度组时,该阶段的动作alu标记头部向量,以指示此向量的数据消息已提供了针对该特定的权重群组的最后的权重梯度组。如上所述,在其他实施例中,数据平面使用其他方案(例如,计数器)来标识数据平面何时具有来自所有ml机器的权重梯度组。
113.在1315处,过程1300然后在若干连续的mau阶段中从头部向量检索每个权重梯度,并将每个检索到的梯度从浮点格式转换成定点格式。在一些实施例中,每个权重梯度是以半精度格式表示浮点数的16位值。图14图示了这样的16位值x的示例。如图所示,该16位值的最高有效位(msb)是符号位x.s。接下来的五个位是指数位x.e,并且最后10个位是分数位x.f,也称为有效数或尾数位。该16位值根据以下两个等式表示浮点数:
浮点数n=,当x.e=0时(次正常情况),或者,当x.e≠0时。
114.图14还图示了一些实施例中的mau将(存储在头部向量中的32位容器中的)每个接收到的16位浮点梯度值转换成43位定点值,所述43位定点值作为21位和22位存储在两个32位容器y和z中。如图所示,这43个位虑及:(1)1个符号位;(2)1个额外的位,以虑及当浮点指数(x.e)不为零时上述浮点等式的“1.x.f”分量;(3)31位的值,以表示在不虑及零指数值的情况下的来自5位指数(x.e)的每个可能的指数值;以及(4)10个分数位(x.f)。
115.容器y在下面称为较高容器(upper container)(因为它存储43位值的较高21位),而容器z称为较低容器(因为它存储43位值的较低22位)。32位容器y和z具有足够的额外msb(y有11个,z有10个),以虑及在权重梯度相加时可能产生的进位值。当有十二个ml机器a

l时,这些容器的msb中最多需要4个额外的位来虑及进位值。下面将参考图15来描述将权重梯度从定点格式转换成浮点格式的过程。
116.在将权重梯度从其浮点格式转换成其定点格式之后,该过程确定(在1320处)接收到的数据消息是否是提供针对权重群组的第一权重梯度组的第一消息。在一些实施例中,mau在其salu寄存器中维持位以指示是否已针对权重群组接收到任何先前的数据消息。在接收到第一数据消息时,mau使其动作alu设置头部向量中的值,以向其他mau阶段通知该数据消息是第一数据消息,并且其salu改变其所维持的位的值。在改变该位后,mau将不再修改该值,直到在收集了针对权重群组的所有权重梯度后重置其寄存器为止。在其他实施例中,维持针对权重群组的第一消息位的mau是实现计算引擎1254的mau之一,该计算引擎1254在其salu寄存器中的一个或多个中累加一个或多个权重梯度。在仍其他实施例中,在1320处执行确定的mau评估在数据平面中维持的位图。仍其他实施例以不同的方式进行该确定。
117.当过程1300确定(在1320处)接收到的数据消息是提供针对权重群组的第一权重梯度组的第一消息时,若干mau阶段将定点经转换的权重梯度存储在其相应的salu寄存器中。由于每个43位权重梯度作为21位和22位存储在头部向量中的两个32位容器y和z中,并且每个salu具有四组salu 32位宽寄存器,因此在一些实施例中,每个mau阶段都将两个43位权重梯度值存储在四个32位salu寄存器中。在1325之后,该过程结束。
118.另一方面,当过程1300确定(在1320处)接收到的数据消息不是提供针对权重群组的第一权重梯度组的第一消息时,若干mau阶段(在1330处)将定点经转换的权重梯度与存储在其相应的salu寄存器中的值相加。对于存储在头部向量中两个32位容器ym和zm中的特定权重梯度m,特定的mau在两个32位寄存器中维持权重梯度m的和,这两个32位寄存器一个对应于较高的y容器,并且另一个对应于较低的z容器。对于此权重梯度m,特定的mau将容器ym和zm中的32位值加到这两个32位寄存器。
119.接下来,在1335处,过程1300确定该数据消息是否是最后的梯度消息,该最后的梯度消息提供了针对该权重群组的最终权重梯度组。在一些实施例中,累加权重梯度的每个mau基于位图的值来进行该确定,并且在进行该确定时,该mau输出(在1340处)其已维持在头部向量中的权重梯度和。在其他实施例中,在若干mau阶段已针对最后的数据消息累加了
所有权重梯度之后,最终的mau阶段或该mau阶段之后的mau阶段然后更新位图,从更新的位图确定已收集了所有权重梯度组,并然后标记最后的数据消息的头部向量,以再循环回通过入口和出口管线,使得可以从mau阶段检索权重梯度。其他实施例在1335处以不同的方式执行确定和操作。
120.不管如何在1335处进行收集完成确定,过程1300(在1340处)检索salu寄存器中为每个权重收集的梯度和,将和的结果存储在两个32位y和z容器中,并将每个和从跨越两个容器的定点表示转换成存储在头部向量中的一个16位表示。下面将参考图15来描述用于执行该转换的数据平面操作。
121.在将权重梯度和转换成半精度16位浮点值之后,该过程(在1345处)为每个ml机器生成一个数据消息,将该16位浮点权重梯度和嵌入每个数据消息中,并向每个ml机器发送其数据消息。为此,数据平面120使其tm 144复制最终数据消息(类似于上面参考图2描述的方法),并将权重梯度和嵌入这些复制的消息中。在其他实施例中,数据平面使其消息生成器135生成填充有累加权重梯度和的消息。
122.其他实施例以不同的方式实现这些操作。例如,一些实施例首先为每个ml机器生成复制的消息,然后检索定点权重梯度和并将这些和转换成浮点格式。而且,在一些实施例中,来自ml机器的数据消息必须被再循环通过数据平面一次或多次,以生成每个权重的权重梯度和,以便在每个数据消息中支持更多的ml机器和/或更多的权重,这将需要比在数据平面的入口和出口管线的一遍通过中计算所述和可用的阶段和资源更多的阶段和资源。
123.而且,代替43位实现,其他实现将16位浮点转换成42位表示,并且关于所述42位表示执行聚合。这些实施例使用11位用于正常值(即,1加10位用于分数)。对于指数1,这些实施例不需要进行任何移位,因为正常值的幂偏差为负15,而次正常值的偏差为负14。因此,在这种方法下,指数1具有0移位(以与次正常值对齐),并且指数31具有30位的移位。因此,需要总共42个位以用于1个符号位、30位用于移位、以及11位用于分数(1加上10位分数)。使用该方法的一些实施例使用32位y和z容器的较低21位值。
124.图15图示了一些实施例执行的以下操作:将浮点权重梯度wi转换成定点权重梯度,将经转换的权重梯度与针对该梯度的相关联权重所维持的总si相加,并将定点权重梯度和转换成浮点权重梯度和。在一些实施例中,这些操作中的每一个由一个或多个mau阶段来执行。下面将参考将半精度的16位浮点梯度转换成存储在两个容器y和z中的43位梯度的示例来描述这些操作,这些示例在上面描述的图14中图示。
125.如图所示,第一操作由符号处理电路150执行,处理电路150虑及半精度浮点数中的符号值。下面的伪代码描述了符号电路1505实现的数据平面配置逻辑。如所示,当指数为零时,符号电路最初将容器y和z都设置为(1)负x.f(当符号为负且指数为零时);(2)正x.f(当符号为正且指数为零时);(3)10000000000减去x.f(当符号为负且指数不为零时);以及10000000000加x.f(当符号为正且指数不为零时)。if x.e==0:
ꢀꢀ
//次正常
ꢀꢀꢀꢀ
if x.s==1: y=z=

x.f
ꢀꢀꢀ
//当值为负时
ꢀꢀꢀꢀ
if x.s==0: y=z=x.f
ꢀꢀꢀ
//当值为正时else
ꢀꢀꢀꢀ
if x.s==1: y=z=

0x400

x.f
ꢀꢀꢀ
//当值为负时
ꢀꢀꢀꢀ
if x.s==0: y=z=0x400+x.f
ꢀꢀꢀ
//当值为正时(if,若;else,否则)。
126.在一些实施例中,一个mau阶段实现符号电路1505。该mau阶段使用带有以下记录的tcam来标识mau阶段的动作alu必须执行的操作。
127.tcam表。
128.在上表中,x意指不相关值(do not care)。普通技术人员将意识到,在一些实施例中,tcam表不指定操作指令而是直接或间接地标识mau的动作指令存储器中的指令,以供该阶段的动作alu执行。若没有此tcam,将需要多达三个精确匹配表来实现符号电路1505的操作。在二进制补码逻辑中,通过将每个位取反并将结果加1来产生数字二进制补码数的负数。而且,在此逻辑中,将值左移1实现乘以二的操作,而将值右移1实现除以二的操作。
129.在符号电路1505处理梯度之后,移位电路1510对y和z容器值执行移位操作以虑及半精度值的指数值。下面的伪代码描述了移位电路1510实现的数据平面配置逻辑。如所示,当指数不为零时,移位电路150将z容器中的位向左移位指数值(在这种情况下其在1

31之间)减1。而且,当指数值大于23时,移位电路150将y容器中的位向左移位指数值(在这种情况下其在24

31之间)减23,而当指数值是23或更小时,移位电路150将y容器中的位向右移位23减指数值(在这种情况下其在1

23之间)。23之间)。。
130.在一些实施例中,基于梯度的指数值与匹配表记录的匹配,通过一个或多个mau阶段的一个或多个动作alu来执行该移位操作。而且,如上所述,在一些实施例中,容器y和z是经处理的数据消息的头部向量中的两个容器。因此,在这些实施例中,移位电路1510将其(一个或多个)移位操作的结果存储回头部向量中的这些容器y和z中。
131.在移位电路1510完成其针对权重梯度wi的移位操作并将该操作的结果存储在头部向量中的针对该权重梯度的容器y和z中之后,权重梯度已被转换成存储在两个32位容器y和z中的其43位格式。因此,累加电路1515然后可以存储该权重梯度或将其加到salu存储,该salu存储存储了从所有ml机器接收的所有权重梯度wi的和。
132.在一些实施例中,mau阶段的两个salu实现累加电路1515,其中每个salu存储或加
上针对特定的权重梯度wi的一个容器值y或z。当正在处理的数据消息是来自提供权重梯度组的群组的ml机器的数据消息群组中的第一数据消息时,这两个salu寄存器从头部向量中的y和z容器提取y和z 32位值,并将这些值存储在其y和z salu寄存器中。另一方面,当所处理的数据消息不是群组中的第一数据消息时,每个salu从头部向量中的y或z容器提取其对应的y或z 32位值,检索存储在其对应的寄存器y和z中的值,并加上所提取和检索的值,并将结果存储回y或z寄存器中。
133.一些实施例对电路1505

1510的累加侧操作进行管线化,以便最大化在数据平面120的每一遍通过中可以转换成定点并进行累加的权重梯度的数量。即使有这种管线化,在一些实施例中,数据平面可能也不能在入口管线和出口管线的一遍通过中就处理所有的权重梯度。在这些实施例中,将经处理的数据消息从出口管线再循环回入口管线一次或多次,以完成所有权重梯度的处理和累加。
134.一些实施例通过假设权重梯度将在小的数值范围内(例如,

2到2)来进一步归约数据平面的累加侧处理。基于此假设,这些实施例将每个16位半精度浮点数转换成适合一个32位容器内的较小位数(例如27位)。这种方法需要较少的数据平面资源来转换、累加和存储数字,进而释放了数据平面资源来在数据平面的每一遍通过期间处理更多的权重梯度。
135.一旦所有ml机器已提供了针对权重群组的其权重梯度组,就可以从salu寄存器1520读取权重梯度和,并在将其嵌入数据消息中并传输给ml机器之前将其转换回浮点格式。对于一个权重梯度和si,此转换从进位/借位调整器1525开始。该调整器从salu寄存器1520提取与该和相关联的y和z容器值,并基于较低容器z的值修改较高容器y的值,以虑及所需的进位或借位操作,其需要在组合包含在这两个容器中的值之前执行。
136.具体地,如下面的伪代码所指定的,进位/借位调整器最初基于较低z容器是否为负来计算t值。较低容器z应只有22位,但是将不同的数字相加可能会导致其进位(z为正数时)和借位(z为负数时)。进位和借位的位是容器z的10个msb。进位/借位的位保存在称为t的变量中。当z为负时,t也必须为负。这就是为什么当z为负时t串联(并接)有22位的1(0xfffff3)的原因;否则,t是0和z容器的10个msb的串联。。
137.进位/借位调整器还将z向左移位10位,以确保z容器的数据部分位于此容器的左侧。如上所述,一些实施例使用一个或多个mau阶段的一个或多个动作alu来执行移位操作。进位/借位调整器1525将y和z的调整后的值写入正在处理的数据消息的两个容器中,以检索和权重梯度。
138.在处置了进位/借位调整之后,符号电路1530检查头部向量中的容器y和z的值,并基于这些值执行操作以虑及y的可能的负值。下面的伪代码概念性地描述了在一些实施例中的符号电路1530的操作。如所列出的,如果确定y为负数,则将x.s(即半精度浮点表达中的符号值)设置为1;该值最初设置为0,并且当确定y不为负时,x.s保留该值。而且,如果y为
负且z不为零,则将y设置为非y并将z设置为负z加10000000000。。
139.如果在加上进位/借位后y为负,则必须设置符号位,并且必须使数字为正。如上所述,在二进制补码计算中使数字为正意味着将该数字的每个值取反并加1。为了使z和y为正,必须将y设置为非y并且必须将z设置为非z+0x400。(请记住,z被移位了10位,因此1为0x400)。然而,很难在硬件中计算非z+0x400。因此,一些实施例将z计算为非z+1+0x3ff,可以将其简化为

z+0x3ff。有一种特殊情况,如果z为0,则非z+0x400将进位。在这种情况下,z应该保持0,但y应该是非y+1,本质上是

y。因此,在一些实施例中,描述符号电路的操作的伪代码可以表示为:。
140.一旦符号检查操作完成,指数标识电路1535就标识y和z的串联中的最左边的1值,并使用该值来设置x.e(即,半精度浮点表达中的指数值)。该最左边的1值标识y和z的串联中的标识与对应于定点值的浮点值相关联的分数位(x.f)开始的位置。例如,在一些实施例中,最左边的1之后的位是分数位(x.f)的开始。一些实施例不检查最左边的位是否在最右边的9位中,因为这将是次正常值的情况。
141.在一些实施例中,下面的伪代码表示指数标识电路1535的操作。如下面的伪代码所示,串联是y容器的32位加上z容器的最高22位。m=concat (y, z[31:10])中的最左边的1的索引x.e=max (m

9, 0)。
[0142]
为了标识y和z的串联中最左边的1值,一些实施例使用mau阶段的tcam匹配表。在一些实施例中,tcam匹配表通过存储n条记录来标识接收到的n位值中的最左边的1值,每个记录存储一个n位值,其中单个有效位被设置为1,并且所有其他位为0或不相关值。记录以较早的tcam位置中具有较大的n位值(即,最左边的有效1值)的顺序存储在tcam中。在这些实施例中,tcam同时比较接收到的n位值与所有存储的n位值。
[0143]
在这些实施例中,当多个存储的n位值与接收到的值匹配时,tcam选择具有与接收到的值中的1位匹配的最左边的有效1位的所存储的n位值。具体地,在一些实施例中,在将接收到的n位值与每个存储的n位值进行比较时,tcam仅将所存储的n位值中的单个有效1值与接收到的值中的对应位进行比较,以确定这两个n位值是否匹配。在一些实施例中,当接收到的值与至少一个n位值匹配时(即,当接收到的值具有与所存储的n位值的对应位中的1值匹配的1时),tcam输出值,所述值标识在具有最左边的有效1位的匹配n位值中的匹配的
x.f=与0x3ff进行与操作的y
ꢀꢀ
/掩蔽操作/。
[0148]
为了实现此逻辑,一个或多个mau阶段执行符号操作:当y为负时,将x.s设置为1并对y取反。然后另一mau阶段标识y中的最左边的1值的位置。如上所述,此最左边的1值标识y和z的串联中标识与跟定点值相对应的浮点值相关联的分数位(x.f)的开始的位置。如上面进一步讨论的,一些实施例通过将tcam用于mau阶段的匹配表来标识最左边的1的位置m,其中该tcam输出标识y中的最左边的位的值。当m小于9时,y值与次正常情况相关联。因此,mau阶段将x.e设置为零,并且y不移位。
[0149]
另一方面,当m等于或大于9时,一个或多个mau阶段将x.e设置为m

9,并将y向右移位x.e减1。如上所述,在一些实施例中,一个或多个mau阶段的动作alu用于将多位值的位向右或向左移位指定量。最后,mau阶段执行掩蔽操作:将x.f设置为等于y和0x3ff的“与”结果(即,将x.f设置为等于y的较低10位)。因此,本领域技术人员将理解,本发明不应受到前述例证性细节的限制,而是应由所附权利要求书来限定。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1