环形计算机网络上的嵌入环

文档序号:1957956 发布日期:2021-12-10 浏览:11次 >En<

阅读说明:本技术 环形计算机网络上的嵌入环 (Embedded ring on ring computer network ) 是由 S.诺尔斯 于 2020-03-26 设计创作,主要内容包括:一种计算机,包括多个相互连接的处理节点,这些处理节点以具有多层的配置布置,多层沿轴线布置,包括第一和第二最末端层以及第一和第二最末端层之间的至少一个中间层。每层包括多个处理节点,通过每对相邻处理节点之间的层内各自的链路集合连接成环,这些链路适于同时操作。每层的节点通过层间链路与每一相邻层的各自对应节点相连。第一最末端层的每个处理节点与第二最末端层的对应节点相连。数据围绕多个嵌入式一维逻辑环以非对称带宽利用率传输,每个逻辑环以多个嵌入式一维逻辑环同时操作的方式使用计算机的所有处理节点。(A computer comprising a plurality of interconnected processing nodes arranged in a configuration having a plurality of layers, the plurality of layers being arranged along an axis, including first and second endmost layers and at least one intermediate layer between the first and second endmost layers. Each tier includes a plurality of processing nodes connected in a ring by respective sets of links within the tier between each pair of adjacent processing nodes, the links being adapted to operate simultaneously. The nodes of each layer are connected with the corresponding nodes of each adjacent layer through the link between layers. Each processing node of the first last-end tier is connected to a corresponding node of the second last-end tier. Data is transmitted around multiple embedded one-dimensional logical rings with asymmetric bandwidth utilization, each logical ring using all processing nodes of the computer in such a way that the multiple embedded one-dimensional logical rings operate simultaneously.)

环形计算机网络上的嵌入环

技术领域

本公开涉及连接在计算机中的处理节点之间的数据交换,特别是但不限于在机器学习/人工智能应用中优化数据交换。

背景技术

集合(collective)是在计算机中处理数据时常用的例程。它们是使数据能够跨多个不同的进程共享和处理的例程,这些进程可以在相同的处理节点或不同的处理节点上运行。例如,如果一个进程从数据存储中读取数据,它可以使用“广播”进程与其他进程共享该数据。另一示例是当特定函数的结果在多个进程上被需要时。“归约(reduction)”是需要将计算函数应用于来自多个进程的每一个的数据值的结果。“聚集”和“分散”集合处理一个以上的数据项。某些集合在处理机器学习应用中变得越来越重要。

MPI(消息传递接口)是消息传递标准,其可以应用于许多并行计算架构。MPI定义了一些适用于机器学习的若干集合。一个这样的集合被称为“Allreduce”。Allreduce操作使计算函数作用于来自不同源进程的多个数据值的结果能够被提供给接收进程。请注意,接收进程可以是源进程之一,并且可以存在多个接收进程。Allreduce集合归约了来自多个源进程的数据值,并将结果分配给所有的源进程,(它们充当归约结果的接收进程)。根据MPI标准,Allreduce集合是通过在归约集合中归约来自所有源进程(例如这些进程中的一个)的数据值,然后将结果广播给每个源进程来实施的。

图1是用于训练神经网络的分布式架构的示意框图。提供了训练数据的源100。这可以是数据库或任何其他种类的数据存储,能够保持适用于被训练的神经网络模型的训练数据。根据神经网络模型的处理本身分布在多个处理单元110a、110b、110c等。图1中只示出了三个单元,但很容易理解的是,任何数量的处理单元都可以被利用。每个处理单元110a、110b、110c从训练数据源100接收成批的训练数据。每个处理单元110a、110b、110c保持定义模型的参数集112a、112b、112c。一批传入的训练数据在计算函数114中用当前的参数集进行处理,计算函数的结果被用来生成所谓的增量(delta),它作为关于该批训练数据和当前参数集应用计算函数的结果,表示原始参数和新参数之间的差异。在许多神经网络中,这些参数被称为“权重”,因此增量值被称为“增量权重”。在图1中,权重被标记为112a、112b、112c,增量权重被标记为116a、116b、116c。可以理解的是,在实践中,权重和增量权重被存储在处理单元可访问的适当的存储中。如果权重和增量权重可以被保持在本地存储器中,这将使训练过程更加有效。

图1的架构的目的不是训练三个独立的模型,而是以分布式的方式训练单一的模型。因此,目的是让每个处理单元的模型参数(或权重)收敛到单一的共同集。显然,从任何特定的权重集开始,并假设每个处理单元收到的训练数据批次不完全相同,那么会存在由每个处理单元的每个计算函数产生的增量权重的变化。因此,所需要的是一种方法,在分批训练数据的每次迭代之后,跨处理单元分布增量权重。这在图1中被示意示出,其中组合函数118接收来自每个处理单元的增量权重,并执行归约增量权重的数学函数,诸如平均函数。然后,组合函数118的输出被分别反馈到每个处理单元内的组合电路120a、120b和120c。这样就产生了作为原始权重和组合函数118的组合输出的新的权重集,新的权重118a、118b、118c被储存回本地存储器中。然后,下一批训练数据被提供给每个处理单元,该过程重复多次。很明显,如果处理单元的起始权重是相同的,那么在每次迭代之后,它们将被再次重置为相同的新值。很容易看出,上述情况是Allreduce函数特别有用的示例。增量权重被提供给组合函数118a,在那里它们被归约,然后它们以归约的形式被提供回处理单元中的每一个,在那里它们可以与原始权重组合。

图1A是示意图,示出了Allreduce集合如何在五个处理节点N0...N5的线连接拓扑中实施的。这些处理节点可以对应于图1的处理单元,其中分布着组合函数。这些处理节点被示出以线状配置连接,其中每个处理节点通过“前向”链路LF和“后向”链路LB与它的邻居相连。如图所示,正如方向性短语所暗示的那样,前向链路在图1A中从左到右连接处理节点,而后向链路在图1A中从右到左连接处理节点。每个处理节点都具有指定为200的处理能力,和指定为202的存储能力。处理能力和存储能力可以用非常多的方式中的任何一种实施。在一个特定的表现形式中,处理节点可以包括多个瓦片,每个单独的瓦片都具有它自己的处理能力和相关联的存储能力。每个处理节点也具有一个或多个链路接口,使它能够经由链路LF/LB与其相邻的节点连接。

为了理解Allreduce集合的实施,假设第一节点N0生成了标记为Δ0的“部分”向量。“部分”可以是数据结构,包括增量权重的阵列,诸如向量或张量。部分向量是部分阵列,每个部分对应于处理节点上的计算。每个“部分”可以是增量权重集。这被存储在存储能力202中,准备在Allreduce集合中进行交换。在简单的“流”线Allreduce算法中,前向链路用于“归约”,后向链路用于“广播”。该算法在一端的处理节点(图1A中的左手节点)开始,将其部分Δ0发送到其相邻的节点N。在这个节点上,传入的部分(本例中的Δ0)用由在处理节点N1处的计算能力200生成的对应部分Δ1进行归约。这种归约的结果(在图1A中示出为ADD函数)然后从处理节点N发送到下一连接节点N。正如本文进一步提到的,ADD函数可以被任何可以用于归约部分的组合函数所取代。这个过程在每个处理节点发生,直到在最后的处理节点,在图1A中表示为N4,部分的归约完成了。在这一点上,归约(求和Δ)经由后向链路LB被送回每个处理节点。它在每个节点被接收,存储在该节点的存储器能力中,然后也传输到下一个节点。通过这种方式,每个处理节点以归约的结果结束。

图1B示出了归约和广播阶段的时序图。请注意,处理节点在收到前一节点的传入数据之前,不能向下一节点发送归约的结果。因此,在前向链路上的每个出站传输都有固有的等待时间标记Δ。

此外,在终端节点获得完全归约的结果之前,后向链路不会被用于广播。然而,如果部分向量由于流水线效应而很大,那么结果的引导数据项将在起始节点完成发送其部分数据项之前返回到该节点,因此所有前向和后向链路上的活动可能会有很大的重叠。

在对这一算法的修改中,表示了小的改进,线每端的处理节点可以开始向中心节点发送它们的部分数据,在中心节点上完成归约。在这种情况下,结果被广播回给末端节点。请注意,在这种情况下,会存在运动方向的逆转,例如在前向和后向链路两者上在节点N2和N3之间,以及N3和N4之间。如果线被封闭成环(通过在前向和后向链路两者上将最后的节点N5连接到第一节点N0),流水线算法可以在同一方向上序列化归约和广播,这样由双向链路形成的两个逻辑环可以各自独立操作一半的数据。也就是说,每个部分向量被分成两部分,第一部分ΔA在前向链路上被归约(如图1A),并在N5和N0之间的连接腿上广播。向量的另一半ΔB在后向链路上被归约,然后在后向链路的连接环上广播。

图1D示出了前向和后向链路的对应时序图。

A.图1A和图1C所示出的一维环的原理可以扩展到二维的环,诸如环形或环形连接的计算机中。

使用二维的环,替代方法是使用Allgather集合后跟归约-分散集合来实施Allreduce。Jain和Sabharwal撰写的题为“Optimal Bucket Algorithms for large MPIcollectives on torus interconnects”的论文(ICS'10,6月2-4日,筑波),呈现了假设环形互连处理器的处理节点之间的双向链路的Allgather、归约-分散和Allreduce集合的基于水桶的算法。这种方法在每一步都存在多个数据值(片段)需要处理的基础上操作。在归约-分散集合中,每个进程都从初始部分向量开始。假设这里提到的进程是在处理节点上实施的进程。部分向量可以被分成多个元素或片段。所有进程的对应元素被归约,然后这些被归约的元素被跨进程分布。在Allgather集合中,每个进程都从所有其他进程中接收所有元素。归约-分散集合归约所有的部分,并将每个归约存储在各自的节点上-见图2。Allreduce集合操作可以通过执行归约-分散集合后跟Allgather集合操作来实施。

正如Jain的论文中所讨论的,环形互连是分布式存储器超级计算机的有吸引力的互连架构。在上述讨论中,集合已经在进程之间的通信上下文中进行了说明。在分布式超级计算机中,处理节点是相互连接的,每个处理节点可以在集合的上下文中负责一个或多个进程。环形互连是一类网状互连,处理节点布置成N个维度的阵列,每个节点与最近的邻居相连,阵列相对边缘的对应节点也相连。互联的处理节点之间存在双向的通信链路。

由Jain和Sabharwal撰写的上述论文中所讨论的用于实施集合的算法被应用于环状连接架构。这允许集合同时处理不同维度的环中的向量的不同片段,使得处理带宽高效。事实上,Jain和Sabthawal将他们的技术呈现为对非对称环来说是最优的,而且本领域已经接受了这种情况。

本公开的目的是呈现改进的计算机和方法,用于实施Allreduce函数,特别是但不限于用于机器学习的处理函数的使用。虽然本文描述的拓扑和配置对于Allreduce的有效实施特别有效,但它们也可以有利地使用于其他机器学习集合和其他类型的并行程序。

虽然本文描述的拓扑和配置对于Allreduce的有效实施特别有效,但它们也可以有利地使用于其他机器学习集合和其他类型的并行程序。

发明内容

根据本发明的一方面,提供了一种计算机,包括多个相互连接的处理节点,这些处理节点以具有多层的配置布置,多层沿轴线布置,包括第一和第二最末端层以及第一和第二最末端层之间的至少一个中间层;

每层包括多个处理节点,通过每对相邻处理节点之间的层内各自的链路集合连接成环,每个集合中的链路适于同时操作;

其中,每层中的处理节点通过层间链路与每一相邻层的各自对应节点相连,其中,第一最末端层的每个处理节点与第二最末端层的对应节点相连;

该计算机被编程为围绕多个嵌入式一维逻辑环传输数据,每个逻辑环使用计算机的所有处理节点,其方式是多个嵌入式一维逻辑环同时操作,每个逻辑环使用计算机的所有处理节点;

其中,计算机被编程为以非对称的带宽利用方式传输数据。

在一些实施例中,层内链路带宽的利用大于沿轴线带宽的利用。

在一些实施例中,嵌入式环是同构的。

可以利用计算机以本文所述的方式实施Allreduce集合。

在一个实施例中,层内链路集合包括两个链路,带宽利用沿轴线为B/6,每层内为B/3,其中B是每个处理节点的总带宽。可以嵌入三个环。

在另一实施例中,层内链路集合包括三个链路,带宽利用率在每层内为3B/8,沿轴线为B/8。可以嵌入四个环。

数据可以沿着每个环以逆时针或顺时针的方向通过每层的处理节点。在一些实施例中,数据可以在同一方向上通过连续的层。在其他实施例中,数据可能以相反的方向通过连续的层。许多变体都是可能的。

每个处理节点可以包括被配置为存储准备在归约分散阶段交换的数据项的阵列的存储器,其中每个数据项分别被定位在阵列中,对应的数据项分别被定位在其他处理节点的阵列的对应位置上。阵列可以是“部分”(部分结果的向量)或“结果”(完全归约的部分的向量)。

处理节点可以被编程为在归约分散阶段在每个环,以向前的方向向其相邻的处理节点传输数据项。在每个步骤中可以被传输的数据项被称为“片段”。片段是向量段-如本文所述,向量被划分为片断,以利用嵌入环中形成的逻辑环。

每个阵列可以表示部分增量的向量的至少一部分,每个部分增量表示对存储在每个处理节点的值的调整。每个处理节点可以被编程为在计算步骤中生成部分增量的向量。每个处理节点可以被编程为将其向量划分为子阵列,以便分别利用嵌入式环。

每个处理节点可以被编程以停用其在数据传输步骤中未使用的层间和层内链路中的任何一个。

每个处理节点可以被编程为将该节点各自的部分向量分成片段,并以连续片段的形式围绕每个一维路径传输数据。

计算机可以被编程为将每个路径作为逻辑环集来操作,其中连续的片段在同步传输步骤围绕每个逻辑环传输。

每个处理节点可以被配置为同时在其层内和层间链路中的每一个上输出各自的片段。

每个处理节点可以被配置为用各自对应的本地存储的片段归约传入的片段。

每个处理节点可以被配置为在Allreduce集合的Allgather阶段同时在其链路中的每一个上传输完全归约的片段。

在一些实施例中,一些或所有链路是双向的,即它们可以通过链路双向传输数据,可选地同时进行。

本发明的另一方面提供了一种生成在计算机上并行执行程序集的方法,包括多个相互连接的处理节点,这些处理节点以具有多层的配置布置,多层沿轴线布置,包括第一和第二最末端层以及第一和第二最末端层之间的至少一个中间层;

每层包括多个处理节点,通过每对相邻处理节点之间的层内各自的链路集合连接成环,每个集合中的链路适于同时操作;

其中,每层中的处理节点通过层间链路与每一相邻层的各自对应节点相连,其中,第一最末端层的每个处理节点与第二最末端层的对应节点相连;

该方法包括

为每个程序生成至少一个数据传输指令,以定义数据传输阶段,其中数据从执行该程序的处理节点传输,其中该数据传输指令包括链路标识符,该标识符定义了在该数据传输阶段要在其上传输数据的输出链路;以及

确定链路标识符以便围绕多个嵌入式一维逻辑环传输数据,每个逻辑环使用计算机的所有处理节点,其方式是多个嵌入式一维逻辑环同时操作,每个逻辑环使用计算机的所有处理节点;

其中,生成程序以非对称带宽利用的方式传输数据。

在一些实施例中,层内链路带宽的利用大于沿轴线带宽的利用。

在一些实施例中,每个程序包括一个或多个指令,以停用其在数据传输步骤中未使用的层间和层内链路中的任何一个。

在一些实施例中,每个程序包括一个或多个指令,用于将执行该程序的处理节点的各自部分向量划分为片段,并以连续片段的形式通过各自定义的链路传输数据。

在一些实施例中,每个程序包括一个或多个指令,以同时在多个链路的每一个上输出各自的片段。

在一些实施例中,每个程序包括一个或多个指令,以归约传入的片段与各自对应的本地存储片段。

在一些实施例中,每个程序包括一个或多个指令,以在Allreduce集合的Allgather阶段同时在其每个链路上传输完全归约的片段。

本发明的另一方面提供了执行在计算机上并行的程序集的方法,包括多个相互连接的处理节点,这些处理节点以具有多层的配置布置,多层沿轴线布置,包括第一和第二最末端层以及第一和第二最末端层之间的至少一个中间层;

每层包括多个处理节点,通过每对相邻处理节点之间的层内各自的链路集合连接成环,每个集合中的链路适于同时操作;

其中,每层中的处理节点通过层间链路与每一相邻层的各自对应节点相连,其中,第一最末端层的每个处理节点与第二最末端层的对应节点相连;

该方法包括

为每个程序执行至少一个数据传输指令,以定义数据传输阶段,其中数据从执行该程序的处理节点传输,其中该数据传输指令包括链路标识符,该标识符定义了在该数据传输阶段要在其上传输数据的输出链路;以及

该链路标识符已被确定,以便围绕由各处理节点集合和链路形成的多个嵌入式一维逻辑环中的每一个传输数据,其方式是多个嵌入式一维逻辑环同时操作,每个逻辑环使用计算机的所有处理节点;

其中,数据以非对称的带宽利用方式传输。

在一些实施例中,层内链路带宽的利用大于沿轴线带宽的利用。

在一些实施例中,执行程序将每个路径作为逻辑环集来操作,其中在每个处理节点提供的部分向量的连续片段在同步传输步骤围绕每个逻辑环进行传输。

附图说明

为了更好地理解本发明以示出如何实施本发明,现在将通过示例的方式参考附图。

图1是示出神经网的分布式训练示意图。

图1A是示出了用于实施简单的“流”线Allreduce算法的处理节点的线的示意图。

图1B是“流”线Allreduce算法的时序图。

图1C是末端节点连接成环的线的示意图。

图1D是环形Allreduce算法的时序图。

图2是示出通过归约-分散步骤后跟Allgather步骤的Allreduce功能的实施的示意图。

图3A和图3B示出了基于桶的Allreduce算法。

图4是其中嵌入了三个环的处理节点的“三角环形”配置示意图。

图5C示出了具有2:1带宽非对称的3x8环。

图5B示出了三个同构的嵌入环,它们可以在图上同时循环,每个环使用每链路B/6。

图5C示出三维视图,示出了三个嵌入环的一个替代;另外两个环是围绕长轴旋转120°的相同的环。

图5D示出三维视图,示出了三个嵌入环的另一替代;另外两个环是围绕长轴旋转120°的相同的环。图6A示出了具有3:1带宽非对称的4x6环。

图6B示出了四个同构的嵌入环,它们可以在图上同时循环,每个环使用每链路带宽B/8。

图6C示出三维视图,示出了四个嵌入环的一个;另外三个环是围绕长轴旋转90°的相同的环。

具体实施方式

本发明的各方面是在多瓦片处理器的上下文中开发的,该处理器被设计为机器学习工作负载的加速器。该加速器包括多个互连的处理节点。每个处理节点可以是单一的多瓦片芯片,多个芯片的封装,或多个封装的机架。本文的目的是设计在确定性(可重复性)计算方面非常高效的机器。处理节点以使集合(特别是广播和Allreduce)能够有效实施的方式相互连接。

一个特定的应用是在使用分布式处理训练神经网络时更新模型。在这种上下文中,分布式处理利用了多个处理节点,这些处理节点处于不同的物理实体中,诸如芯片或封装或机架。也就是说,处理节点之间的数据传输需要通过物理链路交换消息。

开发专门用于机器学习的拓扑的挑战与高性能计算(HPC)网络的一般领域的挑战不同。HPC网络通常强调按需异步的所有对所有的个性化通信,因此动态路由和带宽过度供应是正常的。在HPC网络中可以为了减少等待时间而不是提供带宽的目的提供多余的带宽。过度提供主动通信链路会浪费电力,而这可能有助于改善计算性能。目前计算中最常见的链路类型,无论是否用于传输数据,在其处于活动状态时都会消耗电能。

本发明人已经开发了机器拓扑,它特别适合于MI工作负载,并解决了MI工作负载的以下属性。

本实施例提供了不同的结构,其中R环被嵌入到R x N环上,其中,R是层中的节点数,N是层数,每个环在移动到下一层之前都会访问层中的所有节点。

在MI工作负载中,芯片间的通信目前主要由广播和Allreduce集合主导。广播集合可以由分散集合后跟Allgather集合来实施,而Allreduce集合可以由归约-分散集合后跟Allgather集合来实施。在这种上下文中,术语芯片间表示经由外部通信链路连接的处理节点之间的任何通信。如前所述,这些处理节点可以是芯片、封装或机架。

请注意,通信链路可以在印刷电路板上的芯片之间,或者在不同印刷电路板上的芯片之间。

可以编译工作负载,以便在单独智能处理单元(IPU)机器内,所有对所有的通信主要是芯片间的。

Allreduce集合已经在上面进行了描述,并在图2中进行说明。图2示出了在起始状态S1的四个节点中的每一个上的部分值的集合或“部分”向量P0、P1、P2、P3。在这种上下文中,节点是处理节点网络中的处理节点。请注意,每个节点N0、N1、N2、N3都有四个“对应的”部分,它们被相应地标记(大的菱形网格、宽的向下对角线条纹、大的方形网格、宽的向上对角线条纹)。也就是说,每个部分在其部分向量中都具有位置,这样P0(n)在其节点n上的向量中与P0(n+1)在节点n+1上的向量中的具有相同的位置。后缀(n)用来表示该部分驻留其中的节点-因此P0(0)是节点N0上的部分P0。在归约-分散传递中,对应的部分被归约,并将该归约提供给节点之一。例如,部分P0(0)、P0(1)、P0(2)、P0(3)被归约(到r0)并被放到节点N0上。类似地,部分P1(0)、P1(1)、P1(2)和P1(3)被归约(到r1)并被放置到节点N上。以此类推,在中间状态S2中,每个节点都有归约r0、r1、r2和r3之一。正如所说明的,归约可以由任何组合函数-它可以包括独立运算符(例如max)或关联运算符=P1(0)*P1(1)*P1(2)*P1(3)进行。然后,在Allgather传递中,每个归约被提供给所有节点,以激活状态S3,其中每个节点现在保持所有四个归约。请注意,在S1中,“对应的”部分,例如P0(0)、P0(1)、P0(2)和P0(3)可能都不同,而在状态S3中,每个归约,例如r0,在所有节点都是一样的,其中ri=f{(Pi(0),Pi(1),Pi(2),Pi(3))}。在机器学习中,部分P0、P1、P2、P3的集合是向量。在训练期间,模型的每一次传递都会产生部分的向量(例如更新的权重)。菱形网格、向下对角线条纹、方形网格、向上对角线条纹上的每个节点在状态S3的归约r0、r1、r2、r3是完整的归约向量,其是“结果”或完全归约的向量。在机器学习的上下文中,每个部分可以是模型中参数的更新增量。或者(在本文未进一步描述的安排中),它可以是更新的参数。

图3A和图3B示出了基于桶的算法,用于假设有六个“虚拟环”的归约-分散/Allgather。这些在这里也被称为“逻辑”环。图3A示出在多个虚拟环中部分的归约的示意图。每个部分被分割成六个片段。在图3A中,大写字母R、Y、G、B、P、L分别表示存储在每个节点上的部分的不同的片段,用线影的菱形网格、向上对角线条纹、方形网格、水平条纹、向下对角线条纹、垂直条纹表示。这些字母表示对应的片段,这些片段将被相互归约,并定义了这些片段的“虚拟”或“逻辑”环。看一下图3A,部分P0、P1、P2、P3和P4中的每一个的“R”片段在结果向量中被归约成单一片段对Y、G、B、P和L片段也是如此。

图3B示出了时序图,横轴上的时间指示Allreduce过程中每一步的数据交换和计算。在图3A和图3B中,Allreduce过程是由归约-分散阶段后跟Allgather阶段完成的。在图3B中,片段中的每一个都用不同的线影方式表示,如下所示:R-菱形网格,Y-向上对角线条纹,G-方形网格,B-水平条纹,P-向下对角线条纹,L-垂直条纹。

图3A和图3B中的符号如下。这些部分被各自表示为P0、P1、P2、P3、P4、P5。在这个过程的开始,每个片段都被存储在各自的节点N0、N1、N2、N3、N4、N5。每个片断根据其片断序数和它在虚拟环中的位置来标记,在该环中它被认为是被归约的。例如,RA0表示部分P0中的R片段,因为它是由节点N0-N1-N2-N3-N4-N0形成的虚拟环中的第一片段。RA1表示节点N1的R片段,它在其虚拟环中处于第二位置。YA0表示节点N1的Y片段。后缀“0”指示它是其虚拟环中的第一片段,Y环是N1-N2-N3-N4-N0-N1。请特别注意,A上的后缀反映了虚拟环,并不对应于物理节点(或部分)。请注意,图3A只示出了前向链路上的虚拟环。图3B示出,在后向链路上发生了等效的过程,片段表示为B。

在步骤一中,每个虚拟环中的第一片段(A0)从其节点转移到下一相邻的节点,在那里它与该节点的对应片段一起被归约。也就是说,RA0从N0移动到N1,在那里它被归约成R(A0+A1)。再一次,“+”号在这里被用作任何组合函数的速记。请注意,在同一步骤中,每个虚拟环的A0片段将同时被传输。也就是说,N1和N2之间的链路被用来传输YA0,N2和N3之间的链路被用来传输GA0等等。在下一步骤中,对应归约的片段通过前向链路传输到它们的下一个相邻节点。例如,R(A0+A1)从N1传输到N2,Y(A0+A1)从N2传输到N3。请注意,为了清晰起见,图3A中没有对所有片段进行编号,也没有对所有传输进行编号。完整的片段集和编号在图3B中示出。这个过程进行了五个步骤。五步之后,每个节点上存在所有片段的归约。在第五步结束时,这个归约在该片段的每个对应环的最后的节点上。例如,R归约在节点N5上。

Allgather阶段的开始是由每个虚拟环的最后一个节点到第一个节点的传输开始。因此,R片段的最终归约在节点N5上结束,为Allgather阶段的第一步做好准备。Y片段的最终归约对应地在节点N0上结束。在Allgather阶段的下一步中,归约的片段被再次传输到它们的下一相邻节点。因此,完全归约的R片段现在也在N2,完全归约的Y片段现在也在N3,依此类推。以这种方式,每个节点在Allgather阶段结束时,以部分向量的所有完全归约的片段R、Y、G、B、P、L结束。

如果归约所需的计算可以隐藏在流水线等待时间之后,那么该算法的实施是有效的。请注意,在计算机中形成合适的环用于Allreduce的实施时,环的巡视必须只访问环中的每个节点一次。因此,由双向链路的线形成的自然环(图1A)并不是最有效的环。

现在将描述改进的拓扑,用于处理节点的互连网络,它允许处理节点之间部分和结果的有效交换,以实施Allreduce集合。

根据嵌入式一维环的另一配置,提供了具有多个堆叠层的配置。这种配置的一个实施例在图4中被示出,它是一个三角形环的三维视图。存在物理连接和逻辑连接,它们两者都将被描述。根据物理连接,该配置包括多个堆叠层-图4中从左到右所示的堆叠。堆叠的朝向是不相关的,尽管人们注意到在实际配置中,处理单元可以被布置在服务器机架上,以与服务器机架相对应的垂直配置堆叠可以是有用的。图5A和6A示出了这种垂直堆叠。

每层包括三个处理节点,在图4中最左边的一层示出为N51、N52和N53。这些处理节点被连接在环中,其中每个处理节点通过两个链路L1、L2与相邻的处理节点相连。这些链路可以各自是双向的。堆栈的最右端层也通过节点之间的两个链路连接在一起。然而,堆栈的中央层只用单链路连接。链路的连通性意味着这些链路是活动的,并且能够传输数据。处理节点之间可以存在其他非活动的连接,这不构成配置操作的一部分。

该配置被操作以提供三个嵌入式的一维环,可以或同时操作。图4示意性地示出了这一点,环标记为R1、R2和R3。R1示出为全黑线,R2示出为点线,R3示出为连接号线。考虑到配置是三角形截面的圆柱体,圆柱体的每个平面都包含了一维嵌入环。例如,环R1是由节点N51、N52(在最末端层),N52和N55之间的链路(在层之间),N55和N54之间的链路(在下一层内),N54和N57之间的链路(在层之间),N57和N58之间的链路(在下一层内),N58和N511之间的链路(在层之间),N511和N510之间的链路(在最右边端层),N510和N512之间的链路以及N512和N53之间的返回链路,然后回到N51。

在其他两个阶段的每个阶段中都可以找到对应的嵌入环。因此,每个环都是由每层内的链路与层间的链路相连形成的,以此类推,直到环完成。下面将更详细地描述这些环(或路径)),参考图4。

在第一嵌入路径中,节点N51与节点N53沿第一最末端层的一侧通过节点N51和N53之间的链路相连。这是沿第一最末端层的一侧的层内链路。路径沿着第一最外层的下一侧继续到节点N52。然后该路径经由层间链路从节点N52前进到节点N56。然后,该路径经由与节点N52和N56在配置的同一面上的另一层间链路从节点N56到N55。路径沿着这个面从节点N55延伸到节点N58,然后沿着层内链路穿过这个面到节点N57。路径从节点N59沿层间链路到节点N511,然后沿层内链路从节点N61到节点N512,从那里沿层内链路从N512到第二最末端层的节点N510。节点N511、N512和N510之间的层内链路是第二最末端层的边。然后,该路径沿着从节点N510到第一层最末端层的节点N51的返回部分前进。这条路径在图5A中由一条小连接号线示出。

第二嵌入路径也可以示出从节点N51开始,用黑实线示出。这条路径具有第一部分是沿着图4所示配置的“底面”延伸,从节点N51到节点N53,从节点N53到节点N55,从节点N55到节点N54,从节点N54到N57,从节点N57到N58,从节点N58到N512以及从节点N512直到节点N511。路径的返回第二部分是由第二最末端层的节点N511和第一最末端层的N52之间的互连链路提供的。

可以示出第三条嵌入路径从节点N53开始,沿着层内链路延伸到节点N52;第三嵌入路径用大连接号示出。然后该路径沿着图4所示配置的后端面从节点N52到N51,N51到N54,N54到N56,节点N56到N59,从节点N59到N57,从节点N57到N510,从节点N510到节点N511,从节点N511到N512。该路径具有从节点N512到N53的返回部分。

请注意,每条路径都有第一部分,该部分只使用配置的一个面的节点中的每一个一次,以及最末端层中的每一个的两个“腿”。然后,每条路径都有返回部分,直接在最末端层之间传递,不经过任何中间处理节点传递。

三个嵌入环可以同时操作。如果所有的链路都能同时双向操作,则六个嵌入式环可以同时操作。

计算机的容量可以通过增加新的处理节点层来扩展。为了做到这一点,处理节点的互连性被改变。例如,考虑在第二最末端层(图4中的右侧层)上增加一个额外层。来自节点N511的链路中的一个被断开,并连接到额外层中的对应处理节点,该处理节点示出为EPN1(额外处理节点1)。类似地,来自节点N512和节点N511中每一个的链路之一都与它们当前连接的节点断开,并分别连接到对应的额外处理节点,标记为EPN2和EPN3。然后,节点EPN1、EPN2和EPN3本身被连接在环中,其各自的链路结构与配置中的其他层一样。请注意,配置的其余部分的连接性保持不变。层可以以这种方式添加到配置栈的任何一端。

请注意,围绕三角形圆柱体配置的每一层(三个节点的集合)所采取的路径是这样的:由三个处理节点组成的层的扩展三角形棱柱可以被分割成不同的长度,这样每个分区可以以一种自包含的方式运行。这可以通过去激活独立分区的各层之间的链路来进行。

互联网络是具有非对称带宽分配的环配置,其中嵌入了多个一维环或路径。这些环可以在数据交换步骤中同时使用。

为了使用这种结构,要传输的部分(或片段)在每个节点被分成两部分,每个部分都使用上面参考图3A和图3B所描述的一维环算法,围绕环中的一个进行归约。

每个节点输出大小的片段,其中N是节点的数量,V是在特定阶段被归约-分散或被Allgather的的数据结构的大小。在开始时,V是部分向量的大小。在绕环的每一步之前,分段的数量等于环中节点的数量。请注意,与Jain论文中描述的结构相比,环穿过所有的节点,所有的链路在所有的时间被使用。本文假设每个处理节点可以同时在两个链路上输出其数据,并可以同时接收和处理数据。每个环是一维的-它是处理节点的非分支链。

在一些实施例中,提到作为环来操作是指实施上述的一维算法来实施Allreduce集合。在本文描述的结构中,所有嵌入的环可以同时操作,使每个节点的部分向量能够被划分,用于在结构中的多个环上同时处理。

当返回路径由最末端层的对应处理节点之间的连接提供时,例如图4中节点N51N和N510之间,就产生了环结构。本发明的实施例提供了操作以环配置连接的计算机网络的新颖方式。图4的结构(具有非对称的带宽。进一步的实施例提供了以非对称带宽利用操作的环配置。在图4的结构中,非对称性显露在各层之间存在更多的带宽。在下面描述的新颖配置中,非对称性显露为在各层中提供更多的带宽利用。

图5A示出了3x8的环。也就是说,连接成环的处理节点的每层包括三个处理节点,并存在八层。在图5A中,圆圈表示处理节点,中间的线表示连接处理节点的链路。请注意,这是在示意图层面。图5A没有示出每对处理节点之间的操作链路的数量。事实上,操作链路的数量定义了处理节点之间的带宽利用率。图5A中所示的计算机网络被配置为2比1的带宽非对称。也就是说,层内的处理节点之间的带宽利用率是B/3。相邻层的处理节点之间的带宽利用率是B/6。请注意,B是最大的带宽利用率。图5A示出了结构的连通性,示出了总节点带宽B对链路的分配。从图5B可以更清楚地看到这种带宽分配。

图5B示出了三个同构的嵌入式环中的每一个,它们可以在结构上同时循环,每链路使用的带宽利用率为B/6。这些环分别标为TR1、TR2、TR3。通过研究这三个同构的嵌入环,可以看到带宽的利用率。例如,考虑在环TR1和TR2中,图中顶部的三个处理节点的最末端层。环中的两者都在使用两个最右边的处理节点之间的链路。因此,由于使用了这两个链路,这些处理节点之间的带宽利用率增加了一倍。类似地,两个最左边的处理节点在环TR1、TR3中使用了两个链路。然而,在页面向下的结构轴中,处理节点之间的每个环中只使用一个向下的链路。每个处理节点传输数据的链路选择是由编译器决定的,后面会说明。编译器生成节点级程序,程序中的每一个都定义了在数据交换步骤中使用的链路标识符。

不同的环可以通过这种方式进行编程。例如,数据在每一层的处理节点中的循环方向可以是顺时针或逆时针。请注意,在移动到下一层之前,要访问该层的每个节点。然而,访问节点的方向可以是顺时针或逆时针。

图5C是三维视图,示出了根据一种可能的环结构的三个嵌入环中的一个。其他两个环是相同的,围绕长轴旋转了120°。如前所述,每个环存在几条等价的路线。图5D示出了另一种选择。在图5D的环中,环在进入下一层之前,顺时针绕着每层的处理节点行进。在图5C的实施例中,环在各自的交替层上顺时针和逆时针交替行进。使用这种结构还可以有其他变化。

图6A示出了4x6环结构。也就是说,该结构的每一层包括四个处理节点,以环形方式连接,存在六层。最末端层的对应处理节点连接在一起,形成环。图6A示出了该结构的连通性,示出了节点总带宽B对链路的分配。在这种情况下,每层的处理节点之间的带宽利用率为3B/8。相邻层的处理节点之间的带宽是B/8。请注意,在这种上下文中,最末端层之间的返回路径的带宽利用率也是B/8。带宽利用率是由处理节点之间提供的链路决定的。每层中相邻的处理节点之间有三条操作链路。在相邻层的处理节点之间有一条操作链路。

图6B更详细地示出了带宽利用率,其示出了四个同构的嵌入环,它们可以在结构上同时循环,每链路的带宽利用率为B/8。例如,可以看出,环BR1、BR2和BR3各自使用顶层最右边的处理节点之间的链路。类似地,BR1、BR2和BR4环使用顶层中间两个处理节点之间的链路。相反,每个环中只利用单一链路来在相邻层之间连接。

图6C是三维视图,示出了四个嵌入环中的一个。其他三个环是相同的,围绕结构的长轴旋转了90°。请注意,环在移动到下一层之前会访问层中的每个处理节点。与图5A至5D所示的结构一样,可以嵌入不同种类的环,例如,分别以不同的方向(逆时针或顺时针)围绕每一层。

与图5A至图5D的结构一样,带宽的利用是用编译器来编程的。

在上述实施例中,片段大小与每个链路的带宽无关。片段大小只取决于嵌入环中的节点数(如果有n个节点,那么最佳环Allreduce算法使用全向量的1/n大小的片段,如前所述)。所示的带宽分配是必须分配给该链路的总节点带宽的一部分(在所有环都是双向的情况下,同时进出节点),以使所有嵌入环上的数据循环能够同时使用通过所有节点和链路的所有可用带宽。

带宽非对称是指这种带宽分配在有线连接的两个维度上是不同的:层的平面和层的方向(堆叠)的“长轴”。请注意,为了完整起见,当考虑到数据传输路径时环只具有一个维度,但结构都有两个维度。

每个节点都能实施处理或计算功能。每个节点可以实施为单一的处理器。然而,更有可能的是,每个节点将被实施为单一芯片或芯片封装,其中每个芯片包括多个处理器。每个单独的节点存在许多可能的不同表现形式。在一个示例中,节点可以由英国申请中描述的类型的智能处理单元构成,申请具有公布号为GB2569843;GB2569430;GB2569275,其内容在此通过引用而纳入。然而,这里描述的技术可以用在构成节点的任何类型的处理器上。本文所概述的是以有效方式交换数据的方法,以实施特定的交换模式,这在机器学习模型中是有用的。此外,链路可以以任何合适的方式表现出来。有利的是它们是双向的,最好是它们能同时在两个方向上操作,尽管这不是基本要求。一类特殊的通信链路是SERDES链路,它的功率要求与通过该链路传输的数据量或传输该数据的时间无关。SERDES是Serializer/DeSerializer的首字母缩写,这种链路是众所周知的。为了在这种链路的导线上传输信号,需要向导线施加电源以改变电压,从而生成信号。SERDES链路具有的特点是不断向导线施加功率,使其保持在一定的电压水平上,这样信号就可以通过该电压水平的变化来传递(而不是通过0和施加的电压水平之间的变化)。因此,无论是否使用,SERDES链路上的带宽能力都存在固定的功率。SERDES链路在每一端由将链路层设备连接到物理链路(诸如铜线)的电路实施。这种电路有时被称为PHY(物理层)。PCIe(外围组件互连高速)是连接高速计算机的接口标准。

链路有可能被动态地去激活,以便在不使用时有效地不消耗电力。然而,机器学习应用的激活时间和非决定性的性质通常使程序执行期间的动态激活成为问题。因此,本发明人已经确定,利用以下事实可能更好,即对于任何特定的配置,芯片到芯片的链路功耗基本上是恒定的,因此,最好的优化是通过尽可能保持芯片到芯片的通信与IPU活动同时进行来最大限度地利用物理链路。

SERDES PHY是全双工的(即每秒16Gbit的PHY在每个方向上同时支持每秒16Gbits),因此全链路带宽的利用意味着平衡的双向流量。此外,请注意,与诸如经由交换机等间接通信相比,使用直接芯片到芯片的通信有很大的优势。直接的芯片到芯片的通信比交换式通信要省电得多。

另一需要考虑的因素是节点之间的带宽要求。目的是要有足够的带宽,以便将节点间的通信隐藏在分布式机器学习的每个节点上进行的计算背后。

在优化机器学习的机器架构时,Allreduce集合可以作为所需带宽的标准。在处理模型平均化的参数更新方面,上面已经给出了Allreduce集合的示例。其他示例包括梯度平均和计算规范。

作为一个示例,可以考虑残差学习网络的Allreduce要求。残差学习网络是一类深度卷积神经网络。在深度卷积神经网络中,利用多层来学习每层内的相应特征。在残差学习中,可以学习残差而不是特征。已知为ResNet特定残差学习网络实施了网络不同层之间的直接连接。已经证明,在某些上下文中,训练这种残差网络可能比传统的深度卷积神经网络更容易。

ResNet 50是50层残差网络。ResNet 50具有25M个权重,因此所有权重梯度的Allreduce在单位置浮点格式F16中涉及50兆字节的部分。为了举例说明带宽要求,假设每个完整的批次需要一个完整的Allreduce。这可能是(但不一定是)梯度的Allreduce。为了实现这一点,每个节点必须在每次全归约中输出100兆比特。ResNet 50在训练时每幅图像需要250千兆浮点。如果每个处理节点的子批次大小为16个图像,每个处理器为每个Allreduce集合执行400千兆浮点。如果处理器实现每秒100万亿次浮点,则它需要在所有链路之间每秒约25千兆比特来维持与Allreduce通信的计算并发。在每处理器8个图像的子批次的情况下,所需的带宽名义上增加了一倍,但由于处理较小批次的较低的可实现每秒万亿次浮点,所以部分缓解了这种情况。

在p个处理器之间实施Allreduce集合,每个处理器从m兆字节大小的部分开始(等于归约大小),要求至少有2m.(p-1)兆字节通过链路发送。因此,如果每个处理器有l个链路它可以同时发送,那么渐进的最小归约时间是2m.(p-1).(p-1)/(p.l)。

上述的概念和技术可以在几个不同的示例中使用。

在一个示例中,提供了一个固定的配置,作为计算机使用。在这个示例中,处理节点是按照上面讨论的各种实施例中所描述和说明的那样相互连接的。在这种布置中,处理节点之间只设置了基本的层内和层间链路。

固定的配置可以由该配置的处理节点的精确数量构建。或者,它可以通过从一个更大的结构中划分出来提供。也就是说,可以提供处理节点集合,它们构成具有堆叠层集合的多面棱镜。每个堆叠层中的处理节点可以有到相邻堆叠层中的对应处理节点的层间链路和该层中相邻处理节点之间的层内链路。

可以通过断开堆叠层的原点集中的指定堆叠层中的每个层间链路,并将其连接到指定堆叠层中的相邻处理节点以提供层内链路,来提供期望数量的堆叠层的固定配置。以这种方式,可以使堆叠层的原点集中的指定堆叠层形成结构的第一和第二最末端层之一。请注意,层的原点集可以通过这种方式被分割成一个以上的固定配置结构。

层间和层内链路是由上面提到的合适的总线或导线提供的物理链路。在一种表现形式中,每个处理节点都有一组延伸出来的导线,用于连接它和另一处理节点。例如,这可以通过每个处理节点的一个或多个接口来进行,这些处理节点有一个或多个端口,一个或多个物理导线与之相连。

在另一表现形式中,链路可以由板上的导线构成。例如,单一板子可以支持芯片组,例如四个芯片。每个芯片都具有接口,有可与其他芯片连接的端口。芯片之间的连接可以通过根据预先确定的方法将导线焊接到板子上而形成。请注意,本文所述的概念和技术在这种上下文中特别有用,因为它们最大限度地利用了印刷电路板上芯片之间已经预先焊接好的链路。

这里描述的概念和技术特别有用,因为它们能使非开关链路得到最佳利用。通过使用节点之间的固定非开关链路连接本文所述的处理节点,可以建立一个配置。在某些情况下,如果不使用处理节点之间的链路,就没有必要提供额外的链路。例如,在配置的中间层中,处理节点之间的链路比最末端层少。

另外,处理节点之间可以提供链路,但在某些配置中可以永久停用。

为了使用该配置,生成了并行程序集。这并行程序集包含节点级程序,即指定在配置中的特定处理节点上工作的程序。在特定配置上运行的并行程序集可以由编译器生成。编译器的责任是生成节点级程序,这些程序正确定义了对于某些数据的每个数据传输步骤要使用的链路。这些程序包括用于在数据传输阶段使数据传输有效的一个或多个指令,该指令使用链路标识符来识别该传输阶段要使用的链路。例如,处理节点在任何一个时候都可能有两个或三个活跃的链路(如果链路同时是双向的,则加倍)。该链路标识符导致正确的链路被选择用于该传输阶段的数据项目。请注意,每个处理节点可以不知道其相邻节点的行动-交换活动是为每个交换阶段预先编译的。

还要注意的是,链路不必被切换-在数据项目被传输的时候,不需要对其进行主动路由,也不需要改变链路的连接性。

如上所述,本文所述的计算机网络的配置是为了加强计算中的并行性。在这种上下文中,并行性是通过将节点级程序加载到配置的处理节点中来实现的,这些程序是要并行执行的,例如,如前所述,以分布式方式训练人工智能模型。然而,很容易理解的是,这只是本文描述的配置所使能的并行性的一种应用。实现并行性的一个方案被称为“批量同步并行”(BSP)计算。根据BSP协议,每个处理节点执行计算阶段和紧随计算阶段的交换阶段。在计算阶段期间,每个处理节点在本地执行其计算任务,但不与其他处理节点交换其计算结果。在交换阶段,每个处理节点被允许与配置中的其他处理节点交换其在前一个计算阶段的计算结果。新的计算阶段不会开始,直到在配置上的交换阶段完成。在这种形式的BSP协议中,在从计算阶段过渡到交换阶段,或从交换阶段过渡到计算阶段或两者的交界处放置屏障同步。

在本实施例中,当交换阶段启动时,每个处理节点执行指令,使用编译器为该交换阶段建立的链路标识符与相邻节点交换数据。交换阶段的性质可以通过使用前面讨论的MPI消息传递标准来建立。例如,可以从库中调用集合,诸如所有归约的集合。这样,编译器就有了预编译的节点级程序,这些程序控制着传输部分向量(或传输部分向量的各自片段)的链路。

很明显,其他同步协议也可以被利用。

虽然已经描述了特定的实施例,但对于熟悉本领域的人来说,一旦有了本文的披露,所披露的技术的其他应用和变体可能会变得很明显。本公开的范围不受所描述的实施例的限制,而只受所附权利要求的限制。

28页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:实施操作序列化以实现分布式数据结构的一致性的消息传送

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!