CN114008635A - 神经网络逐层调试 - Google Patents
神经网络逐层调试 Download PDFInfo
- Publication number
- CN114008635A CN114008635A CN202080045618.3A CN202080045618A CN114008635A CN 114008635 A CN114008635 A CN 114008635A CN 202080045618 A CN202080045618 A CN 202080045618A CN 114008635 A CN114008635 A CN 114008635A
- Authority
- CN
- China
- Prior art keywords
- tensor
- neural network
- tensors
- examples
- machine instruction
- 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
Links
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 239
- 238000000034 method Methods 0.000 claims abstract description 47
- 239000010410 layer Substances 0.000 description 72
- 238000012545 processing Methods 0.000 description 68
- 230000001133 acceleration Effects 0.000 description 64
- 230000004913 activation Effects 0.000 description 17
- 238000001994 activation Methods 0.000 description 17
- 230000006870 function Effects 0.000 description 17
- 238000004364 calculation method Methods 0.000 description 13
- 238000004891 communication Methods 0.000 description 12
- 210000002569 neuron Anatomy 0.000 description 12
- 238000011176 pooling Methods 0.000 description 11
- 238000012549 training Methods 0.000 description 11
- 239000004744 fabric Substances 0.000 description 10
- 238000010586 diagram Methods 0.000 description 9
- 230000003863 physical function Effects 0.000 description 9
- 210000004556 brain Anatomy 0.000 description 8
- 230000033001 locomotion Effects 0.000 description 8
- 230000002093 peripheral effect Effects 0.000 description 8
- 238000012986 modification Methods 0.000 description 6
- 230000004048 modification Effects 0.000 description 6
- 210000000225 synapse Anatomy 0.000 description 6
- 238000013459 approach Methods 0.000 description 4
- 210000003050 axon Anatomy 0.000 description 4
- 210000001787 dendrite Anatomy 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 239000007787 solid Substances 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 238000007667 floating Methods 0.000 description 3
- 238000012886 linear function Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000002411 adverse Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 238000003058 natural language processing Methods 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 241000282326 Felis catus Species 0.000 description 1
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 238000013529 biological neural network Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 238000013527 convolutional neural network Methods 0.000 description 1
- 238000013523 data management Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000002059 diagnostic imaging Methods 0.000 description 1
- 239000003814 drug Substances 0.000 description 1
- 238000005206 flow analysis Methods 0.000 description 1
- 238000003709 image segmentation Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000013439 planning Methods 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 239000002356 single layer Substances 0.000 description 1
- 230000005236 sound signal Effects 0.000 description 1
- 230000006641 stabilisation Effects 0.000 description 1
- 238000011105 stabilization Methods 0.000 description 1
- 230000033772 system development Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000000007 visual effect 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/10—Interfaces, programming languages or software development kits, e.g. for simulating neural networks
- G06N3/105—Shells for specifying net layout
-
- 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/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- 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
-
- 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/08—Learning methods
- G06N3/082—Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
-
- 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/048—Activation functions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
公开用于对目标处理器上的神经网络执行进行调试的技术。参考处理器可生成神经网络的多个第一参考张量。可反复地减小所述神经网络以产生多个长度。针对所述长度中的每一者,编译器将所述神经网络转换成第一机器指令,所述目标处理器执行所述第一机器指令以生成第一装置张量,并且调试器程序确定所述第一装置张量是否匹配第一参考张量。标识其中所述第一装置张量不匹配所述第一参考张量的最短长度。针对最短神经网络的较低层级中间表示来启用张量输出,并且将所述神经网络转换成第二机器指令,由所述目标处理器执行所述第二机器指令以生成第二装置张量。
Description
背景技术
调试是用于改进计算装置在硬件或软件层级的功能的重要步骤。随着计算装置和其上运行的软件变得更加复杂,调试技术也扩展了更多的方法来检测所谓的错误、漏洞或缺陷。一些调试技术包含在编译指令内的某个位置设置断点,以便就地停止或暂停应用程序,同时可检查与应用程序相关联的不同变量和数据结构。其它技术可以其它方式使不可访问的数据在执行应用程序时写入到存储器,从而允许在应用程序完成后检查数据。虽然此类技术在简单系统中有用,但它们对于更复杂的硬件和软件设置来说价值不大。
人工神经网络(其在本文中称为“神经网络”)是具有基于生物神经网络的架构的计算系统。可使用训练数据来训练神经网络学习如何执行某一任务,例如对来自图像或视频的物理对象、活动、人物等进行标识或分类。例如深度神经网络等神经网络可包含多个层的处理节点。层中的每个处理节点可对由前一层中的处理节点生成的输入数据执行计算以生成输出数据。例如,处理节点可执行一组算术运算,例如乘法和加法,以生成中间输出,或对中间输出执行后处理操作以生成最终输出。例如深度神经网络等人工神经网络可包含数千个或更多的处理节点和数百万或更多的参数。
神经网络可使用例如中央处理单元(CPU)等计算机处理器实施以执行计算。还可使用针对并行链式计算而优化的专用处理器来实施神经网络,所述专用处理器可包含多个处理单元,例如脉动阵列。在某些情形下,对于相同的输入数据,此类专用处理器可比通用处理器表现更好。
附图说明
将参考各图描述根据本公开的各种实施例,图中:
图1示出用于神经网络的计算流模型的示例。
图2示出针对神经网络生成的一组示例的参考张量和装置张量。
图3A-3D示出减小神经网络的长度的示例步骤。
图4示出调试缩短的神经网络的执行的示例步骤。
图5示出调试缩短的神经网络的执行的示例步骤。
图6A和6B示出用于对目标处理器上的神经网络执行进行调试的方法的示例。
图7包含示出主机系统的示例的框图。
图8包含示出加速引擎的示例的框图。
图9包含示出集成电路装置的示例的框图。
图10包含示例网络的图。
具体实施方式
在系统开发期间,尤其是当两个系统根本不同时,例如软件和硬件,调试这两个系统之间的功能行为不匹配可能是个很大障碍。在许多情况下,由高级软件模型规定的操作和计算可能显著不同于其硬件实施方案。
出于多种原因,调试神经网络在例如具有一个或多个脉动阵列的处理器等专用处理器上的执行是具有挑战性的。一个原因是,许多中间结果无法由调试器程序直接访问。因为脉动阵列可由数百个单独的数据处理单元(DPU)构成,所以当多个DPB参与单个输出值的计算时,可能难以确定哪一DPU有缺陷。此外,当无法直接检查每个DPU输出时,具体地说,对于一般涉及许多并行和顺序求和的神经网络的执行,可能难以检测基于精度的求和错误的位置。在添加有限精度浮点数的序列时,可能会出现基于精度的求和错误。虽然在模型或参考计算中可通过将数字从最小到最大重新排序来减少这些错误,但在神经网络执行期间可能无法改变求和执行的次序,并且因此与参考计算不同。
除神经网络的总结果之外,神经网络的中间输出也可用于调试目的。为了存取中间输出,通常修改和重新编译程序代码以用于执行。重新编译可能大量消耗时间和资源,对于较大神经网络来说尤其如此。另外,对程序代码的修改可能会不利地影响原始程序代码的性能,在一些情况下,会以产生错误结果的方式改变神经网络的行为。
调试专用处理器上的神经网络执行的另一挑战涉及要整理的大量计算。例如,对于单个错误输出值,可能有数百万个在神经网络的数百个层和/或节点上执行的促成所述值的计算。特征图的大小和可能采用的通道数目增大了对中间结果进行整理的复杂性。神经网络可包含许多卷积操作,这是将输出值的依赖关系交织于极大的一组输入值和中间值上的复杂操作。
本文中所描述的示例通过提供用于使用逐层方法调试在本文中称为目标处理器的专用处理器上的神经网络执行的技术来解决这些和其它问题,在所述逐层方法中,首先在长度上将神经网络缩短以减小计算工作负荷,然后“扩展”成多个中间表示。所述方法是有利的,因为其允许在神经网络的较低层级中间表示下的张量输出可供调试器程序使用,而通常此类张量会被分解、拆分和/或与其它张量合并。所述方法还通过聚焦于神经网络中确定错误起源的一组具体的层而使由于向编译代码添加额外指令所致的任何不利影响最小化。
在一些示例中,调试器程序接收对目标处理器上的神经网络的执行进行调试的请求。调试器程序可模拟神经网络的执行以生成参考张量。参考张量可基于样本输入,例如特征图。样本输入可由调试器程序自动生成,或可由用户提供。在一些示例中,可由编译器在编译期间生成参考张量。
在编译神经网络之后,在目标处理器上执行生成的机器指令以生成输出张量。将输出张量与参考输出张量相比较,就可发现这两者之间的不匹配。接下来,通过减少神经网络的层的数目(例如,从100到99层、从99到98层等)而反复地缩短神经网络。重新编译每个缩短的神经网络,并且由目标处理器重新执行生成的机器指令以生成新的张量(“装置张量”)。将装置张量中的每一者与对应的参考张量相比较以确定其准确性并且确定缩短的神经网络的输出是否失败。迭代过程继续,直到标识其输出失败的最短神经网络为止。
标识的最短(或在一些示例中,“缩短”)的神经网络接着通过启用神经网络的较低层级中间表示的张量输出而“扩展”。这可在编译期间通过编译器将额外指令添加到机器指令中以使目标处理器输出缩短的神经网络的一个或多个较低层级中间表示的装置张量而发生。这些装置张量可与对应的参考张量相比较以确定最后一个匹配装置张量和第一个不匹配装置张量。调试器程序随后可基于最后一个匹配和第一个不匹配的位置、目标处理器的架构和/或发现不匹配的特定中间表示而标识不匹配或计算错误的原因。
在下面的描述中,将描述各种示例。出于解释的目的,阐述特定配置和细节以便提供对示例的透彻理解。然而,对于所属领域的技术人员来说还将显而易见的是,可在没有所述具体细节的情况下实践示例。此外,可能省略或简化众所周知的特征,以免使描述的实施例模糊不清。
图1示出用于神经网络的计算流模型100的示例。神经网络从人脑的操作机制获得灵感。根据各种大脑模型,大脑的主要计算元素是神经元。神经元与许多元素连接在一起,其中进入神经元的元素被称为树突,而离开神经元的元素被称为轴突。神经元通过树突接受信号,对信号执行计算,并在轴突上输出信号。输入信号和输出信号被称作激活。一个神经元的轴突可分支并连接到多个神经元的树突。轴突的分支与树突之间的连接被称作突触。
突触可缩放穿过突触的信号。缩放因子被称作权重,并且被认为是大脑能够学习的方式:对输入的不同反应产生不同的权重。学习可改变权重,但神经元和突触的组织不需要改变以获得学习内容。大脑的静态结构因此可用作程序的模型,并且权重可反映所述程序已学会执行的任务。
神经网络基于以下概念而操作:神经元的计算涉及输入值的加权和。这些加权和对应于由突触执行的值缩放和神经元中的那些值的组合。在神经元中对组合的输入执行函数运算。在大脑模型中,所述运算呈现为非线性函数,其使得神经元仅在输入超过某一阈值时生成输出。因此,以此类推,神经网络的节点可将非线性函数应用于输入到节点中的值的加权和。
在示出的示例中,模型100包含输入层104、常被称作隐藏层106的中间层和输出层108。每个层包含一定数目的节点102。在此示例中,输入层104的节点102连接到隐藏层106的每个节点102。将被称作大脑模型中的突触的连接被称作权重110。同样在此示例中,隐藏层106的每个节点102与输出层的每个节点102具有连接或权重110。输入层104可接收输入并且可将输入传播到隐藏层106。神经网络实施方案可包含多个隐藏层。由隐藏层106(或多个隐藏层)计算的加权和被传播到输出层108,所述输出层可将最终输出呈现给用户。根据大脑模型,节点102的输出可被称作激活。
可在示例模型100中的每个层处发生的计算的示例如下:
在上文等式中,Wij为权重,xi为输入激活,yj为输出激活,f()为非线性函数,并且b为偏置项。各种非线性函数可用于达成不同目的。
模型100可被称作有向加权图。在有向图中,到节点或来自节点的每个连接指示(例如,进入节点或远离节点的)方向。在加权图中,每个连接可具有权重。为易于理解和调试,用于开发神经网络的工具可将神经网络显现为有向加权图。在一些情况下,这些工具还可用于训练神经网络并输出经过训练的权重值。接着,执行神经网络就是个使用权重对输入数据进行计算的问题。
与较浅层的网络相比,具有许多层的神经网络能够学习更复杂且更抽象的高层级特征。举例来说,可教神经网络辨识图像。在此示例中,可将图像的像素馈入神经网络的输入层中,并且第一层的输出可指示图像中例如线和边的低层级特征的存在。在后续层处,这些特征可组合以测量更高层级特征的可能存在:线可组合成形状,形状可进一步组合成形状集合。给定所有此类信息,神经网络可输出高层级特征表示特定对象或场景的概率。例如,神经网络可输出图像是含有猫还是不含有猫。
神经网络的学习阶段被称作训练神经网络。在训练期间,教神经网络执行任务。在学习任务时,确定用于权重(以及可能还有偏置)的值。用于神经网络的底层程序(例如,节点到层中的组织,每个层的节点之间的连接,以及由每个节点执行的计算)不需要在训练期间改变。在经过训练后,神经网络可通过使用在训练期间确定的权重值计算结果来执行任务。例如,神经网络可输出图像含有特定对象的概率,可输出音频序列含有特定词语的概率,可生成图像中对象周围的边界框,或可提出应采取的动作,等。运行神经网络的程序被称作推断。
存在可训练权重的多个方式。一个方法被称作有监督学习。在有监督学习中,标记所有训练样本,使得将每个训练样本输入到神经网络中会产生已知结果。另一方法被称作无监督学习,其中不标记训练样本并且训练在于在数据中找出结构或在数据中找到集群。半监督学习介于有监督学习与无监督学习之间。在半监督学习中,标记训练数据的子集。未标记数据可用于限定集群边界,并且标记的数据可用于标记集群。
神经网络已用于各种应用,包含例如用于图像和视频、语音和语言、医药、游戏以及机器人技术的领域中。在图像和视频中,神经网络已用于图像分类、对象定位和检测、图像分段以及动作辨识。在语音和语言中,神经网络已用于语音辨识、机器翻译、自然语言处理和音频生成。在医学领域中,神经网络已用于基因组学和医学成像。在游戏中,神经网络已用于玩视频游戏和桌面游戏,包含具有大量的可能移动的游戏,例如围棋。在机器人技术中,神经网络已用于机器人的运动规划、视觉导航、控制稳定化,以及自主车辆的驾驶策略。
图2示出根据本发明的一些示例的针对神经网络200生成的一组参考张量210和装置张量220。神经网络200包含多个层202,仅出于说明性目的将所述多个层示为具有简化结构和节点。层202中的每一者可包含对输入数据执行操作以生成所述层的输出数据的一个或多个节点。将样本输入204提供为神经网络200的输入。样本输入204可以是图像、特征图和/或一个或多个张量。层202中的每一者可输出一个或多个张量206,所述一个或多个张量作为输入张量馈入到后续层中。
在一些示例中,参考张量210由参考处理器基于样本输入204生成。与层202中的每一者相关联的操作可在参考处理器上实行,所述参考处理器具有比目标处理器所提供的精度更高或类似的精度。此外,当生成参考张量210时,可省略由编译器在神经网络200的编译期间对操作进行的任何修改。因此,参考张量210提供装置张量220可对照着比较的参考。
在一些示例中,通过将神经网络200编译成机器指令并且在目标处理器上执行所述机器指令来生成装置张量220。在一些情况下,对应于神经网络200的总输出的装置张量220是可用的,而在机器指令的执行期间被覆写的中间装置张量不可用。在执行之后,调试器程序可将输出装置张量与其对应的参考张量212-11相比较,如由比较230所指示。基于比较230,调试器程序可确定输出装置张量不匹配参考张量212-11(即,TD≠TR),这是因为例如输出装置张量与其对应的参考张量之间的差超过准确度阈值(例如,1%、2%、5%、10%等)。因此,调试器程序可确定神经网络200的输出失败。
图3A-3D示出减小神经网络200的长度的示例步骤。图3A示出根据本发明的一些示例的针对缩短的神经网络300A生成的装置张量320A。图3A另外示出参考张量210。通过移除神经网络200的最后两个层来产生缩短的神经网络300A。缩短的神经网络300A的输入是用于神经网络200的相同样本输入。由编译器将缩短的神经网络300A重新编译成机器指令,并且由目标处理器使用样本输入作为输入执行所述机器指令以生成可仅包含输出装置张量的装置张量320A。调试器程序将输出装置张量与其对应的参考张量212-9相比较,如由比较330A所指示。基于比较330A,调试器程序可确定:由于输出装置张量与参考张量212-9之间的差超过准确度阈值,因此输出装置张量不匹配参考张量212-9(即,TD≠TR)。因此,调试器程序可确定神经网络300A的输出失败,并且神经网络300A将进一步缩短。
图3B示出根据本发明的一些示例的针对缩短的神经网络300B生成的装置张量320B。图3B另外示出参考张量210。通过移除缩短的神经网络300A的前三个层来产生缩短的神经网络300B。缩短的神经网络300B的输入是参考张量212-3。由编译器将缩短的神经网络300B重新编译成机器指令,并且由目标处理器使用参考张量212-3作为输入执行所述机器指令以生成可仅包含输出装置张量的装置张量320B。调试器程序将输出装置张量与其对应的参考张量212-9相比较,如由比较330B所指示。基于比较330B,调试器程序可确定:由于输出装置张量与参考张量212-9之间的差超过准确度阈值,因此输出装置张量不匹配参考张量212-9(即,TD≠TR)。因此,调试器程序可确定神经网络300B的输出失败,并且神经网络300B将进一步缩短。
图3C示出根据本发明的一些示例的针对缩短的神经网络300C生成的装置张量320C。图3C另外示出参考张量210。通过移除缩短的神经网络300B的最后三个层来产生缩短的神经网络300C。缩短的神经网络300C的输入是参考张量212-3。由编译器将缩短的神经网络300C重新编译成机器指令,并且由目标处理器使用参考张量212-3作为输入执行所述机器指令以生成可仅包含输出装置张量的装置张量320C。调试器程序将输出装置张量与其对应的参考张量212-6相比较,如由比较330C所指示。基于比较330C,调试器程序可确定:由于输出装置张量与参考张量212-6之间的差未超过准确度阈值,因此输出装置张量匹配参考张量212-6(即,TD=TR)。因此,调试器程序可确定神经网络300C的输出未失败并且将增大神经网络300C的长度。
图3D示出根据本发明的一些示例的针对缩短的神经网络300D生成的装置张量320D。图3D另外示出参考张量210。通过移除缩短的神经网络300B的最后一层(或通过将最后两层添加回到缩短的神经网络300C)来产生缩短的神经网络300D。缩短的神经网络300D的输入是参考张量212-3。由编译器将缩短的神经网络300D重新编译成机器指令,并且由目标处理器使用参考张量212-3作为输入执行所述机器指令以生成可仅包含输出装置张量的装置张量320D。调试器程序将输出装置张量与其对应的参考张量212-8相比较,如由比较330D所指示。基于比较330D,调试器程序可确定:由于输出装置张量与参考张量212-8之间的差超过准确度阈值,因此输出装置张量不匹配参考张量212-8(即,TD≠TR)。因此,调试器程序可确定神经网络300D的输出失败。
如参考图3A-3D所示,反复地减少神经网络的层,直到标识出长度最短的其输出装置张量与其对应的参考张量确实匹配的神经网络。所述神经网络可缩短或延长可变量以便高效地得到最短长度。例如,可采用二分搜索,其中每一迭代将长度减半。在一些示例中,每一迭代将长度递减1,直到标识出最短长度为止。在一些示例中,基于与参考张量的不匹配程度而将长度递减某一量。例如,当发现较大的不匹配时,可将长度递减较大量,而当发现较小的不匹配时,可将长度递减较小量。
图4示出根据本发明的一些示例的用于对缩短的神经网络300D的执行进行调试的示例步骤。在一些示例中,参考张量410、412、414由参考处理器基于样本输入404生成。样本输入404可与样本输入204或参考张量212-3相同,或在一些示例中,样本输入404可以是新生成的张量。与缩短的神经网络300D的每个层相关联的操作可在参考处理器上实行以生成参考张量410。替代地或另外,可针对缩短的神经网络300D的各种中间表示440生成参考张量412、414。中间表示440可包含其处生成参考张量410的高层级中间表示,以及其处生成参考张量412的第一较低层级中间表示和其处生成参考张量414的第二较低层级中间表示。
中间表示440可表示神经网络在编译器将一般使用高级编程语言编写的程序代码转换为可由目标处理器执行的机器指令时经历的不同表示。相比于较高层级中间表示,较低层级中间表示可考虑目标处理器的具体配置,并且可因此包含额外细节和额外操作。在一个示例中,从高层级中间表示转换到较低层级中间表示可包含将表示神经网络的线性文本转换成允许流分析和操作重新排序的中间图形结构。额外中间表示可包含但不限于:解析的中间表示、计算操作调度器中间表示、资源分配中间表示、调度器中间表示、代码生成器中间表示、同步中间表示、一个或多个执行引擎的机器代码、机器代码的运行时更新等。
在一些示例中,当将缩短的神经网络300D转换成机器指令时,通过启用中间表示440的张量输出而生成装置张量420、422、424。在一些示例中,这通过编译器将额外指令插入到所述机器指令中以使目标处理器在执行期间输出张量来实现。所述额外指令可包含保存操作。例如,可通过将节点插入到数据流图中而引入保存操作,其中基于原始程序代码生成所述数据流图。在插入这些额外节点之后,可按数据流图尚未扩增有额外节点的情况下将执行的相同方式将数据流图转换成机器指令。
在将缩短的神经网络300D编译成机器指令之后,在目标处理器上执行机器指令,从而生成装置张量420、422、424。在每个中间表示处,调试器程序可将装置张量与其对应的参考张量相比较以发现每个中间表示处的最后一个匹配张量和第一个不匹配张量(“匹配-不匹配对”)。例如,调试器程序可标识第一较低层级中间表示的装置张量423和第二较低层级中间表示的装置张量425。调试器程序可向用户通知发现的匹配-不匹配对以及每个中间表示处的对应计算。
图5示出根据本发明的一些示例的用于对缩短的神经网络300D的执行进行调试的示例步骤。在示出的示例中,基于针对前一(较高层级)中间表示标识的匹配-不匹配对(由暗色矩形框或容器指示),针对中间表示540中的每一者依序启用张量输出。可在针对特定中间表示标识出匹配-不匹配对之后将缩短的神经网络300D重新编译,从而允许在与前一中间表示的匹配-不匹配对直接相关的一组局部操作上启用张量输出。或者,如从装置张量522到装置张量524的过渡所示,可针对较低中间表示计算所有张量,而无关于标识的匹配-不匹配对。在中间表示540中的每一者处,任选地还基于标识的匹配-不匹配对,针对装置张量生成对应的参考张量。
在示出的示例中,在编译期间针对所有操作启用张量输出,使得在执行编译的机器指令期间生成装置张量520。对于下一较低层级中间表示,在重新编译期间针对所有操作启用张量输出,使得在重新执行编译的机器指令期间生成装置张量522。对于下一较低层级中间表示,由于张量输出不可用,因此装置张量524由参考处理器模拟。装置张量524可与装置张量522中标识的匹配-不匹配对直接相关。如从装置张量522到装置张量524的过渡所示,张量可分解成较低层级中间表示中的较小子张量(也被称为平铺块)。较低层级中间表示还可合并张量,或在一些罕见情况下,张量稍微变大。对于下一较低层级中间表示,在重新编译期间仅针对与装置张量524中标识的匹配-不匹配对直接相关的操作启用张量输出,使得在重新执行编译的机器指令期间生成装置张量526。
对于下一较低层级中间表示,在重新编译期间仅针对与装置张量526中标识的匹配-不匹配对直接相关的操作启用张量输出,使得在重新执行编译的机器指令期间生成装置张量528。对于下一较低层级中间表示,由于张量输出不可用,因此装置张量530由参考处理器模拟。装置张量530可与装置张量528中标识的匹配-不匹配对直接相关。对于下一较低层级中间表示,在重新编译期间仅针对与装置张量530中标识的匹配-不匹配对直接相关的操作启用张量输出,使得在重新执行编译的机器指令期间生成装置张量532。对于下一较低层级中间表示,在重新编译期间仅针对与装置张量532中标识的匹配-不匹配对直接相关的操作启用张量输出,使得在重新执行编译的机器指令期间生成装置张量534。
图6A和6B示出用于对目标处理器上的神经网络执行进行调试的方法600的示例。可按不同于示出的示例的次序执行方法600的一个或多个步骤,并且在方法600的执行期间可省略方法600的一个或多个步骤。
在步骤602,接收对目标处理器上的神经网络的执行进行调试的请求。在一些示例中,所述请求由在主机系统上运行的调试器程序接收。在一些示例中,所述请求指示神经网络和/或目标处理器。例如,所述请求可指示用于神经网络的程序代码存储在何处。在一些示例中,神经网络包含多个层。所述多个层中的每一者可包含一个或多个操作。
在步骤604,基于第一样本输入生成神经网络的多个第一参考张量。在一些示例中,使用不同于目标处理器的参考处理器生成所述多个第一参考张量。在一些示例中,由调试器程序生成和/或接收所述多个第一参考张量。例如,调试器程序可模拟神经网络的执行以生成第一参考张量。在一些示例中,由编译器在编译期间生成第一参考张量。
在步骤606,反复地减少神经网络的多个层以产生神经网络的多个长度。针对所述多个长度中的每个特定长度,执行步骤608到612。所述神经网络可缩短可变量以便高效地得到其输出失败的最短神经网络。在一些示例中,每一迭代将神经网络缩短单个层。在一些示例中,每一迭代将神经网络缩短两个或更多个层。为了得到其输出失败的最短神经网络,可采用二分搜索,其中每一迭代将长度减半。如果得到其输出未失败的缩短的神经网络,则可通过将先前移除的层添加回来而延长神经网络,如参考3A-3D所描述。
在步骤608,将具有特定长度的神经网络转换(或编译)成第一机器指令。在一些示例中,具有特定长度的神经网络由编译器转换。在一些示例中,编译器在主机系统上运行。
在步骤610,使用目标处理器执行第一机器指令以生成第一装置张量。在一些示例中,基于第一样本输入或基于多个第一参考张量中的一者来执行第一机器指令。
在步骤612,确定第一装置张量是否匹配多个第一参考张量中的第一参考张量。所述第一参考张量可以是多个第一参考张量中对应于第一装置张量的参考张量。在一些示例中,调试器程序确定第一装置张量是否匹配第一参考张量。在一些示例中,如果两个张量之间的差不超过准确度阈值,则所述两个张量匹配。
在步骤614,标识其中第一装置张量不匹配第一参考张量的多个长度中的缩短长度。在一些示例中,标识其中第一装置张量不匹配第一参考张量的多个长度中的最短长度。在一些示例中,由调试器程序执行步骤614。
在步骤616,基于第二样本输入生成神经网络的较低层级表示的多个第二参考张量。第二样本输入可与第一样本输入不同或相同。在一些示例中,使用参考处理器生成多个第二参考张量。在一些示例中,神经网络的较低层级表示是神经网络的中间表示,其低于最高层级中间表示(例如,程序代码)并且高于最低层级中间表示(例如,机器指令)。在一些示例中,由调试器程序生成所述多个第二参考张量。例如,调试器程序可模拟神经网络的执行以生成第二参考张量。在一些示例中,由编译器在编译期间生成第二参考张量。
在步骤618,将具有缩短长度的神经网络转换(或编译)成第二机器指令。在一些示例中,具有缩短长度的神经网络由编译器转换。
在步骤620,当第二机器指令由目标处理器执行时,启用较低层级表示的张量输出。在一些示例中,在编译期间,编译器将引起较低层级表示的张量输出的额外指令添加到第二机器指令中。例如,额外指令中的一者或多者可对应于保存操作。在一些示例中,额外指令可进一步启用多个较低层级表示的张量输出。
在步骤622,使用目标处理器执行第二机器指令以生成较低层级表示的第二装置张量。在一些示例中,基于第二样本输入或基于多个第二参考张量中的一者来执行第二机器指令。对于其中额外指令启用多个较低层级表示的张量输出的示例,执行第二机器指令可使得生成神经网络的第二较低层级表示的第三装置张量。在此类示例中,较低层级表示可以是第一较低层级表示。
在步骤624,确定第二装置张量是否匹配多个第二参考张量中的第二参考张量。所述第二参考张量可以是多个第二参考张量中对应于第二装置张量的参考张量。在一些示例中,调试器程序确定第二装置张量是否匹配第二参考张量。在一些示例中,如果两个张量之间的差不超过准确度阈值,则所述两个张量匹配。对于其中额外指令启用神经网络的第二较低层级表示的张量输出从而使第三装置张量生成的示例,还可确定所述第三装置张量是否匹配所述多个第二参考张量中的第三参考张量。
图7包含示出上面可运行例如本文所描述的编译器730和调试器746的主机系统700的示例的框图。示出的主机系统700是计算装置的示例,并且包含处理器702、处理器存储器704、至少一个存储装置706、各种输入/输出(I/O)装置708和至少一个网络接口710。在图7的示例中,主机系统700还包含加速引擎712,所述加速引擎是可加速主机系统700执行的某些操作或计算的集成电路装置。在各种示例中,主机系统700可实施为数据中心中的服务器、台式计算机、膝上型计算机、平板电脑或智能电话,以及其它示例。在一些示例中,下文所论述的在主机系统700中执行或包含的操作或组件可在其它计算机装置中执行或包含。例如,编译器730可在主机系统700上执行,而加速引擎712位于不同主机系统处。
处理器702是可执行呈指令形式的程序代码的集成电路装置。所述程序代码可用于各种软件应用程序或工具,例如操作系统720、调试器746或编译器730。当处理器702执行程序时,用于所述程序的指令可存储在处理器存储器704中。所述指令还可存储在其它地方,例如存储装置706上,并且可在处理器702需要时加载到处理器存储器704中。处理器702还可将处理器存储器704用于临时存储处理器702操作的其它数据。在各种示例中,处理器存储器704是易失性存储器类型,例如随机存取存储器类型,但替代地或另外,非易失性存储器类型可用于处理器存储器704。
存储装置706是可包含非易失性存储器的装置的示例。例如,存储装置706可以是磁盘驱动器、固态驱动器或光学驱动器,以及其它示例。存储装置706还可以是非暂时性的,使得当存储装置706未通电时,存储在存储装置706上的程序代码和其它数据保持存在。
存储装置706是外围装置的一个示例,外围装置是可耦合到主机系统700以将功能添加到主机系统700的组件。外围装置的其它示例包含输入/输出装置708和网络接口710。输入/输出装置708可包含用户输入和输出装置,例如键盘、鼠标、触摸屏、麦克风、显示屏、扬声器、打印机和扫描仪,以及其它示例。可使用网络接口卡实施的网络接口710可提供对一个或多个网络的接入。网络接口710可包含例如物理端口以用于连接网络缆线和/或无线天线以与WiFi和/或蜂窝网络通信。网络接口710还可被描述为I/O装置。
加速引擎712也是另一类型的外围装置或I/O装置。加速引擎712是被专门构建以执行可由处理器702执行但可由加速引擎712更快地执行的某些操作的装置。例如,加速引擎712可以是神经网络加速器,并且因此比起由处理器702执行计算的情况,能够更高效地执行神经网络的大规模并行计算。作为另一示例,加速引擎712可以是图形处理单元(GPU),并且可被优化以执行图形渲染所需的计算。可由加速引擎712实施的装置的其它示例包含密码加速器、压缩和解压缩加速器、3D加速器、正则表达式加速器、安全加速器等。
在各种示例中,加速引擎712可执行程序代码以执行某些操作。例如,当加速引擎712是神经网络加速器时,加速引擎712可被编程以执行特定神经网络,例如执行图像辨识的神经网络或执行机器翻译的神经网络。作为另一示例,为了支持神经网络的执行,加速引擎712可被编程以执行操作,例如将用于神经网络的数据从(例如)处理器存储器704复制到加速引擎712中、将用于神经网络的输入数据从处理器存储器704复制到加速引擎712中,和/或将结果从加速引擎712复制到处理器存储器704中,以及其它示例。
为生成用于加速引擎712的程序代码,在各种示例中,主机系统700可执行编译器730。通常,编译器是将以人可读语言编写的程序代码转译为可由集成电路装置读取和处理的格式(例如,机器指令)的软件程序。在图7的示例中,加速引擎712是神经网络加速器,并且编译器730用于将神经网络描述编译为待由加速引擎712执行的指令。当加速引擎712实施不同类型的加速器时,可使用另一编译器。
可例如在操作系统720从输入/输出装置708接收键盘、鼠标、触摸屏、语音命令或其它输入时激活编译器730。输入还可包含用于编译器730的参数,例如用以编译和配置编译进程的选项的输入代码742。在激活编译器730后,处理器702可将用于编译器730的指令加载到处理器存储器704中,并且可执行所述指令。
在图7的示例中,编译器730包含各自执行不同操作以产生编译代码744的第一级732、第二级736和第三级740。在其它示例中,编译器730可将第一级732、第二级736和/或第三级740的操作组合到较少级中,或可将各级中的一者的操作划分到多个级中。
第一级732可接收并处理输入代码742。输入代码742可以例如Java、C++或Tensorflow以及许多其它示例等高级编程语言来描述程序。输入代码742可描述例如执行图像辨识、语音辨识、机器翻译或其它操作的步骤。可例如从存储装置706获得输入代码742。或者,尽管此处未示出,但输入代码742可位于处理器存储器704中或可使用网络接口710从网络位置获得。输入代码742的处理可包含将输入代码742中描述的操作排序为层,其中一个层的输出将输入提供到下一层。处理还可包含标识待由处理器702执行而非由加速引擎712执行的步骤。例如,通过驱动器722的执行,处理器702可能需要执行例如配置直接存储器存取(DMA)描述符以用于将数据移动到加速引擎712中或从加速引擎中移出数据以及其它示例等步骤。
第一级732的输出734可例如在层、节点和神经网络节点之间的连接中组织。第二级736可对此输出734执行中间处理。例如,在任何一个层中或在层中的任何一个节点处执行的操作可能对于加速引擎712来说过多而无法同时执行。加速引擎712可能例如具有有限量的本地存储空间以用于计算所需的数据,或所述计算可能超过加速引擎712可一次执行的量。在此示例中,第一级732可将层或节点的操作分解成较小操作,所述较小操作可符合加速引擎的本地存储器和/或可符合加速引擎712的计算量。第一级732的输出734的处理可包含其它步骤,例如安排或确定加速引擎712和/或处理器702将执行操作的次序,以及其它示例。
在各种示例中,第二级736的输出738包含待由加速引擎712的组件按执行步骤的次序执行的各种步骤。输出738可例如表示为数据流图,其中图中的节点表示存储器操作、计算和其它操作,并且节点之间的边或连接表示节点之间的依赖关系,例如数据依赖关系、存储器依赖关系或操作依赖关系,以及其它示例。
第三级740可对第二级736的输出738操作,并且在产生待由加速引擎712执行的指令之前执行各种步骤。这些步骤可包含例如移除冗余依赖关系、通过将同步指令插入到代码中而解析或处置节点之间的依赖关系、标识存储器使用情况或存储器带宽使用上的可能优化以及其它操作。
第三级740的输出是编译代码744,其可包含呈二进制格式的机器指令。在一些示例中,编译代码744可存储在处理器存储器704中。替代地或另外,可将编译代码744复制到存储装置706或到网络位置。如上所指出,加速引擎712可位于不同主机系统处,在此情况下,编译代码744可通过网络接口710发送到另一主机系统。
在图7的示例中,主机系统700可执行驱动器722,所述驱动器还可被称作装置驱动器或运行时驱动器,其管理加速引擎712。驱动器722可提供在主机系统700上(或另一主机系统上)执行的应用程序与加速引擎712之间的接口。例如,驱动器722可提供应用程序接口(API),所述API限定用于将输入数据馈送到加速引擎712并限定要对输入数据执行的操作的功能。在此示例和其它示例中,驱动器722可配置加速引擎712以执行所述操作。例如,驱动器722可标识加速引擎712将执行的神经网络,以及用于神经网络的编译代码744在处理器存储器704中或存储装置706上所处的位置。驱动器722还可将编译代码744加载到加速引擎712中或使加速引擎712加载所述编译代码,可加载或使加速引擎712加载神经网络将操作的输入数据,和/或可使加速引擎712执行输入数据。在加速引擎712结束后,加速引擎712可通知驱动器722,并且驱动器722可将结果传递回到请求所述结果的应用程序。
在一些实施例中,主机系统700可执行调试器746,所述调试器是可用于调试、检查和/或改进神经网络的功能的应用程序。调试器746可允许用户通过在编译代码744中设置断点来检查神经网络的不同层和节点的输入和输出。断点是执行代码将停止进一步执行的点,其中在断点之前的所有执行状态会被保留。在各种示例中,断点可被分配到特定指令、特定功能调用、程序计数器值或以其它方式标识的程序代码部分。一旦到达断点,调试器就可使用户能够看到变量的当前值、系统存储器的当前内容,和/或每次一个或多个指令地单步遍历(step through)程序代码,以及其它操作。
图8包含示出加速引擎800的示例的框图。加速引擎800是可包含可类似于图9中示出的加速器的一个或多个加速器802a-802n的集成电路的示例。
在图8的示例中,加速引擎800包含多个加速器802a-802n,其中的每一者可执行一组操作。在各种示例中,加速器802a-802n用于特定类型的操作,使得与由通用处理器执行类似操作相比,加速器802a-802n可快很多地执行操作。在各种示例中,为了执行一组操作,上面待执行操作的输入数据必须首先被移动到加速器802a-802n中。另外,在一些情况下,程序代码也移动到加速器802a-802n中,所述程序代码对加速器802a-802n将对数据执行的操作进行编程。在示出的示例中,加速引擎800包含n个加速器802a-802n。可包含在加速引擎800中的加速器的示例包含图形加速器、浮点加速器、神经网络加速器等。在各种示例中,加速器802a-802n可各自相同(例如,加速器中的每一者是图形加速器)或可不同(例如,加速器802a-802n包含图形加速器、浮点加速器和神经网络加速器)。
示例加速引擎800还包含用于与外部存储器通信的DRAM控制器842a-842k。在此示例中,使用DRAM 830实施外部存储器。在示出的示例中,加速引擎800包含k个DRAM控制器842a-842k,其中的每一者能够与一组独立的DRAM组通信。在其它示例中,其它类型的RAM技术可用于外部存储器。DRAM控制器842a-842k还可被称作存储器控制器。
在各种示例中,用于加速器802a-802n的输入数据和/或程序代码可存储在DRAM830中。不同程序可使加速器802a-802n执行不同操作。例如,当加速器中的一者是神经网络加速器时,一个程序可配置所述神经网络加速器以执行语音辨识,而另一程序可配置所述神经网络加速器以执行图像辨识。在各种示例中,不同加速器802a-802n可用不同程序编程,使得每个加速器执行不同的一组操作。在各种示例中,处理器848a-848s可管理程序代码从DRAM 830到加速器802a-802n的移动。
示例加速引擎800还包含用于与系统中的I/O装置832通信的I/O控制器844a-844p。加速引擎800可通过例如处理器总线与I/O装置通信。在一些示例中,可使用外围组件互连(PCI)和/或PCI总线协议的变型来实施处理器总线。处理器总线可将加速引擎800连接到例如输入和输出装置等I/O装置、存储器控制器、存储装置和/或网络接口卡,等。在一些示例中,I/O控制器844-844p可使加速引擎800能够充当主机处理器的I/O装置。例如,加速引擎800可以是来自主机处理器的输入数据以及指示将对输入数据执行的操作(例如,特定计算或分析)的命令的接收方。在示出的示例中,加速引擎800包含P个I/O控制器844a-844p,其中的每一者可包含单独的根联合体并且可与单独的一组I/O装置832通信。在其它示例中,其它标准化总线协议,例如超路径互连(UPI),可用于主机总线。在其它示例中,可使用专属总线协议。
加速引擎800中的数据的移动可由一个或多个处理器848a-848s管理,所述处理器还可被称作数据管理处理器。在图8的示例中,加速引擎800包含并入到装置中(例如,在同一硅管芯上)的s个处理器848a-848s。在其它示例中,处理器848a-848s可在加速引擎800的外部(例如,在不同管芯上和/或在不同封装中)。在一些示例中,处理器848a-848s可管理数据从I/O装置832到加速器802a-802n或DRAM 830的移动。例如,输入数据可位于I/O装置832处或处理器存储器中,并且处理器848a-848s可将来自I/O装置832或处理器存储器的输入移动到加速器中或到DRAM 830中。作为另一示例,用于加速器802a-802n的程序代码可位于I/O装置832上或处理器存储器中。
示例加速引擎800还包含DMA引擎846a-846d,其可在加速器802a-802n、DRAM控制器842a-842k和I/O控制器844a-844p之间移动数据。在示出的示例中,加速引擎800包含d个DMA引擎846a-846d。在一些实施方案中,DMA引擎846a-846d可被分配到特定任务,例如将数据从DRAM控制器842a-842d移动到加速器802a-802n,或在I/O控制器844a-844p与加速器802a-802n之间移动数据。这些任务可例如通过将描述符与DMA引擎846a-846d一起排队而分配,其中描述符标识数据块的地址和待执行的操作(例如,读取或写入)。例如,描述符可引导DMA引擎指示DMA控制器从DRAM 830读取数据块。作为另一示例,描述符可指示DMA引擎将DMA控制器读取的数据写入到加速器。其它描述符可用于将数据从加速器移动到DRAM830。
在各种示例中,处理器848a-848s中的每一者可负责管理不同加速器的数据移动。在一些示例中,处理器可管理多于一个加速器的数据移动。类似地,在各种示例中,可将处理器848a-848s中的每一者分配给一个或多个DMA引擎846a-846d。在这些和其它示例中,处理器848a-848s、加速器802a-802n和DMA引擎846a-846d之间的关联通过每个相应处理器正执行的程序代码确定。
在示例加速引擎800中,各种组件可通过芯片互连件820进行通信。芯片互连件820主要包含用于加速引擎800的组件之间路由数据的布线。在一些情况下,芯片互连件820可包含最小量的逻辑,例如用以控制数据方向的多路复用器、用于处置时钟域交叉的触发器和定时逻辑。
图9是示出集成电路装置的示例的框图。图9的示例示出加速器902。在各种示例中,对于一组输入数据(例如,输入数据950),加速器902可使用处理引擎阵列910、激活引擎916和/或池化引擎918执行计算。在一些示例中,示例加速器902可以是神经网络处理器等处理器的集成电路组件。处理器可具有其它集成电路组件,包含额外加速器引擎。
在各种实施方案中,存储器子系统904可包含多个存储器组914。在这些实施方案中,每个存储器组914可独立地存取,这意指一个存储器组的读取不依赖于另一存储器组的读取。类似地,写入到一个存储器组不影响或限制写入到不同存储器组。在一些情况下,可同时读取和写入每个存储器组。各种技术可用于具有可独立存取的存储器组914。例如,每个存储器组可以是物理上独立的存储器组件,其具有单独的且独立于每个其它存储器组的地址空间的地址空间。在此示例中,每个存储器组可具有至少一个读取通道并且可具有可同时使用的至少一个单独写入通道。在这些示例中,存储器子系统904可准许同时接入多个存储器组的读取或写入通道。作为另一示例,存储器子系统904可包含仲裁逻辑,使得例如多个存储器组914的输出之间的仲裁可使得多于一个存储器组的输出被使用。在这些和其它示例中,尽管总体由存储器子系统904管理,但每个存储器组可独立于任何其它存储器组来操作。
使存储器组914可独立存取可增大加速器902的效率。例如,值可被同时读取并提供到处理引擎阵列910的每个行,使得整个处理引擎阵列910可在一个时钟周期中使用。作为另一示例,可在由处理引擎阵列910计算的结果被写入到存储器子系统904的同时读取存储器组914。相比之下,单个存储器可能每次仅能够服务一个读取或写入。在单个存储器的情况下,在可开始处理引擎阵列910之前,例如可能需要多个时钟周期来读取处理引擎阵列910的每个行的输入数据。
在各种实施方案中,存储器子系统904可被配置成同时服务多个客户端,所述客户端包含处理引擎阵列910、激活引擎916、池化引擎918以及通过通信结构920接入存储器子系统904的任何外部客户端。在一些实施方案中,能够服务多个客户端可意指存储器子系统904至少具有与客户端一样多的存储器组。在一些情况下,处理引擎阵列910的每个行可算作单独的客户端。在一些情况下,处理引擎阵列910的每个列可输出结果,使得每个列可算作单独的写入客户端。在一些情况下,来自处理引擎阵列910的输出可被写入到存储器组914中,所述存储器组随后可向处理引擎阵列910提供输入数据。作为另一示例,激活引擎916和池化引擎918可包含多个执行通道,每个执行通道可以是单独的存储器客户端。例如,存储器组914可使用静态随机存取存储器(SRAM)实施。
在各种实施方案中,存储器子系统904可包含控制逻辑。例如,控制逻辑可记录存储器组914中的每一者的地址空间,标识要读取或写入的存储器组914,和/或在存储器组914之间移动数据。在一些实施方案中,存储器组914可硬接线到特定客户端。例如,一组存储器组914可被硬接线以将值提供到处理引擎阵列910的各行,其中一个存储器组服务一个行。作为另一示例,一组存储器组可硬接线以从处理引擎阵列910的列接收值,其中一个存储器组接收一个列的数据。
处理引擎阵列910是示例加速器902的计算矩阵。例如,处理引擎阵列910可执行并行积分、卷积、相关和/或矩阵乘法等。处理引擎阵列910包含布置成行和列的多个处理引擎911,使得由一个处理引擎911输出的结果可直接输入到另一处理引擎911中。因此,不在处理引擎阵列910的外部边上的处理引擎911可从其它处理引擎911而非从存储器子系统904接收数据以进行操作。
在各种示例中,处理引擎阵列910使用脉动执行,其中数据从不同方向以规律间隔到达每个处理引擎911。在一些示例中,输入数据可从左流入处理引擎阵列910中,并且权重值可在顶部加载。在一些示例中,权重和输入数据可从左流动,而部分和可从顶部流到底部。在这些和其它示例中,乘积累加操作作为对角波阵面(diagonal wave front)移动通过处理引擎阵列910,其中数据向右和向下移动跨过阵列。控制信号可与权重同时在左边输入,并且可连同计算一起流过并且向下流动。
在各种实施方案中,处理引擎阵列910中的列的数目确定处理引擎阵列910的计算量,并且行的数目确定用于实现处理引擎阵列910的最大利用率所需的存储器带宽。处理引擎阵列910可具有例如64列和428行,或某一其它数目的列和行。
图9中以插图示出处理引擎911的示例。如由此示例所示,处理引擎911可包含乘法器-累加器电路。来自左边的输入可包含例如输入数据i和权重值w,其中所述输入数据是从一组输入数据或一组中间结果取得的值,并且所述权重值来自将神经网络的一个层连接到下一层的一组权重值。例如,一组输入数据可以是提交以用于标识或对象辨识的图像、提供以用于语音辨识的音频片段、用于自然语言处理或机器翻译的文本的字符串,或需要分析以确定下一移动的游戏的当前状态等。在一些示例中,输入数据和权重值输出到右边,以用于输入到下一处理引擎911。
在示出的示例中,来自上方的输入可包含从另一处理引擎911或从处理引擎阵列910进行的前一轮计算提供的部分和p_in。当针对新的一组输入数据开始计算时,处理引擎阵列910的顶部行可接收p_in的固定值,例如零。如由此示例所示,i和w一起相乘,并且结果与p_in进行求和以产生可输入到另一处理引擎911中的新的部分和p_out。处理引擎911的各种其它实施方案是可能的。
来自处理引擎阵列910中的最后一行的输出可暂时存储在结果缓冲器912中。所述结果可以是中间结果,其可被写入到存储器组914以提供给处理引擎阵列910以进行额外计算。或者,所述结果可以是最终结果,其一旦被写入到存储器组914就可通过通信结构920从存储器子系统904读取,以由系统输出。
在一些实施方案中,加速器902包含激活引擎916。在这些实施方案中,激活引擎916可将来自处理引擎阵列910的结果组合成一个或多个输出激活。例如,对于卷积神经网络,来自多个通道的卷积可进行求和以产生用于单个通道的输出激活。在其它示例中,可能需要累加来自处理引擎阵列910中的一个或多个列的结果以产生用于神经网络中的单个节点的输出激活。在一些示例中,可绕过激活引擎916。
在各种示例中,激活引擎916可包含多个单独执行通道。在这些示例中,所述执行通道可对应于处理引擎阵列910的列,并且可对列的输出执行操作,其结果可存储在存储器子系统904中。在这些示例中,激活引擎916能够执行1个与n个之间的并行计算,其中n等于处理引擎阵列910中的列的数目。在一些情况下,可同时执行所述计算中的一者或多者。每个执行通道可执行的计算的示例包含指数、平方、平方根、恒等式、二元阶梯(binarystep)、双极阶梯(bipolar step)、反曲(sigmoidal)和斜坡(ramp),以及其它示例。
在一些实施方案中,加速器902可包含池化引擎918。池化是对处理引擎阵列910的列的输出的组合。组合可包含例如计算最大值、最小值、平均值、中值、总和、乘法或另一逻辑或数学组合。在各种示例中,池化引擎918可包含可对来自处理引擎阵列910的对应列的值进行操作的多个执行通道。在这些示例中,池化引擎918能够执行1个与n个之间的并行计算,其中n等于处理引擎阵列910中的列的数目。在各种示例中,池化引擎918的执行通道可并行和/或同时操作。在一些示例中,可绕过池化引擎918。
本文中,激活引擎916和池化引擎918可共同地被称作执行引擎。处理引擎阵列910是执行引擎的另一示例。执行引擎的另一示例是可位于加速器902外部的直接存储器存取(DMA)引擎。
输入数据950可到达通信结构920。通信结构920可将加速器902连接到处理器的其它组件,例如可从输入/输出(I/O)装置、存储驱动器或网络接口获得输入数据950的DMA引擎。输入数据950可例如是一维数据,例如字符串或数值序列,或可为二维数据,例如用于图像的像素值的阵列或用于音频信号的随时间推移的频率和幅值。在一些示例中,输入数据950可以是三维的,例如对于自动驾驶汽车所使用的情境信息或虚拟现实数据来说可以是这种情况。在一些实施方案中,存储器子系统904可包含用于输入数据950的单独缓冲器。在一些实施方案中,当加速器902接收输入数据950时,输入数据950可存储在存储器组914中。
在一些示例中,加速器902可实施神经网络处理引擎。在这些示例中,对于一组输入数据950,加速器902可运行神经网络以执行任务,而所述神经网络已针对所述任务进行了训练。对一组输入数据执行神经网络可被称作推断或执行推断。
神经网络的权重可连同神经网络将进行操作的输入数据950一起存储在存储器子系统904中。神经网络还可包含指令,所述指令可对处理引擎阵列910进行编程以对权重和输入数据执行各种计算。所述指令还可存储在存储器子系统904中、存储器组914中或单独指令缓冲器中。处理引擎阵列910可输出表示神经网络的个别层的输出的中间结果。在一些情况下,激活引擎916和/或池化引擎918可针对由神经网络的某些层调用的计算而启用。加速器902可将中间结果存储在存储器子系统904中以用于输入到处理引擎阵列910中以计算神经网络的下一层的结果。处理引擎阵列910还可从神经网络的最后一层输出最终结果。最终结果可存储在存储器子系统904中,接着被复制出来到主机处理器存储器或到另一位置。
图10包含示例网络1000的图,所述网络可包含一个或多个主机系统,例如图7中所示的主机系统。例如,图10的示例网络1000包含多个节点1002a-1002h,其中的一个或多个节点可以是例如在图7中示出的主机系统。节点1002a-1002h中的其它节点可以是其它计算装置,其中的每一者至少包含用于存储程序指令的存储器、用于执行指令的处理器,以及用于连接到网络1000的网络接口。
在各种示例中,网络1000可用于处理数据。例如,可在节点1002a-1002h中的一者处或从网络1000可与之通信的其它网络1008接收输入数据。在此示例中,输入数据可被引导到网络1000中包含加速引擎的节点,以供加速引擎操作并产生结果。所述结果可随后传送到所述节点或从中接收输入数据的其它网络。在各种示例中,输入数据可从各种源累积,所述源包含节点1002a-1002h中的一者或多者和/或位于其它网络1008中的计算装置,并且累积的输入数据可被引导到网络1000中的一个或多个主机系统。来自主机系统的结果随后可分布回到从中收集所述输入数据的源。
在各种示例中,节点1002a-1002h中的一者或多者可负责操作,例如累积输入数据以供主机系统操作、记录哪些主机系统忙碌以及哪些主机系统可接受更多工作、确定主机系统是否正确地和/或最高效地操作、监测网络安全和/或其它管理操作。
在图10的示例中,节点1002a-1002h使用具有点对点链路的交换架构彼此连接。所述交换架构包含多个交换机1004a-1004d,所述交换机可布置在例如Clos网络的多层网络中。在局域网(LAN)段之间筛选和转发包的网络装置可被称作交换机。交换机通常在数据链路层(层2)处操作,有时在开放系统互连(OSI)参考模型的网络层(层3)处操作,并且可支持若干包协议。图10的交换机1004a-1004d可连接到节点1002a-1002h,并在任何两个节点之间提供多个路径。
网络1000还可包含用于与其它网络1008连接的一个或多个网络装置,例如路由器1006。路由器使用报头和转发表来确定转发包的最佳路径,并且使用互联网控制消息协议(ICMP)等协议彼此通信并配置任何两个装置之间的最佳路由。图10的路由器1006可用于连接到其它网络1008,例如子网、LAN、广域网(WAN)和/或互联网。
在一些示例中,网络1000可包含许多不同类型的网络中的任一种或组合,例如电缆网络、互联网、无线网络、蜂窝网络和其它私用和/或公用网络。互连交换机1004a-1004d和路由器1006(若存在)可称作交换机结构1010、结构、网络结构或简称为网络。在计算机网络的上下文中,术语“结构”和“网络”在本文中可互换使用。
节点1002a-1002h可以是表示用户装置、服务提供商计算机或第三方计算机的主机系统、处理器节点、存储子系统和I/O机箱的任何组合。
用户装置可包含访问应用程序1032(例如网络浏览器或移动装置应用程序)的计算装置。在一些方面,应用程序1032可由计算资源服务或服务提供商托管、管理和/或提供。应用程序1032可允许用户与服务提供商计算机交互以例如访问网络内容(例如网页、音乐、视频等)。用户装置可以是计算装置,例如移动电话、智能电话、个人数字助理(PDA)、膝上型计算机、上网本计算机、台式计算机、精简客户端装置、平板电脑、电子图书(电子书)阅读器、游戏控制台等。在一些示例中,用户装置可通过其它网络1008与服务提供商计算机通信。另外,用户装置可以是由服务提供商计算机管理、控制的分布式系统的部分或以其它方式作为服务提供商计算机的部分(例如,与服务提供商计算机集成的控制台装置)。
图10的节点还可表示一个或多个服务提供商计算机。一个或多个服务提供商计算机可提供被配置成在用户装置上运行的本机应用程序,用户可与之交互。在一些示例中,服务提供商计算机可提供计算资源,例如但不限于客户端实体、低时延数据存储、持久数据存储、数据存取、管理、虚拟化、基于云的软件解决方案、电子内容性能管理等。服务提供商计算机还可操作以向用户提供网页寄存、数据库化、计算机应用程序开发和/或实施平台、前述内容的组合等。在一些示例中,服务提供商计算机可被提供为在托管计算环境中实施的一个或多个虚拟机。托管计算环境可包含一个或多个快速预配和释放的计算资源。这些计算资源可包含计算、联网和/或存储装置。托管计算环境也可被称作云计算环境。服务提供商计算机可包含一个或多个服务器,其可能布置在集群中,布置为服务器集群,或者作为彼此不相关联的个别服务器,并且可托管应用程序1032和/或基于云的软件服务。这些服务器可被配置为集成的分布式计算环境的部分。在一些方面,服务提供商计算机可另外或替代地包含计算装置,例如移动电话、智能电话、个人数字助理(PDA)、膝上型计算机、台式计算机、上网本计算机、服务器计算机、精简客户端装置、平板电脑、游戏控制台等。在一些情况下,服务提供商计算机可与一个或多个第三方计算机通信。
在一个示例配置中,节点1002a-1002h可包含至少一个存储器1018和一个或多个处理单元(或处理器1020)。处理器1020可在硬件、计算机可执行指令、固件或其组合中实施。处理器1020的计算机可执行指令或固件实施方案可包含以任何合适的编程语言编写的用于执行所描述的各种功能的计算机可执行或机器可执行指令。
在一些情况下,硬件处理器1020可以是单核处理器或多核处理器。多核处理器可包含同一处理器内的多个处理单元。在一些示例中,多核处理器可共享某些资源,例如总线和第二级或第三级高速缓存。在一些情况下,单核或多核处理器中的每个核心还可包含多个执行逻辑处理器(或执行线程)。在此类核心(例如,具有多个逻辑处理器的核心)中,也可共享执行管线的若干级以及较低级别的高速缓存。
存储器1018可存储可在处理器1020上加载和执行的程序指令,以及在执行这些程序期间生成的数据。取决于节点1002a-1002h的配置和类型,存储器1018可以是易失性的(例如RAM)和/或非易失性的(例如ROM、快闪存储器等)。存储器1018可包含操作系统1028、一个或多个数据存储器1030、一个或多个应用程序1032、一个或多个驱动器1034和/或用于实施本文中公开的特征的服务。
操作系统1028可支持节点1002a-1002h基本功能,例如调度任务、执行应用程序,和/或控制器外围装置。在一些实施方案中,服务提供商计算机可托管一个或多个虚拟机。在这些实施方案中,每个虚拟机可被配置成执行其自身的操作系统。操作系统的示例包含Unix、Linux、Windows、Mac OS、iOS、Android等。操作系统1028也可以是专属操作系统。
数据存储区1030可包含由操作系统1028、应用程序1032或驱动器1034使用和/或操作的永久性或暂时性数据。此类数据的示例包含网页、视频数据、音频数据、图像、用户数据等。在一些实施方案中,数据存储区1030中的信息可通过网络1008提供给用户装置。在一些情况下,数据存储区1030可另外或替代地包含存储的应用程序和/或驱动器。替代地或另外,数据存储区1030可存储标准和/或专属软件库,和/或标准和/或专属应用程序用户接口(API)库。存储在数据存储区1030中的信息可以是机器可读目标代码、源代码、解译代码或中间代码。
驱动器1034包含可提供节点中的组件之间的通信的程序。例如,一些驱动器1034可提供操作系统1028与额外存储装置1022、网络装置1024和/或I/O装置1026之间的通信。替代地或另外,一些驱动器1034可提供应用程序1032与操作系统1028和/或应用程序1032和服务提供商计算机可接入的外围装置之间的通信。在许多情况下,驱动器1034可包含提供易于理解的功能的驱动器(例如,打印机驱动器、显示器驱动器、硬盘驱动器、固态装置驱动器)。在其它情况下,驱动器1034可提供专属或专用功能。
服务提供商计算机或服务器还可包含额外存储装置1022,其可包含可移除存储装置和/或不可移除存储装置。额外存储装置1022可包含磁性存储装置、光盘、固态盘、快闪存储器和/或磁带存储装置。额外存储装置1022可与节点1002a-1002h容纳在相同的机箱中,或可在外部壳体中。存储器1018和/或额外存储装置1022以及其相关联的计算机可读介质可为计算装置提供计算机可读指令、数据结构、程序模块和其它数据的非易失性存储。在一些实施方案中,存储器1018可包含多种不同类型的存储器,例如SRAM、DRAM或ROM。
可移除和不可移除的存储器1018和额外存储装置1022是计算机可读存储介质的示例。例如,计算机可读存储介质可包含以用于存储信息的方法或技术实施的易失性或非易失性、可移除或不可移除介质,所述信息包含例如计算机可读指令、数据结构、程序模块或其它数据。存储器1018和额外存储装置1022是计算机存储介质的示例。可存在于节点1002a-1002h中的额外类型的计算机存储介质可包含但不限于PRAM、SRAM、DRAM、RAM、ROM、EEPROM、快闪存储器或其它存储器技术、CD-ROM、DVD或其它光学存储装置、盒式磁带、磁带、磁盘存储装置或其它磁性存储装置、固态驱动器,或可用于存储所要信息并且可由节点1002a-1002h访问的一些其它介质。计算机可读介质还包含任何上述介质类型的组合,包含一个介质类型的多个单元。
替代地或另外,计算机可读通信介质可包含计算机可读指令、程序模块或在例如载波或其它传输等数据信号内传输的其它数据。然而,如本文所使用,计算机可读存储介质不包含计算机可读通信介质。
节点1002a-1002h还可包含I/O装置1026,例如键盘、鼠标、笔、语音输入装置、触摸输入装置、显示器、扬声器、打印机等。节点1002a-1002h还可包含一个或多个通信信道1036。通信信道1036可提供节点1002a-1002h的各种组件可借以进行通信的介质。通信信道或多个通信信道1036可呈总线、环、交换结构或网络的形式。
节点1002a-1002h还可含有允许节点1002a-1002h与存储的数据库、另一计算装置或服务器、用户终端和/或网络1000上的其它装置通信的网络装置1024。
在一些实施方案中,网络装置1024是外围装置,例如基于PCI的装置。在这些实施方案中,网络装置1024包含用于与主机装置通信的PCI接口。术语“PCI”或“基于PCI”可用于描述PCI系列总线协议中的任何协议,包含原始PCI标准、PCI-X、加速图形端口(AGP)和快速PCI(PCIe)或基于本文所论述的PCI协议的任何其它改进或衍生协议。基于PCI的协议是用于将局部外围装置等装置连接到主机装置的标准总线协议。标准总线协议是一种数据传输协议,其规范已由各个制造商限定并采用。制造商确保兼容装置与实施总线协议的计算系统兼容,反之亦然。如本文中所使用,基于PCI的装置还包含使用非易失性存储器高速(NVMe)通信的装置。NVMe是用于使用PCIe访问附接到计算系统的非易失性存储介质的装置接口规范。例如,总线接口模块可实施NVMe,并且网络装置1024可使用PCIe接口连接到计算系统。
基于PCI的装置可包含一个或多个功能。“功能”描述可由网络装置1024提供的操作。功能的示例包含大容量存储控制器、网络控制器、显示控制器、存储器控制器、串行总线控制器、无线控制器以及加密和解密控制器等。在一些情况下,基于PCI的装置可包含多于一个功能。例如,基于PCI的装置可提供大容量存储控制器和网络适配器。作为另一示例,基于PCI的装置可提供两个存储控制器以控制两个不同的存储资源。在一些实施方案中,基于PCI的装置可具有多达八个功能。
在一些实施方案中,网络装置1024可包含单根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中的至少一个各自都存在。
本文中描述本公开的各种示例,包含本发明人已知的用于执行本公开的最佳模式。在阅读前面的描述后,这些示例的变型对于所属领域的技术人员而言将变得显而易见。本发明人预期所属领域的技术人员在适当时使用此类变型,并且本发明人预期本公开以与本文具体描述的方式不同的方式来实践。因此,本公开包含适用法律所准许的随附权利要求书中所述的主题的所有修改和等同物。此外,除非本文另外指示或另外明显与上下文相矛盾,否则本公开涵盖上文所描述的要素呈其所有可能变化形式的任何组合。
如下所使用,对一系列示例的任何提及应理解为对那些示例中的每一者的分别提及(例如,“示例1-4”应理解为“示例1、2、3或4”)。
示例1是一种调试目标处理器上的神经网络执行的方法,所述方法包括:由主机系统上运行的调试器程序接收对所述目标处理器上的神经网络的执行进行调试的请求,所述神经网络包括多个层;使用所述主机系统上的参考处理器并基于第一样本输入生成所述神经网络的多个第一参考张量;反复地减少所述神经网络的所述多个层以产生多个长度,并且针对多个长度中的每个特定长度:由所述主机系统上运行的编译器将具有所述特定长度的神经网络转换成第一机器指令,使用所述目标处理器并基于第一样本输入或基于多个第一参考张量中的一者执行所述第一机器指令以生成第一装置张量,并且由所述调试器程序确定所述第一装置张量是否匹配所述多个第一参考张量中的第一参考张量;标识其中所述第一装置张量不匹配所述第一参考张量的所述多个长度中的最短长度;使用所述参考处理器并基于第二样本输入生成具有所述最短长度的所述神经网络的较低层级表示的多个第二参考张量;由所述编译器将具有所述最短长度的所述神经网络转换成第二机器指令,其中所述第二机器指令包含启用所述较低层级表示的张量输出的额外指令;使用所述目标处理器并基于所述第二样本输入或基于多个第二参考张量中的一者执行所述第二机器指令以生成所述较低层级表示的第二装置张量;以及由所述调试器程序确定所述第二装置张量是否匹配所述多个第二参考张量中的第二参考张量。
示例2是示例1的方法,其中所述额外指令启用所述神经网络的多个较低层级表示的张量输出。
示例3是示例2的方法,其中执行所述第二机器指令进一步生成所述神经网络的第二较低层级表示的第三装置张量,其中所述较低层级表示是第一较低层级表示。
示例4是示例3的方法,其还包括:由调试器程序确定所述第三装置张量是否匹配所述多个第二参考张量中的第三参考张量。
示例5是示例1-4的方法,其中所述多个第一参考张量和所述多个第二参考张量由所述调试器程序生成。
示例6是一种调试目标处理器上的神经网络执行的方法,所述方法包括:接收神经网络的多个第一参考张量;反复地减少所述神经网络的多个层以产生多个长度,并且针对多个长度中的每个特定长度:由编译器将具有所述特定长度的神经网络转换成第一机器指令,使用所述目标处理器执行所述第一机器指令以生成第一装置张量,并且确定所述第一装置张量是否匹配所述多个第一参考张量中的第一参考张量;标识其中所述第一装置张量不匹配所述第一参考张量的所述多个长度中的缩短长度;生成具有所述缩短长度的所述神经网络的较低层级表示的多个第二参考张量;由所述编译器将具有所述缩短长度的所述神经网络转换成第二机器指令;以及使用所述目标处理器执行所述第二机器指令以生成所述较低层级表示的第二装置张量。
示例7是示例6的方法,其中所述缩短长度是所述多个长度中的最短长度。
示例8是示例6或7的方法,其还包括:由所述调试器程序确定所述第二装置张量是否匹配所述多个第二参考张量中的第二参考张量。
示例9是示例6-8中的任一者的方法,其中所述第二机器指令包含启用所述较低层级表示的张量输出的额外指令。
示例10是示例9的方法,其中所述额外指令启用所述神经网络的多个较低层级表示的张量输出。
示例11是示例10的方法,其中执行所述第二机器指令进一步生成所述神经网络的第二较低层级表示的第三装置张量,其中所述较低层级表示是第一较低层级表示。
示例12是示例11的方法,其还包括:由所述调试器程序确定所述第三装置张量是否匹配所述多个第二参考张量中的第三参考张量。
示例13是示例6-12中的任一者的方法,其中所述多个第一参考张量和所述多个第二参考张量由所述调试器程序生成。
示例14是一种包括指令的非暂时性计算机可读介质,所述指令在由一个或多个处理器执行时,使所述一个或多个处理器执行包含以下各项的操作:接收神经网络的多个第一参考张量;反复地减少所述神经网络的多个层以产生多个长度,并且针对多个长度中的每个特定长度:由编译器将具有所述特定长度的所述神经网络转换成第一机器指令,使用目标处理器执行所述第一机器指令以生成第一装置张量,并且确定所述第一装置张量是否匹配所述多个第一参考张量中的第一参考张量;标识其中所述第一装置张量不匹配所述第一参考张量的所述多个长度中的缩短长度;生成具有所述缩短长度的所述神经网络的较低层级表示的多个第二参考张量;由所述编译器将具有所述缩短长度的所述神经网络转换成第二机器指令;以及使用所述目标处理器执行所述第二机器指令以生成所述较低层级表示的第二装置张量。
示例15是示例14的非暂时性计算机可读介质,其中所述缩短长度是所述多个长度中的最短长度。
示例16是示例14或15的非暂时性计算机可读介质,其中所述操作还包括:由所述调试器程序确定所述第二装置张量是否匹配所述多个第二参考张量中的第二参考张量。
示例17是示例14-16中的任一者的非暂时性计算机可读介质,其中所述第二机器指令包含启用所述较低层级表示的张量输出的额外指令。
示例18是示例17的非暂时性计算机可读介质,其中所述额外指令启用所述神经网络的多个较低层级表示的张量输出。
示例19是示例18的非暂时性计算机可读介质,其中执行所述第二机器指令进一步生成所述神经网络的第二较低层级表示的第三装置张量,其中所述较低层级表示是第一较低层级表示。
示例20是示例19的非暂时性计算机可读介质,其中所述操作还包括:由所述调试器程序确定所述第三装置张量是否匹配所述多个第二参考张量中的第三参考张量。
示例21是一种包括一个或多个处理器和非暂时性计算机可读介质的系统,所述非暂时性计算机可读介质包括指令,所述指令在由一个或多个处理器执行时使所述一个或多个处理器执行包括以下各项的操作:接收神经网络的多个第一参考张量;反复地减少所述神经网络的多个层以产生多个长度,并且针对多个长度中的每个特定长度:由编译器将具有所述特定长度的所述神经网络转换成第一机器指令,使用目标处理器执行所述第一机器指令以生成第一装置张量,并且确定所述第一装置张量是否匹配所述多个第一参考张量中的第一参考张量;标识其中所述第一装置张量不匹配所述第一参考张量的所述多个长度中的缩短长度;生成具有所述缩短长度的所述神经网络的较低层级表示的多个第二参考张量;由所述编译器将具有所述缩短长度的所述神经网络转换成第二机器指令;以及使用所述目标处理器执行所述第二机器指令以生成所述较低层级表示的第二装置张量。
示例22是示例21的系统,其中所述缩短长度是所述多个长度中的最短长度。
示例23是示例21或22的系统,其中所述操作还包括:由所述调试器程序确定所述第二装置张量是否匹配所述多个第二参考张量中的第二参考张量。
示例24是示例21-23中的任一者的系统,其中所述第二机器指令包含启用所述较低层级表示的张量输出的额外指令。
示例25是示例24的系统,其中所述额外指令启用所述神经网络的多个较低层级表示的张量输出。
示例26是示例25的系统,其中执行第二机器指令进一步生成所述神经网络的第二较低层级表示的第三装置张量,其中所述较低层级表示是第一较低层级表示。
示例27是示例26的系统,其中所述操作还包括:由调试器程序确定所述第三装置张量是否匹配所述多个第二参考张量中的第三参考张量。
Claims (15)
1.一种调试目标处理器上的神经网络执行的方法,所述方法包括:
接收神经网络的多个第一参考张量;
反复地减少所述神经网络的多个层以产生多个长度,并且针对多个长度中的每个特定长度:
由编译器将具有所述特定长度的所述神经网络转换成第一机器指令;
使用所述目标处理器执行所述第一机器指令以生成第一装置张量;并且
确定所述第一装置张量是否匹配所述多个第一参考张量中的第一参考张量;标识其中所述第一装置张量不匹配所述第一参考张量的所述多个长度中的缩短长度;
生成具有所述缩短长度的所述神经网络的较低层级表示的多个第二参考张量;
由所述编译器将具有所述缩短长度的所述神经网络转换成第二机器指令;以及
使用所述目标处理器执行所述第二机器指令以生成所述较低层级表示的第二装置张量。
2.根据权利要求1所述的方法,其中所述缩短长度是所述多个长度中的最短长度。
3.根据权利要求1或2所述的方法,其还包括:
由调试器程序确定所述第二装置张量是否匹配所述多个第二参考张量中的第二参考张量。
4.根据权利要求1至3中任一项所述的方法,其中所述第二机器指令包含启用所述较低层级表示的张量输出的额外指令。
5.根据权利要求4所述的方法,其中所述额外指令启用所述神经网络的多个较低层级表示的张量输出。
6.根据权利要求5所述的方法,其中执行所述第二机器指令还生成所述神经网络的第二较低层级表示的第三装置张量,其中所述较低层级表示是第一较低层级表示。
7.根据权利要求6所述的方法,其还包括:
由所述调试器程序确定所述第三装置张量是否匹配所述多个第二参考张量中的第三参考张量。
8.根据权利要求1至7中任一项所述的方法,其中所述多个第一参考张量和所述多个第二参考张量由所述调试器程序生成。
9.一种包括指令的非暂时性计算机可读介质,所述指令在由一个或多个处理器执行时,使所述一个或多个处理器执行包含以下各项的操作:
接收神经网络的多个第一参考张量;
反复地减少所述神经网络的多个层以产生多个长度,并且针对多个长度中的每个特定长度:
由编译器将具有所述特定长度的所述神经网络转换成第一机器指令;
使用目标处理器执行所述第一机器指令以生成第一装置张量;并且
确定所述第一装置张量是否匹配所述多个第一参考张量中的第一参考张量;标识其中所述第一装置张量不匹配所述第一参考张量的所述多个长度中的缩短长度;
生成具有所述缩短长度的所述神经网络的较低层级表示的多个第二参考张量;
由所述编译器将具有所述缩短长度的所述神经网络转换成第二机器指令;以及
使用所述目标处理器执行所述第二机器指令以生成所述较低层级表示的第二装置张量。
10.根据权利要求9所述的非暂时性计算机可读介质,其中所述缩短长度是所述多个长度中的最短长度。
11.根据权利要求9或10所述的非暂时性计算机可读介质,其中所述操作还包括:
由所述调试器程序确定所述第二装置张量是否匹配所述多个第二参考张量中的第二参考张量。
12.根据权利要求9至11中任一项所述的非暂时性计算机可读介质,其中所述第二机器指令包含启用所述较低层级表示的张量输出的额外指令。
13.根据权利要求12所述的非暂时性计算机可读介质,其中所述额外指令启用所述神经网络的多个较低层级表示的张量输出。
14.根据权利要求13所述的非暂时性计算机可读介质,其中执行所述第二机器指令还生成所述神经网络的第二较低层级表示的第三装置张量,其中所述较低层级表示是第一较低层级表示。
15.一种系统,其包括:
一个或多个处理器;和
包括指令的非暂时性计算机可读介质,所述指令在由一个或多个处理器执行时使所述一个或多个处理器执行包括以下各项的操作:
接收神经网络的多个第一参考张量;
反复地减少所述神经网络的多个层以产生多个长度,并且针对多个长度中的每个特定长度:
由编译器将具有所述特定长度的所述神经网络转换成第一机器指令;
使用目标处理器执行所述第一机器指令以生成第一装置张量;并且
确定所述第一装置张量是否匹配所述多个第一参考张量中的第一参考张量;
标识其中所述第一装置张量不匹配所述第一参考张量的所述多个长度中的缩短长度;
生成具有所述缩短长度的所述神经网络的较低层级表示的多个第二参考张量;
由所述编译器将具有所述缩短长度的所述神经网络转换成第二机器指令;以及
使用所述目标处理器执行所述第二机器指令以生成所述较低层级表示的第二装置张量。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/455,329 | 2019-06-27 | ||
US16/455,329 US11308396B2 (en) | 2019-06-27 | 2019-06-27 | Neural network layer-by-layer debugging |
PCT/US2020/039872 WO2020264335A1 (en) | 2019-06-27 | 2020-06-26 | Neural network layer-by-layer debugging |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114008635A true CN114008635A (zh) | 2022-02-01 |
Family
ID=71728910
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080045618.3A Pending CN114008635A (zh) | 2019-06-27 | 2020-06-26 | 神经网络逐层调试 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11308396B2 (zh) |
CN (1) | CN114008635A (zh) |
DE (1) | DE112020003105T5 (zh) |
WO (1) | WO2020264335A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115879544A (zh) * | 2023-02-28 | 2023-03-31 | 中国电子科技南湖研究院 | 一种针对分布式类脑仿真的神经元编码方法及系统 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11449711B2 (en) * | 2020-01-02 | 2022-09-20 | Applied Materials Isreal Ltd. | Machine learning-based defect detection of a specimen |
US11347488B2 (en) * | 2020-05-18 | 2022-05-31 | Fortinet, Inc. | Compiling domain-specific language code to generate executable code targeting an appropriate type of processor of a network device |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109542713B (zh) | 2019-02-21 | 2021-07-09 | 深兰人工智能芯片研究院(江苏)有限公司 | 一种验证方法及验证装置 |
US11694090B2 (en) * | 2019-04-10 | 2023-07-04 | International Business Machines Corporation | Debugging deep neural networks |
US11556861B2 (en) * | 2019-05-06 | 2023-01-17 | Google Llc | Debugging correctness issues in training machine learning models |
-
2019
- 2019-06-27 US US16/455,329 patent/US11308396B2/en active Active
-
2020
- 2020-06-26 DE DE112020003105.5T patent/DE112020003105T5/de active Pending
- 2020-06-26 CN CN202080045618.3A patent/CN114008635A/zh active Pending
- 2020-06-26 WO PCT/US2020/039872 patent/WO2020264335A1/en active Application Filing
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115879544A (zh) * | 2023-02-28 | 2023-03-31 | 中国电子科技南湖研究院 | 一种针对分布式类脑仿真的神经元编码方法及系统 |
CN115879544B (zh) * | 2023-02-28 | 2023-06-16 | 中国电子科技南湖研究院 | 一种针对分布式类脑仿真的神经元编码方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
WO2020264335A1 (en) | 2020-12-30 |
US20200410354A1 (en) | 2020-12-31 |
DE112020003105T5 (de) | 2022-05-19 |
US11308396B2 (en) | 2022-04-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11868895B2 (en) | Dynamic processing element array expansion | |
US20190180170A1 (en) | Multi-memory on-chip computational network | |
CN111465943B (zh) | 一种集成电路和用于神经网络处理的方法 | |
US20210295168A1 (en) | Gradient compression for distributed training | |
CN114008635A (zh) | 神经网络逐层调试 | |
CN113469355B (zh) | 分布式系统中的多模型训练管道 | |
US11144291B1 (en) | Loop-oriented neural network compilation | |
US11567778B2 (en) | Neural network operation reordering for parallel execution | |
US20210158131A1 (en) | Hierarchical partitioning of operators | |
US11275661B1 (en) | Test generation of a distributed system | |
US11562554B1 (en) | Workload reduction for non-maximum suppression operation | |
US11461662B1 (en) | Compilation time reduction for memory and compute bound neural networks | |
US20220245397A1 (en) | Updating of statistical sets for decentralized distributed training of a machine learning model | |
US11610128B2 (en) | Neural network training under memory restraint | |
Nunez et al. | A formal framework to analyze cost and performance in map-reduce based applications | |
US11748622B1 (en) | Saving intermediate outputs of a neural network | |
US20080275683A1 (en) | kD TREE AND ENVELOPE TO IMPROVE IDENTIFICATION OF NEAREST ATOMS | |
US11782706B1 (en) | Reconfigurable neural network processing based on subgraph recognition | |
US11442794B1 (en) | Event assignment for synchronization of concurrent execution engines | |
US11809849B1 (en) | Global modulo allocation in neural network compilation | |
US11947940B2 (en) | Training data augmentation via program simplification | |
US11188302B1 (en) | Top value computation on an integrated circuit device | |
US11841792B1 (en) | Instructions with multiple memory access modes | |
US12008466B1 (en) | Processor with control flow | |
JP2023051815A (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 |