CN113469355A - 分布式系统中的多模型训练管道 - Google Patents
分布式系统中的多模型训练管道 Download PDFInfo
- Publication number
- CN113469355A CN113469355A CN202110342096.XA CN202110342096A CN113469355A CN 113469355 A CN113469355 A CN 113469355A CN 202110342096 A CN202110342096 A CN 202110342096A CN 113469355 A CN113469355 A CN 113469355A
- Authority
- CN
- China
- Prior art keywords
- gradients
- neural network
- worker node
- network model
- synchronized
- 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.)
- Granted
Links
- 238000012549 training Methods 0.000 title claims description 152
- 238000003062 neural network model Methods 0.000 claims abstract description 124
- 230000001360 synchronised effect Effects 0.000 claims abstract description 59
- 238000000034 method Methods 0.000 claims description 71
- 230000005540 biological transmission Effects 0.000 claims description 4
- 238000013528 artificial neural network Methods 0.000 description 153
- 238000012545 processing Methods 0.000 description 73
- 230000008569 process Effects 0.000 description 46
- 230000001133 acceleration Effects 0.000 description 42
- 230000006870 function Effects 0.000 description 27
- 238000004891 communication Methods 0.000 description 19
- 230000003863 physical function Effects 0.000 description 18
- 230000004913 activation Effects 0.000 description 16
- 238000001994 activation Methods 0.000 description 16
- 230000007246 mechanism Effects 0.000 description 16
- 210000002569 neuron Anatomy 0.000 description 12
- 238000011176 pooling Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 10
- 239000004744 fabric Substances 0.000 description 9
- 230000002093 peripheral effect Effects 0.000 description 9
- 210000004556 brain Anatomy 0.000 description 8
- 238000004364 calculation method Methods 0.000 description 8
- 238000007726 management method Methods 0.000 description 6
- 239000007787 solid Substances 0.000 description 6
- 210000000225 synapse Anatomy 0.000 description 6
- 230000000644 propagated effect Effects 0.000 description 5
- 210000003050 axon Anatomy 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 239000003795 chemical substances by application Substances 0.000 description 4
- 238000013500 data storage Methods 0.000 description 4
- 210000001787 dendrite Anatomy 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 238000007792 addition Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000012886 linear function Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 238000004883 computer application Methods 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 230000006855 networking Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000002123 temporal effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000013529 biological neural network Methods 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000013527 convolutional neural network Methods 0.000 description 1
- 238000013523 data management Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 230000005236 sound signal Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
Abstract
分布式系统的第一工作者节点使用第一神经网络模型以及与该第一神经网络模型相关联的第一组权重而计算第一组梯度。该第一组梯度从该第一工作者节点传输到该分布式系统的第二工作者节点。该第二工作者节点基于该第一组梯度而计算第一组经同步的梯度。在计算该第一组经同步的梯度的同时,该第一工作者节点使用第二神经网络模型以及与该第二神经网络模型相关联的第二组权重而计算第二组梯度。该第二组梯度从该第一工作者节点传输到该第二工作者节点。该第二工作者节点基于该第二组梯度而计算第二组经同步的梯度。
Description
背景技术
常被简称为神经网络的人工神经网络是具有基于生物神经网络的体系结构的计算系统。可以使用训练数据来训练神经网络以学习如何进行某些任务,诸如,从图像或视频中辨别物理对象、活动、角色等或将其分类。神经网络可以包含处理节点的多个层。层中的每个处理节点可以对前一层中的处理节点生成的输入数据进行计算,以生成输出数据。例如,处理节点可以进行一组算术运算诸如乘法和加法,以生成中间输出,或者对中间输出进行后处理操作以生成最终输出。神经网络可以包含数千个或更多的处理节点和数百万个或更多的参数。
神经网络的体系结构可以包含输入层、输出层和许多中间层(常被称为隐藏层)。每一层对前一层的输出执行一次计算,其中最后一层(输出层)提供最终结果。通过较多层,神经网络理论上可以进行较复杂的任务,诸如语言翻译和辨别图像的内容(或将其分类)。具有三个以上隐藏层的神经网络有时被称为深度神经网络。深度神经网络可以具有许多隐藏层,诸如,五层到一千以上层。
可以使用中央处理单元(CPU)进行计算来实现神经网络。然而,CPU倾向于为依序计算而不是为并行计算而优化,并且因此可能有较差的响应时间。图形处理单元(GPU)为并行计算而优化,但未必为来自一个计算单元的、将直接提供到另一计算单元的结果而优化。通常,首先必须将结果写入到存储器,并且接着读回。虽然GPU相比CPU可以有较好的响应时间,但是仍然需要改进神经网络的执行时间。最近,已开发出专用集成电路装置,诸如神经网络处理器或加速器,可比CPU或GPU较有效地执行神经网络。与CPU和GPU使用的时间体系结构相反,这些装置包含空间体系结构,其中在空间体系结构中,算术逻辑单元(ALU)可以直接将数据从一个单元传递到另一个单元,而在时间体系结构中,ALU只可以从存储器层次结构中提取数据,而无法直接相互通信。
在训练神经网络进行特定功能时,神经网络的参数(例如,其权重,表示不同处理节点之间的连接的强度)经过多次迭代来进行调整。训练过程涉及向神经网络供应训练数据,该训练数据可以包含训练输入数据和对应的参考输出数据,该参考输出数据可以支持特定决策(例如,图像中的对象的检测或未检测)。神经网络可以进行计算以将权重与训练输入数据组合而生成训练输出数据,并且训练输出数据可以与参考输出数据进行比较以生成误差数据(表示两者之间的差异)。在训练期间,可以将不同训练输入数据提供到神经网络以生成不同训练输出数据。可以基于诸如最小化训练输出数据与参考输出数据之间的差异等目标来调整神经网络的权重。为了提高神经网络生成正确决策的可能性,通常使用覆盖大量操作场景的大量训练输入数据来训练神经网络。因此,训练操作通常需要大量的时间和计算资源。
附图说明
将参照附图来描述根据本公开的各种实施例,其中:
图1展示了神经网络的计算流模型的示例;
图2展示了用于训练神经网络的训练过程的示例;
图3展示了可以进行神经网络的训练过程的示例分布式系统;
图4A~图4C展示了由分布式系统进行的各种示例训练步骤;
图5A~图5C展示了由分布式系统进行的各种示例训练步骤;
图6A和图6B分别展示了对应于图4A~图4C和图5A~图5C的示例时序图;
图7A和图7B分别展示了对应于单模型和多模型神经网络训练的同步方案的示例时序图;
图8A和图8B展示了多模型神经网络训练的示例时序图;
图9A和图9B展示了多模型神经网络训练的另外示例时序图;
图10A和图10B展示了多模型神经网络训练的另外示例时序图;
图11展示了使用分布式系统同时训练神经网络模型的方法;
图12展示了加速器的示例;
图13展示了加速引擎的示例;
图14展示了主机系统的示例;以及
图15展示了示例网络。
具体实施方式
在神经网络的训练期间,第一神经网络层可以接收训练输入数据,将训练输入数据与权重组合(例如,通过将训练输入数据与权重相乘,并且接着将乘积相加)以生成神经网络层的第一输出数据,并且在正向传播操作中将输出数据传播到第二神经网络层。第二神经网络层对来自第一神经网络层的第一输出数据进行另一正向传播操作以生成第二输出数据,并且将第二输出数据传播到较高神经网络层。正向传播操作可以在第一神经网络层处开始,并且在最高神经网络层处结束。每个神经网络层处的正向传播操作可以表示从训练输入数据提取信息并对其进行处理的不同阶段。接着,可以基于最高神经网络层的输出数据做出决策。例如,每个神经网络层可以从图像中提取特征和/或对其进行处理,并且可以基于在神经网络层处处理所提取的特征的结果来生成对象是否在图像中的决策。
可以通过训练过程生成和/或更新神经网络的该组权重,以提高神经网络生成正确决策的可能性。训练过程的一个例子可以是使用梯度下降方案。具体来说,作为训练过程的一部分,可以在每个神经网络层处使用这些权重来对训练输入数据进行正向传播操作,以在最高级神经网络层处生成训练输出数据。训练输出数据可以与支持特定决策的参考输出数据进行比较。可以基于例如训练输出数据与参考输出数据之间的差异来生成一组梯度。
作为训练过程的一部分,每个神经网络层可以接着进行反向传播过程,以调整每个神经网络层处的该组权重。具体来说,最高神经网络层可以接收该组梯度,并且在反向传播操作中,基于在与正向传播操作类似的数学运算中将该组权重应用到输入数据梯度来计算第一组数据梯度和第一组权重梯度。最高神经网络层可以基于该组第一权重梯度来调整该层的该组权重,而该组第一数据梯度可以传播到第二最高神经网络层以影响前一神经网络层的该组权重的调整。反向传播操作可以从最高神经网络层开始,并且在第一神经网络层处结束。可以调整每个神经网络层处的该组权重,以完成训练过程的一次迭代。可以对同一训练数据重复训练过程多次迭代,直到达到损失目标(例如,阈值输入数据梯度)为止。
由于训练过程中涉及的操作之间的依序性质和数据相依性,训练过程通常非常耗时。具体来说,在训练过程中,首先在每个神经网络层处进行正向传播操作以计算输出数据,接着基于输出数据(和参考输出数据)而计算输入数据梯度,接着在每个神经网络层处进行反向传播操作以计算权重梯度,接着在每个神经网络层处更新权重。因为反向传播操作取决于正向传播操作,因此这两组操作不能并行进行。此外,由于神经网络层之间的数据相依性,还需要对每个神经网络层依序进行正向传播操作和反向传播操作。并行性的缺乏可能极大地增加训练时间,当对同一训练输入数据进行训练过程的多次迭代以达到损失目标时,训练时间会进一步增加。此外,训练过程通常涉及向神经网络供应多组训练数据以覆盖不同操作条件,以使得可以训练神经网络能够在那些不同操作条件下提供正确决策。实现神经网络的计算系统可能需要进行额外训练过程以处理额外训练输入数据,这将进一步增加训练时间。考虑到训练过程通常相比推理操作需要较高的精度,缓慢训练过程可能给计算资源带来很大压力。
分布式系统可以通过将训练过程分布在多个计算系统(可以被称为工作者节点)上来加速训练过程。可以将训练数据分成多个部分,其中每个部分由一个工作者节点处理。每个工作者节点可以基于训练输入数据的一部分来独立地并且相互并行地进行正向和反向传播操作,以生成每个神经网络层的一组权重梯度。每个工作者节点可以与其它工作者节点交换其一组权重梯度,并将其一组权重梯度以及从其它工作者节点接收的诸组权重梯度求平均值。每个计算节点可以具有同一组经平均的权重梯度,并且可以接着基于经平均的权重梯度而更新每个神经网络层的一组权重。
将训练过程分布在多个工作者节点上可以减少将在每个工作者节点处处理的训练输入数据的量,这可以减少每个神经网络层处的正向和反向传播操作的执行时间并将训练过程加速。然而,因为分布式学习通常是通过相对低速的网络实现的,所以工作者节点之间的权重梯度的交换可能引入实质性的瓶颈。例如,在分布式系统处于云基础设施中并且工作者节点通过发送网络分组而相互交换权重梯度的情况下,相对于正向/反向传播操作的执行时间,网络延迟可能是相当大的。网络延迟可能消减分布式系统带来的训练时间的减少或甚至可能增加训练时间。在不仅对单个神经网络模型而且对多个神经网络模型进行训练时,问题加剧。因此,需要用于在分布式训练实现中减少训练时间的技术。
本文所述的实施例涉及用于减少使用分布式系统训练多个神经网络模型的训练时间的系统、方法和其它技术。通常,对多个神经网络模型依序进行训练,其中仅在已完成第一神经网络模型的训练之后才开始第二神经网络模型的训练。在模型中的每一个的训练期间,工作者节点计算一组训练数据的权重梯度(或被简称为“梯度”),将所计算的梯度传输到对梯度进行同步的单独工作者节点,并且接着保持闲置,直到接收到经同步的梯度和/或经更新的权重为止,使得可以在下一训练周期期间使用经调整的权重。
根据所描述的实施例,代替工作者节点保持闲置而等待经刷新的权重以开始新的周期,工作者节点可以将上下文切换到来自一个不同的神经网络模型的一组新权重,并计算此模型的梯度。例如,第一工作者节点可以使用第一组权重而计算第一神经网络模型的梯度,将这些梯度传输到第二工作者节点,并且在接收经同步的梯度之前,第一工作者节点可以加载第二神经网络模型和相关联的第二组权重,并计算第二模型的梯度。
随着接收不同层的梯度,第二工作者节点可以开始计算经同步的梯度。例如,第二工作者节点可以一次一层地从第一工作者节点接收梯度。这允许第二工作者节点较早地开始同步,而不必等待神经网络模型的所有层的整组梯度。一旦第二工作者节点已完成计算并将经同步的梯度传输回第一工作者节点,它就可以开始将第二模型的梯度同步,而不是保持闲置而等待第一模型的梯度的下一周期。
此技术通过以下方式来增加同一硬件上的多模型训练的吞吐量:在一个模型的梯度计算时间与另一模型的梯度计算时间之间交替以及使一个工作者节点上的一个模型的梯度计算时间与另一工作者节点上另一模型的梯度同步时间重叠。此技术还允许将同一训练输入数据重新用于不同神经网络模型,这节省了时间,因为通过相对低带宽的互连将训练输入移动到工作者节点(例如,加速器)中可能消耗大量的时间以及预处理资源。所描述的实施例还实现了各种多租户方案,其中同一硬件可以由两个不同租户同时使用来训练其神经网络模型。这可以在租户中的任一个所观察到的性能降低极小的情况下实现。
在下文描述中,将描述各种示例。出于解释的目的,阐述了具体配置和细节,以便提供对示例的透彻理解。然而,对于本领域的技术人员也将显而易见的是,可以在没有具体细节的情况下实践示例。此外,可以省略或简化熟知特征,以便不混淆正描述的实施例。
图1展示了神经网络100的计算流模型的示例。神经网络的灵感来自人脑的操作的机制。根据大脑的各种模型,大脑的主要计算元素是神经元。神经元与许多元素连接在一起,其中进入神经元的元素被称为树突,并且离开神经元的元素被称为轴突。神经元经由树突接受信号,对信号进行计算,并在轴突上输出信号。输入和输出信号被称为激活。一个神经元的轴突可以分叉并连接到多个神经元的树突。轴突的分支与树突之间的连接被称为突触。
突触可以缩放穿越突触的信号。缩放因子被称为权重,并且被认为是大脑学习的方式:不同的权重由对输入的不同响应引起。学习可以改变权重,但神经元和突触的组织不需要改变就可以获得学习。因此,大脑的静态结构可以用作程序的模型,并且权重可以反映程序已学会执行的任务。
神经网络是基于以下概念而操作的:神经元的计算涉及输入值的加权总和。这些加权总和对应于由突触进行的值缩放以及这些值在神经元中的组合。在神经元中对组合输入进行函数运算。在大脑模型中,该运算似乎是只有当输入超过某个阈值时才使神经元生成输出的非线性函数。因此,通过类比,神经网络的节点可以对输入到节点中的值的加权总和应用非线性函数。
在所展示的示例中,神经网络100包含输入层104、一个或多个常被称为隐藏层106的中间层和输出层108。每层包含某数量的节点102。在此示例中,输入层104的每个节点102连接到隐藏层106-1的每个节点102。在大脑模型中将被称为突触的连接被称为权重110。同样在此示例中,隐藏层106-N的每个节点102具有与输出层108的每个节点102的连接或权重110。输入层104可以接收输入并且可以将输入传播到隐藏层106-1。由隐藏层106-1计算的加权总和被传播到剩余隐藏层106并且随后传播到输出层108,该输出层可以向用户呈现最终输出。与大脑模型一致,节点102的输出可以被称为激活。
可以在示例神经网络100的每一层处发生的计算的示例如下:
在上述方程式中,Wij是权重,xi是输入激活,yj是输出激活,f()是非线性函数,并且b是偏置项。各种非线性函数可以用于实现不同目的。
神经网络100的模型可以被称为有向加权图。在有向图中,每个到节点或从节点来的连接都表示方向(例如,进入节点或离开节点)。在加权图中,每个连接可以具有权重。为了便于理解和调试,用于开发神经网络的工具可以将神经网络视觉化为有向加权图。在一些情况下,这些工具还可以用于训练神经网络并输出经训练的权重值。执行神经网络既而就是使用权重对输入数据进行计算。
具有许多层的神经网络可能够学习比浅层网络复杂和抽象的高级特征。例如,可以教导神经网络识别图像。在此示例中,图像的像素可以被馈送到神经网络的输入层中,并且第一层的输出可以表示在图像中存在低级特征,诸如线和边缘。在后续层处,可以组合这些特征,以测量较高级特征的可能存在:这些线可以组合为形状,这些形状可以进一步组合为形状集合。给定所有这些信息,神经网络可以输出高级特征表示特定对象或场景的概率。例如,神经网络可以输出图像是否含有猫。
神经网络的学习阶段被称为训练神经网络。在训练期间,神经网络100被教导进行任务。在学习任务时,确定权重110的值(可能还有偏差)。神经网络的底层模型体系结构112(例如,节点到层的组织、每层的节点之间的连接以及每个节点执行的计算)在训练期间不改变。一旦被训练,神经网络100就可以通过使用在训练期间确定的权重110值来计算结果而执行任务。运行神经网络的程序被称为推理。
如上所述,神经网络100的训练过程可以发生在分布式系统的多个工作者节点上,诸如图1所展示的工作者节点120。在各种实现中,工作者节点120可以是神经网络硬件加速器、通用硬件处理器或支持如上所述的神经网络处理中涉及的算术运算的其它合适的计算系统。工作者节点120可以包含硬件接口,以经由网络与其它工作者节点通信。工作者节点120可以包含计算资源以进行训练过程的操作,这些操作可以包含正向传播操作、损失梯度操作和反向传播操作。工作者节点120可以接收包含训练输入数据和参考输出数据的训练数据。基于训练输入数据,工作者节点120可以使用模型体系结构112和权重110来计算输出数据。接着,工作者节点120可以通过比较输出数据和参考输出数据来计算误差数据,这可以用于计算一组梯度。可以将梯度分布到分布式系统中的其它节点以进行梯度同步。接着,工作者节点120可以接收可以应用到权重110的经同步的梯度和/或权重调整。
因为工作者节点120在分布式系统中对来自其它工作者节点的不同训练数据(例如,训练数据集的不同部分)进行操作,所以经过训练过程的迭代的误差的量可以在不同工作者节点之间变化。为了提高神经网络模型对不同训练数据的精度,可以对每个工作者节点计算的局部梯度进行累加,然后求平均值,以导出一组经平均的梯度。例如,如果神经网络模型利用二十个权重值,那么每个工作者节点处的训练过程的第一次迭代将产生二十个局部梯度。可以将来自每个工作者节点的第一局部梯度相加,并除以工作者节点的数目以导出第一值的经平均的梯度。可对二十个梯度中的每一个进行计算,以导出一组二十个经平均的梯度。
图2展示了用于训练神经网络(诸如,神经网络100)的训练过程200的示例。如图2所示,可以对每个神经网络层进行正向传播操作,诸如,对最低层1(其可对应于图1的层104)进行正向传播操作202a、对层2(其可对应于图1的层106-1)进行正向传播操作202a、对最高层n(其可对应于图1的层108)进行正向传播操作202n等。神经网络层处的正向传播操作可以包含输入数据与此层的一组权重之间的乘法和加法计算,随后是激活函数处理,以生成输出数据。然后,输出数据可以传播到下一神经网络层,作为对此层处的正向传播操作的输入。例如,如图2所示,正向传播操作202a可以将训练输入数据与层1的w1个权重组合以生成输出数据out1,该输出数据作为输入传播到层2。正向传播操作202b可以将数据out1与层2的w2个权重组合以生成输出数据out2,该输出数据可以接着传播到下一层。在最高层n处,正向传播操作202n从层n-1(图2中未示出)接收数据outn-1,与层n的wn个权重组合,并生成输出数据outn。
损失梯度操作204可以将层n的输出数据outn与参考输出数据refoutn进行比较以生成输入数据梯度din。输入数据梯度din可以测量outn与refoutn之间相对于输出数据outn的每个数据元素的差异率。在一些示例中,训练的目标是最小化outn与refoutn之间的差异,使得输入数据梯度din变得接近于零。
在通过损失梯度操作204生成输入数据梯度din之后,可以对每个神经网络层进行反向传播操作206。例如,可以在最高层n处进行反向传播操作206n,可以在层2处进行反向传播操作206b,可以在层1处进行反向传播操作206a。神经网络层处的反向传播操作可以基于此神经网络层的权重、输入到此神经网络层的数据梯度以及对此层的正向传播操作的输入。例如,对于层n,反向传播操作206n可以接收权重wn、输入数据outn-1(来自神经网络层n-1处的正向传播操作)和输入数据梯度din作为输入。反向传播操作可以对输入进行乘法和加法计算,以生成输出数据梯度(图2中,dn-1、d2、d1等)和权重梯度wgrad(图2中,dwn、dw2、dw1等)。输出数据梯度可以被转发到下一较低神经网络层,作为对此层中的反向传播操作的输入,而权重梯度可以表示将应用到神经网络层处的权重的改变。
层n处的权重可以基于以下方程式、基于权重梯度dwn、通过更新操作208(例如,层n的更新操作208n)来更新:
wn′=wn-α×dwn
在这个方程式中,wn'可以表示经更新权重wn,而α可以包含一组预确定常数。
接着,由层n生成的输出数据梯度dn-1可以传播到下一较低神经网络层n-1,作为对此层处的反向传播操作的输入。层2的反向传播操作202b可以对数据梯度d2、权重w2和输入数据out1进行操作,以生成输出数据梯度d1以及权重梯度dw2。权重梯度dw2可以由更新操作208b使用以更新w2权重。数据梯度d1可以传播到层1。层1的反向传播操作202a可以对数据梯度d2、权重w1和训练输入数据进行操作,以生成权重梯度dw1。权重梯度dw1可以由更新操作208a使用以更新w1权重。
由于训练过程的依序性质,在单个计算系统上进行的训练过程可能非常耗时。具体来说,如上所述,在训练过程中,首先在每个神经网络层处进行正向传播以计算训练输出数据,接着在每个神经网络层处进行反向传播以计算权重梯度,然后在每个神经网络层处更新权重。因为反向传播操作取决于正向传播操作,因此这两组操作不能并行进行。此外,由于神经网络层之间的数据相依性,还需要对每个神经网络层依序进行正向传播操作和反向传播操作。并行性的缺乏可能极大地增加训练时间,在对训练数据的不同部分进行多批次的训练过程时,训练时间会进一步增加,并且这些批次在多次迭代中重复以朝向最小数据梯度会聚。
如上所述,加速训练过程的一种方式是通过使用分布式系统,将训练过程分布在多个计算装置上,这些计算装置中的每一个可以被配置为工作者节点。将训练过程分布在多个工作者节点上可以减少将在每个工作者节点处处理的训练数据的量,这可以减少正向和反向传播操作的完成时间并加速训练过程。例如,因为由每个工作者节点处理的训练数据的量已减少,所以正向传播操作和反向传播操作的持续时间可以较短。
图3展示了根据一些实现的可以进行神经网络的训练过程的示例分布式系统300。如图3所示,分布式系统300可以包含许多工作者节点(例如,计算装置)120-1、120-2……到120-n等。每个工作者节点120可以包含通信接口,以经由计算机网络306相互通信。每个工作者节点120可以包含计算资源以进行训练过程的操作,这些操作包含正向传播操作、反向传播操作、更新权重操作等。计算资源可以包含例如神经网络处理器、神经网络加速器、图形处理单元(GPU)、现场可编程门阵列(FPGA)、处理器或协处理器、专用集成电路(ASIC)和/或支持训练过程中涉及的算术运算的其它合适的计算电路。每个工作者节点120可以经由计算机网络306与其它工作者节点120通信以交换权重梯度而进行交换操作,并且在交换操作完成之后进行更新权重操作。
分布式系统300可以由编排代理304初始化。在一个示例中,编排代理304可以接收要进行的工作列表302。编排代理304可以确定工作者节点120中的哪些可用于从事工作列表302,选择工作者节点120中的许多个以从事工作列表302,并且对将完成的工作列表302将指令提供到所选择的工作者节点120中的每一个。提供到所选择的工作者节点120中的每一个的指令可以包含逻辑环(对于逻辑环拓扑)中的其它所选择的工作者节点的标识和/或下一或上一工作者节点的标识。在完成工作列表302时,所选择的工作者节点120可以向编排代理304发出警报它们可用于从事任何后续工作。
图4A~图4C展示了对梯度在单个工作者节点处同步的第一同步方案、由分布式系统进行的各种示例训练步骤。随着梯度由工作者节点120-1、120-2和120-3中的每一个计算,梯度分布到工作者节点120-4,如图4A所示。接着,梯度同步由工作者节点120-4进行,如图4B所示。在梯度被同步之后,它们从工作者节点120-4分布到工作者节点120-1、120-2和120-3中的每一个,如图4C所示。
图5A~图5C展示了对梯度在每个工作者节点处同步的第二同步方案、由分布式系统进行的各种示例训练步骤。随着梯度由工作者节点120-1、120-2、120-3和120-4中的每一个计算,梯度到处交换,使得每个工作者节点从每个其它工作者节点接收梯度,如图5A所示。接着,梯度同步由工作者节点120-1、120-2、120-3和120-4中的每一个进行,如图5B所示。因为工作者节点120-1、120-2、120-3和120-4中的每一个计算其自身的经同步的梯度,所以不存在分布经同步的梯度,如图5C所示。
图6A和图6B分别展示了对应于图4A~图4C和图5A~图5C所展示的第一同步方案和第二同步方案的示例时序图。在图6A所示的示例中,在第一训练时期期间,训练数据被加载到工作者节点120中的每一个(可选地,工作者节点120-4)上,梯度由工作者节点120中的每一个(可选地,工作者节点120-4)计算,梯度从工作者节点120-1、120-2和120-3传输到将接收到的梯度(可选地,连同由工作者节点120-4计算的梯度)同步的工作者节点120-4(如向下箭头所表示),接着经同步的梯度从工作者节点120-4传输到工作者节点120-1、120-2和120-3(如向上箭头所表示)。与神经网络模型相关联的权重在第二训练时期之前基于经同步的梯度而更新,其中在第二训练时期中,重复了相同过程。
在图6B所示的示例中,在第一训练时期期间,训练数据被加载到工作者节点120中的每一个上,梯度由工作者节点120中的每一个计算,梯度在工作者节点120中的每一个之间传输(例如,交换)(如向下和向上箭头所表示),并且工作者节点120中的每一个将接收到的梯度(连同在特定工作者节点处计算的梯度)同步。与神经网络模型相关联的权重在第二训练时期之前基于经同步的梯度而更新,其中在第二训练时期中,重复了相同过程。
图7A和图7B分别展示了对应于单模型和多模型神经网络训练的第一同步方案的示例时序图。在图7A所示的示例中,在第一训练时期期间,加载到工作者节点120-1上的训练数据用于训练具有层1、2和3的第一神经网络模型。接着,由工作者节点120-1通过对层1、2和3进行正向传播操作、接着对层3、2和1进行反向传播操作来计算梯度。随着每个层的梯度中的每一个被计算并且变得可用,它们从工作者节点120-1传输到工作者节点120-4(如向下箭头所表示)。例如,首先计算层3的梯度并接着将其传输到工作者节点120-4,接着计算层2的梯度并接着将其传输到工作者节点120-4,并且最后计算层1的梯度并接着将其传输到工作者节点120-4。
工作者节点120-4将从工作者节点120-1接收的梯度与其它接收到的梯度同步(在接收到这些梯度时)。例如,首先接收层3的梯度并在层1和2之前开始同步,然后,接收层2的梯度并在层3之后但在层1之前开始同步,最后接收层1的梯度并在层2和3之后开始同步。经同步的梯度从工作者节点120-4传输到工作者节点120-1(如向上箭头所表示)。与第一神经网络模型相关联的权重在第二训练时期之前基于经同步的梯度而更新,其中在第二训练时期中,重复了相同过程。
在图7B所示的示例中,第二神经网络模型与第一神经网络模型同时训练。在各种实现中,两个神经网络模型可以是具有不同体系结构和/或不同层数的不同模型。在图7B所示的示例中,加载到工作者节点120-1上的训练数据用于训练具有层1、2和3的第一神经网络模型和具有层1、2和3的第二神经网络模型。类似于参考图7A所述,由工作者节点120-1通过对层1、2和3进行正向传播操作、接着对层3、2和1进行反向传播操作来计算梯度。随着每个层的梯度中的每一个被计算并且变得可用,它们从工作者节点120-1传输到工作者节点120-4(如向下箭头所表示)。
工作者节点120-4将从工作者节点120-1接收的第一神经网络模型的梯度与其它接收到的梯度同步(在接收到这些梯度时),如参考图7A所述。当工作者节点120-4正将第一神经网络模型的梯度同步时,工作者节点120-1可以加载与第二神经网络模型相关联的权重,并开始计算模型的梯度。例如,当工作者节点120-4正将第一神经网络模型的梯度同步时,工作者节点120-1可以使用用于第一神经网络模型的相同训练数据来对第二神经网络模型的层1、2和3进行正向传播操作。因此,可能不需要将额外训练数据加载到工作者节点120-1上以用于训练第二神经网络模型。然后,当工作者节点120-4仍在将第一神经网络模型的梯度同步时,工作者节点120-1可以对层3进行反向传播操作。
随着第二神经网络模型的层3的梯度从工作者节点120-1传输到工作者节点120-4,工作者节点120-4可以完成第一神经网络模型的梯度的同步,并且可以将经同步的梯度传输到工作者节点120-1。在接收到第二神经网络模型的层3的梯度时,工作者节点120-4可以将这些梯度同步,而工作者节点120-1计算第二神经网络模型的层2的梯度。在接收到第二神经网络的层2的梯度时,工作者节点120-4可以将这些梯度同步,而工作者节点120-1计算第二神经网络模型的层1的梯度。在工作者节点120-1将第二神经网络模型的层中的每一个的梯度传输到工作者节点120-4之后,新的训练数据被加载到工作者节点120-1上,并且上述步骤在第二训练时期期间重复。
图8A和图8B展示了多模型神经网络训练的示例时序图。图8A和图8B示出了可以通过基于神经网络模型的梯度计算时间来对神经网络模型的训练排序而实现的提高的效率。在所展示的示例中,第一模型梯度计算时间TC1小于第二模型梯度计算时间TC2,并且第一模型梯度同步时间TS1等于第二模型梯度同步时间TS2。如所展示的示例所示,通过在第二神经网络模型之前对第一神经网络模型排序,用于进行第一和第二训练时期的持续时间可以减少TS1-TC1。
图9A和图9B展示了第一模型梯度计算时间TC1等于第二模型梯度计算时间TC2并且第一模型梯度同步时间TS1小于第二模型梯度同步时间TS2的场景下的多模型神经网络训练的额外示例时序图。如所展示的示例所示,通过在第一神经网络模型之前对第二神经网络模型排序,用于进行第一和第二训练时期的持续时间可以减少TC1-TS1。
图10A和图10B展示了在第一模型梯度计算时间TC1小于第二模型梯度计算时间TC2并且计算时间TC1与TC2两者都远大于同步时间TS1与TS2两者的场景下的多模型神经网络训练的额外示例时序图。如所展示的实例所示,对神经网络模型排序对用于进行第一和第二训练时期的持续时间没有影响。
图11展示了使用分布式系统同时训练神经网络模型的方法1100。可以在方法1100的进行期间省略方法1100的一个或多个步骤,并且不需要按照所示出的次序进行方法1100的步骤。方法1100的一个或多个步骤可以由一个或多个处理器进行。方法1100可以被实现为计算机可读介质或计算机程序产品,该计算机可读介质或计算机程序产品包括当程序由一个或多个计算机执行时使该一个或多个计算机执行方法1100的步骤的指令。这种计算机程序产品可以通过有线或无线网络、在承载计算机程序产品的数据载波信号中传输。
在步骤1102中,在分布式系统的第一工作者节点处接收第一神经网络模型和第二神经网络模型。此外,在步骤1102中,可以在第一工作者节点处接收与第一神经网络模型相关联的第一组权重以及与第二神经网络模型相关联的第二组权重。在一些示例中,第一神经网络模型与第二神经网络模型相同。在一些示例中,第一神经网络模型具有与第二神经网络模型不同的体系结构。例如,第一神经网络模型具有与第二神经网络模型不同的层数。
在步骤1104中,在第一工作者节点处接收第一训练数据。第一训练数据可以包含训练输入数据和对应参考输出数据。第一训练数据可以用于训练第一和第二神经网络模型。此外,在步骤1104中,可以可选地在第一工作者节点处接收第二训练数据。第二训练数据可以用于训练第二神经网络模型。
在步骤1106中,确定将训练第一和第二神经网络模型的次序。在一些实现中,如果确定与第一神经网络模型相关联的梯度计算时间小于与第二神经网络模型相关联的梯度计算时间,那么可以确定在第二神经网络模型之前对第一神经网络模型排序,如参考图8A和图8B所述。在一些实现中,如果确定与第一神经网络模型相关联的梯度同步时间小于与第二神经网络模型相关联的梯度同步时间,那么可以确定在第二神经网络模型之后对第一神经网络模型排序,如参考图9A和图9B所述。
在步骤1108中,在第一工作者节点处计算第一组梯度。可以使用第一神经网络模型、第一组权重和第一训练数据来计算第一组梯度。第一组梯度可以包含第一神经网络模型的第一层的梯度、第一神经网络模型的第二层的梯度和第一神经网络模型的第三层的梯度。首先可以计算第三层的梯度,然后可以计算第二层的梯度,最后可以计算第三层的梯度。
随着计算第一组梯度中的每一个,第一组梯度可以通过网络从第一工作者节点传输到第二工作者节点。例如,首先可以传输第一神经网络模型的第三层的梯度,然后可以传输第一神经网络模型的第二层的梯度,最后可以传输第一神经网络模型的第一层的梯度。
在步骤1110中,基于接收到的第一组梯度和其它接收到的梯度,在第二工作者节点处计算第一组经同步的梯度。可以随着接收第一组梯度中的每一个,而计算第一组经同步的梯度。例如,首先可以计算第一神经网络模型的第三层的经同步的梯度,然后可以计算第一神经网络模型的第二层的经同步的梯度,最后可以计算第一神经网络模型的第一层的经同步的梯度。
在一些实现中,步骤1110可以与步骤1108同时进行,以使得步骤1110的至少一个操作与步骤1108的至少一个操作同时进行。例如,可以与第一神经网络模型的第二层的梯度同时计算第一神经网络模型的第三层的经同步的梯度。
在步骤1112中,在第一工作者节点处计算第二组梯度。可以使用第二神经网络模型、第二组权重和第一训练数据(或者可选地,第二训练数据)来计算第二组梯度。第二组梯度可以包含第二神经网络模型的第一层的梯度、第二神经网络模型的第二层的梯度和第二神经网络模型的第三层的梯度。首先可以计算第三层的梯度,然后可以计算第二层的梯度,最后可以计算第三层的梯度。
随着计算第二组梯度中的每一个,第二组梯度可以通过网络从第一工作者节点传输到第二工作者节点。例如,首先可以传输第二神经网络模型的第三层的梯度,然后可以传输第二神经网络模型的第二层的梯度,最后可以传输第二神经网络模型的第一层的梯度。
在一些实现中,步骤1112可以与步骤1110同时进行,以使得步骤1112的至少一个操作与步骤1110的至少一个操作同时进行。例如,可以与第一神经网络模型的第一层的经同步的梯度同时计算第二神经网络模型的第三层的梯度。
在步骤1114中,基于接收到的第二组梯度和其它接收到的梯度,在第二工作者节点处计算第二组经同步的梯度。可以随着接收第二组梯度中的每一个,而计算第二组经同步的梯度。例如,首先可以计算第二神经网络模型的第三层的经同步的梯度,然后可以计算第二神经网络模型的第二层的经同步的梯度,最后可以计算第二神经网络模型的第一层的经同步的梯度。
在一些实现中,步骤1114可以与步骤1112同时进行,以使得步骤1114的至少一个操作与步骤1112的至少一个操作同时进行。例如,可以与第二神经网络模型的第二层的梯度同时计算第二神经网络模型的第三层的经同步的梯度。
在步骤1116中,可以基于第一组经同步的梯度而调整第一组权重。此外,在步骤1116中,可以基于第二组经同步的梯度而调整第二组权重。步骤1116可以与步骤1110同时或在此之后和/或与步骤1114同时或在此之后进行。
图12展示了加速器1202的示例,该加速器可以是处理器(诸如,神经网络处理器)的集成电路部件。处理器可以具有其它集成电路部件,包含额外加速器引擎。在各种示例中,对于一组输入数据(例如,输入数据1250),加速器1202可以使用处理引擎阵列1210、激活引擎1216和/或池化引擎1218执行计算。
在各种实现中,存储器子系统1204可以包含多个存储体(memory bank)1214。在这些实现中,每个存储体1214可以是可独立访问的,这意味着一个存储体的读取不取决于另一存储体的读取。类似地,对一个存储体的写入不会影响或限制对不同存储体的写入。在一些情况下,可以对每个存储体同时读取和写入。各种技术可以用于具有可独立访问的存储体1214。例如,每个存储体可以是物理上单独的存储器部件,其所具有的地址空间相对于每个其它存储体的地址空间单独且独立。在此示例中,每个存储体可以具有至少一个读取信道,并且可以具有可以同时使用的至少一个单独的写入信道。在这些示例中,存储器子系统1204可以允许同时访问多个存储体的读取或写入信道。作为另一示例,存储器子系统1204可以包含仲裁逻辑,使得例如多个存储体1214的输出之间的仲裁可以导致使用一个以上存储体的输出。在这些和其它示例中,虽然由存储器子系统1204全局地管理,但是每个存储体可以独立于任何其它存储体而操作。
使存储体1214可独立访问可以提高加速器1202的效率。例如,可以同时读取值并将其提供到处理引擎阵列1210的每一行,使得整个处理引擎阵列1210可以在一个时钟周期中使用。作为另一示例,可以在将由处理引擎阵列1210计算的结果写入到存储器子系统1204的同时读取存储体1214。相反,单个存储器可以一次只能够服务一个读取或写入。对于单个存储器,在可以启动处理引擎阵列1210之前,可以例如需要多个时钟周期来读取处理引擎阵列1210的每一行的输入数据。
在各种实现中,存储器子系统1204可以被配置成同时服务多个客户端,包含处理引擎阵列1210、激活引擎1216、池化引擎1218以及通过通信结构1220访问存储器子系统1204的任何外部客户端。在一些实现中,能够服务多个客户端意味着存储器子系统1204具有至少与客户端一样多的存储体。在一些情况下,处理引擎阵列1210的每一行可以算作单独的客户端。在一些情况下,处理引擎阵列1210的每一列可以输出结果,使得每一列可以算作单独的写入客户端。在一些情况下,来自处理引擎阵列1210的输出可以被写入到存储体1214中,该存储体随后可以为处理引擎阵列1210提供输入数据。作为另一示例,激活引擎1216和池化引擎1218可以包含多个执行信道,这些执行信道中的每一个可以是单独的存储器客户端。可以例如使用静态随机存取存储器(SRAM)来实现存储体1214。
在各种实现中,存储器子系统1204可以包含控制逻辑。控制逻辑可以例如跟踪存储体1214中的每一个的地址空间,辨别要被读取或写入的存储体1214和/或在存储体1214之间移动数据。在一些实现中,存储体1214可以硬连线到特定客户端。例如,一组存储体1214可以硬连线以将值提供到处理引擎阵列1210的行,其中一个存储体服务每行。作为另一示例,一组存储体可以硬连线以从处理引擎阵列1210的列接收值,其中一个存储体接收每列的数据。
处理引擎阵列1210是示例加速器1202的计算矩阵。处理引擎阵列1210可以例如执行并行积分、卷积、相关和/或矩阵乘法以及其它。处理引擎阵列1210包含按行和列布置的多个处理引擎1211,使得由一个处理引擎1211输出的结果可以直接输入到另一处理引擎1211。因此,不在处理引擎阵列1210的外边缘上的处理引擎1211可以从其它处理引擎1211而不是从存储器子系统1204接收要操作的数据。
在各种示例中,处理引擎阵列1210使用脉动执行(systolic execution),其中数据以固定间隔从不同方向到达每个处理引擎1211。在一些示例中,输入数据可以从左侧流动到处理引擎阵列1210中,并且权重值可以在顶部加载。在一些示例中,权重和输入数据可以从左侧流动,并且部分总和可以从上到下流动。在这些和其它示例中,乘法和累加操作作为对角波前(diagonal wave front)移动穿过处理引擎阵列1210,其中数据跨越阵列向右和向下移动。控制信号可以与权重同时在左侧输入,并且可以随着计算而横向和向下(across and down)流动。
在各种实现中,处理引擎阵列1210中的列数决定处理引擎阵列1210的计算能力,并且行数决定实现处理引擎阵列1210的最大利用率所需的存储器带宽。处理引擎阵列1210可以具有例如64列和428行,或者某一其它数量的列和行。
处理引擎1211的示例以插图展示在图12中。如此示例所展示,处理引擎1211可以包含乘法器-累加器电路。来自左侧的输入可以包含例如输入数据i和权重值w,其中输入数据是取自一组输入数据或一组中间结果的值,并且权重值来自将神经网络的一层连接到下一层的一组权重值。一组输入数据可以是例如为了辨别或对象识别而提交的图像、为了语音识别而提供的音频片段、用于自然语言处理或机器翻译的文本字符串或者需要分析以确定下一步的游戏的当前状态以及其它。在一些示例中,输入数据和权重值向右输出,以输入到下一处理引擎1211。
在所展示的示例中,来自上方的输入可以包含部分总和p_in,该部分总和是从另一处理引擎1211提供或从处理引擎阵列1210的前一轮计算提供。当开始一组新输入数据的计算时,处理引擎阵列1210的顶行可以接收p_in的固定值,诸如零。如此示例所展示,将i和w一起相乘,并将结果与p_in相加以产生新部分总和p_out,该新部分总和可以输入到另一处理引擎1211中。处理引擎1211的各种其它实现是可能的。
来自处理引擎阵列1210中的最后一行的输出可以临时存储在结果缓冲器1212中。结果可以是中间结果,这些中间结果可以被写入到存储体1214以提供给处理引擎阵列1210进行额外计算。或者,结果可以是最终结果,这些最终结果一旦被写入到存储体1214,就可以通过通信结构1220从存储器子系统1204读取,以由系统输出。
在一些实现中,加速器1202包含激活引擎1216。在这些实现中,激活引擎1216可以将来自处理引擎阵列1210的结果组合成一个或多个输出激活。例如,对于卷积神经网络,来自多个信道的卷积可以相加以产生单个信道的输出激活。在其它示例中,可能需要累加来自处理引擎阵列1210中的一列或多列的结果以产生神经网络中的单个节点的输出激活。在一些示例中,可以绕过激活引擎1216。
在各种示例中,激活引擎1216可以包含多个单独的执行信道。在这些示例中,执行信道可以对应于处理引擎阵列1210的列,并且可以对列的输出进行操作,其结果可以存储在存储器子系统1204中。在这些示例中,激活引擎1216能够进行1~n个并行计算,其中n等于处理引擎阵列1210中的列数。在一些情况下,可以同时进行这些计算中的一个或多个。每个执行信道可以进行的计算的示例包含指数、平方、平方根、恒等式、二进制梯级(bipolarstep)、双极梯级(bipolar step)、反曲(sigmoidal)和斜坡(ramp)以及其它。
在一些实现中,加速器1202可以包含池化引擎1218。池化是处理引擎阵列1210的列的输出的组合。组合可以包含例如计算最大值、最小值、平均值、中值、加法、乘法或另一逻辑或数学组合。在各种示例中,池化引擎1218可以包含多个执行信道,这些执行信道可以对来自处理引擎阵列1210的对应列的值进行操作。在这些示例中,池化引擎1218可能够进行1~n个并行计算,其中n等于处理引擎阵列1210中的列数。在各种示例中,池化引擎1218的执行信道可以并行和/或同时操作。在一些示例中,可以绕过池化引擎1218。
本文中,激活引擎1216和池化引擎1218可以被统称为执行引擎。处理引擎阵列1210是执行引擎的另一示例。执行引擎的另一示例是可以位于加速器1202外的直接存储器存取(DMA)引擎。
输入数据1250可以通过通信结构1220到达。通信结构1220可以将加速器1202连接到处理器的其它部件,诸如,可以从输入/输出(I/O)装置、存储驱动器或网络接口获得输入数据1250的DMA引擎。输入数据1250可以是例如一维数据(诸如,字符串或数字序列)或者二维数据(诸如,图像的像素值或随时间变化的音频信号的频率和幅度值的阵列)。在一些示例中,输入数据1250可以是三维的,这可以是例如自动驾驶汽车所使用的情境信息或虚拟现实数据的情况。在一些实现中,存储器子系统1204可以包含用于输入数据1250的单独的缓冲器。在一些实现中,当加速器1202接收到输入数据1250时,输入数据1250可以存储在存储体1214中。
在一些示例中,加速器1202可以实现神经网络处理引擎。在这些示例中,对于一组输入数据1250,加速器1202可以执行神经网络以进行神经网络受到训练的任务。对一组输入数据执行神经网络可以被称为推理或进行推理。
神经网络的权重可以与神经网络将操作的输入数据1250一起存储在存储器子系统1204中。神经网络还可以包含可以将处理引擎阵列1210编程以对权重和输入数据进行各种计算的指令。指令还可以存储在存储器子系统1204、存储体1214或单独的指令缓冲器中。处理引擎阵列1210可以输出表示神经网络的各个层的输出的中间结果。在一些情况下,激活引擎1216和/或池化引擎1218可以被启用以用于神经网络的某些层所要求的计算。加速器1202可以将中间结果存储在存储器子系统1204中,以输入到处理引擎阵列1210中,来计算神经网络的下一层的结果。处理引擎阵列1210可以进一步输出来自神经网络的最后一层的最终结果。最终结果可以存储在存储器子系统1204中,然后被复制到主机处理器存储器或另一位置。
图13展示了加速引擎1300的示例。加速引擎1300是可以包含一个或多个加速器1302a~1302n的集成电路的示例,这些加速器可以类似于图12所展示的加速器。
在图13的示例中,加速引擎1300包含多个加速器1302a~1302n,这些加速器中的每一个可以进行一组操作。在各种示例中,加速器1302a~1302n用于特定类型的操作,使得加速器1302a~1302n可以相比由通用处理器进行类似操作快得多地进行操作。在各种示例中,为了进行一组操作,必须首先将要进行操作的输入数据移动到加速器1302a~1302n中。此外,在一些情况下,程序代码也被移动到加速器1302a~1302n中,该程序代码对加速器1302a~1302n要对数据进行的操作进行编程。在所展示的示例中,加速引擎1300包含n个加速器1302a~1302n。可以包含在加速引擎1300中的加速器的示例包含图形加速器、浮点加速器、神经网络加速器等。在各种示例中,加速器1302a~1302n可以各自是相同的(例如,每个加速器都是图形加速器)或可以是不同的(例如,加速器1302a~1302n包含图形加速器、浮点加速器和神经网络加速器)。
示例加速引擎1300进一步包含用于与外部存储器通信的DRAM控制器1342a到1342k。在此示例中,使用DRAM 1330来实现外部存储器。在所展示的示例中,加速引擎1300包含k个DRAM控制器1342a~1342k,这些控制器中的每一个可能够与一组独立的DRAM组通信。在其它示例中,其它类型的RAM技术可以用于外部存储器。DRAM控制器1342a~1342k也可以被称为存储器控制器。
在各种示例中,加速器1302a~1302n的输入数据和/或程序代码可以存储在DRAM1330中。不同程序可以使加速器1302a~1302n进行不同操作。例如,当加速器中的一个是神经网络加速器时,一个程序可以配置神经网络加速器以进行语音识别,而另一程序可以配置神经网络加速器以进行图像识别。在各种示例中,可以用不同程序来对不同加速器1302a~1302n进行编程,使得每个加速器进行一组不同操作。在各种示例中,处理器1348a~1348s可以管理程序代码从DRAM 1330到加速器1302a~1302n的移动。
示例加速引擎1300进一步包含用于与系统中的I/O装置1332通信的I/O控制器1344a~1344p。加速引擎1300可以通过例如处理器总线与I/O装置通信。在一些示例中,可以使用外围部件互连(PCI)和/或PCI总线协议的变体来实现处理器总线。处理器总线可以将加速引擎1300连接到I/O装置,诸如,输入和输出装置、存储器控制器、存储装置和/或网络接口卡以及其它。在一些示例中,I/O控制器1344~1344p可以使加速引擎1300能够充当主机处理器的I/O装置。例如,加速引擎1300可以是来自主机处理器的输入数据和指示要对输入数据进行的操作(例如,特定计算或分析)的命令的接收者。在所展示的示例中,加速引擎1300包含p个I/O控制器1344a~1344p,这些控制器中的每一个可以包含单独的根复合体(root complex),并且可以与一组单独的I/O装置1332通信。在其它示例中,其它标准化总线协议(诸如,超路径互连(UPI))可以用于主机总线。在其它示例中,可以使用专用总线协议。
加速引擎1300中的数据的移动可以由一个或多个处理器1348a~1348s管理,这些处理器也可以被称为数据管理处理器。在图13的示例中,加速引擎1300包含并入到装置中(例如,在同一硅管芯上)的s个处理器1348a~1348s。在其它示例中,处理器1348a~1348s可以在加速引擎1300外部(例如,在不同管芯上和/或不同封装中)。在一些示例中,处理器1348a~1348s可以管理数据从I/O装置1332到加速器1302a~1302n或DRAM 1330的移动。例如,输入数据可以位于I/O装置1332或处理器存储器中,并且处理器1348a~1348s可以将输入从I/O装置1332或处理器存储器移动到加速器或DRAM1330中。作为另一示例,加速器1302a~1302n的程序代码可以位于I/O装置1332上或处理器存储器中。
示例加速引擎1300进一步包含DMA引擎1346a~1346d,这些DMA引擎可以在加速器1302a~1302n、DRAM控制器1342a~1342k和I/O控制器1344a~1344p之间移动数据。在所展示的示例中,加速引擎1300包含d个DMA引擎1346a~1346d。在一些实现中,DMA引擎1346a~1346d可以被分派给具体任务,诸如,将数据从DRAM控制器1342a~1342d移动到加速器1302a~1302n,或者在I/O控制器1344a~1344p与加速器1302a~1302n之间移动数据。例如,可以通过将描述符与DMA引擎1346a~1346d排队来分配这些任务,其中描述符标识数据块的地址和要进行的操作(例如,读取或写入)。例如,描述符可以指导DMA引擎指示DMA控制器从DRAM 1330读取数据块。作为又一示例,描述符可以指示DMA引擎将由DMA控制器读取的数据写入到加速器。其它描述符可以用于将数据从加速器移动到DRAM 1330。
在各种示例中,处理器1348a~1348s中的每一个可以负责管理不同加速器的数据移动。在一些示例中,处理器可以管理一个以上加速器的数据移动。类似地,在各种示例中,处理器1348a~1348s中的每一个可以被分派给一个或多个DMA引擎1346a~1346d。在这些和其它示例中,处理器1348a~1348s、加速器1302a~1302n与DMA引擎1346a~1346d之间的关联通过每个相应处理器正执行的程序代码来确定。
在示例加速引擎1300中,各种部件可以通过芯片互连1320来通信。芯片互连1320主要包含用于在加速引擎1300的部件之间传递数据的布线。在一些情况下,芯片互连1320可以包含最小量的逻辑,诸如用于控制数据方向的多路复用器、用于处置时钟域交叉的触发器(flip-flop)和时序逻辑。
图14展示了可以使用加速引擎1460的主机系统1400的示例。图14的加速引擎1460是可以包含一个或多个加速器(诸如图13所展示)的装置的示例。图14的示例主机系统1400包含加速引擎1460、主机处理器1472、DRAM 1430或处理器存储器、I/O装置1432和支持系统1474。在各种实现中,主机系统1400可以包含此处未展示的其它硬件。
主机处理器1472是能够执行程序指令的通用集成电路。在一些示例中,主机处理器1472可以包含多个处理核心。多核处理器可以包含同一处理器内的多个处理单元。在一些示例中,主机系统1400可以包含一个以上主机处理器1472。在一些示例中,主机处理器1472和加速引擎1460可以是一个芯片,诸如,同一封装内的一个或多个集成电路。
在各种示例中,主机处理器1472可以通过一个或多个通信信道与主机系统1400中的其它部件通信。例如,主机系统1400可以包含主机处理器总线,主机处理器1472可以使用该主机处理器总线例如与DRAM 1430通信。作为另一示例,主机系统1400可以包含I/O总线(诸如,基于PCI的总线),主机处理器1472可以通过该I/O总线例如与加速引擎1460和/或I/O装置1432通信。在各种示例中,主机系统1400可以替代地或附加地包含其它通信信道或总线,诸如,串行总线、电源管理总线、存储装置总线等。
在一些示例中,在主机处理器1472上执行的软件程序可以接收或生成输入以供加速引擎1460处理。在一些示例中,程序可以选择要为给定输入执行合适的神经网络。例如,程序可以用于语言翻译,并且可以选择能够进行语音识别和/或机器翻译的一个或多个神经网络。在这些和其它示例中,程序可以用要执行的神经网络配置加速引擎1460,和/或可以在加速引擎1460上选择先前被配置成执行期望神经网络的神经网络处理引擎。在一些示例中,一旦加速引擎1460已开始对输入数据进行推理,主机处理器1472便可以管理数据(诸如,权重、指令、中间结果、条件层的结果和/或最终结果)进出加速引擎1460的移动。
在一些示例中,使用加速引擎1460以进行推理的软件程序可以从加速引擎1460的条件层和/或从存储位置(诸如在DRAM 1430中)读取结果。在这些示例中,程序可以确定神经网络接着应采取什么行动。例如,程序可以确定终止推理。作为另一示例,程序可以确定改变推理的方向,推理可以由较低级代码和/或神经网络处理器转换到下一层来执行。在这些和其它示例中,神经网络的执行流程可以通过软件来协调。
DRAM 1430是由主机处理器1472使用以存储主机处理器1472正在执行的程序代码以及正在操作的值的存储器。在一些示例中,神经网络的数据(例如,权重值、指令和其它数据)可以全部或部分存储在DRAM 1430中。DRAM是处理器存储器的常用术语,并且虽然DRAM是易失性存储器,但处理器存储器可以是易失性和/或非易失性的。虽然此处未展示,但是主机系统1400可以出于其它目的包含其它易失性和非易失性存储器。例如,主机系统1400可以包含存储用于在通电时启动主机系统1400的启动代码和/或基本输入/输出系统(BIOS)代码的只读存储器(ROM)。
虽然此处未展示,但是DRAM 1430可以存储各种程序的指令,这些程序可以被加载到主机处理器1472中并由该主机处理器执行。例如,DRAM 1430可以存储用于操作系统的指令、一个或多个数据存储、一个或多个应用程序、一个或多个驱动程序和/或用于实现本文所公开的特征的服务。
操作系统可以管理和编排主机系统1400的整体操作,诸如,调度任务、执行应用程序和/或控制器外围装置以及其它操作。在一些示例中,主机系统1400可以托管一个或多个虚拟机。在这些示例中,每个虚拟机可以被配置成执行其自身的操作系统。操作系统的示例包含Unix、Linux、Windows、Mac OS、iOS、Android等。替代地或附加地,操作系统可以是专有操作系统。
数据存储可以包含由操作系统、应用程序或驱动程序使用和/或操作的永久或暂时的数据。这种数据的示例包含网页、视频数据、音频数据、图像、用户数据等。在一些示例中,数据存储中的信息可以通过网络提供到用户装置。在一些情况下,附加地或替代地,数据存储可以包含所存储的应用程序和/或驱动程序。替代地或附加地,数据存储可以存储标准和/或专有软件库和/或标准和/或专有应用程序用户界面(API)库。存储在数据存储中的信息可以是机器可读的目标代码、源代码、解释代码或中间代码。
驱动程序可以包含在主机系统1400中的部件之间提供通信的程序。例如,一些驱动程序可以在操作系统与外围装置或I/O装置1432之间提供通信。替代地或附加地,一些驱动程序可以在应用程序与操作系统之间和/或应用程序与主机系统1400可访问的外围装置之间提供通信。在许多情况下,驱动程序可以包含提供良好理解的功能性的驱动程序(例如,打印机驱动程序、显示器驱动程序、硬盘驱动程序、固态装置驱动程序等)。在其它情况下,驱动程序可以提供专有或专用功能性。
I/O装置1432可以包含用于连接到用户输入和输出装置的硬件,诸如,键盘、鼠标、笔、平板计算机、语音输入装置、触摸输入装置、显示器或监视器、扬声器和打印机以及其它装置。I/O装置1432还可以包含存储驱动器和/或用于连接到网络1480的网络接口。例如,在各种示例中,主机系统1400可以使用网络接口以与存储装置、用户终端、其它计算装置或服务器和/或其它网络通信。
在各种示例中,I/O装置1432中的一个或多个可以是存储装置。在这些示例中,存储装置包含非易失性存储器并且可以存储程序指令和/或数据。存储装置的示例包含磁性存储机构、光盘、固态磁盘、闪速存储器和/或磁带存储机构以及其它。存储装置可以与主机系统1400容纳在同一机箱中,或者可以位于外部机柜中。存储装置可以是固定的(例如,通过螺钉来附接)或可移动的(例如,具有物理释放机构并且可能具有热插拔机构)。
存储装置、DRAM 1430和主机系统1400中的任何其它存储器部件是计算机可读存储介质的示例。计算机可读存储介质是能够以可以由诸如主机处理器1472等装置读取的格式存储数据的物理介质。计算机可读存储介质可以是非暂时性的。非暂时性计算机可读介质可以在电力没有施加到介质时保留存储在其上的数据。非暂时性计算机可读介质的示例包含ROM装置、磁盘、磁带、光盘、闪速装置和固态驱动器以及其它。如本文所使用,计算机可读存储介质不包含计算机可读通信介质。
在各种示例中,存储在计算机可读存储介质上的数据可以包含程序指令、数据结构、程序模块、库、其它软件程序部件和/或可以在数据信号(诸如,载波或其它传输)内传输的其它数据。附加地或替代地,计算机可读存储介质可以包含可以通过使用软件程序来操作或操纵的文档、图像、视频、音频和其它数据。
在各种示例中,I/O装置1432中的一个或多个可以是基于PCI的装置。在这些示例中,基于PCI的I/O装置包含用于与主机系统1400通信的PCI接口。术语“PCI”或“基于PCI”可以用于描述总线协议的PCI系列中的任何协议,包含原始PCI标准、PCI-X、加速图形端口(AGP)和PCI快速(PCIe)或基于本文所论述的PCI协议的任何其它改进或衍生协议。基于PCI的协议是用于将装置(诸如,本地外围装置)连接到主机装置的标准总线协议。标准总线协议是一种数据传输协议,各制造商已对该协议定义和采用了规范。制造商确保合规装置与实现总线协议的计算系统兼容,反之亦然。如本文所使用,基于PCI的装置还包含使用非易失性存储器快速(NVMe)来通信的装置。NVMe是一种装置接口规范,用于访问使用PCIe附接到计算系统的非易失性存储介质。
基于PCI的装置可以包含一个或多个功能。“功能”描述可以由基于PCI的装置提供的操作的硬件和/或软件。功能的示例包含大容量存储控制器、网络控制器、显示器控制器、存储器控制器、串行总线控制器、无线控制器以及加密和解密控制器以及其它。在一些情况下,基于PCI的装置可以包含一个以上功能。例如,基于PCI的装置可以提供大容量存储控制器和网络适配器。作为另一示例,基于PCI的装置可以提供两个存储控制器,以控制两个不同存储资源。在一些实现中,基于PCI的装置可能具有多达八个功能。
在一些示例中,基于PCI的装置可以包含单根I/O虚拟化(SR-IOV)。SR-IOV是一种扩展能力,可以包含在基于PCI的装置中。SR-IOV允许物理资源(例如,单个网络接口控制器)作为多个虚拟资源(例如,六十四个网络接口控制器)显现。因此,提供某功能性的基于PCI的装置(例如,网络接口控制器)可能显现为利用基于PCI的装置而成为提供同一功能性的多个装置的装置。具有SR-IOV能力的存储适配器装置的功能可以分类为物理功能(PF)或虚拟功能(VF)。物理功能是可以被发现、管理和操作的装置的全特征功能。物理功能具有可以用于配置或控制存储适配器装置的配置资源。物理功能包含与非虚拟化装置所具有的相同的配置地址空间和存储器地址空间。物理功能可以具有与其相关联的许多虚拟功能。虚拟功能类似于物理功能,但属于通常可能缺少配置资源的轻型功能,并且通常由其底层物理功能的配置控制。物理功能和/或虚拟功能中的每一个可以被分派给在主机装置上运行的相应执行线程(诸如,虚拟机)。
在各种实现中,支持系统1474可以包含用于协调加速引擎1460的操作的硬件。例如,支持系统1474可以包含微处理器,该微处理器协调加速引擎1460的活动,包含在加速引擎1460上四处移动数据。在此示例中,微处理器可以是可以执行微代码的集成电路。微代码是可以使集成电路能够在集成电路可以执行的操作中具有某种灵活性的程序代码,但是因为程序代码使用有限指令集,所以微处理器可能相比主机处理器1472具有较有限的能力。在一些示例中,由微处理器执行的程序存储在微处理器的硬件上,或者存储在主机系统1400中的非易失性存储器芯片上。在一些示例中,微处理器和加速引擎1460可以是片上的,诸如,在同一芯片上并且在同一封装中的一个集成电路。
在一些示例中,当在主机处理器1472上执行的程序请求执行神经网络时,支持系统1474可以负责从主机处理器1472获取指令。例如,主机处理器1472可以向支持系统1474提供一组输入数据以及将对该组输入数据进行的任务。在此示例中,支持系统1474可以辨别可以进行任务的神经网络,并且可以将加速引擎1460编程以对该组输入数据执行神经网络。在一些示例中,支持系统1474仅需要选择神经网络处理器的适当神经网络处理引擎。在一些示例中,在加速引擎1460可以开始执行神经网络之前,支持系统1474可能需要将用于神经网络的数据加载到加速引擎1460上。在这些和其它示例中,支持系统1474可以进一步接收执行神经网络的输出,并将输出提供回主机处理器1472。
在一些示例中,支持系统1474的操作可以由主机处理器1472处置。在这些示例中,可能不需要支持系统1474,并且可以将其从主机系统1400省略。
在各种示例中,主机系统1400可以包含主机系统、处理器节点、存储子系统和表示用户装置、服务提供商计算机或第三方计算机的I/O机箱的组合。
用户装置可以包含计算装置,以访问应用程序(例如,web浏览器或移动装置应用程序)。在一些示例中,应用程序可以由计算资源服务或服务提供商托管、管理和/或提供。应用程序可以使用户能够与服务提供商计算机互动以例如访问web内容(例如,网页、音乐、视频等)。用户装置可以是计算装置,诸如,移动电话、智能电话、个人数字助理(PDA)、膝上型计算机、上网本计算机、台式计算机、瘦客户端装置、平板计算机、电子书(e-book)阅读器、游戏控制台等。在一些示例中,用户装置可以通过一个或多个网络与服务提供商计算机通信。另外,用户装置可以是由服务提供商计算机(例如,与服务提供商计算机集成的控制台装置)管理、控制或以其它方式成为其一部分的分布式系统的一部分。
主机系统1400还可以表示一个或多个服务提供商计算机。服务提供商计算机可以提供被配置成在用户装置上运行的本机应用程序,其中用户可以与之互动。在一些示例中,服务提供商计算机可以提供计算资源,诸如(但不限于)客户端实体、低延迟数据存储、持久数据存储、数据访问、管理、虚拟化、基于云的软件解决方案、电子内容性能管理等。服务提供商计算机还可操作以提供web托管、数据库、计算机应用程序开发和/或实现平台、前述各者的组合等。在一些示例中,服务提供商计算机可以作为在托管计算环境中实现的一个或多个虚拟机来提供。托管计算环境可以包含一个或多个快速供应和释放的计算资源。这些计算资源可以包含计算、联网和/或存储装置。托管计算环境也可以被称为云计算环境。服务提供商计算机可以包含一个或多个服务器(可能布置为群集、作为服务器场来布置或作为相互不关联的个别服务器来布置),并且可以托管应用程序和/或基于云的软件服务。这些服务器可以被配置为集成的、分布式计算环境的一部分。在一些示例中,附加地或替代地,服务提供商计算机可以包含计算装置,诸如,移动电话、智能电话、个人数字助理(PDA)、膝上型计算机、台式计算机、上网本计算机、服务器计算机、瘦客户端装置、平板计算机、游戏控制台等。在一些情形下,服务提供商计算机可以与一个或多个第三方计算机通信。
图15展示了示例网络1500,该示例网络可以包含一个或多个主机系统(诸如,图14所展示的主机系统)。例如,图15的示例网络1500包含多个节点1502a~1502h,其中的一个或多个可以是主机系统(诸如图14所展示)。节点1502a~1502h中的其它节点可以是其它计算装置,这些计算装置中的每一个至少包含用于存储程序指令的存储器、用于执行指令的处理器和用于连接到网络1500的网络接口。
在各种示例中,网络1500可以用于处理数据。例如,可以在节点1502a~1502h中的一个处或从网络1500可以与之通信的其它网络1508接收输入数据。在此示例中,可以将输入数据引导到包含加速引擎的网络1500中的节点,以供加速引擎操作并产生结果。接着,可以将结果传送到从其接收输入数据的节点或其它网络。在各种示例中,可以从各种源(包含节点1502a~1502h和/或位于其它网络1508中的计算装置中的一个或多个)累加输入数据,并且可以将累积的输入数据引导到网络1500中的一个或多个主机系统。接着,可以将来自主机系统的结果分布回从其收集输入数据的源。
在各种示例中,节点1502a~1502h中的一个或多个可以负责操作,诸如,累加输入数据以供主机系统操作、跟踪哪些主机系统繁忙以及哪些可以接受较多工作、确定主机系统是否正确和/或最有效地操作、监视网络安全和/或其它管理操作。
在图15的示例中,节点1502a~1502h使用具有点到点链路的交换体系结构相互连接。交换体系结构包含多个交换机1504a~1504d,这些交换机可以布置在多层网络(诸如,Clos网络)中。在局域网(LAN)分段之间筛选和转发分组的网络装置可以称为交换机。交换机通常在开放系统互连(OSI)参考模型的数据链路层(层2)并且有时在网络层(层3)处操作,并且可以支持若干分组协议。图15的交换机1504a~1504d可以连接到节点1502a~1502h,并且在任意两个节点之间提供多条路径。
网络1500还可以包含用于与其它网络1508连接的一个或多个网络装置,诸如,路由器1506。路由器使用报头和转发表以确定用于转发分组的最佳路径,并使用诸如因特网控制消息协议(ICMP)等协议来相互通信并配置任意两个装置之间的最佳路线。图15的路由器1506可以用于连接到其它网络1508,诸如,子网、LAN、广域网(WAN)和/或因特网。
在一些示例中,网络1500可以包含许多不同类型的网络中的任一个或组合,诸如,有线电视网络、因特网、无线网络、蜂窝网络和其它专用和/或公共网络。互连的交换机1504a~1504d和路由器1506(如果存在)可以被称为交换结构1510、结构、网络结构或被简称为网络。在计算机网络的上下文中,术语“结构”和“网络”可以在本文中互换使用。
节点1502a~1502h可以是主机系统、处理器节点、存储子系统和表示用户装置、服务提供商计算机或第三方计算机的I/O机箱的任何组合。
用户装置可以包含计算装置,以访问应用程序1532(例如,web浏览器或移动装置应用程序)。在一些方面中,应用程序1532可以由计算资源服务或服务提供商托管、管理和/或提供。应用程序1532可以允许用户与服务提供商计算机互动以例如访问web内容(例如,网页、音乐、视频等)。用户装置可以是计算装置,诸如,移动电话、智能电话、个人数字助理(PDA)、膝上型计算机、上网本计算机、台式计算机、瘦客户端装置、平板计算机、电子书(e-book)阅读器、游戏控制台等。在一些示例中,用户装置可以经由其它网络1508与服务提供商计算机通信。另外,用户装置可以是由服务提供商计算机(例如,与服务提供商计算机集成的控制台装置)管理、控制或以其它方式成为其一部分的分布式系统的一部分。
图15的节点还可以表示一个或多个服务提供商计算机。一个或多个服务提供商计算机可以提供被配置成在用户装置上运行的本机应用程序,其中用户可以与之互动。在一些示例中,服务提供商计算机可以提供计算资源,诸如(但不限于)客户端实体、低延迟数据存储、持久数据存储、数据访问、管理、虚拟化、基于云的软件解决方案、电子内容性能管理等。服务提供商计算机还可操作以将web托管、数据库、计算机应用程序开发和/或实现平台、前述各者的组合等提供给用户。在一些示例中,服务提供商计算机可以作为在托管计算环境中实现的一个或多个虚拟机来提供。托管计算环境可以包含一个或多个快速供应和释放的计算资源。这些计算资源可以包含计算、联网和/或存储装置。托管计算环境也可以被称为云计算环境。服务提供商计算机可以包含一个或多个服务器(可能布置为群集、作为服务器场来布置或作为相互不关联的个别服务器来布置),并且可以托管应用程序1532和/或基于云的软件服务。这些服务器可以被配置为集成的、分布式计算环境的一部分。在一些方面中,附加地或替代地,服务提供商计算机可以包含计算装置,诸如,移动电话、智能电话、个人数字助理(PDA)、膝上型计算机、台式计算机、上网本计算机、服务器计算机、瘦客户端装置、平板计算机、游戏控制台等。在一些情形下,服务提供商计算机可以与一个或多个第三方计算机通信。
在一个示例配置中,节点1502a~1502h可以包含至少一个存储器1518和一个或多个处理单元(或处理器1520)。处理器1520可以按硬件、计算机可执行指令、固件或其组合实现。处理器1520的计算机可执行指令或固件实现可以包含用任何合适的编程语言编写以执行所描述的各种功能的计算机可执行指令或机器可执行指令。
在一些情形下,硬件处理器1520可以是单核处理器或多核处理器。多核处理器可以包含同一处理器内的多个处理单元。在一些示例中,多核处理器可以共享某些资源,诸如,总线和第二或第三级高速缓存。在一些情形下,单核或多核处理器中的每个核心还可以包含多个执行逻辑处理器(或执行线程)。在这种核心(例如,具有多个逻辑处理器的核心)中,还可以共享执行流水线的若干阶段以及较低级高速缓存。
存储器1518可以存储可在处理器1520上加载和执行的程序指令,以及在这些程序的执行期间生成的数据。取决于节点1502a~1502h的配置和类型,存储器1518可以是易失性的(诸如,RAM)和/或非易失性的(诸如,ROM、闪速存储器等)。存储器1518可以包含操作系统1528、一个或多个数据存储1530、一个或多个应用程序1532、一个或多个驱动程序1534和/或用于实现本文所公开的特征的服务。
操作系统1528可以支持节点1502a~1502h基本功能,诸如,调度任务、执行应用程序和/或控制器外围装置。在一些实现中,服务提供商计算机可以托管一个或多个虚拟机。在这些实现中,每个虚拟机可以被配置成执行其自身的操作系统。操作系统的示例包含Unix、Linux、Windows、Mac OS、iOS、Android等。操作系统1528也可以是专有操作系统。
数据存储1530可以包含由操作系统1528、应用程序1532或驱动程序1534使用和/或操作的永久或暂时的数据。这种数据的示例包含网页、视频数据、音频数据、图像、用户数据等。在一些实现中,数据存储1530中的信息可以通过网络1508提供到用户装置。在一些情况下,附加地或替代地,数据存储1530可以包含所存储的应用程序和/或驱动程序。替代地或附加地,数据存储1530可以存储标准和/或专有软件库和/或标准和/或专有应用程序用户界面(API)库。存储在数据存储1530中的信息可以是机器可读的目标代码、源代码、解释代码或中间代码。
驱动程序1534包含可以在节点中的部件之间提供通信的程序。例如,一些驱动程序1534可以在操作系统1528与额外存储机构1522、网络装置1524和/或I/O装置1526之间提供通信。替代地或附加地,一些驱动程序1534可以在应用程序1532与操作系统1528之间和/或应用程序1532与服务提供商计算机可访问的外围装置之间提供通信。在许多情况下,驱动程序1534可以包含提供良好理解的功能性的驱动程序(例如,打印机驱动程序、显示器驱动程序、硬盘驱动程序、固态装置驱动程序)。在其它情况下,驱动程序1534可以提供专有或专用功能性。
服务提供商计算机或服务器还可以包含额外存储机构1522,该额外存储机构可以包含可移动存储机构和/或不可移动存储机构。额外存储机构1522可以包含磁性存储机构、光盘、固态磁盘、闪速存储器和/或磁带存储机构。额外存储机构1522可以与节点1502a~1502h容纳在同一机箱中,或者可以位于外部机柜中。存储器1518和/或额外存储机构1522及其相关联的计算机可读介质可以为计算装置提供计算机可读指令、数据结构、程序模块和其它数据的非易失性存储。在一些实现中,存储器1518可以包含多种不同类型的存储器,诸如,SRAM、DRAM或ROM。
存储器1518和额外存储机构1522(可移动的和不可移动的)是计算机可读存储介质的示例。例如,计算机可读存储介质可以包含在用于存储信息的方法或技术中实现的易失性或非易失性、可移动或不可移动的介质,该信息包含例如计算机可读指令、数据结构、程序模块或其它数据。存储器1518和额外存储机构1522是计算机存储介质的示例。可存在于节点1502a~1502h中的额外类型的计算机存储介质可以包含(但不限于)PRAM、SRAM、DRAM、RAM、ROM、EEPROM、闪速存储器或其它存储器技术、CD-ROM、DVD或其它光学存储机构、磁带盒、磁带、磁盘存储机构或其它磁性存储装置、固态驱动器或可用于存储期望信息且可以由节点1502a~1502h访问的某一其它介质。计算机可读介质还包含上述任何介质类型的组合,包含一种介质类型的多个单元。
替代地或附加地,计算机可读通信介质可以包含计算机可读指令、程序模块或在数据信号(诸如,载波或其它传输)内传输的其它数据。然而,如本文所使用,计算机可读存储介质不包含计算机可读通信介质。
节点1502a~1502h还可以包含I/O装置1526,诸如,键盘、鼠标、笔、语音输入装置、触摸输入装置、显示器、扬声器、打印机等。节点1502a~1502h还可以包含一个或多个通信信道1536。通信信道1536可以提供节点1502a~1502h的各个部件可以借以通信的介质。通信信道1536可以采用总线、环、交换结构或网络的形式。
节点1502a~1502h还可以含有允许节点1502a~1502h与所存储的数据库、另一计算装置或服务器、用户终端和/或网络1500上的其它装置通信的网络装置1524。
在一些实现中,网络装置1524是外围装置,诸如,基于PCI的装置。在这些实现中,网络装置1524包含用于与主机装置通信的PCI接口。术语“PCI”或“基于PCI”可以用于描述总线协议的PCI系列中的任何协议,包含原始PCI标准、PCI-X、加速图形端口(AGP)和PCI快速(PCIe)或基于本文所论述的PCI协议的任何其它改进或衍生协议。基于PCI的协议是用于将装置(诸如,本地外围装置)连接到主机装置的标准总线协议。标准总线协议是一种数据传输协议,各制造商已对该协议定义和采用了规范。制造商确保合规装置与实现总线协议的计算系统兼容,反之亦然。如本文所使用,基于PCI的装置还包含使用非易失性存储器快速(NVMe)来通信的装置。NVMe是一种装置接口规范,用于访问使用PCIe附接到计算系统的非易失性存储介质。例如,总线接口模块可以实现NVMe,并且网络装置1524可以使用PCIe接口而连接到计算系统。
基于PCI的装置可以包含一个或多个功能。“功能”描述可以由网络装置1524提供的操作。功能的示例包含大容量存储控制器、网络控制器、显示器控制器、存储器控制器、串行总线控制器、无线控制器以及加密和解密控制器以及其它。在一些情况下,基于PCI的装置可以包含一个以上功能。例如,基于PCI的装置可以提供大容量存储控制器和网络适配器。作为另一示例,基于PCI的装置可以提供两个存储控制器,以控制两个不同存储资源。在一些实现中,基于PCI的装置可能具有多达八个功能。
在一些实现中,网络装置1524可以包含单根I/O虚拟化(SR-IOV)。SR-IOV是一种扩展能力,可以包含在基于PCI的装置中。SR-IOV允许物理资源(例如,单个网络接口控制器)作为多个资源(例如,六十四个网络接口控制器)显现。因此,提供某功能性的基于PCI的装置(例如,网络接口控制器)可能显现为利用基于PCI的装置而成为提供同一功能性的多个装置的装置。具有SR-IOV能力的存储适配器装置的功能可以分类为物理功能(PF)或虚拟功能(VF)。物理功能是可以被发现、管理和操作的装置的全特征功能。物理功能具有可以用于配置或控制存储适配器装置的配置资源。物理功能包含与非虚拟化装置所具有的相同的配置地址空间和存储器地址空间。物理功能可以具有与其相关联的许多虚拟功能。虚拟功能类似于物理功能,但属于通常可能缺少配置资源的轻型功能,并且通常由其底层物理功能的配置控制。物理功能和/或虚拟功能中的每一个可以被分派给在主机装置上运行的相应执行线程(诸如,虚拟机)。
本文所述的模块可以是软件模块、硬件模块或其合适组合。如果模块是软件模块,那么这些模块可以体现在非暂时性计算机可读介质上并由本文所述的计算机系统中的任一个中的处理器处理。应注意,所描述的过程和体系结构可以在任何用户互动之前以实时或异步模式进行。这些模块可以按先前附图中所建议的方式配置,并且/或者本文所述的功能可以由作为单独的模块存在的一个或多个模块提供,并且/或者本文所述的模块功能可以分散在多个模块上。
相应地,本说明书和附图被认为是说明性的而不是限制性的。然而,显而易见的是,可以对其进行各种修改和改变,而不背离如权利要求书所阐述的本公开的更宽广的精神和范围。
其它变化在本公开的精神内。因此,虽然所公开的技术容易具有各种修改和替代构造,但其某些所展示的示例示出在附图中并且已在上文中详细地进行了描述。然而,应理解,并不希望将本公开限制于所公开的一种或多种具体形式,相反,希望涵盖落入如随附权利要求书所定义的本公开的精神和范围内的所有修改、替代构造和等同物。
术语“一”和“该”及类似的引用在描述所公开的示例的上下文中(特别是在随附权利要求书的上下文中)的使用应被解释为包含单数和复数两者,除非本文中另有说明或上下文明确矛盾。术语“包括”、“具有”、“包含”和“含有”应被解释为开端术语(即,意味着“包含(但不限于)”),除非另有说明。术语“连接”应被解释为部分或全部容纳在、附接到或接合在一起,即使介入了某物也是如此。本文中的值的范围的引用仅希望充当个别地引用落入该范围内的每个单独的值的简便方法,除非本文另有说明,并且每个单独的值被并入到本说明书中,如同其在本文中被个别地引用一样。本文所述的所有方法可以按任何适当的次序进行,除非本文中另有说明或上下文明确矛盾。本文所提供的任何和所有示例或示例性语言(例如,“诸如”)的使用仅希望更好地说明本公开的示例,并且不限制本公开的范围,除非另有要求。本说明书中的任何语言均不应解释为指示实践本公开所必需的任何未要求要素。
除非另有具体陈述,否则诸如用语“X、Y或Z中的至少一个”等转折语言希望在如通常使用的上下文中被理解为表示项目、术语等可以是X、Y或Z或其任何组合(例如,X、Y和/或Z)。因此,这种转折语言通常不希望、也不应该暗示某些示例需要呈现X中的至少一个、Y中的至少一个或Z中的至少一个。
本公开的各种示例描述在本文中,包含发明人已知的用于实施本公开的最佳模式。在阅读上文描述之后,这些示例的变化对于本领域的普通技术人员来说可以变得显而易见。本发明人预期本领域的技术人员酌情采用这种变化,并且本发明人希望以与本文具体描述的不同的方式实践本公开。因此,本公开包含适用法律所允许的、随附权利要求书所述的主题的所有修改和等同物。此外,本公开包含上述元素在其所有可能变化中的任何组合,除非本文中另有说明或上下文明确矛盾。
Claims (20)
1.一种用于同时训练神经网络模型的分布式系统,该分布式系统包括:
第一工作者节点,被配置成:
接收第一神经网络模型、与该第一神经网络模型相关联的第一组权重、第二神经网络模型以及与该第二神经网络模型相关联的第二组权重,其中该第二神经网络模型不同于该第一神经网络模型;
使用该第一神经网络模型和该第一组权重来计算第一组梯度;
随着该第一组梯度中的每一个被计算并且变得可用于传输,通过网络将该第一组梯度传输到该第二工作者节点;
此后,使用该第二神经网络模型和该第二组权重来计算第二组梯度;并且
随着该第二组梯度中的每一个被计算并且变得可用于传输,通过该网络将该第二组梯度传输到该第二工作者节点;
第二工作者节点,被配置成:
通过该网络从该第一工作者节点接收该第一组梯度;
随着接收该一组梯度中的每一个,基于该第一组梯度和第一组其它接收到的梯度而计算第一组经同步的梯度,其中该第一组经同步的梯度的至少一部分和该第二组梯度的至少一部分是同时计算的;
通过该网络将该第一组经同步的梯度传输到该第一工作者节点;
通过该网络从该第一工作者节点接收该第二组梯度;
随着接收该二组梯度中的每一个,基于该第二组梯度和第二组其它接收到的梯度而计算第二组经同步的梯度;并且
通过该网络将该第二组经同步的梯度传输到该第一工作者节点。
2.根据权利要求1所述的分布式系统,其中该第一工作者节点被进一步配置成:
接收包括训练输入数据和参考输出数据的训练数据,其中该第一组梯度是基于该训练数据而计算的。
3.根据权利要求2所述的分布式系统,其中该第二组梯度是基于该训练数据而计算的。
4.根据权利要求1所述的分布式系统,其中该第一组梯度包含该第一神经网络模型的第一层的梯度和该第一神经网络模型的第二层的梯度,其中该第二层的梯度是在该第一层的梯度之前计算的。
5.一种方法,包括:
在分布式系统的第一工作者节点处,使用第一神经网络模型以及与该第一神经网络模型相关联的第一组权重而计算第一组梯度;
将该第一组梯度从该第一工作者节点传输到该分布式系统的第二工作者节点,该第二工作者节点被配置成基于该第一组梯度而计算第一组经同步的梯度;
在计算该第一组经同步的梯度的同时,在该第一工作者节点处,使用第二神经网络模型以及与该第二神经网络模型相关联的第二组权重而计算第二组梯度;以及
将该第二组梯度从该第一工作者节点传输到该第二工作者节点,该第二工作者节点被配置成基于该第二组梯度而计算第二组经同步的梯度。
6.根据权利要求5所述的方法,进一步包括:
从该第二工作者节点接收该第一组经同步的梯度;以及
使用该第一组经同步的梯度而调整该第一组权重。
7.根据权利要求6所述的方法,其中该第一组权重的至少一部分是在该第二组经同步的梯度的至少一部分得以计算时调整的。
8.根据权利要求6所述的方法,进一步包括:
从该第二工作者节点接收该第二组经同步的梯度;以及
使用该第二组经同步的梯度而调整该第二组权重。
9.根据权利要求5所述的方法,其中该第一组梯度的至少一部分和该第一组经同步的梯度的至少一部分是同时计算的。
10.根据权利要求5所述的方法,其中该第二组梯度的至少一部分和该第二组经同步的梯度的至少一部分是同时计算的。
11.根据权利要求5所述的方法,进一步包括:
在该第一工作者节点处接收该第一神经网络模型、该第一组权重、该第二神经网络模型和该第二组权重。
12.根据权利要求5所述的方法,其中该第二神经网络模型不同于该第一神经网络模型。
13.一种非暂时性计算机可读介质,该非暂时性计算机可读介质中存储了指令,这些指令在被一个或多个处理器执行时,使该一个或多个处理器进行操作,这些操作包含:
在分布式系统的第一工作者节点处,使用第一神经网络模型以及与该第一神经网络模型相关联的第一组权重而计算第一组梯度;
将该第一组梯度从该第一工作者节点传输到该分布式系统的第二工作者节点,该第二工作者节点被配置成基于该第一组梯度而计算第一组经同步的梯度;
在计算该第一组经同步的梯度的同时,在该第一工作者节点处,使用第二神经网络模型以及与该第二神经网络模型相关联的第二组权重而计算第二组梯度;以及
将该第二组梯度从该第一工作者节点传输到该第二工作者节点,该第二工作者节点被配置成基于该第二组梯度而计算第二组经同步的梯度。
14.根据权利要求13所述的非暂时性计算机可读介质,其中这些操作进一步包括:
从该第二工作者节点接收该第一组经同步的梯度;以及
使用该第一组经同步的梯度而调整该第一组权重。
15.根据权利要求14所述的非暂时性计算机可读介质,其中该第一组权重的至少一部分是在该第二组经同步的梯度的至少一部分得以计算时调整的。
16.根据权利要求14所述的非暂时性计算机可读介质,其中这些操作进一步包括:
从该第二工作者节点接收该第二组经同步的梯度;以及
使用该第二组经同步的梯度而调整该第二组权重。
17.根据权利要求13所述的非暂时性计算机可读介质,其中该第一组梯度的至少一部分和该第一组经同步的梯度的至少一部分是同时计算的。
18.根据权利要求13所述的非暂时性计算机可读介质,其中该第二组梯度的至少一部分和该第二组经同步的梯度的至少一部分是同时计算的。
19.根据权利要求13所述的非暂时性计算机可读介质,其中这些操作进一步包括:
在该第一工作者节点处接收该第一神经网络模型、该第一组权重、该第二神经网络模型和该第二组权重。
20.根据权利要求13所述的非暂时性计算机可读介质,其中该第二神经网络模型不同于该第一神经网络模型。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/835,161 | 2020-03-30 | ||
US16/835,161 US11468325B2 (en) | 2020-03-30 | 2020-03-30 | Multi-model training pipeline in distributed systems |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113469355A true CN113469355A (zh) | 2021-10-01 |
CN113469355B CN113469355B (zh) | 2024-03-15 |
Family
ID=77659335
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110342096.XA Active CN113469355B (zh) | 2020-03-30 | 2021-03-30 | 分布式系统中的多模型训练管道 |
Country Status (3)
Country | Link |
---|---|
US (2) | US11468325B2 (zh) |
CN (1) | CN113469355B (zh) |
DE (1) | DE102021107509A1 (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20200129457A (ko) * | 2019-05-08 | 2020-11-18 | 삼성전자주식회사 | 학습을 수행하는 뉴럴 네트워크 시스템, 그것의 학습 방법 및 뉴럴 네트워크 프로세서의 전이 학습 방법 |
US11468325B2 (en) * | 2020-03-30 | 2022-10-11 | Amazon Technologies, Inc. | Multi-model training pipeline in distributed systems |
CN114792125B (zh) * | 2022-04-15 | 2023-06-23 | 北京百度网讯科技有限公司 | 基于分布式训练的数据处理方法、装置、电子设备和介质 |
CN115660034B (zh) * | 2022-10-28 | 2023-08-15 | 北京百度网讯科技有限公司 | 分布式模型训练的方法、装置和系统 |
CN116596091B (zh) * | 2022-11-08 | 2024-02-02 | 北京百度网讯科技有限公司 | 模型训练方法、装置、设备以及存储介质 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106062786A (zh) * | 2014-09-12 | 2016-10-26 | 微软技术许可有限责任公司 | 用于训练神经网络的计算系统 |
CN108073986A (zh) * | 2016-11-16 | 2018-05-25 | 北京搜狗科技发展有限公司 | 一种神经网络模型训练方法、装置及电子设备 |
CN108229652A (zh) * | 2017-11-28 | 2018-06-29 | 北京市商汤科技开发有限公司 | 神经网络模型迁移方法和系统、电子设备、程序和介质 |
CN108805795A (zh) * | 2017-05-05 | 2018-11-13 | 英特尔公司 | 用于机器学习的硬件实现的点对点通信原语 |
US20190042934A1 (en) * | 2017-12-01 | 2019-02-07 | Meenakshi Arunachalam | Methods and apparatus for distributed training of a neural network |
US20190050727A1 (en) * | 2018-01-12 | 2019-02-14 | Timothy Anderson | Neural network training |
CN109754060A (zh) * | 2017-11-06 | 2019-05-14 | 阿里巴巴集团控股有限公司 | 一种神经网络机器学习模型的训练方法及装置 |
CN109919313A (zh) * | 2019-01-31 | 2019-06-21 | 华为技术有限公司 | 一种梯度传输的方法及分布式训练系统 |
CN110135575A (zh) * | 2017-12-29 | 2019-08-16 | 英特尔公司 | 用于分布式机器学习的通信优化 |
CN110689109A (zh) * | 2018-07-04 | 2020-01-14 | 三星电子株式会社 | 神经网络方法和装置 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11676008B2 (en) * | 2018-09-27 | 2023-06-13 | Google Llc | Parameter-efficient multi-task and transfer learning |
CN113646776A (zh) * | 2019-04-11 | 2021-11-12 | 华为技术有限公司 | 在机器学习模型训练中使用滞后梯度 |
WO2020226634A1 (en) * | 2019-05-07 | 2020-11-12 | Huawei Technologies Co., Ltd. | Distributed synchronous training architecture using stale weights |
CN110347636B (zh) * | 2019-07-15 | 2024-04-30 | 北京一流科技有限公司 | 数据执行体及其数据处理方法 |
US11455518B2 (en) * | 2019-11-12 | 2022-09-27 | Adobe Inc. | User classification from data via deep segmentation for semi-supervised learning |
US20210295168A1 (en) * | 2020-03-23 | 2021-09-23 | Amazon Technologies, Inc. | Gradient compression for distributed training |
US11948352B2 (en) * | 2020-03-26 | 2024-04-02 | Amazon Technologies, Inc. | Speculative training using partial gradients update |
US11468325B2 (en) * | 2020-03-30 | 2022-10-11 | Amazon Technologies, Inc. | Multi-model training pipeline in distributed systems |
US11256975B2 (en) * | 2020-05-07 | 2022-02-22 | UMNAI Limited | Distributed architecture for explainable AI models |
-
2020
- 2020-03-30 US US16/835,161 patent/US11468325B2/en active Active
-
2021
- 2021-03-25 DE DE102021107509.2A patent/DE102021107509A1/de active Pending
- 2021-03-30 CN CN202110342096.XA patent/CN113469355B/zh active Active
-
2022
- 2022-09-19 US US17/947,355 patent/US11676021B1/en active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106062786A (zh) * | 2014-09-12 | 2016-10-26 | 微软技术许可有限责任公司 | 用于训练神经网络的计算系统 |
CN108073986A (zh) * | 2016-11-16 | 2018-05-25 | 北京搜狗科技发展有限公司 | 一种神经网络模型训练方法、装置及电子设备 |
CN108805795A (zh) * | 2017-05-05 | 2018-11-13 | 英特尔公司 | 用于机器学习的硬件实现的点对点通信原语 |
CN109754060A (zh) * | 2017-11-06 | 2019-05-14 | 阿里巴巴集团控股有限公司 | 一种神经网络机器学习模型的训练方法及装置 |
CN108229652A (zh) * | 2017-11-28 | 2018-06-29 | 北京市商汤科技开发有限公司 | 神经网络模型迁移方法和系统、电子设备、程序和介质 |
US20190042934A1 (en) * | 2017-12-01 | 2019-02-07 | Meenakshi Arunachalam | Methods and apparatus for distributed training of a neural network |
CN110135575A (zh) * | 2017-12-29 | 2019-08-16 | 英特尔公司 | 用于分布式机器学习的通信优化 |
US20190050727A1 (en) * | 2018-01-12 | 2019-02-14 | Timothy Anderson | Neural network training |
CN110689109A (zh) * | 2018-07-04 | 2020-01-14 | 三星电子株式会社 | 神经网络方法和装置 |
CN109919313A (zh) * | 2019-01-31 | 2019-06-21 | 华为技术有限公司 | 一种梯度传输的方法及分布式训练系统 |
Also Published As
Publication number | Publication date |
---|---|
US11676021B1 (en) | 2023-06-13 |
US11468325B2 (en) | 2022-10-11 |
US20210303988A1 (en) | 2021-09-30 |
CN113469355B (zh) | 2024-03-15 |
DE102021107509A1 (de) | 2021-09-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11741345B2 (en) | Multi-memory on-chip computational network | |
US20210295168A1 (en) | Gradient compression for distributed training | |
CN113469355B (zh) | 分布式系统中的多模型训练管道 | |
US10846621B2 (en) | Fast context switching for computational networks | |
US10002402B2 (en) | Learning convolution neural networks on heterogeneous CPU-GPU platform | |
US20190180183A1 (en) | On-chip computational network | |
US11294599B1 (en) | Registers for restricted memory | |
JP7451614B2 (ja) | オンチップの計算ネットワーク | |
US11948352B2 (en) | Speculative training using partial gradients update | |
CN114008586A (zh) | 使用处理元件阵列的转置运算 | |
US11874785B1 (en) | Memory access operation in distributed computing system | |
US11941528B2 (en) | Neural network training in a distributed system | |
US20210158131A1 (en) | Hierarchical partitioning of operators | |
US11308396B2 (en) | Neural network layer-by-layer debugging | |
US11409685B1 (en) | Data synchronization operation at distributed computing system | |
US11354258B1 (en) | Control plane operation at distributed computing system | |
US11610128B2 (en) | Neural network training under memory restraint | |
US10997277B1 (en) | Multinomial distribution on an integrated circuit | |
US10990408B1 (en) | Place and route aware data pipelining |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |