CN117242442A - 用于网络交换机的分布式人工智能扩展模块 - Google Patents

用于网络交换机的分布式人工智能扩展模块 Download PDF

Info

Publication number
CN117242442A
CN117242442A CN202280032482.1A CN202280032482A CN117242442A CN 117242442 A CN117242442 A CN 117242442A CN 202280032482 A CN202280032482 A CN 202280032482A CN 117242442 A CN117242442 A CN 117242442A
Authority
CN
China
Prior art keywords
computing
vector
block
network
node
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202280032482.1A
Other languages
English (en)
Inventor
W·B·马修斯
P·阿加瓦尔
B·H·关
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Innovinuum Corp
Original Assignee
Innovinuum Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Innovinuum Corp filed Critical Innovinuum Corp
Publication of CN117242442A publication Critical patent/CN117242442A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • H04L67/1074Peer-to-peer [P2P] networks for supporting data block transmission mechanisms
    • H04L67/1076Resource dissemination mechanisms or network resource keeping policies for optimal resource availability in the overlay network
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5072Grid computing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17318Parallel communications techniques, e.g. gather, scatter, reduce, roadcast, multicast, all to all
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/15Interconnection of switching modules
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/02Topology update or discovery
    • H04L45/08Learning-based routing, e.g. using neural networks or artificial intelligence
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/35Switches specially adapted for specific applications

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Computing Systems (AREA)
  • Artificial Intelligence (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Medical Informatics (AREA)
  • Neurology (AREA)
  • Multimedia (AREA)
  • Computer And Data Communications (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Multi Processors (AREA)

Abstract

公开了将网络内计算操作有效地扩展到大量计算节点。每个计算节点被连接到相同的多个网络计算节点,诸如支持计算的网络交换机。计算节点处的计算进程通过例如在神经网络上执行前向传递来生成局部梯度或其他向量。每个向量包括相同向量元素集合的值。每个网络计算节点被指派以基于局部向量来归约向量元素的不同子集的向量数据。每个网络计算节点将其处理的元素的结果块返回给每个计算节点,从而每个计算节点接收完整的结果向量。在一些实施例中,该配置可以极大地减少网络计算节点或网络的缓冲、处理和/或其他资源需求。

Description

用于网络交换机的分布式人工智能扩展模块
技术领域
实施例一般涉及分布式计算系统,并且更具体地涉及用于分布式机器学习系统和其他应用的基于网络交换机的架构。
相关申请的交叉引用
本申请涉及:Matthews等人于2019年5月10日提交的美国专利申请No.16/409,695,题为“Network Switch with Integrated Compute Subsystem for DistributedArtificial Intelligence and Other Applications”;Matthews等人于2019年5月10日提交的美国专利申请号16/409,699,题为“Egress-Based Compute Architecture forNetwork Switches in Distributed Artificial Intelligence and OtherApplications”;Matthews等人于2019年5月10日提交的美国专利申请No.16/409,701,律师档案号80003-1903,题为“Parallelized Ingress Compute Architecture for NetworkSwitches in Distributed Artificial Intelligence and Other Applications”;Matthews等人于2019年5月10日提交的美国专利申请No.16/409,703,律师档案号80003-1904,题为“Network Switch with Integrated Gradient Aggregation for DistributedMachine Learning”;以及Matthews等人于2019年8月27日提交的美国专利申请No.16/552,938,律师档案号80003-1905,题为“Distributed Artificial Intelligence ExtensionModules For Network Switches”。这些申请中的每一个的全部内容出于所有目的通过引用并入本文,如同在本文中充分阐述一样。
背景技术
本节中描述的方法是可以追求的方法,但不一定是先前已经被设想或追求的方法。因此,除非另有说明,否则不应假定本节中描述的任何方法仅仅由于它们包含在本节中而被认为是现有技术。
通常可以通过将应用划分为可以并行执行的不同任务并将这些任务分布在数个计算设备之中来实现计算系统中的计算密集型应用。这些计算设备通常通过通信网络互连,它们经由通信网络来共享与计算相关的数据,并且据说形成分布式计算系统。分布式计算系统可以被用于多种复杂的计算应用中,诸如但不限于模拟、语言翻译、图像识别、欺诈检测等等以及新兴应用。
例如,机器学习算法,特别是深度学习算法,通常被用来创建执行关键任务计算功能的计算模型。此类模型可能涉及通常复杂的一系列计算,这些计算输入并处理一组值(通常称为输入向量或特征向量)以生成一个或多个输出值。(多个)输出值通常以某种方式对输入向量进行分类。例如,用于图像识别的模型的输出可能会将像素、图像属性或其他图像数据的输入向量分类为狗或猫,具体取决于神经网络的目的。模型可以包括各种参数,诸如权重、偏差、系数、支持向量等,这些参数影响如何处理输入值以及如何计算(多个)输出值。
示例类型的模型可以包括但不限于神经网络或置信网络,其通过一层或多层互连节点(本文称为“神经元”)传递输入值。神经网络的每个神经元接受来自输入向量和/或其他神经元的一个或多个输入。这些输入形成神经网络的连接。每个神经元都与一个输出函数相关联,该输出函数基于对神经元的输入来计算神经元的输出值。可以为连接指派权重。一般来说,连接的权重控制与该连接相关联的输入在输出函数中所占的比重。例如,一个神经元可能有一个权重为0.4的输入p0和一个权重为0.2的输入p1。因此,输入p0的值可能会更严重地影响神经元的输出(例如,在每个输入及其权重的乘积的简单求和的情况下,影响是两倍)。
在一些实施例中,神经元可以被组织为两层或更多层,包括:输入层,其中每个神经元输出输入向量的值;零个或多个中间层,其中每个神经元输入由紧接的前一层输出的一个或多个值,然后将值输出到紧接的后一层的一个或多个神经元;以及最终输出层,该最终输出层输入由紧接的前一层输出的值并输出神经网络的结果。
通过仔细设置神经网络或其他模型的权重和/或其他参数,模型可以被配置为基于输入向量准确地或半准确地做出分类或其他确定。被配置为基于特定类型的数据做出特定类型的确定的模型的合适权重可以通过各种训练算法来“学习”。这些训练算法通过一系列步骤(包括前向传递、损失计算和后向传递)随着时间的推移而迭代地调整权重,直到达到用于该模型的“最佳”权重集,或者直到所有训练数据都已被处理。
通过模型的前向传递使用权重测试集来处理从合适的向量集(例如,“训练数据”集)中选择的输入向量,以产生本文中通常被称为预测的输出。损失计算使用线性回归或任何其他合适的技术来计算该预测中的误差。根据误差,梯度下降算法(例如,使用偏导数或其他手段)计算包括数个梯度元素的梯度向量。每个梯度元素对应于模型的不同权重,并指示对对应的权重的调整(例如改变的绝对量或相对量)。梯度下降算法以一种旨在使后续迭代中计算出的损失最小化的方式来选择调整。最后,后向传递基于对应的梯度元素来更新模型中的测试权重,从而达成新的权重集进行测试。重复训练过程,直到达到某个最终条件,诸如一定次数的迭代的执行,或者确定最新参数已经实现了被认为是可接受损失或最佳损失的损失计算,具体取决于实施例。
已经开发了分布式深度学习技术,其中训练任务被分散在任意数量的物理联网计算设备(被称为“计算节点”)上。每个计算节点包括一个或多个计算实体,诸如中央处理单元(“CPU”)、图形处理单元(“GPU”)、张量处理单元(“TPU”)、浮点单元(“FPU”)或其他加速器,这些计算实体被配置为执行计算进程,诸如训练模型。例如,每个计算节点可以被指派一组不同的输入向量(例如,来自训练数据集)以利用模型进行处理。计算节点共享来自它们各自的输入向量在物理网络(诸如局域网)上的前向传播的局部梯度,它们经由该物理网络进行连接。这些梯度在“归约”(reduction)阶段一起被归约(reduce)以形成结果梯度。然后,计算节点在后向传递中使用结果梯度来确定用于模型测试的新权重。另一种方法是模型并行,其中模型的各部分被指派给每个计算节点,并且各个模型层之间的互连(例如激活)作为前向传递的一部分经由物理网络被发送。
早期的分布式深度学习方法利用集中式参数服务器来归约梯度并将结果返回到计算节点。在此类方法中,集中式参数服务器通常使用与任何其他计算节点相同的硬件来实现,具有强大的计算能力但是连接性有限。因此,由于网络延迟和/或进出集中式参数服务器的网络带宽有限,集中式参数服务器常常是显著的瓶颈。
另一种常见的分布式方法被称为“全归约(All Reduce)”。每个计算节点承担归约不同梯度部分的责任。每个节点都生成一个梯度。然后,每个节点将另一个节点负责归约的梯度部分发送给每个其他节点。然后,每个节点一起归约它接收到的各部分,并将所得到的归约后的部分返回给每个其他节点。这种方法对互连节点的网络提出了很高的要求。
存在多种算法用于执行全归约操作。常用的方法是“环状全归约(Ring AllReduce)”。在环状全归约中,这样的系统中的第一计算节点可以被配置为将梯度部分传递给第二节点,第二节点可以被配置为归约或者以其他方式聚合结果与其梯度的相同部分。然后,第二节点将该结果传递给第三节点,并且这个过程以环状、树状或其他合适的模式重复,直到所有节点将它们的梯度的块组合在一起。然后将最终结果通过拓扑传递回去。归约梯度并将结果传播到整个系统所需的时间是学习过程的显著的瓶颈。
上述美国申请No.16/552,938中描述的另一种方法涉及将计算逻辑放置在被用来对计算节点进行互连的相同网络硬件中或紧密耦合到该网络硬件,诸如其他常规层2层或3层网络交换机。这样的网络硬件可以被称为网络计算节点。网络计算节点可以被配置为执行任意数量的集体操作,包括归约,从而避免将梯度传递到集中式参数服务器的需要,同时利用底层网络硬件的高带宽和互连性。
在网络计算节点处引入计算功能性增加了对底层硬件的资源需求。例如,网络计算节点必须投入处理资源来执行集体操作,并投入缓冲资源来存储向量数据,直到准备好执行操作为止。计算功能性的额外资源需求通过重新调整网络硬件的现有资源的用途来满足——从而减少了否则可用于网络硬件的资源——和/或通过必须被添加到网络硬件的额外硬件来满足。当处理更大的数据集时和/或当涉及许多计算节点时,这些资源需求可能呈指数级增长。此外,一起工作的一大组计算节点需要大量的网络计算节点,通常以分层的方式互连,其中每个网络计算节点要求大量的资源来提供计算功能性。
更一般地,分布式计算系统的各节点之间的数据和其他信息的通信一直被证明是分布式系统的性能的显著瓶颈。
发明内容
附图说明
本发明主题在附图中以示例而非限制的方式被图示出,其中相似的参考标号指代相似的元件,并且其中:
图1图示了用于机器学习的示例分布式计算系统;
图2图示了示例分布式计算系统,其中计算实体被组织成计算节点;
图3图示了支持节点内归约和/或向量划分以归约网络带宽消耗的示例分布式机器学习系统;
图4图示了包括处于分层布置的四个网络计算节点的分布式机器学习系统;
图5图示了分布式学习系统,其中每个计算节点连接到多个支持计算的交换机;
图6图示了利用计算平面的分布式应用的示例分布式学习系统;
图7图示了分布式学习系统,其中计算进程被配置为将块划分为多个子块,这些子块可以经由不同端口分别被发送到网络计算节点;
图8图示了用于网络中的分布式计算操作的系统级流程;
图9图示了用于在特定计算进程处分发和接收向量块的流程;
图10图示了用于在网络计算节点处生成结果块的流程;
图11图示了示例计算子系统;
图12是示例网络设备内的分组交换逻辑的各个方面的说明图;
图13是图示了在实现上述技术时可以利用的示例计算机系统的框图。
具体实施方式
在下面的描述中,为了解释的目的,阐述了许多具体细节,以便提供对本发明主题的透彻理解。然而,显而易见的是,可以在没有这些具体细节的情况下实践本发明主题。在其他实例中,以框图形式示出了众所周知的结构和设备,以避免不必要地模糊本发明主题。
1.0.总体概述
公开了用于通过将每个计算节点连接到相同的多个网络计算节点(诸如支持计算的网络交换机)来有效地将网络内计算操作扩展到大量计算节点的方法、技术和机制。计算节点处的计算进程通过例如在神经网络上执行前向传递来生成局部梯度或其他向量。每个向量包括针对向量元素的相同集合的值。应使用一个或多个集体操作(诸如聚合)来归约这些局部向量,以产生结果向量,计算进程在继续进一步计算(例如,执行神经网络的后向传递)之前可能需要该结果向量。每个网络计算节点被指派为基于局部向量对向量元素的不同子集执行(多个)集体操作。每个网络计算节点将其处理的元素的结果块返回给每个计算节点,从而每个计算节点接收完整结果向量。
由于网络计算节点不需要处理或者甚至不需要接收不包含那些元素的向量部分,因此在一些实施例中,该配置可以减少网络计算节点的缓冲、处理和/或其他资源需求。此外,由于计算节点的每个通信链路不需要物理连接到同一网络计算节点,因此网络计算节点可以从比它否则可能连接到的更多的计算节点接收和处理向量,从而减少了对借助网络计算节点的层次结构来互连计算节点的需要,并且减少了这种配置所带来的复杂性和资源需求。
在实施例中,每个计算节点包括多个互连的计算实体。该计算节点内的每个计算实体可以执行为特定分布式应用生成局部向量的计算进程。例如,每个计算进程可以使用参数集合(例如权重、偏差等)来处理已指派给计算进程的输入的训练数据集,计算进程基于该训练数据集生成局部梯度。每个计算节点还包括多个不同的通信接口。每个接口可以直接或间接连接到不同的网络计算节点。每个计算节点向这些网络计算节点中的每个网络计算节点发送网络计算节点负责归约的向量元素的特定子集(被称为块)的向量数据。该向量数据可以是每个局部向量的对应块,或者计算节点可以被配置为局部地对块进行归约,并将中间结果块发送到网络计算节点。每个网络计算节点归约其负责的向量元素,并经由对应的通信接口将包括这些向量元素的归约值的最终结果块返回给每个计算节点。当计算节点从网络计算节点接收到结果块时,它将结果块分发给每个计算实体。
在实施例中,每个计算实体包括特定通信接口或被指派给特定通信接口。例如,在实施例中,计算实体可以是直接耦合到诸如以太网接口之类的网络接口的GPU,或者可以将以太网功能性直接合并到GPU中。每个计算实体还负责发送被指派给连接到该通信接口的网络计算节点的特定元素集的所有向量数据。因此,计算节点中的每个计算实体可以经由节点内通信机制互连,通过该机制它可以从计算节点中的其他计算实体接收相关向量块。在实施例中,计算实体还可以负责归约其接收到的向量块并将所得到的经归约的块发送到网络计算节点。每个计算实体还负责从连接到其通信接口的网络计算节点接收结果块。计算实体可以经由节点内通信机制来与计算节点中的每个其他计算实体共享该结果块。
根据实施例,计算节点群组以及该群组连接到的网络计算节点群组可以被组织为计算平面。计算任务中可能涉及任意数量的计算平面,每个计算平面在不同的训练数据集上操作。在每个计算平面中的向量元素的特定子集上操作的网络计算节点与在每个其他计算平面中的向量元素的特定子集上操作的网络计算节点直接互连,或经由环状、网状、环面或其他合适的拓扑结构间接互连。这些网络计算节点各自基于它们从其各自平面中的计算节点接收到的向量块来生成中间结果向量块。然后,经由它们与其他网络计算节点的平面间连接,网络计算节点组合它们的中间结果向量块以产生最终结果向量块以返回给它们各自平面中的计算节点。
在其他实施例中,本文描述的技术可以更一般地被应用于任何分布式计算任务,包括与机器学习无关的任务。例如,向量可以包括任何元素集的值,而不仅仅是梯度或其他机器学习构造的值。计算进程可以使用任何合适的计算集出于任何目的而生成这样的向量,而不是在模型的前向传递中生成这样的向量。此外,计算进程可以将结果向量用于任何合适的目的,而不是利用结果向量进行模型的后向传递。
2.0.系统概述
2.1.分布式学习系统
图1图示了根据实施例的用于机器学习的示例分布式计算系统100。分布式计算系统100是计算设备的网络,包括计算实体120a-n(统称为“计算实体120”)和支持计算的交换设备150。计算实体120和支持计算的交换设备150的数量可以取决于实施例而变化。此外,网络可以包括未描绘的其他设备,其可以参与也可以不参与机器学习任务。
计算实体120可以是任何合适类型的计算设备。例如,计算实体120可以在服务器、工作站或通用计算机系统上被实现。在实施例中,每个计算实体120是或包括一个或多个GPU、CPU、TPU、加速器或被配置为执行机器学习任务等等的其他硬件。更具体地,每个计算实体实现用于在数据集136上训练模型132的训练逻辑130。模型132可以是易于训练的任何类型的模型,包括但不限于神经网络或任何其他分布式计算操作。
模型132具有训练逻辑130可以随时间调整的多个参数134。这些参数例如可以是权重、偏差或模型132的任何其他参数,具体取决于正被训练的模型132的类型。经过多次迭代(本文中称为轮次(epoch)),训练逻辑130将来自训练数据集136的数据输入到模型132中。在实施例中,每个计算实体120包括或耦合到相对大量的存储器以存储训练数据集136,其对于每个实体120可以是不同的或不是不同的。实体的训练逻辑130使用为当前轮次所挑选的参数134对其数据集136中的一些或全部数据执行模型132(例如通过进行神经网络的前向传播)。
执行模型132的结果可以是单个值、值集合、分类、决策或任何其他合适的输出。训练逻辑130基于针对数据集136所指示的预期输出来计算针对该输出的损失和/或误差。基于该损失和/或误差,训练逻辑130计算梯度105(例如使用梯度下降算法)。对于任何给定轮次,每个计算实体可以计算不同的梯度105作为在不同数据集136(或者,在一些实施例中,不同的参数集合134)上进行操作的结果。因此,由实体的训练逻辑130所生成的梯度105是该实体特定的,并且因此被称为局部梯度105。
在非分布式系统中,如果尚未达到某个最终条件,则训练逻辑130将通过基于局部梯度105调整参数134、使用每个梯度元素来调整对应的权重或其他参数134来完成该轮次。然后训练逻辑130将开始新的轮次。然而,在分布式系统中,每个局部梯度105必须使用某种集体操作(例如求和、平均、最小值、最大值等)来一起被归约以产生结果梯度。然后基于该结果梯度调整参数134。
为此,每个计算实体120还包括或耦合到一个或多个通信接口,计算实体120通过该通信接口连接到网络。计算实体120的每个通信接口使得计算实体120能够与网络上的其他设备形成直接通信链路,通常通过在一端插入计算实体120的通信接口并且在另一端插入另一设备的通信接口的电缆来形成。然而,也可以或替代地利用固定布线或无线通信链路。在实施例中,链路可以是间接的,经过一个或多个中间交换设备。
计算实体120通常将具有到诸如交换设备150之类的交换机的直接通信链路,这实现了经由交换机到网络上的其他设备的间接通信链路。在许多实施例中,利用基于以太网的通信。然而,也可以或替代地利用其他通信标准,诸如InfiniBand、光纤通道等等。在实施例中,即使在非InfiniBand网络中,也可以利用InfiniBand语义——特别是与可靠连接和远程直接存储器访问(“RDMA”)相关的语义。该交换机150通常但不一定包括用于在实体120和/或网络上的其他设备之间转发数据单元的分组交换逻辑152。
支持计算的交换设备150,简称为交换机150,是被配置为互连包括计算节点120在内的多个计算设备的网络设备。交换机150例如可以是机架顶部(“TOR”)、行尾(“EOR”)、接入、聚合、核心或任何其他合适类型的网络交换设备。交换机150可以采取任何合适的物理形式,包括独立的计算设备或适于托管任意数量的计算设备的机箱内的可机架安装的线卡。在实施例中,交换机150包括多个物理端口,交换机150通过这些物理端口可以经由数据电缆直接连接到其他计算设备。交换机150还可以经由到直接或间接连接到计算设备的其他交换机的直接连接来间接互连到那些计算设备。在一些实施例中,交换机150还可以或替代地包括一个或多个无线通信接口,交换机150通过该无线通信接口直接连接到某些计算设备。
根据实施例,为了加速分布式机器学习任务,交换机150可以包括计算子系统160或者紧密耦合到计算子系统160。计算子系统160可以被实现在与分组交换逻辑152相同的芯片上或者在交换机150内的单独芯片上。在一些实施例中,计算子系统160可以是直接插入到交换机的一个或多个以太网端口或其他接口中的外部模块,如前述专利申请“Distributed Artificial Intelligence Extension Modules for Network Switches”中所描述的。
具有计算子系统160的交换机在本文中被称为“支持计算的交换机”或具有“网络内计算”能力的交换机。取决于网络,计算实体120可以直接连接到支持计算的交换机150,或者可以经由不支持计算的一个或多个中间交换机而连接到支持计算的交换机150。
当交换机150检测到包含局部梯度105(或其他向量数据)的数据单元时,交换机150可以将数据单元转发到计算子系统160。计算子系统160收集针对给定分布式应用、任务和/或轮次的局部梯度105,并且执行相关联的集体操作以将那些局部梯度105归约为结果梯度。这个过程也可以被描述为“归约”,结果梯度是“归约数据”的示例。然后,计算子系统160将结果106返回给每个计算实体120,其可以是结果梯度,或者在一些实施例中,可以是计算实体120应该用于下一个轮次的调整后的参数134。
可选地,系统100可以包括一个或多个编排器节点195。编排器节点195可以在网络内的任何计算设备处被实现,包括在计算实体120或支持计算的交换机150处。编排器节点195可以负责管理性任务,诸如初始化计算实体120以执行分布式应用、建立工作集、向计算实体120提供数据以进行处理、配置和/或向支持计算的交换机150发送关于预期什么数据以及对该数据执行什么操作的计算指令,等等。在实施例中,编排器节点195还可以或替代地协调作业的启动、解析通信模式(例如,环状全归约、树状全归约等)、终止某些分布式应用、和/或管理资源共享。在实施例中,编排器节点195可以包括接口,人类操作员可以经由该接口指示编排器节点195进行前述的一些或全部操作。
图1仅图示了在其中可以应用所描述的技术的一个示例分布式计算系统。其他这样的系统可以包括不同布置中的更多或更少的元件。例如,梯度105更一般地可以由任何类型的向量取代。类似地,训练逻辑130可以由任何合适的计算进程取代,该计算进程生成向量并消耗从该向量和由其他计算进程生成的其他类似向量归约的结果向量。此外,其他系统可以包括任意数量的计算实体120以及附加的交换机或其他网络实体。
2.2.计算节点
图2图示了根据实施例的示例分布式计算系统200,其中计算实体220被组织成计算节点210。每个计算节点210是计算实体220的单独物理群组,通常以某种方式耦合其组成计算实体220。例如,计算节点中的计算实体220可以物理地附接到机箱中的相同基板或平面卡。在实施例中,计算实体220可以共享公共资源,诸如电源、管理计算实体220的操作的CPU或CPU组或者甚至存储器或存储资源。
例如,计算节点210可以是AI服务器系统,诸如但不限于Nvidia DGX系列系统。该系统可以包括四个、八个、十六个或甚至更多数量的GPU,其中每个GPU是不同的计算实体220。在另一个实施例中,计算节点210可以是GPU或GPU系统的服务器机架。在另一个实施例中,计算实体220可以是虚拟化设备,使得单个GPU(或其他处理硬件)可以表现为多个计算实体220,每个计算实体220执行不同的计算进程230。
计算节点210中的每个计算实体220实现一个或多个计算进程230。计算进程230是用于执行一个或多个分布式应用的某些任务的逻辑的实现,诸如训练(或重新训练)不同的神经网络模型、运行不同的模拟等等。例如,计算进程230可以实现图1的训练逻辑130,但是在其他实施例中,可以执行其他类型的计算进程230。为了简化,本文的示例通常仅提及由计算实体220针对单个分布式应用实现的单个计算进程230。然而,将认识到,在一些实施例中,计算实体220实际上可以同时实现用于多个分布式应用的多个计算进程230。
每个计算实体220可以与在系统200中的其他计算实体220处执行的计算进程230并行地执行计算进程230。一起工作以执行分布式应用的一组计算进程230可以被称为计算工作者集合。执行这些进程230的计算实体220可以被表征为位于或属于计算工作者集合的“计算工作者”。在一些实施例中,分布式应用和工作者集合之间存在一对一的映射。在其他实施例中,分布式应用可以包括执行不同任务集的多个工作者集合。并非连接到支持计算的交换机250或者甚至在单个计算节点210中的所有计算实体220都需要参与同一个分布式应用。例如,计算节点210中的计算实体220的不同子集或者不同的计算节点210可以同时训练不同的神经网络模型。虽然仅描绘了两个计算节点210,但是系统200可以包括任何数量的计算节点210,每个计算节点210包括任何数量的计算实体220。
由计算实体220在执行计算进程230的过程中实现的逻辑在本文中可以被称为“工作者逻辑”(例如训练逻辑130)。取决于系统和/或实现的任务,工作者逻辑可以是可编程的(例如,由中央处理器单元、图形处理器单元等执行的基于软件的指令程序),或者工作者逻辑可以是由专用硬件执行的硬编码逻辑。在一些实施例中,分布式应用内的一些或所有工作者逻辑是相同逻辑的实例,而在其他实施例中,不同的计算实体220可以为相同的应用实现不同的工作者逻辑。
每个计算实体220被映射到其对应的计算节点210内的至少一个特定端口240。每个端口240是通信接口,诸如以太网端口、InfiniBand端口、Fibre Channel端口等。计算实体220可以与用于通信接口的底层硬件位于同一芯片上,经由直接布线而连接到端口240,或者在一些情况下经由共享总线或其他机制而间接耦合到端口240。在实施例中,存在从计算实体220到端口240的一对一映射或一对多映射,使得每个端口240只能由端口240所映射到的计算实体220使用。计算进程230可以经由映射到正在执行计算进程230的计算实体220的一个或多个端口240发送和接收数据单元,包括包含梯度或其他向量数据的那些数据单元。
每个端口240可以经由缆线或任何其他合适的机制连接到支持计算的交换机250的端口290。尽管在某些实施例中出于减少延迟和/或其他原因,端口240和290之间的直接连接可能是期望的,但是端口240也可以经由中间的、不支持计算的交换机或其他网络设备而间接连接到端口290。
当执行计算进程230时,计算实体220可以生成需要归约的输出数据或者以其他方式与由同一工作者集合中的其他计算实体220所生成的输出数据结合使用的输出数据。计算实体220的输出数据在本文中可以被称为向量,局部梯度数据105是该向量的示例。
计算实体220可以经由映射到计算实体220的端口240将该向量发送到支持计算的交换机250。当在其对应端口290之一处接收到该向量后,交换机250可以将该向量转发到由网络计算实体260执行的网络计算进程270。
交换机250,或者更具体地,交换机250的计算子系统,可以包括一个或多个网络计算实体260,其被配置为对交换机250接收的向量数据执行集体操作。与计算实体120/220类似,每个网络计算实体260可以是CPU、GPU、TPU、加速器或能够执行集体操作的任何其他硬件。在实施例中,网络计算实体260可以是专用计算引擎,诸如在前述“Network Switchwith Integrated Compute Subsystem for Distributed Artificial Intelligence andOther Applications”中描述的。
网络计算实体260可以执行任意数量的网络计算进程270。由网络执行的每个分布式应用可以具有其自己的一组一个或多个网络计算进程270。例如,如果计算进程230a-h是作为单个机器学习任务的所有部分,则可以存在一组特定的一个或多个网络计算进程270,其被配置为从计算进程230a-h收集向量数据并对所收集的向量数据执行集体操作。集体操作可以包括例如归约操作(诸如求和、乘法、平均、最大值、最小值等等之类的)、扫描操作、广播操作、分散操作、聚集操作、屏障操作或任何其他适当的动作。网络计算进程270可以发送集体操作的结果(例如结果梯度)经由对应的端口290/240回到分布式应用中的每个计算进程230。
不同的应用和/或工作者集合可能需要不同的集体操作。在一些实施例中,计算实体220可以向支持计算的交换机250发送计算指令。计算指令可以识别网络计算进程270对特定向量数据集执行的特定归约操作或其他集体操作。指令还可以指定特定向量数据元素的(多个)数据类型或与数据结构相关的其他信息。在其他实施例中,网络计算进程270可以被配置为根据向量数据和/或与向量数据相关联的元数据来辨别要直接执行的(多个)计算操作。
支持计算的交换机250可以包括一个或多个缓冲存储器280,该缓冲存储器用于存储向量数据直到网络计算进程准备好处理它。例如,网络计算进程270可能无法在某个轮次中执行集体操作,直到它从某个分布式应用中涉及的每个计算进程230接收到向量数据。因此,它可以将其接收的每个向量数据单元存储在缓冲器280中,直到所有计算进程230已经发送了针对该轮次的向量数据。或者,网络计算进程270可以利用被称为处理缓冲器的缓冲器280来存储它已经针对该轮次接收到的向量数据的中间“运行”结果,诸如运行和,同时等待针对该轮次的额外向量数据。在一些情况下,向量数据可能比其能够被处理的速度更快地到达,并且因此被存储在分段缓冲器280中直到对应的网络计算进程270能够处理它。此外,处理缓冲器280可以被利用来存储集体操作的中间和/或最终结果,直到交换机250准备好发送那些结果为止。取决于实施例,缓冲器280可以或可以不与分组交换逻辑共享。
2.3.节点内归约和向量分割
在一些实施例中,诸如系统200之类的基于计算节点的系统可以通过在将向量数据发送到网络计算节点之前执行局部向量的节点内归约来实现某些益处。如上面所解释的,计算进程产生局部向量,但利用节点内通信机制来在节点级别聚合或以其他方式将局部向量归约在一起,从而产生本文中称为节点向量的中间结果。然后,计算节点只需将它们的节点向量发送到网络计算节点,从而减少了计算节点和网络计算节点之间的网络利用率。来自每个计算节点的节点向量然后可以在网络计算节点处被聚合或以其他方式被归约以产生结果向量。
在一些实施例中,诸如系统200之类的基于计算节点的系统还可以或替代地通过向量分割而实现某些益处。向量可以被分割成在本文中被称为块的分区。分布式应用中的每个向量的分割方案是相同的,这意味着每个向量的第一块包含相同的第一组元素的值,每个向量的第二块包含相同的第二组元素的值,等等。在实施例中,计算节点可以被配置为在传输到网络计算节点之前将局部向量或节点向量分割成块,然后经由不同的通信接口将每个块发送到网络计算节点。网络计算节点可以类似地经由不同的通信接口将结果向量作为块返回,从而减少传输向量所需的时间量。
由每个计算进程生成的局部向量的块被称为局部块。在节点级别处被聚合或以其他方式被归约的节点向量块被称为节点块。被返回到每个计算进程的结果向量块(例如,被用于机器学习逻辑的后向传递的结果梯度)被称为结果块。逻辑上,包含向量元素的相同集合的值的所有块可以说属于在本文中被称为块列的块分组。
图3图示了根据实施例的支持节点内归约和/或向量分割以减少网络带宽消耗的示例分布式机器学习系统300。系统300在许多方面类似于系统100和200。例如,系统300包括与计算节点210类似的计算节点310。每个计算节点310包括与计算实体220类似的多个计算实体,尽管这些计算实体为了简化而未被图示。每个计算实体执行计算进程330,类似于计算进程230。与计算进程230类似,每个计算进程330被映射到端口(未标记),它通过该端口而耦合到网络计算节点350的端口(同样未标记)。同时,网络计算节点350是支持计算的交换机250的示例。网络计算节点350包括执行网络计算进程370(类似于网络计算进程270)的一个或多个未描绘的计算实体。
然而,每个节点310的计算实体以及因此在该节点310处执行的计算进程330各自经由节点内通信机制315彼此耦合,并且因此能够进行节点内通信。通信机制例如可以是总线或其他互连。或者,计算实体可以以环形或其他拓扑来连接(例如,连接到两个相邻实体)。
计算进程330可以被配置为以若干方式利用节点内通信。首先,计算进程330可以将它们生成的局部向量305划分成块。每个计算进程330以正常方式生成局部向量305。然而,在计算进程生成局部向量305之后,它将局部向量划分为一系列块。例如,计算进程330a可以将其向量划分为块A0.1、B0.1、C0.1和D0.1,其中每个块包括向量305中的向量元素的不同子集的值。每个计算进程330a应该以相同的方式划分其向量,以便产生与同一分布式应用中的每个其他计算进程330相同数量的块。
此外,这些系列中的类似编号的块应当包括元素的相同子集的值。例如,假设块A0.1包括向量元素1-99,块B0.1包括向量元素100-149,块C0.1包括向量元素150-199,并且块D0.1包括向量元素200-400。因此,预期计算进程330b将其向量元素1-99包括在其块A0.2中、将向量元素100-149包括在块B0.2中,将向量元素150-199包括在块C0.2中,并且将向量元素200-400包括在块D0.2中。从概念上讲,每个局部向量中的类似编号的块(即,具有向量元素的相同集合的块)可以说是在相同的块列中。因此,在图3中,每个局部向量305具有针对列A、B、C和D中的每一列的块。
节点310处的计算进程330利用节点内通信机制315来彼此共享它们生成的局部向量305或其特定块。计算进程330可以对局部向量执行与相关分布式应用相关联的局部归约或(多个)其他集体操作。在实施例中,每个计算进程330承担对不同块列执行(多个)局部集体操作的责任。然后,计算进程330将集体操作的结果块(称为“节点块”)通过其关联端口发送到网络计算节点350。
例如,计算进程330a可以被指派为归约每个局部向量305中的第一块以产生节点块A0。类似地,计算进程330b可以负责从每个局部向量305中的第二块生成节点块B0,计算进程330c可以从每个局部向量305中的第三块生成节点块C0,并且计算进程330c可以从每个局部向量305中的最后块生成节点块D0。计算进程330仅需要通过互连315接收其负责的局部向量块,但是可以可选地接收其他块或者甚至接收在该节点310中生成的所有局部向量305。
替代地,节点310可以包括被配置为执行局部集体操作的其他计算实体,或者对所有局部向量执行局部集体操作的单个计算实体,其然后可以至少将相关节点块返回到负责发送这些块的计算进程330。
在任一情况下,在每个节点310中,将存在被指派给每个块列(即,指派给包含相同向量元素的每个块集合)的一个计算进程。如图3中所描绘的,每个计算进程330被给予标签,并且该标签指示计算进程330被指派到的块列。例如,计算进程330a、330e和330i分别在它们相应的节点310内被指派给块列“A”,并且因此共享标签CP0。
注意,如图3中所示,每个向量305被划分成的块的数量与每个节点310执行的计算进程330(以及因此的计算实体)的数量相同。情况不必总是如此,但是在一个向量305中的块的数量应当至少与在每个节点310中针对相关分布式应用所执行的计算进程330的最小数量一样大,以使得可以存在负责针对每个节点310中的每个块列的计算进程330。这可以是两个、四个、八个、十六个或任何其他合适数量的块,具体取决于实施例和应用配置。
网络计算进程370可以在同一块列中的节点块之间执行集体操作。例如,网络计算进程370可以从计算进程330a接收节点块A0,从节点310b的计算进程330e接收节点块A1,以及从节点310c的计算进程330i接收节点块A2。基于与这些节点块相关联的元数据和/或接收这些节点块的端口,网络计算进程370可以确定这些节点块中的每一个包括针对向量元素的相同集合的值,并且因此执行节点块之间的集体操作以生成结果块A。网络计算进程可以将集体操作的结果发送回发送节点块的每个计算进程330,该结果是基于该节点块被计算的。例如,网络计算进程370可以将结果块A返回到计算进程330a、330e和330i中的每一个。
在一些实施例中,对于向量305可以被划分成的每个块可以存在单独的网络计算进程370。例如,一个网络计算进程370可以从节点块A0-A2生成结果块A,另一网络计算进程370可以从节点块B0-B2生成结果块B,等等。这些网络计算进程370可以例如被绑定到网络计算节点350的特定端口,对应的节点块通过特定端口将被接收,并且被指派不同的缓冲器、网络计算实体和/或其他资源。另一方面,在其他实施例中,单个网络计算进程370、网络计算实体和缓冲器可以被用于所有块。
在实施例中,由网络计算节点350生成的所有结果块的集合形成结果向量306,计算进程330可以利用该结果向量来调整用于下一个轮次的参数。然而,网络计算节点350不一定需要(但是可以)将整个向量306发送到每个计算进程330,或者甚至合并结果块以形成向量306。相反,在接收到结果块后,计算进程330可以使用节点内通信机制315来与同一节点310处的每个计算进程330共享结果块,从而允许每个计算进程330形成结果向量306。
在系统300中,不再需要将所有局部向量305发送到网络计算节点350,而是仅向每个节点310发送单个节点向量,从而显著减少所利用的网络带宽量。此外,由于每个计算进程330可以分担发送节点向量和接收结果向量的负担,因此可以更优化地利用每个计算节点310和网络计算节点350的网络资源的容量。
注意,所描绘的节点310、端口、块和计算进程330的数量仅仅是说明性的。根据实施例,可以有更多数量的节点310、端口、块等等。
2.4.分层网络内计算
对于一些分布式应用,利用多于一个支持计算的交换机可能是期望的。例如,如果计算进程的数量超过支持计算的交换机上的可用端口的数量,则使用附加的支持计算的交换机以使得每个计算进程可以直接连接到支持计算的交换机可能是期望的。然而,随着支持计算的交换机数量的增加,可能会导致许多规模的问题。
例如,图4图示了根据实施例的包括处于分层布置的四个网络计算节点450的分布式机器学习系统。网络计算节点450a-450c中的每一个耦合到三个不同的计算节点410。每个计算节点410可以执行任何数量的计算进程,并且每个网络计算节点410可以包括用于这些计算进程中的每一个的单独端口。例如,每个计算节点可以执行八个计算进程,并且每个网络计算节点450因此可以是至少二十四端口交换机。然而,为了简化,没有描绘每个计算节点410的单独的计算进程和端口。
为了生成用于节点410处的计算进程的最终结果向量,网络计算节点450a-c将需要访问由节点410针对相关轮次而发送的所有节点(或局部)向量。这将需要网络计算节点450a-c直接或通过另一交换机而彼此链接,以便彼此共享该信息。不幸的是,这增加了每个网络计算节点450a-c处的资源需求,因为每个网络计算节点必须投入附加的缓冲器资源来在可能更长的时间段内缓冲每个块列的中间结果。此外,每个网络计算节点必须投入资源来对不同的块数据集合执行计算操作,这可能需要频繁的上下文切换、针对每个块数据集合的计算实体的重新编程以及其他相对昂贵的操作。
在一些实施例中,网络计算节点450a-c处的冗余和增加的缓冲要求可以通过采用计算层次结构来稍微减轻,其中每个网络计算节点450a-c将其中间结果发送到网络计算节点450d。网络计算节点450d然后可以生成结果向量,并将其返回到网络计算节点450a-c。然而,该解决方案的代价是在层次结构中增加附加的交换机,随着计算进程的数量增加到数百或甚至数千,这些交换机可能会增长到多个级别。
2.5.节点多交换机连接架构
图5图示了根据实施例的分布式学习系统500,其中每个计算节点510连接到多个支持计算的交换机550。系统500在许多方面类似于系统300。节点510例如可以类似于节点310,因为它们都包括多个计算实体。节点510的计算实体执行计算进程530,其类似于计算进程330。更具体地,计算进程530以与计算进程330生成局部向量305相同的方式生成局部向量。这些向量与向量350一样被划分成块,并且每个计算进程530被指派对块的不同列的责任。如在系统300中一样,向量数据经由节点内通信机制而在节点510中的计算进程530之间被共享。
然而,与系统300不同,系统500包括多个网络计算节点550a-d。每个节点510的每个计算进程530被耦合到不同的网络计算节点550,而不是节点510完全或主要连接到单个网络计算节点550。例如,计算进程530a可以直接连线(或以其他方式连接)到网络计算节点550a上的端口,计算进程530b可以直接连线(或以其他方式连接)到网络计算节点550b上的端口,计算进程530c可以直接连线(或以其他方式连接)到网络计算节点550c上的端口,并且计算进程530d可以直接连线(或以其他方式连接)到网络计算节点550d上的端口。结果,每个网络计算节点550连接到参与到分布式学习系统500中的每个计算节点510。
计算节点510和网络计算节点550之间的连接被布置为使得每个网络计算节点550接收并处理针对不同块列的向量数据。例如,网络计算节点550a被耦合到计算进程530a、530e和530i,计算进程530a、530e和530i仅向网络计算节点550a发送块列A的向量数据。同时,网络计算节点550b、550c和550d分别仅接收和处理针对块列B、C和D的向量数据。注意,向量中的块列的数量与网络计算节点550的数量相同。
如在系统300中,每个计算进程550a可以执行局部集体操作以产生节点块以发送到对应的网络计算节点550a。例如,计算进程530a可以将节点块A0发送到网络计算节点550a,计算进程530e可以将节点块A1发送到网络计算节点550a,并且计算进程530n可以将节点块An发送到网络计算节点550a。然而,在一些实施例中,计算进程530可以仅将针对其块列的所有局部向量块直接发送到网络计算节点550a,而不执行局部集体操作。
每个网络计算节点550包括实现网络计算进程570的网络计算实体。与网络计算进程370一样,网络计算进程570在其针对给定应用的给定轮次中的给定块列而接收到的每个块之间执行集体操作。同样,网络计算进程570将结果向量块返回到其耦合到的每个计算进程530。例如,网络计算节点550a将结果块A返回到计算进程530a、530e和530i。然后,计算进程530经由节点内通信机制来与它们各自的节点510中的每个其他计算进程530共享它们接收的结果块。
网络计算节点550都不需要接收或处理完整向量,或者甚至不需要知道存在其他向量块列。因此,网络计算节点550不需要保留缓冲空间或投入处理资源来归约来自未被指派块列的块。例如,尽管网络计算节点350将需要单独的处理缓冲器来存储结果向量的每一列的中间结果,但是网络计算节点550各自需要用于结果向量的仅一列的处理缓冲器。此外,任何给定网络计算节点550a上的网络计算处理逻辑需求可以少于网络计算节点350上的网络计算处理逻辑需求,因为在给定网络计算节点550a处的网络计算进程570仅需要被配置为对于任何给定的分布式应用在单个块列上操作。这可以减少对针对不同块列的不同集体操作之间的上下文切换和重新配置的需要,和/或减少对分级缓冲器以存储等待处理的向量数据的需求。此外,由于在特定网络计算节点中仅处理单个列的事实,分级缓冲器可以支持更多数量的未完成数据元素以进行处理。结果,可以极大地减少在任何给定网络计算节点550处提供网络内计算的资源需求。
此外,系统300和500的所有其他方面是等同的(例如,每个计算节点和网络计算节点的端口数量),系统500可以比系统300扩展得更好。一旦计算进程330的总数超过了网络计算节点330处的端口数量,系统300就需要附加的网络计算节点,并且这些附加的网络计算节点以网络带宽和其他资源为代价来支持网络计算节点之间的向量数据的通信,如图4中所图示。考虑到分布式学习任务可能涉及数百、数千或者甚至更多的计算进程530,甚至非常大的支持计算的交换机中的端口也可能很快被耗尽。对照而言,即使系统500中可能需要附加的网络计算节点,也完全避免了在网络计算节点550之间传送向量数据的费用,直到计算节点510的数量超过在任何给定网络计算节点550处可用的端口的数量(在一些实施例中,其数量可以是数百个或者甚至更多)。
图5仅图示了具有节点到多交换机架构的系统的一个示例。其他此类系统可以以不同的布置包括更多的或更少的元件。例如,计算节点510的数量、每个计算节点510的计算进程530的数量、网络计算节点550的数量、每个网络计算节点550的端口的数量以及每个向量的块列的数量可以变化,并且取决于实施例。
此外,网络计算节点510可以具有由在与计算进程530相同的分布式应用中未涉及的其他计算实体所执行的附加计算进程。这些计算进程可以连接到或可以不连接到网络计算节点550中的一些或全部。类似地,网络计算节点550可以连接到除计算节点510之外的其他设备,并且这些设备不需要涉及在相同的分布式应用中,或者实际上不涉及任何分布式应用。网络计算节点550可以仅被配置为将来自这些其他设备的流量视为标准网络流量,并且为该流量提供分组交换功能。
在其他实施例中,连接到网络计算节点550的附加设备和/或连接到网络计算节点550的节点510处的附加计算进程可以被涉及在其他分布式应用中。网络计算节点550中的一些或全部可以潜在地使用相同的缓冲器和/或处理资源中的一些或全部来实现用于这些其他分布式应用的网络计算进程。例如,网络计算实体可以被调度为基于不同分布式应用的向量数据的可用性、优先级和/或其他考虑因素而在这些分布式应用的集体操作之间进行切换。在一个分布式应用中涉及的网络计算节点集合可以与在另一分布式应用中涉及的网络计算节点集合部分或完全重叠。
在实施例中,网络计算节点可以连接到每个计算节点510处的多于一个计算进程,并且因此对多于一个块执行集体操作。负责同一列中的块的所有计算进程530仍将连接到同一网络计算节点550,该网络计算节点550将负责计算对于该列的结果块。例如,可以有两个网络计算节点550,而不是四个网络计算节点550。网络计算节点550a可以经由不同的端口而连接到被标记为CP0和CP1的计算进程530,并且将结果块A和B分别返回到那些计算进程530。同时,网络计算节点550b可以经由不同的端口而连接到被标记为CP2和CP3的计算进程530,并且将结果块C和D分别返回到那些计算进程530。
在实施例中,网络计算节点可以是可配置的以在多块模式下操作(如网络计算节点330),或在单块模式下操作(如网络计算节点530),和/或在混合模式下操作,如上一段中所解释的。在一些实施例中,网络计算节点所操作的模式可以是其接收哪些向量块和/或其连接到哪些节点(如可从与向量数据相关联地接收的元数据或指令辨别)的函数。在其他实施例中,编排器节点使用适当的计算指令以适当的模式来配置网络计算节点。
2.6.计算平面
如上面所建议的,使用节点到多交换机架构的系统可能最终耗尽每个网络计算节点550处可用的端口数量。在这些和其他情形中,被称为计算平面的架构构造可以被利用来扩展到甚至更多数量的计算节点。
图6图示了根据实施例的用于利用计算平面655a-c的分布式应用的示例分布式学习系统600。每个计算平面655包括其自己的一组计算节点610和网络计算节点650,其以与系统500的计算节点510和网络计算节点550类似的方式而被布置在平面内。所有这些计算节点610和网络计算节点650被配置为生成相同分布式应用的向量数据并对其进行操作。
给定平面中的计算节点610和网络计算节点650以与计算节点510和网络计算节点550在系统500内操作相同的方式在该平面655内操作,除了每个平面695中的网络计算进程670必须经由平面间通信机制695来与每个其他平面655中的对应网络计算进程670通信以在计算最终结果块之前交换中间结果数据以外。对于每个块列,每个计算平面655中将存在单独的网络计算节点650,并且这些网络计算节点均可以经由平面间通信机制695来链接以使得能够归约针对该块列的结果块。
例如,平面655a中的网络计算进程670a可以根据其从平面655a中的计算节点610接收的向量数据来生成中间结果块Aa,也称为平面块Aa。类似地,计算平面655b中的网络计算进程670a可以生成平面块Ab,并且计算平面655c中的网络计算进程670a可以生成平面块Ac。然后,网络计算进程670a可以利用平面间通信机制695a来共享平面块Aa、Ab和Ac,以便使得能够计算要被返回到它们各自的平面655中的每个计算节点610的结果块A。
网络计算节点650b使用平面间通信机制695c来生成最终结果块B,网络计算节点650c使用平面间通信机制695c来生成最终结果块C,并且网络计算节点650d使用来生成最终结果组块D。由于不同的最终结果向量组块在它们返回到计算节点610之前不需要被组合以形成结果向量,因此连接每组网络通信节点650a、650b、650c和650d的平面间通信机制695可以是分离的且不同的。
平面间通信机制695各自可以是任何合适的通信机制。例如,平面655可以由一个或多个中央集线器链接,其中每个网络计算节点650处的可用端口连接到集线器。可以存在连接每个块列的网络计算节点650的分开的中央集线器(例如,连接网络计算节点650a的第一集线器、连接网络计算节点650b的第二集线器等)。或者,单个集线器可以连接所有网络节点650。
中央集线器可以将其接收到的每个平面块广播到其他平面655中的每一个中的负责网络计算节点655。例如,中央集线器可以与计算平面655b和655c中的每个其他网络计算节点650a共享由网络计算节点650a在计算平面655a中计算出的平面块Aa。然后,网络计算节点650各自可以自己计算最终结果向量块。或者,中央集线器本身可以包括计算子系统,其被配置为计算最终结果块并将其返回到平面655中的每一个。例如,中央集线器可以根据其从所有网络计算节点650a接收的平面块来计算最终结果块A,并将其返回到每个网络计算节点650a。
作为另一示例,平面655可以使用环形拓扑来链接,其中每个平面655链接到两个相邻平面655。也就是说,平面655被组织成使得每个平面以环状形式恰好与两个其他平面相邻。每个网络计算节点650可以具有链接到一个相邻平面中的网络计算节点650的一个端口,以及链接到另一相邻平面中的网络计算节点650的另一端口。
在实施例中,通过这样的机制,可以使用全归约策略来共享数据。例如,第一网络节点650可以将其平面块传递到下一个平面655中的对应网络节点650。该网络计算节点650可以将其接收的平面块与其自己的平面块归约。然后,该网络计算节点650可以将该中间结果传递到下一个平面655,下一个平面655将它与其平面块归约,等等。最终结果块最终将由环中的最后一个网络计算节点650生成以处理向量数据,并且最终结果块然后可以通过该环被传播回来。当然,可以利用用于在计算平面655之间共享向量数据的任何其他策略。
图6仅图示了计算平面的一种示例布置。其他系统可以包括处于不同布置的更多的或更少的元件。例如,每个计算平面可能存在更多的计算平面或更多的计算节点和/或网络计算节点。任何其他合适的拓扑可以被用于节点间通信机制695,包括更复杂的分级拓扑。此外,每个计算平面655内的拓扑可以变化,例如,环形拓扑可以在一个计算平面中使用,而全网状拓扑可以在另一个计算平面中使用。无论平面内的拓扑如何,平面仍将使用平面间通信机制来连接,如图6中所示。
2.7.子分割
图7图示了根据实施例的分布式学习系统700,其中计算进程730被配置为将块划分为多个子块,这些子块可以经由不同端口被分开地发送到网络计算节点。计算节点处的计算进程730生成向量705,该向量705被分割成块,如前面的示例中那样。每个计算进程730还被指派对不同块列的责任,如先前示例中所解释的。
然而,在计算进程730发送块之前,无论该块是局部块还是从该计算进程负责的局部块归约的节点块,计算进程730将该块划分为两个或更多子块。例如,计算进程730a可以从局部块A0.1、A0.2、A0.3和A0.4归约节点块A0。计算进程730a可以将节点块A0划分成子块A0-1和A0-2。当然,计算进程730a也可以在局部归约操作之前划分每个局部块,且然后分别归约这些子块。
计算进程730然后将每个子块发送到不同的网络计算节点750。例如,计算进程730a将子块A0-1发送到网络计算节点750a1并且将子块A0-2发送到网络计算节点750a2。在实施例中,每个计算进程730可以被耦合到或被指派有两个或更多网络通信接口,每个网络通信接口可以连接到不同的网络计算节点750,并且这些子块因此可以被发送出这些网络通信接口中的不同通信接口。
每个网络计算节点750可以执行集体操作以按照与归约全尺寸块相同的方式归约其接收到的子块,如本文别的地方所描述的。事实上,在实施例中,网络计算节点750甚至不需要知道它们正在对子块而不是块(或者甚至整个向量)执行集体操作。注意,虽然仅描绘了一个计算节点710,但是每个网络计算节点750实际上将连接到数量可能大得多的计算节点710并从其接收子块。网络计算节点750将它们归约的结果块返回到计算进程730,网络计算节点750经由对应的网络通信接口连接到计算进程730。
虽然图7仅图示了每个块具有两个子块,其他实施例中每个块可以具有三个、四个或者甚至更多数量的子块。注意,每个计算节点710连接到的网络计算节点750的数量以及每个计算节点710处所需的通信接口的数量都增加了每个块的子分区的数量的因子。
在实施例中,实现计算进程730的每个计算实体可以耦合到SerDes或其他通信硬件,系统集成商可以将其配置为单个高带宽网络接口,或者配置为更多数量的较低速度的网络接口。例如,通信硬件可以支持单个400Gb/s以太网端口、两个200Gb/s以太网端口、四个100Gb/s以太网端口等等。被用于给定分布式计算系统的配置可以基于系统的需要而变化。例如,在一些实现中,可能期望具有较少数量的网络通信接口,但是具有到每个网络计算节点750的高带宽连接。因此,SerDes可以被配置为单个端口,并且向量块不会被子分割。在其他实现中,可能期望具有并行工作的大量网络计算节点750,并且到每个网络计算节点750的低带宽连接可能是令人满意的。因此,SerDes例如可以被配置为四个端口,并且向量块可以被子分割为四个子块。
在又一个实施例中,单个物理端口可以被细分为专用于不同块列的信道。例如,网络计算节点可以具有被指派来处理通过这些不同信道传送的块或子块的不同计算实体或进程。
3.0.功能概述
本节中描述的是用于实现本文描述的系统和系统组件的各种特征的各种示例方法流程。示例方法流程并不详尽。替代方法流程和用于实现其他特征的流程将从本公开中变得显而易见。
下面描述的过程流的各个元素可以在各种系统中被执行,包括在前面部分中描述的分布式计算系统中和/或在其他分布式系统中。在实施例中,结合下面描述的功能块描述的每个过程可以使用通用计算机或专用计算机中的任何一个中的一个或多个集成电路、逻辑组件、计算机程序、其他软件元件和/或数字逻辑来实现,同时执行涉及与计算机的存储器的物理状态进行交互和转换计算机的存储器的物理状态的数据检索、转换和存储操作时。
3.1.系统级流程
图8图示了根据实施例的用于网络中的分布式计算操作的系统级流程800。
框810包括通过在多个计算节点中的多个计算实体处执行多个计算进程来生成分布式应用的向量数据。可以有任意数量的计算节点,每个计算节点为分布式应用执行相同数量的计算进程。计算节点和计算进程可以是本文描述的任何合适的计算节点,分别包括但不限于计算节点510和计算进程530。
分布式应用可以是任何类型的计算应用,尽管在某些实施例中分布式应用是分布式机器学习应用,诸如本文别的地方所描述的。向量数据可以包括出于任何合适的目的而为分布式应用生成的多个局部向量。每个向量包括多个值。每个值是针对向量元素集合中的不同向量元素,该向量元素集合是为分布式应用生成的所有向量所公共的。每个局部向量由计算进程中不同的一个计算进程生成,也如本文别的地方所述。例如,每个局部向量可以是在神经网络的前向传递期间由不同的一个计算进程生成的梯度,包括用于多个权重或其他参数中的每一个的单独的梯度元素。
框820包括将向量数据分割成块。在一些实施例中,局部向量可以被直接分割成块。可选地,取决于实施例,给定节点内生成的局部向量的块然后可以被一起归约以形成用于该节点的节点块。在其他实施例中,由给定计算节点内的计算进程生成的局部向量可以首先被归约为用于该计算节点的节点向量,并且然后可以对该节点向量进行分割。
在任一情况下,被用来将局部向量或节点向量划分成块的分割机制对于每个向量来说是相同的。分割机制确保对于每个向量,对于向量元素的多个已定义子集中的每一个将有一个块,如本文别的地方所描述的。
框830包括将块中的每个块发送到对应网络计算节点,该对应网络计算节点已被指派以归约块内的向量元素的子集。可以存在多个网络计算节点,诸如网络计算节点550,每个网络计算节点负责归约针对向量元素的不同子集的向量数据。在一些实施例中,仅将节点向量的块发送到网络计算节点。在其他实施例中,局部向量可能不一定被归约为节点向量,并且因此局部向量的块被发送到网络计算节点。在任一情况下,将存在被发送到网络计算节点的每个向量的多个块,并且这些块中的每一个将被发送到网络计算节点中的不同的网络计算节点。
在实施例中,计算节点和网络计算节点之间的连接被布置为使得每个计算节点具有到每个网络计算节点的连接(例如,如在系统500中)。在这种情况下,每个计算节点可以被配置为将不同的连接与向量元素的不同子集(例如不同的块列)相关联。每个计算节点被配置为经由与对应于块数据内的值的向量元素的子集相关联的连接来传送块数据。从另一个角度来看,每个计算节点具有到每个网络计算节点的专用连接以用于发送块数据,该块数据包括指派给该网络计算节点的向量元素的子集的值。
在又一些实施例中,在每个计算节点不具有到每个网络计算节点的直接连接的情况下,仍然可以实现某些优点。相反,计算节点可以经由到中间交换机或其他网络设备的单个接口将块发送到一些或所有网络计算节点。
框840包括在每个网络计算节点处基于发送到该网络计算节点的块来计算结果块。例如,每个网络计算节点可以被配置为将携带向量元素的某个子集的数据的所有块收集到缓冲器中。当它从每个计算节点接收到块时,网络计算节点可以执行与分布式应用相关联的一个或多个集体操作(例如求和、乘积、平均等)以将块归约为单个结果块,该单个结果块针对每个向量元素都有单个归约值。如果资源允许,网络计算节点还可以在接收到块时一起归约这些块。
框850包括网络计算节点将它们生成的结果块返回给每个计算节点。网络计算节点可以经由例如计算节点用来将块发送到网络计算节点的相同连接而将其生成的结果块返回给每个计算节点。
框860包括在每个计算节点处与该节点中的每个计算进程共享每个结果块。可以利用任何合适的节点内通信机制来促进共享,如本文别的地方所描述的。作为共享的结果,每个计算进程都有一个完整的结果向量,由网络计算节点所生成的每个结果块组成。换句话说,每个计算进程将具有一个结果向量,该结果向量具有计算进程最初生成的局部向量中的每个向量元素的结果值。计算进程可以将该结果向量用于任何合适的目的,包括但不限于由计算进程训练的神经网络的后向传递,或者用于学习或其他计算任务的下一次迭代的任何其他参数调整。流程800可以可选地针对多个这样的迭代中的每一个而进行重复。
流程800仅图示了分布式计算操作的一个示例流程。其他这样的流可以包括处于不同布置的更少或更多的元件。例如,在实施例中,计算节点和网络计算节点可以形成计算平面,如在系统600中那样。可以存在多个其他计算平面,其相对于它们自己的计算节点和网络计算节点而分开地执行流程800。在每次迭代中,框840的结果块可被视为中间结果块或平面块。流程800可以被扩展为包括用于在每个网络计算节点处计算最终结果块之前在每个平面的网络计算节点之间共享平面块的步骤。然后,流程800可以继续到框850,用于将最终结果块返回到每个平面中的每个计算节点。
在实施例中,计算节点不需要被限制为仅向网络计算节点发送该网络计算节点将归约的块,而是实际上可以向每个网络计算节点发送直至整个向量。然后网络计算节点必须被配置为选择要归约的向量的适当块。
在另一个实施例中,计算节点可以被配置为将来自多个块列的块发送到同一网络计算节点。网络计算节点可以负责归约这些块列中的每一个,并且包括用于在与向量元素的不同子集相关联的块之间进行区分的逻辑。对于网络计算节点负责归约的向量元素的每个子集,网络计算节点应该识别并归约携带该子集的值的所有块。然后,可以将向量元素的这些子集中的每一个的结果块返回给每个计算节点。
在实施例中,在诸如本文所描述的计算架构中,计算节点可以依赖于网络计算节点来使用与框830-860的步骤类似的步骤来进行除归约之外的集体操作。这样的集体操作可以涉及或者可以不涉及每个计算节点向网络计算节点发送数据,但是仍然可以涉及一些或全部计算进程经由网络链路和节点内通信机制从网络计算节点接收回数据。
例如,在广播操作中,网络计算节点可以从特定计算进程接收数据(例如,块),然后将该数据广播到其所连接到的每个计算进程(并且可选地,其他计算平面)。连接的计算进程可以取决于操作而与在其各自的计算节点处的每个计算进程共享数据。网络计算节点可以类似地执行分散操作,但是将其接收到的数据的不同部分发送到不同的计算进程。
作为另一示例,每个计算进程可以向预订到同步或其他屏障操作的网络计算节点发送消息。当从每个连接的计算进程(并且可选地,每个其他计算平面)接收到消息后,网络计算节点可以向每个连接的计算进程(并且可选地,向每个其他计算平面)广播屏障消息,从而指示计算进程可以继续。每个连接的计算进程可以在其各自的计算节点处与其他计算进程共享屏障消息。
作为又一示例,网络计算节点可以从每个连接的计算进程收集数据以进行聚集操作,并且将该数据发送到单个连接的进程(或者在同一平面中,或者经由不同的计算平面)。网络计算节点还可以执行其他集体操作,如其他部分中提及的。
3.2.计算进程流程
图9图示了根据实施例的用于在特定计算进程处分发和接收向量块的流程900。特定计算进程是用于分布式应用的任务的指令的实现,诸如但不限于训练逻辑或其他机器学习逻辑。特定计算进程可以例如由计算节点处的计算实体来实现,诸如由GPU、CPU、TPU或其他加速器来实现。在实施例中,例如,计算进程可以是计算进程530。然而,在其他实施例中,流程900可以在除系统500之外的系统中被实践并且不需要包括系统500的具体细节。相反,计算进程530可以实现除流程900之外的流程。
框910包括生成局部向量的特定计算进程。该向量包括一系列向量元素中的每个元素的值。特定计算进程是通过生成包括一系列向量元素的值的向量来参与在分布式应用中的许多计算进程之一。该计算进程集合统称为工作者集合。工作者集合包括与该计算进程在同一计算节点处的其他参与计算进程的集合,以及在其他计算节点处的同等大小的参与计算进程的集合。特定的计算进程可以生成向量的值作为任何合适的逻辑的结果。例如,在实施例中,这些值可以是如本文别的地方所描述的梯度值。
框915包括将局部向量分割成块。特定的计算进程根据由每个计算进程所采用的公共分割方案来这样做,该计算进程为该系列向量元素生成向量。分割方案可以将该系列向量元素划分成数个子集。子集的数量可以等于计算节点内参与在工作者集合中的计算进程的数量。在一些实施例中,可以以这样的方式来划分子集:它们在每个子集内的向量元素的数量基本上相等,或者在存储每个子集的值所需的空间量基本上相等。在其他实施例中,分割方案可以以任何其他合适的方式来划分向量元素,诸如通过向量元素之间的关系、预定义的元素归组等等,只要该方式在工作者集合中的所有计算进程上是一致的即可。
局部向量本身被划分为块,也被称为局部块。每个局部块包括向量元素的不同子集的局部向量值。
框920包括确定哪些参与计算进程负责在框915中生成的哪些块。工作者集合中的每个计算进程被指派负责不同组的向量块。更具体地说,计算节点内的每个参与计算进程都被指派给向量元素的子集中的不同子集,或块列。每个参与计算进程负责在其计算节点内生成的所有向量块,这些向量块包括所指派的向量元素的子集的值。特定计算进程可以以任何合适的方式确定计算进程和向量元素子集之间的映射,诸如进程配置数据、对计算进程的指令、计算实体硬件标识符到子集的映射等,只要计算节点内的每个计算进程确定相同的映射即可。
例如,向量元素的每个子集可以由指示每个向量内的一系列向量元素内的子集的顺序的数字来识别。每个计算实体可以具有硬件标识符、工作者集合标识符或其他合适的标识符。其计算实体的标识符为0的计算进程可能被指派给向量元素的第一子集,依此类推。在实施例中,这样的映射可以已经被预先确定,并且不需要在每次计算进程执行流程900时再次被确定。
框925包括特定计算进程将未指派给计算进程的每个局部块发送到负责该块的相同计算节点内的计算进程,如框920中确定的映射所指示的。特定计算进程将向计算节点中的每个参与计算进程发送不同的局部块。特定计算进程保留该特定计算进程负责的局部块。
特定计算进程经由节点内通信机制发送局部块。该机制可以包括例如共享可寻址总线、节点中的每个计算实体之间的单独连接和/或切换机制。在实施例中,该机制可以包括相邻计算实体之间的连接,以及在每个计算实体处用于将未寻址到该计算实体的数据中继到另一个相邻计算实体上的逻辑,从而形成环或其他合适的拓扑。
框930包括特定计算进程从计算节点中的其他计算进程接收局部块。特定计算进程接收多个局部块,这些局部块携带指派给该特定计算进程的向量元素的子集的值。特定计算进程从计算节点中的每个参与计算进程接收这些局部块之一。这些局部块是经由节点内通信机制接收的。
框940包括特定计算进程将局部块一起归约以生成节点块。该归约可以涉及由分布式应用规定的任何合适的(多个)集体操作,诸如求和、平均、乘积等等。在所有参与计算节点上的操作应该相同。节点块具有指派给特定计算进程的向量元素的子集中的每个向量元素的中间结果值。在实施例中,可以针对不同的向量元素执行不同的集体操作。
框950包括将节点块发送到与计算进程相关联的网络计算节点,该网络计算节点被指派以归约该块。网络计算节点可以是支持计算的交换设备,包括但不限于网络计算节点550或本文描述的其他网络计算节点。网络计算节点应当执行网络计算进程,该网络计算进程被配置为归约包括与指派给特定计算进程的向量元素相同的子集的向量。
在实施例中,执行特定计算进程的计算实体直接耦合到网络计算节点。例如,计算实体可以硬连线到通信接口,该通信接口进而又通过电缆直接连接到网络计算节点的以太网端口。在另一个实施例中,计算进程可以被配置为通过将节点块寻址到网络计算节点并将节点块发送到内部或外部转发机制来将节点块发送到网络计算节点。
框960包括从网络计算节点接收结果块。该结果块应包含指派给特定计算进程的向量元素的子集中的每个向量元素的结果值。在实施例中,网络计算节点可以通过将来自特定计算进程的节点块与其从被指派对其他计算节点处的向量元素的相同子集负责的计算进程接收的节点块进行归约来生成结果块。在实施例中,结果块也可以基于与来自其他计算平面的平面块的归约操作而生成。在任何情况下,网络计算节点应被配置为通过执行与框940中执行的特定计算处理相同的(多个)集体操作来归约向量块。随后描述网络计算节点的示例处理流程。
框970包括特定计算进程将结果块发送到同一计算节点中的每个其他参与计算进程。特定计算进程可以经由节点内通信机制广播或以其他方式发送结果块。
框980包括从计算节点处的其他参与计算进程接收其他结果块。这些计算进程可能已经从负责归约向量元素的不同子集的不同网络计算节点接收到这些结果块,因为每个参与计算进程也与特定计算进程并行地执行流程900。特定计算进程从节点处的每个参与计算进程接收结果块,包括指派给该计算进程的向量元素的子集的结果值。
框990包括将在框960中接收到的结果块与在框980中接收到的结果块进行组合,以形成结果向量。在这些结果块之间,特定计算进程将接收向量元素的每个不同子集的结果块,并且从而具有向量的每个元素的结果值。特定计算进程可以将结果向量用于任何合适的目的,包括但不限于在特定计算进程的下一次迭代中对框910进行调整,如本文别的地方所描述的。
流程900图示了计算进程的一个示例流程。其他流程可以包括处于不同布置的更少或更多的元件。例如,在一些迭代中,框930-框970中的一些或全部可以与框980同时执行或者甚至在框980之后执行。作为另一示例,框915-框930中的一些或所有可以与框910同时执行。
如上面所建议的,流程900可以由许多计算进程在相同和不同的计算节点处并行地执行。每个计算进程可以根据不同的数据和/或参数来生成局部向量。这些计算进程可以在多个不同轮次的每一个中重复流程900。
在实施例中,代替发送单个节点块并接收返回的单个结果块,特定计算进程可以对节点块或各个局部块进行子分割,并将不同的子块发送到不同的网络计算节点,不同的网络计算节点然后返回对应的结果子块,如图7中所描绘的。
在实施例中,特定计算进程可以跳过框920并且仅将整个局部向量广播或以其他方式发送到计算节点处的所有计算进程。同样,特定计算进程可以接收由计算节点中的每个计算进程生成的每个局部向量。然后,每个参与计算进程可以负责分割局部向量并提取该计算进程负责的块。
在实施例中,特定计算进程不需要执行框940中的局部归约操作,而是可以替代地将每个局部块发送到网络计算节点。
在实施例中,特定计算节点可以将整个节点向量或者甚至每个局部向量发送到网络计算节点,然后网络计算节点被配置为提取其负责归约的(多个)块。
3.3.网络计算节点流程
图10图示了根据实施例的用于在网络计算节点处生成结果块的流程1000。流程1000可以由任何类型的网络计算节点来实现,包括但不限于系统500的网络计算节点550。在实施例中,已接收到流程900的每个框950的节点块的网络计算节点可以利用流程1000来生成在框960中返回的结果块。然而,流程1000也可以在没有特定细节系统500和/或流程900的其他上下文中被利用。此外,流程900和系统500不一定需要以流程1000的特定细节来实践。
框1010包括从计算节点接收向量块。向量块可以是局部块或节点块,如本文别的地方所描述的,包括多个向量元素的多个值。取决于向量块的大小,可以以一个或多个数据单元来接收向量块。在一些实施例中,来自向量块的数据可能需要被缓冲,直到整个向量块已被接收和组装,此时可以对其进行处理。
在实施例中,向量数据只是网络计算节点可以接收的数据的一种类型。因此,框1010可以继续进行以下步骤,诸如确定网络节点接收到的数据单元携带向量块的数据而不是非向量数据、将该数据转发到网络计算节点内的网络计算进程等等。
框1020包括确定向量块包括用于特定分布式应用的特定归约操作的向量数据。这可以包括识别为其生成向量块的分布式应用。这还可以或替代地包括确定块包括特定向量元素集(例如向量列)的值。不需要知道向量块包含针对其的值的特定向量元素。相反,网络计算节点能够确定该块包含例如为分布式应用生成的一系列向量元素中的向量元素的第二子集的值就足够了。
在一些实施例中,分布式应用和/或向量元素的相关子集可以是从其中接收向量块的上下文中隐含的。例如,网络计算节点可以被配置为自动归约在特定时间帧内通过特定端口集合一起接收到的所有块。在其他实施例中,分布式应用和/或相关子集可以由在与向量块相关联的元数据中接收到的一个或多个标识符来指示,诸如数据单元报头中的字段。这样的标识符可以包括源标识符、应用标识符、工作者集合标识符、上下文标识符、列标识符、数据集标识符等等。例如,网络计算节点可能先前已接收到计算指令,该计算指令指示与特定应用标识符、数据集标识符和轮次标识符一起接收到的所有块应一起被归约。
框1030包括确定网络计算节点是否已从连接到参与归约操作的网络计算节点的每个计算节点接收到向量块。例如,网络计算节点可能已经被预先配置为期望从参与在分布式应用中的多个计算节点中的每一个接收节点块。在实施例中,框1030所考虑的向量块应该只是在分布式应用的特定迭代或轮次期间针对在框1010中接收到的向量块携带其值的向量元素的特定子集而生成的那些向量块。如果计算节点未被配置用于局部归约,则框1030可能需要确保网络计算节点已经从每个计算节点处的每个计算进程接收到每个局部向量块。
如果在框1030中确定网络计算节点尚未从每个计算节点接收到向量块,则流程1000继续到框1040,其中向量块与其他相关联的向量块一起被放置在缓冲器中。然后流程1000返回到框1010以接收附加的向量块。
否则,流程1000继续到框1050。框1050包括:网络计算节点,或者更具体地,网络计算节点处的网络计算进程,将向量块与针对向量元素的相同子集的其他缓冲向量块进行归约。要被执行的(多个)特定集体操作(例如求和、平均、乘积等)可以在相关分布式应用的配置数据中被指示。在集体操作期间,基于同一向量元素的每个块的值,为向量元素子集中的每个向量元素计算单个结果值。结果值一起构成结果块。
框1060包括网络计算节点将结果块发送到它从其中接收向量块之一的每个计算节点。
流程1000图示了网络计算节点的一个示例流程。其他流程可能涉及处于不同布置的更多的或更少的元件。例如,在实施例中,可以存在多个计算平面,每个计算平面具有被指派以归约同一向量元素集合的网络计算节点。在框1050中生成的结果块可以被认为是平面块。然后,流程1000可以包括附加步骤:在不同的网络计算节点之间共享平面块以及将平面块一起归约以形成最终结果块(分开地在每个网络计算节点处、经由全归约或其他策略协调或者在中央集线器处)。然后可以在框1060中返回最终结果块。
作为另一示例,在实施例中,网络计算节点可以在接收到向量块时开始对向量块执行某些集体操作,而不是等到所有向量块都被接收到才执行集体操作。例如,网络计算节点可以计算迄今为止已接收到的每个向量块的每个值的总和,然后在1040中将结果作为中间结果存储在缓冲器中,而不是分开地存储每个向量块。当已接收到最终向量块时,可以将其与中间结果一起归约以产生结果块。
在一些实施例中,处理资源可以允许“存储器内”(in-memory)归约,其中一旦接收到向量块就确定中间结果,并且仅需要将中间结果写入到缓冲器。在其他实施例中,网络计算节点可以被配置为当处理资源可用时生成某些缓冲向量块的中间结果,并且因此可以在任何给定时间将中间/工作结果以及未处理的向量块两者存储在缓冲器中。
在实施例中,由于缓冲器和/或处理限制,可以生成并存储多个中间结果来取代不同组的向量块,并且可以至少部分地通过归约多个中间结果来确定结果块。
在实施例中,对于与分布式应用相关联的不同向量元素可以进行不同的集体操作,并且框1050可以包括解析该集体操作以基于上下文标识符、数据集标识符或与向量块相关联的其他元数据来执行。
4.0.示例实现细节
4.1.错误处理
各种错误条件可能影响分布式计算系统的操作。一种类型的错误是分组损坏,其中当代表性信号穿过网络和/或被写入到缓冲器或从缓冲器读取时,携带向量数据或计算指令的数据单元(例如分组)可能变得损坏。分组损坏错误可以包括例如CRC错误、格式错误的分组等等。这些错误可能要求发送计算进程重新传输(多个)被损坏的数据单元,或者甚至要求其他计算进程重新传输与那些(多个)被损坏的数据单元相关的其他分组。这进而可能要求各计算进程和网络计算进程暂停或延迟进一步的操作,直到重新传输了所要求的数据单元为止。
根据实施例,诸如系统500中配置的系统可以通过减少通过网络传输的数据量以及数据必须行进的路径的长度来降低此类错误的可能性,因为每个计算进程直接连接到每个网络计算节点。即使在系统600的计算平面实施例中,与其他替代方案相比,网络通信量也被大大减少,从而降低了分组损坏的可能性。
另一种类型的错误是缓冲器溢出。交换机或其他网络设备可以在其中临时缓冲向量数据和/或用于传输该向量数据的数据单元的存储器(例如入口缓冲器、出口缓冲器、分组缓冲器、处理缓冲器等)的大小是有限的。在某些条件下,这些存储器或者至少分配给某个应用或任务的部分可能会变得太满。到达该特定应用或任务的任何新数据都可能被丢弃,从而同样要求重新传输所包含的数据单元以及其数据可能在此期间从缓冲器中被冲刷的潜在的其他数据单元。
根据实施例,诸如系统500中配置的系统可以再次降低此类错误的可能性。节点内通信不仅减少了传输到网络计算节点的数据量,从而减少了缓冲要求,而且缓冲器中所要求的空间量也被减少,特别是如果在向量块被接收时连续地计算中间结果。
另一种类型的错误是集体操作失败。例如,如果集体操作预期的向量数据从未到达、如果请求不支持的操作、如果正被计算的特定值存在下溢或溢出等等,则集体操作可能会失败。此类失败需要计算进程做出反应来报告或纠正错误,或者甚至防止将来再次发生错误。
根据实施例,诸如系统500之类的系统简化并加速了这些和其他错误的报告。由于所有计算节点都直接连接到网络计算节点,因此网络计算节点可以容易且快速地将错误报告回到计算节点,然后计算节点可以在其计算进程之间共享关于错误的信息。类似地,由于平面间通信机制,使用专用平面间消息传递协议或通过将错误信息插入到报头来捎带在其他平面间消息上,可以将关于此类错误的信息快速传播到系统600中的所有计算节点。
此外,在诸如系统400中的层次结构中,某些交换机可能是不支持计算的,并且因此缺乏用于识别计算相关错误并将它们正确地传达到计算进程的逻辑。系统500和600可以被利用来减少或消除对不支持计算的交换机的需要,并且因此消除该问题。
4.2.向量数据
如本文别的地方所解释的,向量是值的集合。据称每个值对应于不同的元素,取决于实施例,该元素可以是已定义的字段,或者可以仅是该值在向量内的顺序位置。每个元素可以具有它自己的数据类型(例如整数、浮点、布尔值、序列化结构等)。应当理解,在一些实施例中,向量内的值实际上可以对应于更高阶张量或复杂数据结构的那些值,并且某些集体操作可以如此解释它们。
如本文中所使用的,术语“向量数据”指的是来自一个或多个向量的数据,无论该数据包括整个向量还是仅包括其块。
具有相同向量元素集合的值的任何两个向量被称为具有相同的向量类型,并且可以一起被归约。旨在一起被归约的相同类型的向量集被称为向量数据集。类似地,具有相同向量元素的值的任何两个向量块被称为是相同的块类型,或者“在相同的块列中”,并且可以一起被归约。旨在一起被归约的相同类型的块集合被称为块数据集。
计算实体可以以任何合适的形式向支持计算的交换机发送和接收向量数据。在实施例中,计算实体可以在一个或多个数据单元中发送向量或块,诸如在互联网协议(IP)分组的有效负载、信元、InfiniBand消息或任何其他合适的数据单元中。携带向量数据或指令的数据单元可以被称为“计算数据单元”,或者更具体地,如果携带梯度数据则被称为“梯度数据单元”。数据单元报头内或有效负载中的指定位置处的标识符可以指示数据单元是向量数据单元。此外,计算数据单元可以包括任何前述标识符。这样的标识符可以被放置在报头(例如,分组报头)中,或者直接被放置在数据单元有效负载中。在实施例中,向量数据可以以InfiniBand、RDMA或包括多个分组的类似消息来发送。
在实施例中,发送到计算节点或从计算节点发送的梯度或其他向量数据可以被组织到不同的容器中。向量数据的容器可以包括任意数量的向量元素的任意数量的值。容器可以包括整个向量、整个向量块或其任何部分。容器还可以包括指示向量数据应当在何处和/或如何被处理的各种元数据,或者与各种元数据相关联。
例如,在实施例中,元数据可以包括全局应用标识符,该全局应用标识符唯一地标识为其生成向量数据的分布式应用。在实施例中,元数据可以包括标识与向量数据相关联的工作者集合的工作者集合标识符和/或标识生成向量数据的特定计算实体或进程的工作者标识符。在一些实施例中,元数据还可以指定操作类型、数据类型或其他配置数据。相关联的元数据还可以包括轮次标识符,该轮次标识符标识它在其中生成的轮次。
在实施例中,元数据可以包括标识容器所属的容器集的容器集标识符。在实施例中,容器数据集中的每个容器具有向量数据元素的相同隐式布置,使得每个集合的第一向量数据元素可以被求和或以其他方式彼此归约,每个集合的第二向量数据元素可以被求和或以其他方式彼此归约,等等。在其他实施例中,向量数据单元的组织可以改为被明确地指定。例如,向量数据元素可以被加标记或以其他方式加标签,并且每个集合可以包括将标签指派给该集合中的特定向量数据元素的映射。然后容器数据集中具有相同标签的每个向量数据元素可以一起被归约。在一些实施例中,出于压缩或其他原因,并非容器数据集中的所有容器都需要包括用于容器数据集中的每个向量数据元素的显式值。可以假定省略的向量数据元素具有默认值(例如0)。
在实施例中,元数据可以包括事务标识符,该事务标识符标识容器所属的事务。同一事务内的容器可以具有类似的处理属性,诸如与同一集体动作或同一组集体动作相关联,等等。在实施例中,在给定轮次期间由给定应用的工作者集合所生成的每个容器数据集被指派相同的事务标识符。在其他实施例中,事务标识符可以被用来在缺乏轮次概念的上下文中将容器数据集归组在一起。
在实施例中,元数据可以包括各种其他元素,诸如指示被处理以生成向量数据的特定数据批次的批次标识符、指示何时生成向量数据的时间戳、指定事务的长度的事务长度(例如,容器数据集的数量、数据单元、字节等)、指示要对容器所属的容器数据集执行的集体动作的操作标识符、容器中的向量数据元素的(多个)数据类型标识符、实体状态信息等等。
在实施例中,出于传输目的,计算进程可以在数个计算数据单元(例如,分组、帧、单元等)之中划分容器。在实施例中,计算进程可以被配置为以在计算实体上一致的方式这样做,使得每个实体在其计算数据单元的与每个实体其他计算实体相同的字段或位中传输其相同向量数据元素的值。例如,每个计算实体可以被配置为确保其针对给定向量数据集传输的第三数据单元中的第五值始终对应于第五十梯度元素。替代地,每个计算数据单元可以包括或引用指示计算数据单元的哪个部分对应于哪个向量数据元素的映射。在一些这样的实施例中,某些集体操作可以可选地在具有相同向量元素的计算数据单元上被执行,从而避免了对重新组装整个容器的需要。
4.3.计算指令
在实施例中,计算实体、编排器节点或其他网络实体可以向支持计算的交换机发送计算指令以指定对各种向量数据集、块数据集、事务、容器的集合或其他数据执行的归约操作或其他集体操作。所指定的集体操作可以包括但不限于聚合、求和、乘积、最大值、最小值、广播、分散、聚集、扫描、归约和扫描、屏障及其组合。
在实施例中,指令可以被嵌入到数据内(指令针对数据被直接发出),诸如嵌入到计算数据单元的报头中或计算数据单元的有效负载的开始处。或者,可以单独地发出指令,并且改为使用一个或多个标识符(诸如容器数据集标识符、应用标识符、事务标识符、轮次标识符等)来指定与指令相关联的(多个)块、(多个)向量或(多个)容器。例如,计算实体可以向交换机发送命令以归约来自该计算实体的梯度以及交换机接收到的与特定事务或轮次相关联的所有其他梯度。
根据实施例,计算指令可以利用符合通用分布式系统指令标准的库,诸如消息传递接口(“MPI”)或NVIDIA集体通信库(“NCCL”)。例如,由消息传递接口论坛于2015年6月4日发布的“MPI:消息传递接口标准版本3.1”以及由Nvidia公司于2017年12月发布的“NVIDIA集体通讯库(NCCL):开发者指南”中描述了这些标准的示例,出于所有目的,两者均通过引用并入本文,如同完整阐述一样。例如,在实施例中,每个计算实体被指派MPI或NCCL通信器归组中的等级。因此,计算实体可以向支持计算的交换机发送正常的MPI或NCCL命令,包括但不限于MPI_GATHER、MPI_REDUCE、MPI_SUM。在实施例中,支持计算的交换机或编排器节点可以充当归组中的根进程。取决于实施例,实现系统可以与此类标准完全符合或仅部分地符合。此外,在一些实施例中,系统可以扩展此类标准以支持更丰富的计算指令集。在实施例中,库将MPI、NCCL或其他标准命令转换为可以在传输层中使用的标准格式,涉及套接字、动词和/或其他构造。
在实施例中,计算指令可以指定复杂的集体动作,其包括网络计算进程应当对相关联的向量数据执行的多个子动作以及执行子动作的顺序。例如,计算指令可以指定应当对向量数据元素的值进行排序,应当丢弃前五个值和后五个值,并且然后应当计算总和。此类指令使得能够通过将多个基元应用于聚合数据来执行复杂的统计动作,而这种方式在没有显著通信开销的情况下在计算实体上是不可能的。
在其他实施例中,计算实体不向支持计算的交换机发送显式计算指令。相反,可以从上下文信息推断指令。例如,支持计算的交换机可以被预先配置为基于指令与标识符或向量数据的其他属性之间的映射来针对其接收到的向量数据而执行一个或多个特定集体动作。例如,支持计算的交换机可以被预先配置为对具有特定工作者集合标识符和特定轮次标识符的组合的所有计算数据单元执行聚合操作。在一些实施例中,支持计算的交换机可以包括一些接口,通过该接口可以由例如编排节点以这种方式对其进行预配置。
工作者集合
工作者集合可以以任何合适的方式来建立。例如,支持计算的交换机或编排节点可以被配置为将节点指派给固定的工作者集合,或者指派给基于资源需求动态而选择的工作者集合。在实施例中,以与正常网络配置过程中的控制或数据平面相同的方式建立工作者集合。在实施例中,可以将特殊计算配置分组发送到支持计算的交换机,以在传送任何向量数据之前提供群组配置指令。例如,此类指令可以建立要在应用上工作的数个计算节点和/或进程甚至特定计算节点和/或进程集合、交换机如何与每个计算节点通信、应用标识符、要被执行的集体操作、向量数据集组织方案等等。在实施例中,RDMA协议可以被用来建立预先映射到应用的InfiniBand或RoCE队列对构造(例如,工作者集合标识符和事务标识符)。在实施例中,在群组内,计算进程可以(例如,通过支持计算的交换机)被绑定到一个或多个工作者标识符,也被称为“等级”。
4.4.支持计算的交换机
在实施例中,网络计算节点可以使用数据中心或其他网络中的其他常规交换机内的专用硬件和/或基于软件的逻辑来实现。例如,网络可以是由服务器机架中的计算节点组成的典型的胖树(flat-tree)网络,其中机架中的每个计算节点连接到架顶(“TOR”)交换机。多个计算节点机架可以通过将每个TOR连接到聚合交换机来互连。两种类型的交换机都可以被修改为支持计算的交换机。在其他实施例中,可以利用其他配置。
在实施例中,实现交换机可以是多端口网桥,其使用硬件地址来在开放系统互连(“OSI”)模型2的数据链路层(“第2层”)处处理和转发数据单元,可选地具有在网络层(第3层)处理数据的能力。然而,虽然整个公开中给出的示例通常涉及其中交换机是基于以太网的交换机的实施例,并且可能在基于以太网的网络中具有特定的优点,但是在又一些实施例中,支持计算的交换机可以适用于其他类型的网络,诸如InfiniBand、Fibre通道等等,和/或提供对基于InfiniBand、RoCE或基于以太网的网络内的其他语义的支持。
因此,除非另有提及或显而易见,否则关于交换机描述的技术应被理解为适用于被配置为在多个互连的计算设备之间接收和转发数据单元的任何计算设备,而不管通信标准或协议如何。这可以包括路由器、网关和适于包括本文描述的分组交换逻辑的其他网络设备。
扩展模块
在实施例中,不是要求将专用硬件或逻辑直接集成到交换机中,而是可以使用一个或多个计算扩展模块来扩展交换机以支持计算功能性。例如,一个或多个计算扩展模块可以被串联部署在交换机和一个或多个计算节点之间。每个计算扩展模块拦截传入和/或传出交换机的向量数据,并用其自己的计算子系统处理该向量数据。计算扩展模块内的直通逻辑允许其他网络流量透明地通过该计算扩展模块,并且只需最少的处理(如果有的话)。
作为另一示例,代替使用串联计算扩展模块提供计算功能性,交换机可以依赖于具有集成计算子系统的边车计算扩展模块。边车模块的所有接口都直接连接到交换机,并且交换机经由其中一个连接接口将所有向量数据发送到边车模块。在一些实施例中,边车模块可以被指派网络地址,并且计算节点可以被配置为将向量数据发送到边车模块而不是交换机。在其他实施例中,计算节点将向量数据直接发送到交换机,交换机被配置为将(例如,使用分组报头中的类型信息)被识别为计算数据单元的任何数据单元从计算扩展模块所连接到的接口之一转发。
这些和其他扩展模块的示例在前述专利申请“Distributed ArtificialIntelligence Extension Modules For Network Switches”中被描述,但不限于此。
4.5.计算子系统
根据实施例,网络计算节点内的网络计算进程可以由一个或多个计算子系统来实现。
图11图示了根据实施例的示例计算子系统1100。子系统1100包括由计算设备内的硬件所实现的各种组件1110-1190。在图11中以及在随后的附图中,箭头被用于图示组件之间的可能的数据和控制信息流,其中虚线指示控制信息并且实线图示来自数据单元的实际数据。箭头仅作为示例而给出,并且对应的数据和控制流既不是详尽的也不是在所有情况下都必需的。
缓冲器存储器
计算子系统1100包括计算缓冲器1140和缓冲器控制器1130。计算缓冲器1140包括任何合适形式的一个或多个存储器,诸如静态随机存取存储器(“SRAM”)。计算缓冲器被划分为在其中可以存储向量数据的本文中被称为缓冲器条目的可寻址单元。计算缓冲器的每个存储器可以包括一个或多个不同的缓冲器条目。
缓冲器控制器1130管理计算缓冲器1140的使用。当计算数据单元在计算子系统1140处被接收时,缓冲器控制器1130确定计算数据单元是否可以被缓冲,并且如果可以,则识别在其中存储计算数据单元的合适位置。缓冲器控制器1130还可以负责确定在计算出中间结果和结果数据时将它们存储在哪里。在实施例中,缓冲器控制器1130还可以包括用于确定何时将向量数据读取和/或写入到计算缓冲器1140的调度逻辑。
计算数据单元可以被存储在一个或多个缓冲器条目中,这取决于数据单元的大小和所选择的缓冲器条目大小。在实施例中,每个缓冲器条目可以存储整个计算数据单元。在实施例中,向量数据最初在交换机处作为计算分组被接收,但是被划分成信元以用于传输和存储在交换机内。因此,每个缓冲器条目可以被配置为存储单个计算信元。在实施例中,向量数据可以从数据单元中被剥离并以原始形式来存储。
可以存在用于不同目的的不同类型的计算缓冲器,诸如分组缓冲器和处理缓冲器,如本文别的地方所描述的。计算缓冲器可以与被用来对正常网络数据单元进行分组的缓冲器共享或分离。
处理队列
计算子系统1100还包括用于向量数据的各种处理队列,包括入口队列1120和出口队列1180。可以存在多个入口队列1120和多个出口队列1180,每个队列具有不同的目的,如其他部分中所描述的。
在实施例中,当数据单元在交换机处被接收时,流量管理器或分组交换逻辑的其他组件内的排队逻辑可以将计算数据单元放置在适当的入口队列1120中。在这样的实施例中,入口队列1120可以是可以向其指派数据单元的队列逻辑的较大队列集合的一部分,并且在入口队列1120中对数据单元进行排队的动作实质上构成将数据单元发送到计算子系统1100。
替代地,计算子系统1100包括用于将向量数据排队到入口队列1120中的单独的排队逻辑。例如,当在缓冲器条目中接收和缓冲向量数据后,缓冲器控制器1130可以将指向缓冲器条目的指针传递给在计算控制器1110中或在任何其他合适的组件中的排队逻辑。取决于实施例,缓冲器条目可以存储整个计算数据单元或原始向量数据或指令。然后,排队逻辑可以使用其他部分中描述的技术来确定在其中放置缓冲器条目的适当的入口队列1120。
在实施例中,入口队列1120包括一个或多个计算数据队列以及分开的一个或多个计算指令队列。在其他实施例中,队列可以保存向量数据和计算指令两者。
与其他队列一样,入口队列1120可以使用一个或多个链路存储器来表示。每个队列节点可以由链路存储器中的条目来表示。在实施例中,入口队列1120中的每个链路条目可以包含指向存储对应向量数据的缓冲器条目的数据指针。在实施例中,如果该向量数据不是完整容器,则链路条目还可以存储指向另一个链路条目的地址的链路指针,该另一个链路条目的数据指针指向容器的下一部分,使得可以通过遵循链路存储器中的条目链来发现整个容器。例如,梯度的第一链路条目可能指向存储梯度的第一元素集合的第一缓冲器条目,以及指向存储梯度的第二元素集合的第二缓冲器条目的第二链路条目。第二链路条目进而又可以指向第三链路条目,第三链路条目指向存储梯度的第三元素集合的第三缓冲器条目,等等。用于计算指令的链路条目可以被类似地构造,它可以包括指向存储计算指令的缓冲器条目的数据指针(或者它可以包括计算指令本身),以及指向将根据计算指令处理的向量数据的第一部分的缓冲器条目的链路指针。当然,其他链路结构也可以或替代地被用于入口队列1120。
出口队列1180按照类似的原理操作,但是改为指向数据缓冲器1140中准备好传输回到计算节点的结果数据(例如,聚合梯度)。当这样的数据被生成和缓冲时,计算控制器1110或任何其他合适的组件中的排队逻辑通过将指向该数据的指针添加到适当的出口队列1180来将其排队。在实施例中,结果数据可以首先使用传输上下文来链接,直到对应的容器数据集或容器数据集的群组完成为止,然后可以链接到出口队列1180。
计算引擎
计算子系统1100还包括被配置为执行集体操作的计算引擎1170。计算引擎1170包括一个或多个计算实体。计算引擎被配置为输入向量数据(例如,来自一个或多个缓冲存储器)并对输入的向量数据执行实际计算操作。在一些实施例中,计算引擎1170包括基于硬件的逻辑,该基于硬件的逻辑被配置为执行计算子系统1100所支持的集体操作中的每一个。例如,计算引擎可以包括用于计算总和、平均值、乘积、最小值、最大值、中值、统计操作等等的专用逻辑。被用来处理输入的(多个)逻辑是动态可编程的,具体取决于输入的向量数据。
在实施例中,包括互连的集体处理单元的矩阵或其他布置的计算阵列可以被用作计算引擎1170。集体处理单元可以被配置为执行各种基元操作。基元操作可以包括例如求和、乘法、按位操作(XOR、XNOR、左移、右移等)、逻辑操作(逻辑“和”、逻辑“或”、大于、小于等)、投票操作、最小值、最大值、最小值位置(minloc)、最大值位置(maxloc)、NOOP命令等。当然,可以利用其他类型的处理硬件来代替计算阵列。
计算控制器
计算子系统1100进一步包括计算控制器1110。计算控制器1110协调计算指令的处理和从缓冲器1140读取向量数据。在一些实施例中,计算控制器1110还可以包括用于关于流量控制、同步和其他问题来与计算节点进行通信的逻辑。
在实施例中,入口队列1120可以指示计算控制器1110接收和处理向量数据的顺序。在计算节点向支持计算的交换机发送显式计算指令的实施例中,计算控制器1110可以响应于使执行处理任务的指令从入口队列1120出列而开始该处理任务。这样的指令可能已经作为与向量数据相同的(多个)数据单元中的元数据或者作为单独的控制指令(例如,在单独的数据单元中)到达交换机。单独的控制指令可以与向量数据同时被接收,或者在一些实施例中,可以是资源分配请求,计算控制器1110可能需要在计算节点可以开始传输与指令相关联的向量数据之前对其进行响应。
在实施例中,控制器1110可以不一定接收显式计算指令,而是基于向量数据本身来确定计算指令。例如,当使与新容器数据集标识符相关联的向量数据出列时,计算控制器1110可以访问配置信息,该配置信息指示应当对新容器数据集执行什么类型的归约操作。配置信息可以例如指定新容器数据集的默认集体动作。在一些情况下,可以基于向量数据和/或在其中接收到向量数据的数据单元的一些属性来确定默认集体动作。例如,可以基于向量数据中指定的数据类型标识符来选择特定的默认归约操作。默认集体动作可以在全局的基础上、在每个应用的基础上、在每个事务的基础上或在其他基础上来进行指定。或者,计算控制器1110可以预先接收到将容器数据集标识符映射到相关联的集体动作的信息。
在实施例中,除了其它步骤,通过初始化用于指令的一个或多个处理上下文,计算控制器1110可以开始协调计算指令的处理。可以为将针对指令进行处理的每个事务或容器数据集创建处理上下文,并且可以包括数据结构,计算控制器1110使用该数据结构来分阶段处理该事务或容器数据集。处理上下文信息可以被存储在缓冲器1140中,或者被存储在专门用于存储处理上下文的单独且可能更快的存储器中,如先前所描述的。在实施例中,这样的处理上下文信息可以替代地在首次读取或接收处理上下文的向量数据时被创建。
在实施例中,处理上下文可以包括例如指示计算引擎1170要执行(多个)什么操作以及以什么顺序、要读取什么存储器位置、何时读取这些存储器位置、工作者集合标识符、应用标识符、容器数据集标识符、进行中的结果数据等等的信息。进行中的结果数据可以包括例如中间结果,诸如迄今为止已经接收和处理的块数据集中的向量元素的运行和。在实施例中,处理上下文还可以包括针对块数据集或事务的其数据已被接收或其数据尚未被接收的计算节点的计数和/或列表。
在一些实施例中,当计算控制器1110使处理任务的向量数据出列时,它确定处理任务的最佳读取顺序。在一些实施例中,计算控制器1110甚至可以开始预取某些向量数据,该向量数据可以被缓存直到计算控制器1110确定开始集体动作。
计算控制器1110负责针对处理任务所需的(多个)特定操作来配置计算引擎1170,从而指示计算引擎1170执行的操作的顺序和优先级。例如,控制器1110可以确定哪些集体处理单元应该在给定时钟周期中对哪些输入执行哪些任务。取决于要被处理的数据量和要被执行的操作类型,向量或向量块上的集体操作可能涉及任意数量的时钟周期内的任意数量的阶段。
使用处理上下文,计算控制器1110监视针对容器数据集而接收的可用向量数据,并确定开始相关联的集体操作的适当时间。在一些情况下,计算控制器1110等待直到容器数据集或事务的所有容器都已被接收。在此时,计算控制器1110以集体动作所需的方式配置计算引擎1170,并且使计算引擎1170开始输入和处理数据。
在一些情况下,计算控制器1110可以在接收到容器数据集中的所有容器之前开始处理容器数据集。例如,大量向量数据之间的求和或其他归约可能需要被分成不同的阶段,每个阶段包括一个或多个不同的操作。当足够的向量数据到达一个阶段时,即使针对容器数据集继续接收向量数据,计算控制器1110也可以可选地开始该阶段的处理。在各阶段之间,中间结果和处理指令可以被存储在本地分段区域中,直到中间结果被输入到后续阶段。可选地,在各阶段之间,计算控制器1110可以针对下一阶段中的不同子操作而重新配置计算引擎1170。
对于指示计算引擎1170执行的每个计算操作,计算控制器1110将输入绑定到计算引擎1170。在实施例中,计算控制器指示数据格式化器1150输入向量数据(可选地,借助于通过缓冲器控制器1130调度(多个)读取操作),而不是将来自缓冲器1140的向量数据直接绑定到计算引擎1170。数据格式化器1150可以被硬编码以执行某些格式化操作,诸如去除报头,或者计算控制器1110可以指示数据格式化器执行某些格式化操作。
数据格式化器1150被配置为将其数据输入到数据标准化器1160中,该数据标准化器1160是前述数据标准化器的示例。数据标准化器1160可以被硬编码以将向量数据值转换为特定表示,或者计算控制器1110可以指示数据格式化器执行特定转换操作。计算控制器1110将来自数据标准化器1160的特定输出链接到计算引擎1170的特定处理逻辑,从而使对特定格式化且标准化的向量数据值执行特定计算操作。
一旦向量数据和相关联的计算指令已被处理,计算控制器1170在结果被调度以传输到网络接口之前将结果存储在合适的存储器中(例如,在本地分段存储器或数据缓冲器1140中)。结果的存储可以涉及将结果传递通过数据标准化器1160和数据格式化器1150,以在存储之前进行转换和格式化。如果结果是中间结果,则随后可以再次从缓冲器1140读取它以用于附加的(多个)计算操作,或者可以将结果写入到另一缓冲存储器或高速缓存(未描绘)。
调度器
调度器1190负责协调从计算子系统1100到网络接口的传送。调度器1190基于出口队列1180来调度结果数据单元以用于传输到计算节点。在实施例中,调度器1190可以被配置为使用标准分组调度算法(例如,加权循环法、加权不足循环法、加权公平排队、严格优先级等)来仲裁在分组数据和向量数据之间对网络接口带宽的访问。
在一些模式中,控制器和调度器可以耦合,以使得当给定计算完成时,带宽立即可用于传输到下游网络接口。
杂项
图11图示了用于实现计算子系统的一种可能的方法。其他方法可以包括处于不同布置的更少的、更多的和/或不同的元件。例如,可以省略数据格式化器1150和/或数据标准化器1160,或者可以颠倒它们的顺序。作为另一个非限制性示例,可以存在多个计算引擎,每个计算引擎由不同的计算数据管道馈送,这可以由单个集中式计算控制器或由数个分开的计算控制器来控制。
在其他实施例中,计算子系统可以采取其他形式。例如,上面提及的专利申请描述了计算子系统的各种其他集中式、基于入口和基于出口的架构。计算子系统的其他架构对于本领域技术人员来说将是显而易见的。
根据实施例,可以使用被称为计算存储器的专用计算存储器组件来优化计算子系统,该专用计算存储器组件将缓冲存储器与计算操作逻辑合并。这种专用存储器单元可以是任何类型的存储器,并且被划分为可寻址条目。计算存储器元件还包括计算逻辑。计算逻辑可以包括被配置为执行各种基元操作的各种计算处理单元,诸如加法、乘法、XOR、AND等等。对计算存储器元件的写入指令不仅包括要写入的地址和数据,还包括操作指示符。不是将数据直接写入到所指示的地址,而是首先从存储器读取存储在该地址处的数据。操作指示符被用来选择计算逻辑所支持的特定计算操作。计算逻辑将来自写入指令的数据和所存储的数据馈送到适当的计算处理逻辑以用于所指示的操作。计算处理逻辑输出结果,该结果然后在该地址处被写入到存储器。这样的计算存储器元件可以被用于避免对分别地存储需要被归约的每个容器的需要,而是改为维持用于就地归约操作的运行总和或其他运行结果。在实施例中,对于至少某些集体操作,可以利用计算存储器来代替计算引擎。
4.6.分组交换逻辑
在一些实施例中,支持计算的交换机可以可选地包括被配置为利用分组交换技术来接收、处理和转发数据单元的分组交换逻辑。例如,支持计算的交换机可以包括一个或多个交换机“芯片”(例如,专用集成电路(“ASIC”)、现场可编程门阵列(“FPGA”)或其他集成电路),在其上实现了分组交换逻辑的实例。通常,分组交换逻辑被配置为经由交换机的(多个)通信接口接收分组或其他数据单元,识别数据单元的(多个)目的地,执行数据单元的可选处理,然后将数据单元转发出与这些目的地相关联的(多个)通信接口。分组交换逻辑可以包括各种组件,诸如流量管理器、缓冲器、分组处理器和队列。
在实施例中,支持计算的交换机可以包括逻辑,通过该逻辑它识别哪些数据单元需要由其计算子系统处理,以及哪些数据单元应当由分组交换逻辑处理。该逻辑可以基于数据单元的报头中的类型信息、标志或者甚至地址或者数据单元的报头或有效负载中的任何其他合适的信息来在两种类型的数据单元之间进行辨别。该逻辑可以被部署在分组交换逻辑和计算子系统之前,以使得它在交换机接收到所有传入数据单元时被应用到所有传入数据单元。或者,该逻辑可以被集成到分组交换逻辑中。例如,代替分组交换逻辑的流量管理器或者作为对其的附加,分组交换逻辑的入口分组处理器可以被配置为识别携带向量数据的数据单元(“计算数据单元”),并将那些数据单元转发到计算子系统以进行集体操作。
当为了清楚起见而需要时,为了在由分组交换逻辑专门处理的数据单元和由计算子系统处理的数据单元之间进行区分,第一数据单元(即,由分组交换逻辑专门处理的数据单元)在本文中可以被称为“网络数据单元”或“正常数据单元”,而第二数据单元可以被称为计算数据单元。在实施例中,虽然网络数据单元通常被寻址到除了交换机之外的设备,但是计算数据单元被直接引导到交换机。然而,一些网络数据单元仍然可以直接以交换机为目标以用于网络初始化、管理和/或维护目的。此外,在一些实施例中,交换机可以被配置为透明地拦截并归约寻址到某个其他设备的计算数据单元。
计算子系统可以在不同程度上与分组交换子系统集成。例如,在实施例中,可以存在单个集中式计算子系统,分组交换子系统将所有计算数据单元转发到该单个集中式计算子系统。这样的子系统可以或可以不与分组交换子系统共享缓冲器资源和/或其他资源。在另一个实施例中,计算子系统的逻辑的各种实例可以被分布在分组交换逻辑的不同组件上,诸如分布在多个流量管理器内。这些和其他实施例的示例在本文中别的地方被描述。
图12是根据实施例的示例网络设备1200内的分组交换逻辑的各个方面的说明图。同时,为了便于说明,图12省略了对任何计算子系统的描绘,网络设备1200可以与支持计算的交换设备150、网络计算节点550等等相同。然而,支持计算的交换设备150和网络计算节点550可以在没有图12的具体细节的情况下被实践。
网络设备1200是包括被配置为实现本文描述的各种逻辑组件(包括组件1210-1290)的硬件和软件的任意组合的计算设备。例如,该装置可以是单个网络计算设备,诸如路由器或交换机,其中本文描述的组件1210-1290中的一些或全部是使用专用集成电路(ASIC)或现场可编程门阵列(FPGA)来实现的。作为另一示例,实现装置可以包括存储用于实现本文描述的各种组件的指令的一个或多个存储器、被配置为执行存储在一个或多个存储器中的指令的一个或多个硬件处理器、以及在一个或多个存储器中用于存储由各种组件1210-1290利用和操纵的数据结构的各种数据储存库。
设备1200通常被配置为借助于在设备1200内的各个组件处执行的一系列操作来接收数据单元1205并将数据单元1205转发到网络中的其他设备。在实施例中,设备1200本身可以是较大盒子或机箱内的数个组件之一。例如,网络设备1200可以是专用于执行网络交换机或路由器内的交换和/或路由功能的集成电路或“芯片”。网络交换机或路由器还可以包括一个或多个中央处理器单元、存储单元、存储器、物理接口、LED显示器或芯片外部的其他组件,其中一些或全部可以与芯片通信。
数据单元1205通过设备1200的分组交换逻辑的各个子组件的非限制性示例流程如下。在经由端口1210接收到数据单元1205之后,数据单元1205可以由仲裁器(未描绘)缓冲,直到数据单元1205可以由入口分组处理器1250处理,然后被递送到互连(未描绘)。数据单元1205可以从互连被转发到流量管理器1240。流量管理器1240可以将数据单元1205存储在缓冲器1244中并且将数据单元1205指派给队列1245。流量管理器1240管理数据单元1205通过队列1245的流,直到数据单元1205被释放到出口分组处理器1250。取决于处理,流量管理器1240然后可以将数据单元1205指派到另一个队列,使得它可以由另一个出口处理器1250处理,或者出口分组处理器1250可以将数据单元1205发送到出口仲裁器(未描绘),数据单元1205最终从出口仲裁器被转发出另一端口1290。当然,取决于实施例,交换逻辑可以在不同的布置中省略其中一些子组件和/或包括其他子组件。
现在更详细地描述设备1200的示例组件。
端口
网络设备1200包括端口1210/990,该端口1210/990可以类似于图2中描绘的端口290。端口1210/1290连接到网络接口。包括端口1210a-n的端口1210是入站(“入口”)端口,通过该端口经由网络接口从网络中的其他设备接收数据单元1205。包括端口1290a-n的端口1290是出站(“出口”)端口,至少一些数据单元1205在已由网络设备1200的分组交换逻辑处理之后通过该端口从网络接口被发送到网络内的其他目的地。
出于说明性目的,端口1210/1290被描绘为分开的端口,但是实际上可以对应于网络设备1210上的相同物理网络接口。即,网络设备1200可以通过单个物理端口既接收数据单元1205又发送数据单元1205,并且单个物理端口因此可以用作入口端口1210和出口端口1290。尽管如此,出于各种功能目的,网络设备1200的某些逻辑可以将单个物理端口视为分开的入口端口1210和出口端口1290。此外,出于各种功能目的,网络设备1200的某些逻辑可以将单个物理入口端口或出口端口细分为多个入口端口1210或出口端口1290,或者将多个物理入口端口或出口端口聚合为单个入口端口1210或出口端口1290。因此,在各种实施例中,端口1210和1290应当被理解为被映射到物理接口的不同逻辑构造,而不是简单地理解为不同物理构造。
分组处理器
设备1200包括一个或多个分组处理组件1250或“分组处理器”。不同的分组处理器1250可以被配置为执行不同的分组处理任务。这些任务可以包括例如识别转发数据单元1205所沿着的路径、将数据单元1205转发到出口端口1290、实现流控制和/或其他策略、操纵分组、执行统计或调试操作等等。设备1200可以包括被配置为执行任意数量的处理任务的任意数量的分组处理器1250。
在实施例中,以将数据单元1205按一系列阶段从(多个)特定分组处理器1250传递到(多个)其他分组处理器1250的方式,设备1200内的分组处理器1250可以被布置为使得一个分组处理器1250的输出最终可以被输入到另一分组处理器1250中,直到最终处置数据单元1205(例如,通过将数据单元120从出口端口1290发送、“丢弃”数据单元1205等等)。在一些实施例中,处理给定数据单元1205的分组处理器1250的确切集合和/或序列可以取决于数据单元1205的属性和/或设备1200的状态而变化。任意数量的分组处理器1250可以以这种方式链接在一起。
基于在处理数据单元1205时做出的决策,在一些实施例中,和/或对于某些处理任务,分组处理器1250可以直接操纵数据单元1205。例如,分组处理器1250可以添加、删除或修改数据单元报头或有效负载中的信息。在其他实施例中,和/或对于其他处理任务,分组处理器1250可以生成控制信息,该控制信息伴随数据单元1205,或者随着数据单元1205继续通过设备1200而与数据单元1205合并。该控制信息然后可以被设备1200的其他组件利用来实现分组处理器1250做出的决策。
在实施例中,分组处理器1250不一定需要处理整个数据单元1205,而是可以仅接收和处理数据单元1205的子单元,诸如包括数据单元的报头信息的信元。例如,如果数据单元1205是包括多个信元的分组,则第一信元或第一信元子集可以被转发到分组处理器1250,而分组的剩余信元(以及可能的(多个)第一信元)被并行转发到合并器组件,在那里它们等待处理的结果。
在实施例中,分组处理器通常可以被分类为入口分组处理器1250或出口分组处理器1250。通常,入口处理器1250解析流量管理器1240的目的地以确定数据单元1205应当从哪些端口1290和/或队列1245离开。可以存在任何数量的入口处理器1250,包括仅单个入口处理器1250。
在实施例中,入口处理器1250在数据单元1205到达时对数据单元1205执行某些摄取任务。这些摄取任务可以包括例如但不限于:解析数据单元1205、执行路由相关的查找操作、绝对地阻止具有某些属性的数据单元1205和/或当设备1200处于某种状态时绝对地阻止数据单元1205、复制某些类型的数据单元1205,对数据单元1205进行初始分类,等等。一旦已经执行了适当的(多个)摄取任务,数据单元1205就被转发到适当的流量管理器1240,入口处理器1250可以直接耦合到该流量管理器1240,或者经由各种其他组件(诸如互连组件)耦合到该流量管理器1240。
相比之下,设备1200的(多个)出口分组处理器1250可以被配置为执行实现设备1200的交换逻辑所必需的非摄取任务。这些任务可以包括例如诸如识别转发数据单元1205所沿着的路径、实现流控制和/或其他策略、操纵数据单元、执行统计或调试操作等等之类的任务。在实施例中,可以存在被指派给不同流或其他类别的流量的(多个)不同出口分组处理器1250,使得并非所有数据单元1205将由相同出口分组处理器1250处理。
在实施例中,每个出口处理器1250被耦合到不同群组的出口端口1290,它们可以向其发送由出口处理器1250处理的数据单元1205。在实施例中,可以经由耦合到出口分组处理器1250的出口仲裁器来调节对端口1290群组的访问。在一些实施例中,出口处理器1250还可以或替代地耦合到其他潜在目的地,诸如内部中央处理单元、存储子系统或流量管理器1240。
缓冲器
由于并非设备1200接收到的所有数据单元1205都可以同时由(多个)分组处理器1250处理,因此设备1200的各种组件可以将数据单元1205临时存储在一个或多个缓冲器1244中,同时数据单元1205正在等待被处理。例如,特定分组处理器1250可能仅能够在给定时钟周期中处理特定数量的数据单元1205或数据单元1205的部分,这意味着旨在去往分组处理器1250的其他数据单元1205或数据单元1205的部分必须被忽略(例如,被丢弃)或被存储。在任何给定时间,取决于网络流量状况,大量数据单元1205可能被存储在设备1200的缓冲器1244中。
设备1200可以包括各种缓冲器1244,每个缓冲器被用于不同的目的和/或组件。取决于实施例,缓冲器1244可以使用单个物理存储器单元(例如SRAM、DRAM等)、存储器单元的指定部分或存储器单元的集合来实现。
通常,等待由组件处理的数据单元1205被保存在与该组件相关联的缓冲器1244中,直到数据单元1205被“释放”给该组件进行处理。例如,流量管理器1240通常将具有相对较大的缓冲器1244,被称为出口缓冲器,在将数据单元1205释放到出口分组处理器1250之前,流量管理器1240在出口缓冲器中缓冲那些数据单元1205。
可以跟踪与缓冲器1244相关的各种指标,诸如所利用的缓冲器条目的数量、所利用的缓冲器空间的百分比等等。这些指标可以是全局的,也可以是特定于上下文的。例如,可以跟踪指派给特定队列或端口的缓冲数据量。这些上下文的利用率指标可以被计算为分配给这些上下文的缓冲器空间量的百分比。
队列
在实施例中,为了管理从缓冲器1244处理数据单元1205的顺序,设备1200的各种组件可以实现排队逻辑。例如,通过流量管理器1240的出口缓冲器1244的数据单元1205的流可以使用出口队列来管理,而通过入口仲裁器的缓冲器的数据单元1205的流可以使用入口队列来管理。
队列1245是通过描述队列1245的元数据按某种顺序进行排列的数据节点集合。队列1245包括头部节点或头部,其通常是要被处理的下一个节点;以及尾节点或尾部,其通常是最近被添加到队列中的节点。随着其他节点被处理并从队列中被移除,节点通常将会随着时间的推移从尾部进展到头部。
在队列1245的情况下,节点是数据单元1205或者是数据单元1205开始处的(多个)缓冲器位置。已被添加到队列1245的数据单元1205被称为“链接”到该队列1245。数据单元1205可以属于一个或多个队列1245。
在许多实施例中,队列1245排列它的构成数据单元1205的顺序通常对应于队列1245中的数据单元1205或数据单元部分将被释放和处理的顺序。在一些实施例中,在给定时间指派给给定队列1245的数据单元1205或数据单元部分的数量可以全局地或基于每个队列而受到限制,并且该限制可以随时间改变。
在实施例中,队列1245使用被称为“分组间”链路存储器的链路存储器来实现,该链路存储器与相关联的缓冲存储器1244是分离的。链路存储器中的每个条目被称为队列中的节点。每个链路条目点包括数据指针,当链路条目被占用时,该数据指针指向缓冲存储器1244中的存储器位置,在该存储器位置处可以找到对应的数据单元(或者至少数据单元的开始)(例如,缓冲器条目、数据单元在分组内链路存储器中的第一条目等)。链路存储器中的每个条目还可以进一步包括指向另一个链路条目的链路指针,该另一个链路条目对应于队列中的下一个节点。当然,在其他实施例中,可以替代地利用其他类型的链路存储器和/或其他结构来表示队列。
流量管理
根据实施例,设备1200还包括一个或多个流量管理器1240,该流量管理器被配置为控制到一个或多个分组处理器1250的数据单元1205的流。流量管理器1240可以直接从端口1210接收来自入口处理器1250和/或设备1200的其他合适组件的数据单元1205。在实施例中,流量管理器1240被配置为在流量管理器1240的每个时钟周期从每个可能的源(例如每个端口1210)接收最多一个信元。
流量管理器1240可以包括或耦合到缓冲器1244,以用于在将数据单元1205发送到它们各自的(多个)处理器1250之前缓冲这些数据单元1205。流量管理器1240内的缓冲器管理器可以在数据单元1205等待由(多个)处理器1250处理时将数据单元1205暂时存储在缓冲器1244中。缓冲器1244中的数据单元1205或数据单元部分最终可以通过从缓冲器1244读取数据单元1205并将数据单元1205发送到(多个)处理器1250而被“释放”给一个或多个处理器1250以进行处理。在实施例中,流量管理器1240可以在每个时钟周期将多达一定数量的数据单元1205从缓冲器1244释放到处理器1250。
除了管理使用缓冲器1244来存储数据单元1205(或其副本)之外,流量管理器1240还可以包括队列管理逻辑,该队列管理逻辑被配置为将数据单元1205指派给队列1245并且管理数据单元1205通过队列1245的流。例如,通过识别将数据单元1205指派到的特定队列1245,然后将数据单元标识符或其他元数据链接到所指派的队列,流量管理器1240可以将已经完全缓冲的数据单元1205“入列”。流量管理器1240还可以通过向缓冲器管理器1244发送读取/释放数据单元1205的指令、然后将从缓冲器1244读取的数据提供给(多个)特定分组处理器1250来确定何时从队列1245释放数据单元1205(也称为使数据单元1205出列)。
虽然仅描绘了一个分组处理器1250和流量管理器1240,但是设备1200可以包括任意数量的分组处理器1250和流量管理器1240。例如,不同组的端口1210和/或端口1290可以具有它们自己的流量管理器1240和分组处理器1250。作为另一示例,在实施例中,可以针对处理数据单元的一些或所有阶段而复制流量管理器1240。例如,系统1200可以包括用于在数据单元1205退出系统1200后执行的出口阶段的流量管理器1240和出口分组处理器1250,和/或用于任何数量的中间阶段的流量管理器1240和分组处理器1250。因此,数据单元1205在退出系统1200之前可以经过任意数量的流量管理器1240和/或分组处理器1250。在其他实施例中,仅需要单个流量管理器1240。如果需要中间处理,则数据单元1205的流可以循环回到流量管理器1240,以用于在中间处理的每个阶段之后进行缓冲和/或排队。
在实施例中,流量管理器1240耦合到(多个)入口分组处理器1250的输出,使得数据单元1205(或其部分)仅在最初由入口分组处理器1250处理后被指派给缓冲器1244。一旦在出口缓冲器1244中,数据单元1205(或其部分)就可以被“释放”到一个或多个出口分组处理器1250以进行处理。
在处理数据单元1205的过程中,设备1200可以为了诸如但不限于多播、镜像、调试等等目的而将数据单元1205复制一次或多次。例如,单个数据单元1205可以被复制到多个出口队列1245。例如,数据单元1205可以被链接到端口1、3和12中的每一个的分开的队列1245。作为另一示例,数据单元1205在它到达队列1245的头部之后可以被复制数次(例如,对于不同的出口处理器1250)。因此,虽然本文描述的某些技术可以指的是由设备1200接收的原始数据单元1205,但是应当理解,那些技术将同样适用于已经出于各种目的而生成的数据单元1205的副本。
转发逻辑
设备1200确定如何处理数据单元1205的逻辑(诸如向何处发送以及是否发送数据单元1205、是否对数据单元1205执行附加处理等)被称为设备1200的转发逻辑。该转发逻辑由设备1200的各种组件共同实现,诸如上面所述。例如,入口分组处理器1250可以负责解析数据单元1205的目的地并确定要对数据单元1205执行的动作/编辑集合,并且出口分组处理器1250可以执行这些编辑。或者,在一些情况下,出口分组处理器1250还可以确定动作并解析目的地。此外,可能存在入口分组处理器1250也执行编辑的实施例。
在实施例中,设备1200通常将在其存储器中存储一个或多个转发表(或等效结构),该转发表将某些数据单元属性或特性映射到针对具有那些属性或特性的数据单元1205要采取的动作,诸如将数据单元1205发送到选定的路径,或者使用指定的内部组件来处理数据单元1205。例如,这样的属性或特性可以包括由数据单元1205指定的或者与数据单元1205的另一特性相关联的服务质量水平、流控制群组、通过其接收数据单元1205的入口端口1210、分组报头中的标志或标签、源地址、目的地地址、分组类型或任何其他合适的区分属性。例如,设备1200可以实现这样的逻辑,该逻辑读取这样的表、基于该表确定将数据单元1205发送到的一个或多个端口1290、以及将数据单元1205发送到耦合到一个或多个端口1290的出口处理器1250。
根据实施例,转发表描述了一个或多个地址的群组,诸如IPv4或IPv6地址的子网。每个地址都是网络上的网络设备的地址,但是网络设备可以具有多于一个地址。每个群组与一组可能不同的一个或多个动作相关联,该动作用于针对解析到(例如,被引导到)群组内的地址的数据单元来执行。任何合适的一组一个或多个动作可以与地址群组相关联,包括但不限于将消息转发到指定的“下一跳跃”、复制消息、改变消息的目的地、丢弃消息、执行调试或统计操作、应用服务质量策略或流控制策略等等。
为了说明的目的,这些表被描述为“转发表”,但是应当认识到,由表描述的(多个)动作的范围可能比简单地将消息转发到哪里大得多。例如,在实施例中,表可以是简单地指定每个群组的下一跳跃的基本转发表。在其他实施例中,表可以描述针对每个群组的一个或多个复杂策略。此外,可能存在用于不同目的的不同类型的表。例如,一个表可以是与每个分组的目的地地址进行比较的基本转发表,而另一个表可以基于分组的目的地(或源)群组来指定在入口后应用于分组的策略,等等。
当数据单元1205通过网络中的不同节点进行路由时,节点有时可能会丢弃、无法发送或无法接收某些数据单元1205,从而导致数据单元1205无法到达其预期的目的地。丢弃数据单元1205或未能递送数据单元1205的行为通常被称为“丢弃”数据单元。丢弃数据单元1205的实例(在本文中被称为“丢弃”或“分组丢失”)可能由于多种原因而发生,诸如资源限制、错误或故意的策略。设备1200的不同组件可以出于各种原因做出丢弃数据单元1205的决策。例如,流量管理器1240可以确定丢弃数据单元1205,因为缓冲器1244被过度利用、队列1245超过特定大小、端口1290(或其相关联的接口)太繁忙、和/或数据单元1205具有某个特性等等。
杂项
尽管为了便于解释,在描述分组交换逻辑时使用了术语“分组”,但是应当认识到,取决于所利用的标准,分组交换逻辑可以处理和转发其他类型的数据单元而不是分组或者作为分组的补充。这样的数据单元可以包括例如帧、信元、段、数据报等。
设备1200仅图示了被配置为提供本文描述的功能性的网络设备中的组件的许多可能布置中的几种。其他布置可以包括更少的、更多的或不同的组件,并且组件之间的工作划分可以取决于布置而变化。
为了简化,流量管理器、分组处理器和其他组件在本文中有时被描述为作用于数据单元或相对于数据单元起作用,而实际上只有数据单元的一部分可以被发送到组件或以其他方式可用于组件。例如,分组处理器可以被称为处理数据单元,而实际上只有数据单元控制部分可用于分组处理器。在这样的上下文中,应当理解,关于实际上可用于组件的数据单元的信息是数据单元对该组件的表示。本文描述的由组件对数据单元或关于数据单元采取的任何动作可以针对数据单元的表示而发生,而不必针对完整的数据单元。
应当了解,数据单元的实际物理表示可以由于本文描述的过程而改变。例如,当数据单元从一个组件移动到网络设备内的另一个或者甚至在网络设备之间移动时,数据单元可以在一个存储器中的特定位置处从一个物理表示转换为基于信号的表示,并在可能不同的存储器中的不同位置处转换回到一个物理表示。这种移动在技术上可以涉及任意多次删除、转换和/或复制数据单元的一些或全部。然而,为了简化,数据单元在逻辑上被称为在其通过设备移动时保持相同的数据单元,即使数据单元的物理表示发生改变。类似地,诸如通过添加或删除报头信息、调整单元边界或者甚至修改有效负载数据,数据单元的内容和/或结构可以在其被处理时改变。尽管如此,即使在改变其内容和/或结构之后,修改后的数据单元仍然被称为同样的数据单元。
4.7.示例分布式学习应用
在实施例中,分布式应用可以是以同步或异步分布式方式实现迭代优化算法,诸如用于深度神经网络的梯度下降算法。可以实现任何合适的梯度下降算法,包括但不限于随机梯度下降、批量梯度下降或小批量梯度下降。其他这样的优化算法可以例如使用类似的接收策略来找到最小值、最大值或其他值集合。在其他实施例中,系统300可以针对任何分布式机器学习任务而被优化。
每个计算进程可以访问待训练的神经网络的一些或全部的副本。神经网络可以是任何合适类型的人工神经网络,包括任何数量的神经元、连接和/或层。取决于所利用的训练技术,每个节点的模型可能是神经网络的完整复制品,或者可能仅包括神经网络的子集,诸如特定层或分支。在部分复制的情况下,可以在后向传递而不是前向传递上执行梯度下降。然而,可以在前向传递上执行其他集体操作,诸如使用广播集体在节点之间交换神经元的激活。
神经网络根据参数集合来进行操作。参数通常是权重集合。神经网络中的每个连接都有一个相关联的权重,其值会影响连接在确定连接所通向的神经元的输出时所占的比重。在一些神经网络中,参数还可以包括偏差值,每个连接还具有单独的偏差值。其他神经网络可以具有其他类型的参数。
每个计算进程处的训练逻辑的目标是与学习系统的其余组件协调地识别或“学习”哪些参数用于神经网络。这些参数是通过对来自训练数据集的训练数据迭代地测试和调整参数的过程来学习的。训练逻辑被配置为利用要测试的初始参数集合(即第一轮次)开始训练过程。每个过程的训练逻辑可以从同一参数集合开始,这些参数可以被设置为所有进程所期望的默认值(例如,每个权重可以为0),或者被设置为在初始化过程期间商定的随机值。训练数据集包括神经网络的数个输入向量,以及每个输入向量的预期输出。取决于所采用的学习技术,每个过程可以具有相同的训练数据集或不同的训练数据集。
在一个轮次期间,训练逻辑使用参数在神经网络上执行一个或多个前向传递,每次输入来自训练数据集的不同输入向量。该过程在一个轮次期间训练的数据可以被称为批次,并且还可以具有批次标识符。取决于学习技术,批次可以是该过程的训练数据集中的所有输入向量的集合、单个输入向量或训练数据集的子集(通常被称为“小批次”)。在后两种情况下,可以随机地或系统地选择(多个)输入向量,具体取决于系统。
每个前向传递将产生输出,也被称为预测。每个预测都会与产生该预测的输入向量的预期输出进行比较。训练逻辑被配置为使用预测和预期输出的成本函数来计算预测中的误差或损失。这样的成本函数可以是固定的(例如,均方误差函数),或者由模型定义。
基于预测中的误差,训练逻辑计算梯度。梯度包括值向量,每个值可以被称为梯度元素。每个梯度元素在参数中都有对应的参数。每个参数的梯度元素通常指示参数应被调整的方向(即增加或减少),以及该调整的相对幅度。每个梯度元素例如可以是成本函数关于与梯度元素相对应的参数的偏导数。
如所提及,在每个轮次中,训练逻辑可以使用相同的参数串行或并行地测试来自训练数据集的任何数量的输入向量(例如,如果计算进程包括多个GPU、处理器或其他合适的硬件)。每次前向传递都产生一个梯度。如果计算进程在一个轮次内执行多于一次前向传递,则该进程可以将所得梯度组合(例如,平均、求和等)在一起以产生单个梯度。
在轮次结束时,计算节点被配置为以本文别处所描述的方式将在该轮次期间计算出的(多个)梯度共同发送到一个或多个支持计算的交换机。梯度可以以任何合适的形式被传送,诸如互联网协议分组内的有效负载数据或其他数据单元。由于一些模型可能包括数千、数百万或者甚至更多数量的神经元,因此梯度可能需要在数个数据单元之间进行划分,在这种情况下,每个数据单元可以包括梯度标识符或数据单元所依据的其他合适的信息,通过这些信息可以随后识别其中传送梯度的数据单元。
经由诸如本文别处所描述的网络计算进程,支持计算的交换机被配置为从计算节点收集梯度并通过诸如求和或平均之类的归约操作来一起归约那些梯度。如本文别的地方所描述的,响应于发送梯度,每个节点中的计算进程将最终接收归约操作的单个结果梯度。
训练逻辑被配置为通过被称为反向传播的过程基于结果梯度来调整其参数。训练逻辑可以执行各种操作,诸如对全部节点数上的结果梯度进行平均、将结果梯度乘以固定或可变的学习率、将结果参数添加到参数或从参数中减去结果梯度等等,以得到新的参数集合。
一旦确定了新的参数集合,训练逻辑就可以开始在新的轮次中测试模型。取决于实施例,这个轮次可以或可以不一定利用与前一个轮次中相同的输入向量。生成梯度、接收结果梯度和调整参数的过程可以重复任意数量的轮次,直到达到最终条件,诸如执行了预定义数量的轮次、收敛于每个轮次的变化不超过阈值量的一组不符合条件的参数等等。然后,最终的参数集合可以被用于推理(例如,利用模型来处理新的数据,对其预期的输出是未知的)。
在一些实施例中,在达到最终条件之后,可以利用不同的初始参数集合来再次重复训练过程。例如,可以利用这种附加的训练来增加梯度下降算法找到全局最小值而不是仅仅局部最小值的可能性。可以比较训练过程的每次迭代中收敛的参数的损失,以便选择具有最低成本的参数。
5.0.示例实施例
一些实施例的示例表示但不限于如下:
一种分布式计算系统,包括:多个计算节点,计算节点中的每个计算节点包括:多个设备端口,每个设备端口连接到多个支持计算的交换机中的不同的支持计算的交换机;以及多个计算实体,多个计算实体中的每个计算实体被配置为执行生成局部向量的计算进程,局部向量包括向量元素的公共集合的值;其中计算节点被配置为:对于向量元素的公共集合中的多个子集中的每个向量元素子集,基于每个生成的局部向量,将包括向量元素子集的值的向量块发送出多个设备端口的不同端口;以及多个支持计算的交换机,支持计算的交换机中的每个支持计算的交换机包括:多个交换机端口,多个计算节点中的每个计算节点经由多个交换机端口中的不同端口而连接到支持计算的交换机;以及被配置为执行网络计算进程的一个或多个网络计算实体,该网络计算进程将通过多个交换机端口接收的向量块归约为单个结果块,向量块和单个结果块各自具有相同向量元素子集的值;支持计算的交换机被配置为将结果块发送到多个计算节点中的每个计算节点。
在实施例中,对于每个计算节点,发送向量块包括发送包括来自向量块的向量数据的不同部分的多个分组。
在实施例中,对于在给定计算节点处生成的所有局部向量,给定计算节点被配置为将局部向量归约为节点向量,由给定计算节点发送的每个向量块是该节点向量的不同块。
在实施例中,给定计算节点被配置为:对于在给定计算节点处执行的多个计算进程中的每个特定计算进程,通过以下方式归约局部向量:将特定计算进程指派给向量元素子集的特定向量元素子集;将由特定计算进程生成的局部向量的块发送到多个计算进程中的每个其他计算进程,该块携带指派给该其他计算进程的向量元素子集的值;将从多个计算进程中的该其他计算进程接收的多个块归约为携带特定向量元素子集的值的节点块;将节点块从多个设备端口中的特定端口发送到指派给特定向量元素子集的特定的支持计算的交换机;经由特定端口接收特定结果块;并且与多个计算进程中的每个其他计算进程共享该特定结果块。
在实施例中,在多个计算节点中的每个计算节点处执行的多个计算进程中的每个特定计算进程被配置为:将由计算节点处的多个计算进程所生成的局部向量的特定块归约为节点块,该节点块包括指派给特定计算进程的特定向量元素子集的值;将节点块发送出多个设备端口中的特定端口;经由特定端口接收包括特定向量元素子集的值的特定结果块;与计算节点处的多个计算进程中的每个其他计算进程共享该特定结果块。
在实施例中,特定端口被直接耦合到执行特定计算进程的特定计算实体,计算节点中的多个设备端口中的每一个直接耦合到计算节点中的多个计算实体中的不同的一者。
在实施例中,多个计算节点中的每个计算节点被配置为与由计算节点执行的多个计算进程中的每个计算进程共享从多个支持计算的交换机接收的多个结果块中的每个结果块,每个结果块是从多个支持计算的交换机中的不同支持计算的交换机接收的;其中多个计算进程中的每一个将多个结果块进行组合以形成单个结果向量,该当结果向量包括向量元素的公共集合中的每个元素的单个值。
在实施例中,归约向量块包括:对于向量元素子集中的每个向量元素,在与向量元素相对应的向量块中的每个值之间执行一个或多个归约操作,归约操作包括以下中的一个或多个:求和、平均、相乘、选择最小值或选择最大值。
在实施例中,在多个计算节点中的每一个处的多个计算进程中的每个计算进程属于执行公共分布式应用的工作者集合,由每个支持计算的交换机生成的每个结果块共同地形成该分布式应用的结果向量。
在实施例中,多个支持计算的交换机中的每个支持计算的交换机维护用于分布式应用的处理缓冲器,该处理缓冲器仅缓冲指派给该支持计算的交换机的向量元素子集的值,而不缓冲指派给向量元素的公共集合中的其他元素的值。
在实施例中,对于向量元素的公共集合,多个支持计算的交换机中的每个支持计算的交换机仅接收具有指派给该支持计算的交换机的向量元素子集的值的向量块,而不是接收具有向量元素的公共集合内未指派给该支持计算的交换机的向量元素子集的值的向量块。
在实施例中,在多个计算节点中的每一个处的多个计算进程中的每个计算进程实现用于对模型的参数进行训练的训练逻辑,每个局部向量是由计算进程基于在指派给计算进程的训练数据集上测试模型而生成的局部梯度,向量元素的公共集合中的每个向量元素对应于不同的一个参数,每个计算进程被配置为基于通过组合由多个支持计算的交换机生成的每个结果块而形成的结果梯度来调整参数,结果梯度对于向量元素的公共集合中的每个向量元素具有单个值。
在实施例中,该系统还包括:计算节点的多个计算平面,每个计算平面包括与多个计算节点和多个支持计算的交换机相同的方式配置的分开的一组计算节点和支持计算的交换机;其中支持计算的交换机中的每个支持计算的交换机通过平面间通信机制而耦合到至少一个其他支持计算的交换机,该其他支持计算的交换机被指派以归约与该支持计算的交换机相同的向量元素子集,支持计算的交换机被配置为与该其他支持计算的交换机共享从向量块中归约的中间结果块,该向量块是该支持计算的交换机从与该支持计算的交换机在同一平面中的多个计算节点接收的,该支持计算的交换机配置为还基于经由平面间通信机制接收到的一个或多个中间结果块来生成结果块以发送回到同一平面中的多个计算节点。
在实施例中,在多个计算节点中的每个计算节点处执行的多个计算进程中的特定计算进程被配置为:将由计算节点处的多个计算进程生成的局部向量的特定块归约为两个或更多节点子块,每个子块包括指派给特定计算进程的不同向量元素子集的值;将每个子块发送出多个设备端口中耦合到特定计算进程的不同端口;对于指派给特定计算进程的每个不同向量元素子集:接收包括向量元素子集的值的特定结果子块;以及与计算节点处的多个计算进程中的每个其他计算进程共享特定结果子块。
在实施例中,多个支持计算的交换机中的给定的支持计算的交换机被配置为检测与给定的支持计算的交换机接收的向量数据的处理相关的错误,并且将与该错误相关联的消息发送出多个交换机端口中的每一个。
在实施例中,支持计算的交换机包括分组交换逻辑,该分组交换逻辑被配置为将不携带向量数据的网络数据单元转发出包括不在多个交换机端口中的至少第一交换机端口的交换机端口。
在实施例中,多个计算实体中的每个计算实体包括GPU、CPU、TPU、ALU或FPU中的一个或多个。
根据一个实施例,一种方法,包括:在多个计算节点中的每个计算节点处:在多个计算进程中的每个计算进程处生成包括向量元素的公共集合的值的局部向量;对于向量元素的公共集合中的多个子集中的每个向量元素子集,基于每个生成的局部向量,将包括向量元素子集的值的向量块发送出与向量元素子集相关联的计算节点的端口,每个向量元素子集与计算节点的不同端口相关联;在多个支持计算的交换机中的每个支持计算的交换机处:通过多个交换机端口接收向量块,多个计算节点中的每个计算节点经由多个交换机端口中的不同端口而连接到该支持计算的交换机;将向量块归约为单个结果块,向量块和单个结果块各自具有向量元素子集的相同向量元素子集的值;将结果块发送到多个计算节点中的每个计算节点。
在实施例中,该方法还包括,在多个计算节点中的每个计算节点处执行的多个计算进程中的每个特定计算进程处:将由该计算节点处的多个计算进程生成的局部向量的特定块归约为节点块,该节点块包括向量元素子集中指派给特定计算进程的特定向量元素子集的值;将节点块发送出计算节点的特定端口;经由特定端口接收包括特定向量元素子集的值的特定结果块;与计算节点处的多个计算进程中的每个其他计算进程共享该特定结果块。
在实施例中,归约向量块包括,对于向量元素子集中的每个向量元素,在与向量元素相对应的向量块中的每个值之间执行一个或多个归约操作,该归约操作包括以下中的一个或多个:求和、平均、相乘、选择最小值或选择最大值。
在实施例中,多个计算节点中的每一个处的多个计算进程中的每个计算进程属于执行公共分布式应用的工作者集合,由每个支持计算的交换机生成的每个结果块共同地形成该分布式应用的结果向量。
在实施例中,在多个支持计算的交换机中的每个支持计算的交换机处,在用于分布式应用的处理缓冲器内仅缓冲指派给该支持计算的交换机的向量元素子集的值,而不缓冲向量元素的公共集合中的其他元素的值。
在实施例中,在多个计算节点中的每一个处的多个计算进程中的每个计算进程处:
在实施例中,生成局部向量包括:在被指派给计算进程的训练数据集上测试模型的参数,并且基于测试的结果来计算局部梯度,该局部向量是局部梯度,向量元素的公共集合的每个向量元素对应于参数中不同的一者;该方法还包括:基于通过组合由多个支持计算的交换机生成的每个结果块而形成的结果梯度来调整参数,该结果梯度对于向量元素的公共集合中的每个向量元素具有单个值。
在实施例中,多个计算设备和多个支持计算的交换机形成计算平面,该方法还包括:在多个支持计算的交换机中的每个特定的支持计算的交换机处,经由平面间通信机制而与另一计算平面中的至少一个其他支持计算的交换机共享中间结果块,该至少一个其他支持计算的交换机也被分配以归约与该特定的支持计算的交换机相同的向量元素子集,该中间结果块已经从向量块中被归约,该向量块是该特定的支持计算的交换机从多个计算节点接收的;还基于经由平面间通信机制接收到的一个或多个中间结果块来生成结果块以发送回到同一平面中的多个计算节点。
在实施例中,该方法还包括,在多个计算节点中的每个计算节点处执行的多个计算进程中的特定计算进程处:将由该计算节点处的其他计算进程生成的局部向量的特定块归约为两个或更多节点子块,每个子块包括指派给特定计算进程的不同向量元素子集的值;将每个子块发送出计算节点的耦合到特定计算进程的不同端口;对于指派给特定计算进程的每个不同向量元素子集:接收包括向量元素子集的值的特定结果块;以及与计算节点处的其他计算进程共享该特定结果块。
在实施例中,该方法还包括,在多个支持计算的交换机中的给定支持计算的交换机处:检测与给定的支持计算的交换机接收的向量数据的处理相关的错误;以及将与该错误相关联的消息发送出多个交换机端口中的每一个。
在实施例中,本文描述的方法和技术可以全部或部分地由执行存储在一个或多个非暂时性计算机可读介质上的指令的一个或多个计算设备来实现。
在本文的其他部分中描述了其他示例实施例。
6.0.实现机制—硬件概述
根据一个实施例,本文描述的技术由一个或多个专用计算设备来实现。专用计算设备可以是台式计算机系统、便携式计算机系统、手持式设备、网络设备或合并硬连线和/或程序逻辑以实现这些技术的任何其他设备。专用计算设备可以是硬连线的以执行这些技术,或者可以包括数字电子设备,诸如一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA),它们被持久地编程以执行技术。这种专用计算设备还可以将定制硬连线逻辑、ASIC、FPGA或其他电路系统与定制编程相结合以完成这些技术。
尽管针对硬件实现描述了某些前述技术,其在某些实施例中提供了许多优点,但是还应当认识到,在其他实施例中,当部分或全部以软件来执行时,前述技术仍然可以提供某些优点。因此,在这样的实施例中,合适的实现装置包括通用硬件处理器,并且被配置为通过执行固件、存储器、其他存储装置或其组合中的程序指令来执行任何前述方法。
图13是图示了根据实施例的可以在实现上述技术时被利用的示例计算机系统1300的框图。计算机系统1300例如可以是台式计算设备、膝上型计算设备、平板电脑、智能电话、服务器设备、计算主机、多媒体设备、手持设备、网络装置或任何其他合适的设备。在实施例中,图13构成了前面部分中描述的设备和系统的不同视图。
计算机系统1300可以包括一个或多个ASIC、FPGA或用于实现如本文所描述的程序逻辑的其他专用电路系统1303。例如,电路系统1303可以包括用于实现所描述的技术中的一些或全部的固定和/或可配置的硬件逻辑块、输入/输出(I/O)块、硬件寄存器或用于存储各种数据的诸如随机存取存储器(RAM)之类的其他嵌入式存储器资源等等。逻辑块可以包括例如逻辑门、触发器、多路复用器等的布置,其被配置为基于对输入信号执行的逻辑操作来生成输出信号。
另外和/或替代地,计算机系统1300可以包括被配置为执行基于软件的指令的一个或多个硬件处理器1304。计算机系统1300还可以包括一个或多个总线1302或用于传送信息的其他通信机制。总线1302可以包括各种内部和/或外部组件,包括但不限于内部处理器或存储器总线、串行ATA总线、高速PCI总线、通用串行总线、超级传输总线、InfiniBand总线和/或任何其他合适的有线或无线通信信道。
计算机系统1300还包括一个或多个存储器1306,诸如RAM、硬件寄存器或其他动态或易失性存储设备,用于存储数据单元以供一个或多个ASIC、FPGA或其他专用电路系统1303处理。存储器1306还可以或替代地被用于存储要由处理器1304执行的信息和指令。存储器1306可以直接连接或嵌入在电路系统1303或处理器1304内。或者,存储器1306可以耦合到总线1302并经由总线1302访问。存储器1306还可以被用于存储临时变量、描述规则或策略的数据单元或在程序逻辑或指令的执行期间的其他中间信息。
计算机系统1300还包括耦合到总线1302的一个或多个只读存储器(ROM)1308或其他静态存储设备,用于存储处理器1304的静态信息和指令。一个或多个存储设备1310,诸如固态存储器驱动器(SSD)、磁盘、光盘或其他合适的非易失性存储设备,可以可选地被提供并耦合到总线1302以用于存储信息和指令。
在实施例中,计算机系统1300还可以包括耦合到总线1302的一个或多个通信接口1318。通信接口1318提供通常是双向的耦合到网络链路1320的数据通信,网络链路1320连接到本地网络1322。例如,通信接口1318可以是综合业务数字网络(ISDN)卡、电缆调制解调器、卫星调制解调器或向对应类型的电话线提供数据通信连接的调制解调器。作为另一示例,一个或多个通信接口1318可以包括局域网(LAN)卡以提供到兼容LAN的数据通信连接。作为又一示例,一个或多个通信接口1318可以包括无线网络接口控制器,诸如基于802.11的控制器、蓝牙控制器、长期演进(LTE)调制解调器和/或其他类型的无线接口。在任何这样的实现中,通信接口1318发送和接收携带表示各种类型信息的数字数据流的电、电磁或光信号。
网络链路1320通常通过一个或多个网络向其他数据设备提供数据通信。例如,网络链路1320可以通过本地网络1322提供到主计算机1324或到由服务提供商1326操作的数据设备的连接。服务提供商1326(其可以例如是互联网服务提供商(ISP))进而提供通过广域网的数据通信服务,诸如现在通常称为“互联网”1328的全球分组数据通信网络。本地网络1322和互联网1328都使用携带数字数据流的电、电磁或光信号。通过各种网络的信号以及网络链路1320上的和通过通信接口1318的信号是传输介质的示例形式,该信号携带数字数据去往计算机系统1300和从计算机系统1300携带数字数据。
在实施例中,计算机系统1300可以通过(多个)网络、网络链路1320和通信接口1318发送和接收数据单元。在一些实施例中,该数据可以是这样的数据单元,计算机系统1300已被要求处理该数据单元,并且如果需要的话,经由合适的网络链路1320而重定向到其他计算机系统。在其他实施例中,该数据可以是用于实现与所描述的技术相关的各种过程的指令。例如,在互联网示例中,服务器1330可以通过互联网1328、ISP 1326、本地网络1322和通信接口1318传输应用所请求的代码。接收到的代码可以在其被接收时由处理器1304执行,并且/或被存储在存储设备1310或其他非易失性存储器中以供以后执行。作为另一示例,经由网络链路1320接收到的信息可以由计算机系统1300的软件组件(诸如网络浏览器、应用或服务器)解释和/或处理,软件组件进而基于该信息向处理器1304发出指令,可能经由操作系统和/或软件组件的其他中间层。
计算机系统1300可以可选地经由总线1302而耦合到一个或多个显示器1312,以用于向计算机用户呈现信息。例如,计算机系统1300可以经由高清晰度多媒体接口(HDMI)电缆或其他合适的电缆而连接到液晶显示器(LCD)监视器,和/或经由诸如点对点Wi-Fi直接连接之类的无线连接而连接到发光二极管(LED)电视。合适类型的显示器1312的其他示例可以包括但不限于等离子体显示设备、投影仪、阴极射线管(CRT)监视器、电子纸、虚拟现实耳机、盲文终端和/或用于将信息输出给计算机用户的任何其他合适的设备。在实施例中,可以使用任何合适类型的输出设备,诸如例如音频扬声器或打印机来代替显示器1312。
一个或多个输入设备1314可选地耦合到总线1302,用于将信息和命令选择传送到处理器1304。输入设备1314的一个示例是键盘,包括字母数字键和其他键。另一种类型的用户输入设备1314是光标控制器1316,诸如鼠标、轨迹球或光标方向键,用于将方向信息和命令选择传送到处理器1304并用于控制显示器1312上的光标移动。该输入设备通常在两个轴(第一轴(例如,x)和第二轴(例如,y))上具有两个自由度,其允许设备指定在平面中的位置。合适的输入设备1314的又一示例包括固定到显示器1312的触摸屏面板、相机、麦克风、加速计、运动检测器和/或其他传感器。在实施例中,可以利用基于网络的输入设备1314。在这样的实施例中,用户输入和/或其他信息或命令可以经由局域网(LAN)或其他合适的共享网络上的路由器和/或交换机或者经由对等网络而从输入设备1314中继到计算机系统1300上的网络链路1320。
如所讨论的,计算机系统1300可以使用定制的硬连线逻辑、一个或多个ASIC或FPGA 1303、固件和/或程序逻辑来实现本文描述的技术,其与计算机系统相结合以使计算机系统1300成为专用机器或将其编程为专用机器。然而,根据一个实施例,本文的技术由计算机系统1300响应于处理器1304执行主存储器1306中包含的一个或多个指令的一个或多个序列来执行。这样的指令可以从诸如存储设备1310之类的另一存储介质被读取到主存储器1306中。主存储器1306中包含的指令序列的执行使处理器1304执行本文描述的处理步骤。
如本文中所使用的术语“存储介质”指的是存储使机器以特定方式操作的数据和/或指令的任何非暂时性介质。这样的存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,诸如存储设备1310。易失性介质包括动态存储器,诸如主存储器1306。存储介质的常见形式包括例如软盘、柔性盘、硬盘、固态驱动器、磁带或任何其他磁性数据存储介质、CD-ROM、任何其他光学数据存储介质、任何具有孔图案的物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其他存储芯片或盒。
存储介质不同于传输介质,但是可以与传输介质结合使用。传输介质参与存储介质之间的信息传送。例如,传输介质包括同轴电缆、铜线和光纤,包括构成总线1302的线。传输介质还可以采用声波或光波的形式,诸如在无线电波和红外数据通信期间生成的那些波或光波的形式。
各种形式的介质可以涉及将一个或多个指令的一个或多个序列携带到处理器1304以供执行。例如,指令最初可以被携带在远程计算机的磁盘或固态驱动器上。远程计算机可以将指令加载到其动态存储器中,并使用调制解调器通过网络(诸如有线网络或蜂窝网络)发送指令作为调制信号。计算机系统1300本地的调制解调器可以接收网络上的数据并解调信号以解码所传输的指令。然后适当的电路系统可以将数据放置在总线1302上。总线1302将数据携带到主存储器1306,处理器1304从主存储器1306检索并执行指令。由主存储器1306接收的指令可以可选地在由处理器1304执行之前或之后存储在存储设备1310上。
7.0.扩展和替代方案
如本文中所使用的,术语“第一”、“第二”、“某个”和“特定”被用作命名约定以将查询、计划、表示、步骤、对象、设备或其他项目彼此区分,以使得这些项目在介绍后可以被引用。除非本文另有规定,否则这些术语的使用并不暗示所引用项目的顺序、时间安排或任何其他特性。
在附图中,各种组件被描绘为通过箭头通信地耦合到各种其他组件。这些箭头仅说明组件之间信息流的某些示例。某些组件之间的箭头方向或箭头线的缺失均不应被解释为指示某些组件本身之间存在或不存在通信。实际上,每个组件可以具有适当的通信接口,通过该通信接口,组件可以根据需要通信地耦合到其他组件,以完成本文所描述的任何功能。
在前面的说明书中,已经参考许多具体细节描述了本发明主题的实施例,这些具体细节可以根据实现的不同而变化。因此,什么是发明主题以及旨在成为发明主题的唯一且排他性的指示符是以权利要求所提出的具体形式而从本申请中提出的一组权利要求,包括任何后续修正。在这方面,虽然在本申请的权利要求中阐述了具体的权利要求从属关系,但是应当注意的是,本申请的从属权利要求的特征可以适当地与其他从属权利要求的特征以及与本申请的独立权利要求的特征相结合,而不仅仅是根据权利要求组中记载的特定从属关系。此外,虽然本文讨论了分开的实施例,但是本文讨论的实施例和/或部分实施例的任何组合可以进行组合以形成另外的实施例。
本文对此类权利要求中包含的术语明确提出的任何定义应管辖权利要求中所使用的此类术语的含义。因此,权利要求中未明确叙述的任何限制、元素、性质、特征、优点或属性不应以任何方式限制该权利要求的范围。因此,说明书和附图应被视为说明性的而非限制性的。

Claims (20)

1.一种分布式计算系统,包括:
多个联网计算设备,所述多个联网计算设备中的每个联网计算设备包括:
多个设备端口,每个设备端口连接到多个支持计算的交换机中的不同的支持计算的交换机;以及
多个计算实体,所述多个计算实体中的每个计算实体被配置为执行生成局部向量的计算进程,所述局部向量包括向量元素的公共集合的值;
其中所述联网计算设备被配置为:对于所述向量元素的公共集合中的多个子集中的每个向量元素子集,基于每个生成的局部向量,将包括所述向量元素子集的值的向量块发送出所述多个设备端口的不同设备端口;
所述多个支持计算的交换机中的每个支持计算的交换机包括:
多个交换机端口,所述多个联网计算设备中的每个联网计算设备经由所述多个交换机端口中的不同交换机端口而连接到所述支持计算的交换机;以及
一个或多个网络计算实体,所述网络计算实体被配置为执行网络计算进程,所述网络计算进程将通过所述多个交换机端口接收的向量块归约为单个结果块,所述向量块和所述单个结果块各自具有相同向量元素子集的值;
所述支持计算的交换机被配置为将所述结果块发送到所述多个联网计算设备中的每个联网计算设备。
2.根据权利要求1所述的分布式计算系统,其中对于在给定联网计算设备处生成的所有局部向量,所述给定联网计算设备被配置为将所述局部向量归约为节点向量,由所述给定联网计算设备发送的每个向量块是所述节点向量的不同块。
3.根据权利要求1所述的分布式计算系统,其中在所述多个联网计算设备中的每个联网计算设备处执行的所述多个计算进程中的每个特定计算进程被配置为:
将由所述联网计算设备处的所述多个计算进程所生成的局部向量的特定块归约为节点块,所述节点块包括被指派给所述特定计算进程的特定向量元素子集的值;
将所述节点块发送出所述多个设备端口中的特定端口;
经由所述特定端口接收包括所述特定向量元素子集的值的特定结果块;
与所述联网计算设备处的所述多个计算进程中的每个其他计算进程共享所述特定结果块。
4.根据权利要求1所述的分布式计算系统,
其中所述多个联网计算设备中的每个联网计算设备被配置为与由所述联网计算设备执行的所述多个计算进程中的每个计算进程共享从所述多个支持计算的交换机接收的多个结果块中的每个结果块,每个结果块是从所述多个支持计算的交换机中的不同的支持计算的交换机接收的;
其中所述多个计算进程中的每个计算进程将所述多个结果块进行组合以形成单个结果向量,所述单个结果向量包括所述向量元素的公共集合中的每个元素的单个值。
5.根据权利要求1所述的分布式计算系统,其中归约所述向量块包括:对于所述向量元素子集中的每个向量元素,在与所述向量元素相对应的所述向量块中的每个值之间执行一个或多个归约操作,所述归约操作包括以下中的一项或多项:求和、平均、相乘、选择最小值或选择最大值。
6.根据权利要求1所述的分布式计算系统,其中所述多个联网计算设备中的每个联网计算设备处的所述多个计算进程中的每个计算进程属于执行公共分布式应用的工作者集合,由每个支持计算的交换机生成的每个结果块共同地形成用于所述分布式应用的结果向量。
7.根据权利要求1所述的分布式计算系统,其中所述多个支持计算的交换机中的每个支持计算的交换机维护用于所述分布式应用的处理缓冲器,所述处理缓冲器仅缓冲指派给所述支持计算的交换机的向量元素子集的值,而不缓冲所述向量元素的公共集合中的其他元素的值。
8.根据权利要求1所述的分布式计算系统,其中所述多个联网计算设备中的每个联网计算设备处的所述多个计算进程中的每个计算进程实现用于对模型的参数进行训练的训练逻辑,每个局部向量是由所述计算进程基于在指派给所述计算进程的训练数据集上测试所述模型而生成的局部梯度,所述向量元素的公共集合中的每个向量元素对应于参数中的不同的一者,每个计算进程被配置为基于通过组合由所述多个支持计算的交换机生成的每个结果块而形成的结果梯度来调整所述参数,所述结果梯度对于所述向量元素的公共集合中的每个向量元素具有单个值。
9.根据权利要求1所述的分布式计算系统,还包括:
联网计算设备的多个计算平面,每个计算平面包括以与所述多个联网计算设备和所述多个支持计算的交换机相同的方式配置的分开的一组联网计算设备和支持计算的交换机;
其中所述支持计算的交换机中的每个支持计算的交换机通过平面间通信机制而耦合到至少一个其他支持计算的交换机,所述其他支持计算的交换机被指派以归约与所述支持计算的交换机相同的向量元素子集,所述支持计算的交换机被配置为与所述其他支持计算的交换机共享从所述向量块中归约的中间结果块,所述向量块是所述支持计算的交换机从与所述支持计算的交换机在同一平面中的所述多个联网计算设备接收的,所述支持计算的交换机被配置为还基于经由所述平面间通信机制接收到的一个或多个中间结果块来生成所述结果块以发送回到所述同一平面中的所述多个联网计算设备。
10.根据权利要求1所述的分布式计算系统,其中在所述多个联网计算设备中的每个联网计算设备处执行的所述多个计算进程中的特定计算进程被配置为:
将由所述联网计算设备处的所述多个计算进程生成的局部向量的特定块归约为两个或更多节点子块,每个子块包括指派给所述特定计算进程的不同向量元素子集的值;
将每个子块发送出所述多个设备端口中耦合到所述特定计算进程的不同端口;
对于指派给所述特定计算进程的所述不同向量元素子集中的每一个:
接收包括所述向量元素子集的值的特定结果子块;以及
与所述联网计算设备处的所述多个计算进程中的每个其他计算进程共享所述特定结果子块。
11.根据权利要求1所述的分布式计算系统,其中所述多个支持计算的交换机中的给定的支持计算的交换机被配置为检测与所述给定的支持计算的交换机接收的向量数据的处理相关的错误,并且将与所述错误相关联的消息发送出所述多个交换机端口中的每一个。
12.一种方法,包括:
在多个联网计算设备中的每个联网计算设备处:
在多个计算进程中的每个计算进程处生成包括向量元素的公共集合的值的局部向量;
对于所述向量元素的公共集合中的多个子集中的每个向量元素子集,基于每个生成的局部向量,将包括所述向量元素子集的值的向量块发送出所述联网计算设备的与所述向量元素子集相关联的端口,每个向量元素子集与所述联网计算设备的不同端口相关联;
在多个支持计算的交换机中的每个支持计算的交换机处:
通过多个交换机端口接收向量块,所述多个联网计算设备中的每个联网计算设备经由所述多个交换机端口中的不同交换机端口而连接到所述支持计算的交换机;
将所述向量块归约为单个结果块,所述向量块和所述单个结果块各自具有所述向量元素子集的相同向量元素子集的值;
将所述结果块发送到所述多个联网计算设备中的每个联网计算设备。
13.根据权利要求12所述的方法,还包括:在所述多个联网计算设备中的每个联网计算设备处执行的所述多个计算进程中的每个特定计算进程处:
将由所述联网计算设备处的所述多个计算进程生成的局部向量的特定块归约为节点块,所述节点块包括所述向量元素子集中被指派给所述特定计算进程的特定向量元素子集的值;
将所述节点块发送出所述联网计算设备的特定端口;
经由所述特定端口接收包括所述特定向量元素子集的值的特定结果块;
与所述联网计算设备处的所述多个计算进程中的每个其他计算进程共享所述特定结果块。
14.根据权利要求12所述的方法,其中归约所述向量块包括:对于所述向量元素子集中的每个向量元素,在与所述向量元素相对应的所述向量块中的每个值之间执行一个或多个归约操作,所述归约操作包括以下中的一项或多项:求和、平均、相乘、选择最小值或选择最大值。
15.根据权利要求12所述的方法,其中所述多个联网计算设备中的每个联网计算设备处的所述多个计算进程中的每个计算进程属于执行公共分布式应用的工作者集合,由每个支持计算的交换机生成的每个结果块共同地形成用于所述分布式应用的结果向量。
16.根据权利要求15所述的方法,还包括:在所述多个支持计算的交换机中的每个支持计算的交换机处,在用于所述分布式应用的处理缓冲器内仅缓冲被指派给所述支持计算的交换机的向量元素子集的值,而不缓冲所述向量元素的公共集合中的其他元素的值。
17.根据权利要求12所述的方法,其中在所述多个联网计算设备中的每个联网计算设备处的所述多个计算进程中的每个计算进程处:
生成所述局部向量包括:在指派给所述计算进程的训练数据集上测试模型的参数,并且基于所述测试的结果来计算局部梯度,所述局部向量是局部梯度,所述向量元素的公共集合中的每个向量元素对应于参数中的不同的一者;
所述方法还包括:基于通过组合由所述多个支持计算的交换机生成的每个结果块而形成的结果梯度来调整所述参数,所述结果梯度对于所述向量元素的公共集合中的每个向量元素具有单个值。
18.根据权利要求12所述的方法,其中所述多个计算设备和多个支持计算的交换机形成计算平面,所述方法还包括:
在所述多个支持计算的交换机中的每个特定的支持计算的交换机处,经由平面间通信机制而与另一计算平面中的至少一个其他支持计算的交换机共享中间结果块,所述至少一个其他支持计算的交换机也被指派以归约与所述特定的支持计算的交换机相同的向量元素子集,所述中间结果块已经从所述向量块中被归约,所述向量块是所述特定的支持计算的交换机从所述多个联网计算设备接收的;
还基于经由所述平面间通信机制接收到的一个或多个中间结果块来生成所述结果块以发送回到所述同一平面中的所述多个联网计算设备。
19.根据权利要求12所述的方法,还包括:在所述多个联网计算设备中的每个联网计算设备处执行的所述多个计算进程中的特定计算进程处:
将由所述联网计算设备处的其他计算进程生成的局部向量的特定块归约为两个或更多节点子块,每个子块包括被指派给所述特定计算进程的不同向量元素子集的值;
将每个子块发送出所述联网计算设备的耦合到所述特定计算进程的不同端口;
对于被指派给所述特定计算进程的所述不同向量元素子集的每一个:
接收包括所述向量元素子集的值的特定结果块;以及
与所述联网计算设备处的每个其他计算进程共享所述特定结果块。
20.根据权利要求12所述的方法,还包括:在所述多个支持计算的交换机中的给定的支持计算的交换机处:
检测与所述给定的支持计算的交换机接收的向量数据的处理相关的错误;以及
将与所述错误相关联的消息发送出所述多个交换机端口中的每一个。
CN202280032482.1A 2021-03-12 2022-03-13 用于网络交换机的分布式人工智能扩展模块 Pending CN117242442A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/200,463 US11425195B1 (en) 2021-03-12 2021-03-12 Massively parallel in-network compute
US17/200,463 2021-03-12
PCT/US2022/020087 WO2022192761A1 (en) 2021-03-12 2022-03-13 Distributed artificial intelligence extension modules for network switches

Publications (1)

Publication Number Publication Date
CN117242442A true CN117242442A (zh) 2023-12-15

Family

ID=81648541

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202280032482.1A Pending CN117242442A (zh) 2021-03-12 2022-03-13 用于网络交换机的分布式人工智能扩展模块

Country Status (4)

Country Link
US (2) US11425195B1 (zh)
EP (1) EP4305528A1 (zh)
CN (1) CN117242442A (zh)
WO (1) WO2022192761A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11425195B1 (en) * 2021-03-12 2022-08-23 Innovium, Inc. Massively parallel in-network compute
US20220385577A1 (en) * 2021-05-27 2022-12-01 Microsoft Technology Licensing, Llc Switch-based workload distribution for virtualized rans
CN116644803B (zh) * 2023-07-27 2023-11-03 浪潮电子信息产业股份有限公司 分布式协同训练控制方法、系统、装置、设备及存储介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8447954B2 (en) * 2009-09-04 2013-05-21 International Business Machines Corporation Parallel pipelined vector reduction in a data processing system
US10167800B1 (en) * 2017-08-18 2019-01-01 Microsoft Technology Licensing, Llc Hardware node having a matrix vector unit with block-floating point processing
US10417304B2 (en) * 2017-12-15 2019-09-17 International Business Machines Corporation Dual phase matrix-vector multiplication system
US11461360B2 (en) * 2018-03-30 2022-10-04 AVAST Software s.r.o. Efficiently initializing distributed clustering on large data sets
US11048661B2 (en) * 2018-04-16 2021-06-29 Simple Machines Inc. Systems and methods for stream-dataflow acceleration wherein a delay is implemented so as to equalize arrival times of data packets at a destination functional unit
US10931588B1 (en) * 2019-05-10 2021-02-23 Innovium, Inc. Network switch with integrated compute subsystem for distributed artificial intelligence and other applications
US10931602B1 (en) * 2019-05-10 2021-02-23 Innovium, Inc. Egress-based compute architecture for network switches in distributed artificial intelligence and other applications
US11425195B1 (en) * 2021-03-12 2022-08-23 Innovium, Inc. Massively parallel in-network compute

Also Published As

Publication number Publication date
US11425195B1 (en) 2022-08-23
WO2022192761A9 (en) 2022-12-08
EP4305528A1 (en) 2024-01-17
US11888931B1 (en) 2024-01-30
US20220294848A1 (en) 2022-09-15
WO2022192761A1 (en) 2022-09-15

Similar Documents

Publication Publication Date Title
US11888931B1 (en) Massively parallel in-network compute
US11099902B1 (en) Parallelized ingress compute architecture for network switches in distributed artificial intelligence and other applications
US11057318B1 (en) Distributed artificial intelligence extension modules for network switches
US10931588B1 (en) Network switch with integrated compute subsystem for distributed artificial intelligence and other applications
US11715040B1 (en) Network switch with integrated gradient aggregation for distributed machine learning
CN110033078B (zh) 一种基于树状拓扑的计算系统及方法
US20220197714A1 (en) Training a neural network using a non-homogenous set of reconfigurable processors
US11082350B2 (en) Network server systems, architectures, components and related methods
CN101873253B (zh) 带缓冲的纵横式交换机系统
JP7389231B2 (ja) 同期ネットワーク
US10931602B1 (en) Egress-based compute architecture for network switches in distributed artificial intelligence and other applications
US20220198114A1 (en) Dataflow Function Offload to Reconfigurable Processors
US20220129408A1 (en) Data actor and data processing method thereof
US11645225B2 (en) Partitionable networked computer
Liu et al. PSNet: Reconfigurable network topology design for accelerating parameter server architecture based distributed machine learning
US10846225B1 (en) Buffer read optimizations in a network device
Shrivastav Programmable multi-dimensional table filters for line rate network functions
CN115244909A (zh) 机器学习加速器中的队列分配
Nguyen et al. An allreduce algorithm and network co-design for large-scale training of distributed deep learning
US10742558B1 (en) Traffic manager resource sharing
JP7355983B2 (ja) マルチビット量子フィードバック制御のための量子測定・制御システム
Viswanathan et al. Network-accelerated distributed machine learning using mlfabric
Huang et al. Modeling and simulation of a packet switch system using POOSL
US12001893B1 (en) Distributed synchronization scheme
JP7357767B2 (ja) 複数のプロセッサを有するコンピュータにおける通信

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination