CN115398395A - 具有用于同时处理不同类运算的独立数据路径的深度神经网络加速器 - Google Patents

具有用于同时处理不同类运算的独立数据路径的深度神经网络加速器 Download PDF

Info

Publication number
CN115398395A
CN115398395A CN202180026885.0A CN202180026885A CN115398395A CN 115398395 A CN115398395 A CN 115398395A CN 202180026885 A CN202180026885 A CN 202180026885A CN 115398395 A CN115398395 A CN 115398395A
Authority
CN
China
Prior art keywords
datapath
instruction
instructions
operations
chain
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202180026885.0A
Other languages
English (en)
Inventor
S·S·杨
L·C·科帕卡
S·K·莱因哈特
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN115398395A publication Critical patent/CN115398395A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Optimization (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Neurology (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Abstract

描述了具有独立数据路径的深度神经网络加速器(DNN)和相关方法,数据路径用于同时处理不同类运算。示例DNN加速器包括用于接收指令链的指令调度器,该指令链具有用于执行与神经网络模型相对应的第一类运算和第二类运算的指令。DNN加速器还包括第一数据路径和第二数据路径,其中每个数据路径被配置为在输出任何结果之前在本地执行至少一个指令链。指令调度器被配置为将用于执行第一类运算的指令转发到第一数据路径并且将用于执行第二类运算的指令转发到第二数据路径,以在时间上将第一类运算的至少一个子集的执行与第二类运算的至少一个子集的执行重叠。

Description

具有用于同时处理不同类运算的独立数据路径的深度神经网 络加速器
背景技术
神经网络技术用于执行复杂的任务,诸如阅读理解、语言翻译或语音识别。尽管神经网络可以执行此类任务,但是使用通用CPU或通用GPU部署它们的成本很高。另外,虽然GPU相对于CPU提供了更高的吞吐量,但它们的时延很差。用于加速此类任务执行的硬件加速器在改善时延方面也受到限制。
发明内容
在一个示例中,本公开涉及一种深度神经网络(DNN)加速器,包括被配置为接收一个或多个指令链的指令调度器,其中一个或多个指令链中的至少一个指令链包括用于执行与神经网络模型相对应的第一类运算的指令和用于执行与神经网络模型相对应的第二类运算的指令两者。DNN加速器还可以包括第一数据路径,第一数据路径包括至少一个矩阵寄存器文件和至少一个矩阵向量乘法器。DNN加速器还可以包括与第一数据路径不同的第二数据路径,第二数据路径包括至少一个向量寄存器文件和至少一个功能单元,其中第一数据路径和第二数据路径中的每个数据路径被配置为在输出任何结果之前在本地执行至少一个指令链,并且其中指令调度器被配置为将用于执行第一类运算的至少第一指令集转发到第一数据路径并且将用于执行第二类运算的至少第二指令集转发到第二数据路径,并且其中第一数据路径和第二数据路径被配置为在时间上将与第一指令集相对应的至少第一类运算的子集的执行和与第二指令集相对应的至少第二类运算的子集的执行重叠。
在另一示例中,本公开涉及一种在深度神经网络(DNN)加速器中的方法,该深度神经网络加速器包括被配置为接收一个或多个指令链的指令调度器,其中一个或多个指令链中的至少一个指令链包括用于执行与神经网络模型相对应的第一类运算的指令和用于执行与神经网络模型相对应的第二类运算的指令两者,第一数据路径包括至少一个矩阵寄存器文件和至少一个矩阵向量乘法器,与第一数据路径不同的第二数据路径包括至少一个向量寄存器文件和至少一个功能单元,其中第一数据路径和第二数据路径中的每个数据路径被配置为在输出任何结果之前在本地执行至少一个指令链。该方法可以包括指令调度器将用于执行第一类运算的至少第一指令集转发到第一数据路径。该方法还可以包括指令调度器将用于执行第二类运算的至少第二指令集转发到第二数据路径。该方法还可以包括使用第一数据路径和第二数据路径在时间上将与第一指令集相对应的至少第一类运算的子集的执行和与第二指令集相对应的至少第二类运算的子集的执行重叠。
在又一示例中,本公开涉及一种包括第一数据路径的深度神经网络(DNN)加速器,第一数据路径包括至少一个矩阵寄存器文件和至少一个矩阵向量乘法器。DNN加速器还可以包括与第一数据路径不同的第二数据路径,第二数据路径包括至少一个向量寄存器文件和至少一个功能单元。DNN加速器还可以包括耦合到与第一数据路径相关联的第一本地存储器和与第二数据路径相关联的第二本地存储器的交换机。DNN加速器还可以包括指令调度器,指令调度器被配置为:(1)从至少一个指令队列访问一个或多个指令链,其中一个或多个指令链中的至少一个指令链包括用于执行与神经网络模型相对应的第一类运算的指令和用于执行与神经网络模型相对应的第二类运算的指令两者,以及(2)将至少一个或多个指令链分成包括仅用于执行第一类运算的指令的第一链和包括仅用于执行第二类运算的指令的第二链。指令调度器还可以被配置为将第一链转发到第一数据路径并且将第二链转发到第二数据路径,其中第一数据路径被配置为在输出任何结果之前使用第一本地存储器执行第一链,并且第二数据路径被配置为在输出任何结果之前使用第二本地存储器执行第二链,并且其中第一数据路径和第二数据路径还被配置为在时间上将与第一链相对应的至少第一类运算的子集的执行和与第二链相对应的至少第二类运算的子集的执行重叠。
提供本发明内容是为了以简化形式介绍概念的选择,这些概念将在下面的详细描述中进一步描述。本发明内容并非旨在标识所要求保护的主题的关键特征或基本特征,也不旨在用于限制所要求保护的主题的范围。
附图说明
本公开通过示例的方式示出并且不受附图限制,其中相同的附图标记指示相似的元素。附图中的元素是为了简单和清楚而示出的并且不必然按比例绘制。
图1是根据一个示例的与深度神经网络(DNN)加速器相关联的神经功能单元(NFU)的架构图;
图2是根据一个示例的与DNN加速器相关联的另一NFU的架构图;
图3是根据一个示例的包括经由数据中心网络互连的DNN加速器的系统的框图;
图4是根据一个示例的包括DNN加速器的系统的框图;
图5是根据一个示例的DNN加速器的框图;
图6是根据一个示例的神经功能单元的框图;
图7是根据一个示例的另一神经功能单元的框图;
图8是根据一个示例的时序图,其示出了在时间上重叠的、用于由神经功能单元执行的链式指令;
图9是根据一个示例的另一时序图,其示出了在时间上重叠的、用于由神经功能单元执行的链式指令;
图10是根据一个示例的另一时序图,其示出了在时间上重叠的、用于由神经功能单元执行的链式指令;以及
图11示出了根据一个示例的用于处理指令的方法的流程图。
具体实施方式
本公开中公开的示例涉及使用用于实现基于神经网络的处理的系统、方法和组件。某些示例与深度神经网络(DNN)有关。DNN可以是进行深度学习的任何合适的神经网络。如本文所用,术语DNN包括但不限于在输入层与输出层之间包括至少两层的任何神经网络。本公开中的某些示例涉及具有用于同时处理不同类运算的独立数据路径的DNN加速器。DNN加速器可以使用现场可编程门阵列(FPGA)、专用集成电路(ASIC)、可擦除和/或复杂可编程逻辑器件(PLD)、可编程阵列逻辑(PAL)器件和通用阵列逻辑(GAL)器件的部分或组合来实现。图像文件可以用于配置或重新配置诸如FPGA的DNN加速器。图像文件或类似文件或程序可以经由网络链接或本地链接(例如,PCIe)从主机CPU被递送。图像文件中包括的信息可以用于对DNN加速器的硬件块(例如,FPGA的逻辑块和可重新配置的互连)进行编程,以实现期望的功能性。期望的功能性可以被实现以支持可以经由计算资源、联网资源和存储资源的组合提供的任何服务,诸如经由数据中心或其他用于递送服务的基础设施。
某些示例还可以涉及DNN加速器,该DNN加速器可以被配置为处理不仅包括张量运算(例如,矩阵-向量乘法运算)而且还包括其他异构非线性运算(例如,softmax)的模型。作为示例,基于变换器的模型(诸如,来自变换器的双向编码器表示(BERT)模型、GPT-2模型和RoBERTa)包括多类运算。当使用布置在顺序数据路径中的功能单元实现时,此类模型可能会遇到停顿和其他执行问题。本公开中的某些示例涉及根据它们负责的运算类型将DNN加速器中的顺序管线化的数据路径分成多个独立的数据路径,使得多类DNN运算可以利用仅本地通信的单线程SIMD编程模型同时执行。
图1是根据一个示例的与深度神经网络(DNN)加速器相关联的神经功能单元(NFU)100的架构图。NFU 100可以包括两个独立的数据路径,包括数据路径110和数据路径120。在该示例中,数据路径110可以被配置为矩阵处理单元(MPU),其可以执行张量运算,诸如矩阵-向量乘法运算或矩阵求逆运算。数据路径110还可以包括用于执行激活运算的多功能(MFU)单元。数据路径110可以被配置为主要处理第一类运算(例如,基于矩阵的运算)。在该示例中,数据路径120可以被配置为向量处理单元(VPU),其可以执行张量运算,诸如向量-向量加法运算、向量-向量乘法运算、向量-向量减法运算或其他非线性运算。数据路径110还可以耦合到本地存储器130和本地交换机150。数据路径120可以耦合到本地存储器140和本地交换机160。图1中所示的示例NFU 100有利地增加了数据路径的有效利用并且减少了推理时延。这是因为图1中的NFU 100通过将数据管道拆分为多个独立的数据路径并且允许指令利用反馈在本地同时执行,来移除由于结构危险而导致的任何停顿。因此,作为示例,诸如BERT模型的基于变换器的模型可以采用图1所示的分区方案。尽管图1将NFU 100示出为具有以某种方式布置的一定数目的组件,但是NFU 100可以包括以不同方式布置的附加组件或更少组件。
图2是根据一个示例的与深度神经网络(DNN)加速器相关联的神经功能单元(NFU)200的架构图。然而,如图2所示,分区方案不限于仅仅两个数据路径;相反,该方案可以扩展到任意数目的数据路径,其允许同时运行需要矩阵处理的层和需要向量处理的层。作为示例,每个数据路径在其本地循环中执行多个指令链,最后通过本地交换机交换结果数据并且重复这些步骤。一系列步骤可以与指令链有关,该指令链可以包括单线程程序中的SIMD指令集,该单线程程序从读取指令开始,以写入指令结束,包括所有中间数据运算指令(例如,矩阵乘法或激活运算)。每当存在使用不同数据路径的背靠背指令链流时,这种布置可以最大限度地利用两个数据路径。这是因为一个链的时延对另一链的时延隐藏,从而降低了总推理时延。
继续参考图2,NFU 200可以包括四个独立的数据路径,包括数据路径A 202、数据路径B 204、数据路径C 206和数据路径D 208。在该示例中,数据路径中的每个数据路径可以被配置为矩阵处理单元(MPU),它可以执行张量运算,诸如矩阵-向量乘法运算或矩阵求逆运算,或者可以被配置为向量处理单元(VPU),它可以执行张量运算,诸如向量-向量加法运算、向量-向量乘法运算、向量-向量减法运算或其他非线性运算。数据路径A 202还可以耦合到本地存储器212和本地交换机222。数据路径B 204还可以耦合到本地存储器214和本地交换机224。数据路径C 206还可以耦合到本地存储器216和本地交换机226。数据路径D208还可以耦合到本地存储器218和本地交换机228。虽然图2将NFU 200示出为具有以某种方式布置的一定数目的组件,但是NFU 200可以包括以不同方式布置的附加组件或更少组件。作为示例,数据路径的数目可以扩展到神经网络模型所需的任意数目的数据路径。
图1和图2中所示架构的一个益处是该架构对异构运算的适应性及其对快速演变的DNN模型中新运算符的敏捷性/灵活性。因为在这种架构中,每个分区数据路径都分配有特定的运算集,不仅可以根据分配的运算类型更好地优化每个数据路径,而且可以增量添加新类型的运算符。作为示例,关于图1描述的双向分区可以优化一个数据路径用于重张量运算,而另一个用于非线性归一化运算,诸如softmax和层归一化。这些优点可以使用可配置逻辑来实现,诸如FPGA,它利用给定硅区域的更灵活使用。因此,作为示例,取决于可用的FPGA资源,可以相应地配置每个数据路径,并且当需要引入新的运算符时,可以轻松地将新数据路径与现有数据路径相加。除了FPGA,也可以使用其他类型的可配置硬件逻辑。作为示例,专用集成电路(ASIC)、可擦除和/或复杂可编程逻辑器件(PLD)、可编程阵列逻辑(PAL)器件和通用阵列逻辑(GAL)器件也可以用于实现数据路径。
图1和图2中所示架构的另一优点是数据在分布式存储器中的本地化移动。因此,这些架构没有复杂的存储器层次结构,而是在运算期间将数据移动限制在其本地存储器中。因此,每个数据路径仅从/向其邻居接收/提供输入/输出,这很好地映射到DNN模型中的非循环数据流。相比之下,传统的加速器架构包括带有缓存的存储器层次结构,这增加了此类架构的成本。另外,全局共享存储器的使用需要多路复用来自多个内核的大量业务,这增加了与共享存储器架构相关联的复杂性,诸如同步和一致性。此外,有利的是,在所提出的架构中跨分布式存储器的局部数据移动有助于可扩展性,因为它只会随着分区或数据路径的添加而线性增加复杂性。
此外,本公开的DNN加速器的架构还提高了能量效率,因为通过最小化计算单元与外部存储器之间的事务来使用更少的能量。最终,本文描述的架构保留了单线程编程模型的使用。这允许更轻松的代码生成和来自编译器的附加优化。此外,该代码不需要同步锁,从而减轻了死锁的危险。相比之下,依赖于多线程或多进程编程模型的加速器架构可能需要额外的努力来编程、优化和验证。
在一个示例中,本公开还涉及一种DNN,该DNN包括多个节点,包括DNN加速器,或经由低时延网络彼此耦合的此类节点组。利用成百上千个此类节点(例如,FPGA)的融合平台可以有利地提供:(1)通过利用数十万个节点的并行性显著减少了训练/推理时间,(2)启用新的训练/推理场景,诸如在实时数据上进行在线学习,以及(3)在跨越数十万台服务器的超大规模数据中心中,在利用灵活并且可替代的同质FPGA资源时,训练前所未有规模的模型。在一个示例中,这些优点可以通过利用可以利用节点架构(诸如,FPGA)的非常规数据表示来获得。
所描述的各方面也可以在云计算环境中实现。云计算可以指用于实现对可配置计算资源的共享池的按需网络访问的模型。例如,云计算可以在市场上使用,以提供对可配置计算资源共享池的无处不在和方便的按需访问。可配置计算资源的共享池可以经由虚拟化被快速提供,并且以较低的管理工作量或服务提供方交互进行释放,然后进行相应的扩展。云计算模型可以由各种特性组成,诸如例如按需自助服务、广泛的网络访问、资源池化、快速弹性、测量的服务等。云计算模型可以用于公开各种服务模型,诸如例如硬件即服务(“HaaS”)、软件即服务(“SaaS”)、平台即服务(“PaaS”),以及基础设施即服务(“IaaS”)。云计算模型也可以使用不同的部署模型进行部署,诸如私有云、社区云、公共云、混合云等。
机器学习服务,诸如基于循环神经网络(RNN)、卷积神经网络(CNN)、长短期记忆(LSTM)神经网络或门控循环单元(GRU)的那些机器学习服务可以使用本公开中描述的系统和节点来实现。在一个示例中,服务相关内容或其他信息,诸如词、句子、图像、视频或其他此类内容/信息,可以被转换成向量表示。可以在服务初始化之前离线训练深度学习模型,然后可以使用本公开中描述的系统和节点来部署深度学习模型。节点可以是硬件可编程逻辑器件,其可以专门定制以执行在诸如DNN的神经网络的上下文中发生的运算类型。
在一个示例中,神经网络模型的状态和用于控制模型的参数可以在从外部存储器(例如,DRAM)传输之后,被存储在DNN加速器(例如,FPGA)的片上存储器(例如,BRAM)中。神经网络模型可以在服务启动时被固定(例如,预加载)到片上存储器,并且片上存储器的内容可以不被更改,除非模型需要更改或者其他事件需要用模型重新加载片上存储器。因此,在该示例中,神经网络模型可以首先从与硬件平台相关联的DRAM访问,然后直接加载到DNN加速器的片上存储器(例如,BRAM)中。
在一个示例中,神经网络模型可以由许多层组成,每个层都可以被编码为权重的矩阵或向量,其表示为经由神经网络的离线训练获得的系数或常数的形式。节点中的可编程硬件逻辑块可以处理矩阵或向量以执行各种运算,包括针对表示与服务相关的编码信息的输入向量的乘法、加法和其他运算。在一个示例中,权重的矩阵或向量可以通过使用诸如图分区的技术在多个DNN加速器上进行分区和固定。作为该过程的部分,大的神经网络可以被转换成中间表示(例如,图),然后中间表示可以被雕刻成更小的表示(例如,子图),并且与每个子图相对应的权重矩阵中的每个权重矩阵都可以被固定到DNN加速器的本地存储器中。在一个示例中,模型可以转换为固定大小的矩阵和向量。这样,DNN加速器的资源可以在固定大小的矩阵和向量上并行运行。
图3是根据一个示例的包括节点的系统300的框图,节点包括经由数据中心网络310互连的DNN加速器。例如,如图3所示,多个节点302、304和306可以经由数据中心网络310耦合。这些节点可以被实例化并且用于并行化神经网络模型的多个层,诸如来自变换器的双向编码器表示(BERT)模型。在一个示例中,每个节点可以被实现为服务器,并且还可以包括至少一个DNN加速器。因此,节点302可以包括DNN加速器322,节点304可以包括DNN加速器324,并且节点306可以包括DNN加速器326。DNN加速器可以经由基于轻量级传输层协议的系统互连。在一个示例中,DNN加速器322的第一实例可以经由传输链路332与DNN加速器324的第一实例耦合,并且DNN加速器322的第一实例可以进一步经由传输链路334与DNN加速器324的第二实例耦合。DNN加速器324的第一实例可以经由传输链路336与DNN加速器326的第一实例耦合,并且DNN加速器324的第一实例可以进一步经由传输链路340与DNN加速器326的第一实例耦合。类似地,DNN加速器324的第二实例可以经由传输链路342与DNN加速器326的第一实例耦合,并且DNN加速器324的第二实例可以进一步经由传输链路338与DNN加速器326的第二实例耦合。轻量级传输层协议可以为DNN加速器提供经由数据中心网络310彼此传输或接收数据分组或其他此类数据的能力。
继续参考图3,DNN加速器也可以在其他配置中互连。例如,DNN加速器322的数个实例可以经由多个传输链路352耦合到DNN加速器324的数个实例。类似地,DNN加速器324的数个实例可以经由传输链路354耦合到DNN加速器326的数个实例。尽管图3示出了一定数量和布置的包括DNN加速器的节点,但可以有更多或更少数目的不同布置的节点。
图4是根据一个示例的包括分布式节点的系统400的框图。在该示例中,多个节点可以被实现为数据中心中的服务器机架。服务器中的每个服务器可以耦合到架顶式(TOR)交换机410。其他机架,虽然未示出,但可以具有类似的配置。每个服务器可以包括至少一个节点或多个节点。每个节点可以包括服务器(例如,服务器404、服务器406或服务器408)并且每个服务器可以耦合到TOR交换机(例如,TOR交换机410)。服务器404可以包括主机组件,主机组件包括CPU,诸如CPU 414和CPU 416,其可以经由本地链路(例如,PCIe)420而被耦合到包括DNN加速器的节点418。每个节点418还可以通过网络接口控制器422(例如,用于跨数据中心的网络基础设施进行通信)耦合。图4所示的系统可以允许节点对从(和/或发送到)TOR交换机或其他交换机的消息执行处理。使用该示例系统,单独节点可以直接向彼此发送包括数据分组的消息,因此这甚至可以允许跨多个DNN加速器对单个神经网络的分区。为了进行通信,节点可以使用轻量级协议,包括例如RDMA。尽管图4示出了以某种方式布置的系统的一定数目的组件,但可以有更多或更少数目的不同布置的组件。
图5是根据一个示例的DNN加速器500的框图。每个DNN加速器500可以包括用于从其他节点接收消息的输入消息处理器(IMP)510和用于处理到其他节点或组件的传出消息的输出消息处理器(OMP)540。每个DNN加速器500还可以包括控制/标量处理器(CSP)520和神经功能单元(NFU)530。尽管未示出,但由DNN加速器500接收的接收消息可以被存储在至少两个不同的队列中:(1)IMP-to-CSP辅助队列和(2)IMP-to-NFU数据队列。尽管未示出,但传出消息可以被存储在至少两个不同的队列中:(1)CSP-to-IMP辅助队列和(2)NFU-to-OMP数据队列。在该示例中,DNN加速器500可以接受包含辅助信息(诸如,控制和标量数据)和有效负载数据(例如,向量、矩阵或其他张量数据结构)两者的片外消息。辅助信息可以包括对有效负载执行计算密集型运算的请求,然后以输出消息的形式返回结果。在该示例中,传入消息由轻量级输入消息处理器(IMP)510处理,该轻量级输入消息处理器510将辅助信息发送到控制/标量处理器(CSP)520,并且将有效负载数据(例如,输入张量)发送到神经功能单元(NFU)530。作为示例,然后,CSP 520可以解译该请求,并且基于其固件,可以向NFU 530发送一系列指令。在一定的处理时延之后,NFU可以产生请求的结果,该结果可以在轻量级输出消息处理器(OMP)540中与由CSP 520产生的辅助数据相结合,然后发送到片外。CSP固件可以向NFU 530提供指令。输入消息可以从许多源(包括通过网络)到达。IMP 510可以检查消息队列的头部,并且它可以将需要执行的任何指令出列并且通过系统馈送。尽管图5示出了以某种方式布置的示例DNN加速器500的一定数目的组件,但可以有更多或更少数目的不同布置的组件。
继续参考图5,作为示例,NFU 530可以基于图1或图2所示的架构而被实现。在该示例中,NFU的主要目标是利用其矩阵处理单元(MPU)以高吞吐量和低时延执行矩阵乘法,并且利用其向量处理单元(VPU)执行向量运算,诸如sigmoid运算。NFU可以接收系数(例如,常数)的矩阵并且将这些系数与动态输入向量数据相乘。在一个示例中,系数可以在服务启动时从片外存储器(例如,DRAM)被加载到与NFU 530相对应的片上存储器(例如,FPGA的块随机存取存储器(BRAM))中。
图6示出了NFU 600的示例实现。在该示例中,NFU 600可以包括经由本地交换机(例如,双端口张量存储器管理器(TMM)610)耦合的数据路径640和数据路径660。双端口TMM610还可以耦合到存储器620和网络接口630。存储器620可以使用任何合适的存储器来实现,包括DRAM。网络接口630可以允许NFU 600经由数据中心网络或另一类型的网络接收或发送指令或数据。每个数据路径可以包括不同的功能单元,包括诸如矩阵向量乘法器和多功能单元的单元。每个这样的单元可以包括命令FIFO,它可以按顺序发出命令。在该示例中,双端口TMM 610可以确保从任何数据路径输出的任何张量按照发出的命令的顺序被转发。作为示例,一旦指令链完成其运算,由数据路径640提供的张量就可以作为针对数据路径660的输入到达。双端口TMM 610可以确保输出张量按顺序被提供给数据路径660。在一个示例中,双端口TMM 610可以被实现为双端口互连。双端口TMM 610可以被实现为交换结构或以任何其他逻辑的形式。作为示例,当实现为FPGA的部分时,可以通过重新配置FPGA的互连和可配置逻辑块来实现双端口TMM 610。
数据路径640可以包括用于存储指令和矩阵数据或向量数据的多个寄存器文件。作为示例,数据路径640可以包括矩阵向量乘初始向量寄存器文件(MVM_IVRF)642、矩阵寄存器文件(MRF)644和加法/减法向量寄存器文件(ADDSUB_VRF2)646。这些寄存器文件中的每个寄存器文件都可以充当用于数据路径640的本地存储器。数据路径640还可以包括矩阵向量乘法器(MVM)648。数据路径640还可以包括用于执行加法或激活运算(例如,高斯误差线性单元(GELU))运算的多功能单元(MFU:ADD/GELU 652)。来自MVM_IVRF 642的指令可以被提供给矩阵向量乘法器(MVM)648。MVM 648可以执行矩阵-向量乘法运算,作为基于神经网络模型(诸如,BERT模型)执行推理的部分。因此,在该示例中,包含NFU 600的DNN加速器可以用于加速BERT模型中的推理。在该示例中,MFU:ADD/GELU 652可以对MVM 648生成的中间结果执行非线性运算。虽然未在图6中示出,但是用于对数据执行运算的硬件块中的每个硬件块(包括MVM 648和MFU:ADD/GELU 652)可以包括本地解码器,用以分别解码接收到的指令并且对经由MRF 644和ADDSUB_VRF2 646接收到的数据执行运算。
继续参考图6,数据路径660可以包括用于存储指令和向量数据的多个寄存器文件。作为示例,数据路径660可以包括多功能单元指令向量寄存器文件(MFU_IVRF)662、加法/减法向量寄存器文件(ADDSUB_VRF0)664、乘法向量寄存器文件(MULTIPLY_VRF)666和另一加法/减法向量寄存器文件(ADDSUB_VRF1)668。这些寄存器文件中的每个寄存器文件可以充当数据路径660的本地存储器。数据路径660还可以包括用于执行加法/乘法运算的多功能单元(MFU:ADD/MULTIPLY)672。数据路径660还可以包括用于执行加法/指数运算的多功能单元(MFU:ADD/EXP)674。来自MFU_IVRF 662的指令可以被提供给MFU:ADD/MULTIPLY672。MFU:ADD/MULTIPLY 672可以执行非线性运算,作为基于神经网络模型(诸如BERT模型)执行推理的部分。MFU:ADD/EXP 674可以执行加法和激活运算。如图6所示,多个向量寄存器文件和相关联的功能单元的存在确保了高效的处理。作为示例,可以在乘法运算(例如,使用MFU:ADD/MULTIPLY 672)之后执行加法运算(例如,使用MFU:ADD/EXP 674)。虽然未在图6中示出,但是可以提供附加单元以包括更多灵活性,诸如执行附加运算然后执行乘法运算。虽然未在图6中示出,但是用于对数据执行运算的硬件块中的每个硬件块(包括MFU:ADD/MULTIPLY 672和MFU:ADD/EXP 674)可以包括本地解码器,用以解码接收到的指令并且对经由这些块耦合到的任何向量寄存器文件接收的数据执行运算。
仍然参考图6,NFU 600还可以包括多路复用器676。多路复用器676的输入中的一个输入可以接收来自MFU_IVRF 662的输出,并且多路复用器676的第二输入可以接收来自数据路径640的输出。这样,数据路径660可以从数据路径640接收中间结果作为输入。控制信号(未示出)可以选择耦合到多路复用器676的输出的输入。NFU 600还可以包括另一多路复用器678。多路复用器678的输入中的一个输入可以接收来自MFU:ADD/MULTIPLY 672的输出,并且多路复用器676的第二输入可以接收来自MFU:ADD/EXP 674的输出。这样,在该示例中,任何MFU的输出可以被作为输入提供给双端口TMM 610,后者继而可以转发由两个MFU中的任一个执行的计算的结果。控制信号(未示出)可以选择耦合到多路复用器678的输出的输入。尽管图6示出了以某种方式布置的NFU 600的一定数量的组件,但是可以有更多或更少数目的不同布置的组件。作为示例,NFU 600可以包括附加的数据路径和本地交换机。另外,作为示例,数据路径可以包括附加的硬件块,其可以对从多个源接收的值或运算数执行运算,包括例如存储器、网络或另一数据路径。作为示例,块可以执行切线(例如,TANH)运算。另一块可以执行sigmoid(SIGM)运算。另外,根据需要,可以将各种硬件块的输出供应给多路复用器。基于来自各种队列控制器或其他控制逻辑的一个或多个控制信号,多路复用器可以提供输出,该输出可以耦合到下一硬件块或输出队列。在一个示例中,控制信号可以是从与神经功能单元(NFU)相对应的指令解码器接收的信号。随着指令的执行,它们可能会散布到独立的控制队列中,这可能会确定NFU 600的哪个部分被激活。
图7示出了NFU 700的示例实现。在该示例中,NFU 700可以包括数据路径A 740和数据路径B 760。数据路径A 740可以包括如先前关于图6的数据路径640描述的相似组件。类似地,数据路径B 760可以包括如先前关于图6的数据路径660描述的相似组件。NFU 700还可以包括两个本地交换机;其中的一个交换机可以被实现为矩阵向量乘法器(MVM)的向量存储器管理器(VMM)(例如,VMM-MVM 710),并且另一个可以被实现为用于(多个)多功能单元(MFU)的向量存储器管理器(VMM)(例如,VMM-MFU 750)。VMM-MVM 710还可以耦合到存储器720和网络接口730。存储器720可以使用任何合适的存储器来实现,包括DRAM。网络接口730可以允许NFU 700经由数据中心网络或另一类型的网络来接收或发送指令或数据。
继续参考图7,对应于与神经网络相关联的一个或多个层的指令可以在指令队列770中排队。指令调度器780可以向包括数据路径A 740和数据路径B 760的数据路径中的每个数据路径提供指令和控制信号。指令调度器780还可以控制VMM-MVM 710和VMM-MFU 750的运算。以此方式,指令调度器780可以同步NFU 700的各个组件正在执行的运算。作为示例,指令调度器780可以提供指令链用于由每个数据路径执行。如前所述,每个数据路径(例如,数据路径A 740和数据路径B 760)可以在其本地循环中执行多个指令链,最后通过本地交换机(例如,VMM-MVM 710和VMM-MFU 750)交换结果数据,并且根据需要重复这些步骤。一系列步骤可以与指令链有关,该指令链可以包括单线程程序中的SIMD指令集,该单线程程序从读取指令开始,以写入指令结束,包括所有中间数据运算指令(例如,矩阵乘法或激活运算)。矩阵/向量寄存器文件可以充当用于执行这些运算的每个数据路径的本地存储器。每当存在使用不同数据路径的背靠背指令链流时,这种布置可以最大限度地利用两个数据路径。这是因为一个链的时延对另一链的时延隐藏,从而降低了总推理时延。
另外,数据路径可以经由本地交换机和用于缓冲结果所需的任何缓冲器向另一数据路径提供中间结果。因此,如图7所示,数据路径A 740可以经由VMM-MVM 710和缓冲器752向数据路径B 760提供中间结果。类似地,数据路径B 760可以经由VMM-MFU 750和缓冲器712向数据路径A 740提供中间结果。尽管图7示出了以某种方式布置的NFU 700的一定数目的组件,但是可以有更多或更少数目的不同布置的组件。例如,NFU 700可以包括附加的数据路径和本地交换机。
在与包括NFU的节点相关的一个示例指令集架构(ISA)方面,指令可以总是按程序顺序执行。另外,所有指令都可以作用于原始大小的向量和/或矩阵。ISA可以用于公开分布式存储器系统和NFU中可用的大规模管线并行性。在一个示例中,可以通过并行执行指令链来利用这种并行性。大多数指令可以采用相同的通用参数集:源、目的地和可选的第二源。作为示例,关于图7的NFU 700,本地交换机中的每个本地交换机都可以处理包括源(SRC)和目的地(DEST)两者作为参数的指令。本地交换机可以从中接收运算数或指令的源可以取决于对应数据路径被配置为处理的指令的类型。类似地,本地交换机可以输出指令或运算数的目的地可以取决于对应数据路径被配置为处理的指令的类型。作为示例,VMM-MVM 710的运算数或指令的源可以包括存储器720、网络接口730和与NFU 700相关联的控制逻辑。VMM-MVM 710的运算数和指令的目的地可以包括图6的MVM_IVRF 642、图6的ADDSUB_VRF2 646、图6的MRF 644和其他相关组件,诸如矩阵存储器管理器(未示出)。作为示例,VMM-MFU 750的运算数或指令的源可以包括服务处理器单元(例如,图5的控制/标量处理器520)和与NFU700相关联的控制逻辑。VMM-MFU 750的运算数和指令的目的地可以包括服务处理器单元(例如,图5的控制/标量处理器520)、网络接口730、图6的MFU_IVRF 662、图6的ADDSUB_VRF0664、图6的MULTIPLY_VRF 666、图6的ADDSUB_VRF1 668、图6的MFU:ADD/MULTIPLY 672,以及图6的MFU:ADD/EXP 674。
在一个示例中,程序可以被编译或结构化,以尝试将尽可能多的指令链接在一起以最大限度地提高性能。基于以隐式方式将中间结果转发到下一指令,指令可以被链接在一起。备选地,通过在第一个指令的目的地参数中断言前向标志并且在第二指令中断言接收标志代替源地址参数,可以将指令对链接在一起。该链继续进行,直到指令没有前向断言,或者NFU中的所有功能单元都已在链中使用。因此,在该示例中,在一个指令中前向断言然后在下一指令中断言接收是非法的(反之亦然)。指令可以根据其资源需求被映射到NFU的数据路径。例如,矩阵-向量乘法只能发生在具有矩阵向量单元(MVU)的数据路径中,而向量-向量相加只能发生在具有多功能单元(MFU)的数据路径中。
节点服务可以使用应用编程接口(API)与包括控制/标量处理器(CSP)和NFU的每个节点通信。API可以用于向NFU发送指令并且接受/制定对网络的请求/响应。节点服务可以接收来自网络的请求,启动带有来自请求的参数的子例程,然后通过网络发回响应。在该示例中,请求可以包括由CSP解译的节点头部,以及被转发到NFU的有效负载。同样,传出响应可以具有节点头部和(可选)有效负载。每个子例程可以是一系列执行矩阵和向量运算的API调用。这些API调用中的每个API调用都可以与NFU指令相对应,并且当CSP遇到这些API调用中的一个API调用时,它可以将该指令发送到NFU。
当使用图6的NFU 600或图7的NFU 700用于深度神经网络加速时,某些类型的基于变换器的模型的神经网络模式可以特别受益于性能的提高。基于变换器的模型中的一个模型是来自变换器的双向编码器表示(BERT)模型,它包括多类运算。当使用布置在顺序数据路径中的功能单元实现时,此类模型可能会遇到停顿和其他执行问题。BERT模型可以用于句子和其他自然语言处理(NLP)相关问题的词完成。BERT模型可以用于学习文本中词之间的上下文关系。BERT模型可以包括输入阶段,包括嵌入层和后处理层。BERT模型还可以包括变换器和解码/损失层。嵌入层可以将每个输入令牌(例如,序列中的一个词)转换为向量表示。向量大小可以是768维向量或1024维向量。后处理层可以执行附加的运算,包括位置嵌入、句子嵌入和令牌掩码。位置嵌入可以用于示出序列内的令牌位置。句子嵌入可以用于将句子映射到向量。令牌掩码可以包括用掩码令牌替换每个序列中一定百分比的词。解码/损失层可以基于训练产生预测。
基于BERT模型的神经网络可以包括多个变换器层。每个变换器层可以使用自注意力将输入序列转换为输出序列。变换器可以包括全连接网络(FCN)层,包括FCN(查询)、FCN(键)和FCN(值)。自注意力可以将查询和键值对的集合映射到输出。注意力功能可以使用softmax MFU来实现。变换器还可以包括附加的全连接网络(FCN)层,诸如前馈层。在与变换器相关联的运算的复杂性方面,全连接层是模型性能方面的主要因素。
为了进一步解释NFU 600和NFU 700的运算,下面的表1示出了包括对应于BERT模型的各个层的伪代码的指令链。
Figure BDA0003875697390000171
Figure BDA0003875697390000181
表1
在使用NFU 600或NFU 700处理表1中所示的指令之前,指令链中的指令可以被重新布置以供执行。可以执行重新布置以利用可以用于并行执行某些运算的NFU的独立数据路径。下面的表2示出了用于与NFU 600或NFU 700一起使用的重新布置的指令链。
Figure BDA0003875697390000182
Figure BDA0003875697390000191
表2
在关于表1和表2描述的指令链的示例中,某些指令被配置为执行线性运算(由伪代码中的线性标签指示),而其他指令被配置为执行非线性运算(由伪代码中没有线性标签指示)。这些指令对应于使用BERT模型来执行推理,该模型使用多头注意力作为变换器的部分。该示例假设多头注意力与十二头注意力相关,其中并行运行的十二个注意力层可以执行缩放的点积注意力计算。每个缩放的点积输入可以由查询和键组成,它们可以进行点积乘法运算,然后进行缩放。在该示例中,可以将softmax函数应用于缩放的输出以获得值的权重。该示例假设查询被一起打包在矩阵Q中,键被一起打包在矩阵K中,值被一起打包在矩阵V中。
作为示例,表2中的指令1(q[1],q[2]=linear(x,MVM_IVRF,MVM_IVRF))被标记为对应于对查询q[1]和q[2]执行矩阵运算的线性指令,其中数字1和2对应于头部的索引。另外,对于该指令,运算数的源和目的地两者都是与矩阵向量乘法器相关联的向量寄存器文件(例如,图6的MVM_IVRF 642)。表2中的指令2(k[1],k[2]=linear(x,MVM_IVRF,MVM_IVRF))也被标记为对应于对键k[1]和k[2]执行矩阵运算的线性指令,其中数字1和2对应于头部的索引。表2中的指令3(v[1],v[2]=linear(x,MVM_IVRF,MVM_IVRF))也被标记为对应于对值v[1]和v[2]执行矩阵运算的线性指令,其中数字1和2对应于头部的索引。表2包括其他数个标记为线性的指令。表2还包括作为指令链的部分的数个非线性指令。作为示例,表2中的指令7(p[1]=softmax(s[1],MFU_IVRF,MVM_IVRF))对应于非线性运算:softmax,它使用不同的数据路径执行,例如图6的数据路径660。尽管上述指令链包括相应的指令集以说明各种实施例,但是相应的指令集可以包括更多或更少的指令。另外,这些指令可以以不同的顺序执行。
图8是根据一个示例的时序图800,其示出了在时间上重叠的、用于由神经功能单元执行的链式指令。这些链式指令可以使用前面描述的任何DNN加速器和NFU来执行。作为示例,图8示出了由独立数据路径(例如,图7的数据路径A 740和数据路径760)执行的两种不同类的运算之间的时间重叠。此示例涉及作为处理与BERT模型的变换器层相关联的注意力子层的部分而执行的运算。指令链810被示出为以某种方式被处理,即某些指令被链接在一起以作为MVM_CHAIN 830的部分进行处理,而其他指令被链接在一起以作为MFU_CHAIN860的部分进行处理。如前所述,与NFU相关联的指令调度器(例如,图7的指令调度器780)可以获取作为指令队列(例如,图7的指令队列770)的部分而被存储的指令,并且调度要作为一个链或另一链的部分而被执行的指令。如前所述,两个指令链可以由独立的数据路径(例如,数据路径A 740和数据路径B 760)并行处理。
继续参考图8,因此,在该示例中,在时间实例T1与T2之间,数据路径A 740可以执行与查询相关的第一类运算(例如,矩阵运算)。在此期间,数据路径B 760可以是空闲的。然而,在时间实例T6与T8之间,第一类运算和第二类运算可以由NFU(例如,NFU 700)重叠。因此,在该示例中,在时间实例T6与T8之间,数据路径A 740可以执行与查询和键相关的线性运算(例如,矩阵运算),并且数据路径B 760可以执行非线性运算(例如,softmax1)。类似地,在时间实例T8与T11之间,数据路径A 740可以执行与句子的值和评分(例如,得分3和得分4)相关的线性运算(例如,矩阵运算),并且数据路径B 760可以执行非线性运算(例如,softmax2)。此外,在时间实例T11与T15之间,数据路径A 740可以执行与查询和键相关的线性运算(例如,评估上下文,诸如上下文1和上下文2)和其他线性运算(例如,矩阵运算),并且数据路径B 760可以执行非线性运算(例如,softmax3)。最终,如图8所示,在时间实例T15与T16之间,数据路径A 740可以执行与值相关的线性运算(例如,矩阵运算),并且数据路径B 760可以执行非线性运算(例如,softmax4)。尽管图8示出了使用特定数目的链来执行特定数目的运算,但是可以使用不同数目的链来执行附加的或更少的运算。
图9是根据一个示例的另一时序图900,其示出了在时间上重叠的、用于由神经功能单元执行的链式指令。这些链式指令可以使用前面描述的任何DNN加速器和NFU来执行。作为示例,图9示出了由独立数据路径(例如,图7的数据路径A 740和数据路径760)执行的线性运算与非线性运算之间的时间重叠。此示例涉及作为处理与BERT模型的编码器和解码器层相关联的全连接前馈网络和归一化层的部分而执行的运算。指令链910被示出为以某种方式被处理,即某些指令被链接在一起以作为MVM_CHAIN 930的部分进行处理,而其他指令被链接在一起以作为MFU_CHAIN 960的部分进行处理。如前所述,在一个示例中,与NFU相关联的指令调度器(例如,图7的指令调度器780)可以从指令队列(例如,图7的指令队列770)获得指令,并且调度要作为一个链或另一链的部分执行的指令。如前所述,两个指令链可以由独立的数据路径(例如,数据路径A 740和数据路径B 760)并行处理。表3示出了用于由指令调度器(例如,图7的指令调度器780)调度指令的示例固件伪代码。
Figure BDA0003875697390000211
表3
继续参考图9,因此,在该示例中,响应于表3中所示的指令,在时间实例T1与T2之间,数据路径B 760可以执行第二类运算(例如,层标准化运算)。在此期间,数据路径A 740可以处于空闲状态。然而,在时间实例T2和T3与时间实例T3和T4之间,第一类运算和第二类运算可以由NFU(例如,NFU 700)重叠。因此,在该示例中,在时间实例T2与T3之间,数据路径A 740可以执行与全连接前馈层(例如,fullyconnected1)相关的线性运算(例如,矩阵运算),并且数据路径B 760可以执行非线性运算(例如,layernorm2)。类似地,在时间实例T3与T4之间,数据路径A 740可以执行与全连接前馈层(例如,fullyconnected2)相关的线性运算(例如,矩阵运算),并且数据路径B 760可以执行非线性运算(例如,layernorm3)。最终,在时间实例T4与T5之间,数据路径A 740可以执行线性运算(fullyconnected3)。在此期间,数据路径B 760可以是空闲的。尽管图9示出了使用特定数目的链来执行特定数目的运算,但是可以使用不同数目的链来执行附加的或更少的运算。
图10是根据一个示例的另一时序图1000,其示出了在时间上重叠的、用于由神经功能单元执行的链式指令。这些链式指令可以使用前面描述的任何DNN加速器和NFU来执行。作为示例,图10示出了由独立数据路径(例如,图7的数据路径A 740和数据路径760)执行的至少两类运算之间的时间重叠。此示例与作为处理BERT模型的前馈层的部分执行的推理运算有关。指令链1010被示出为以某种方式进行处理,即某些指令被链接在一起以作为MVM_CHAIN 1030的部分进行处理,而其他指令被链接在一起作为MFU_CHAIN 1060的部分进行处理。如前所述,在一个示例中,与NFU相关联的指令调度器(例如,图7的指令调度器780)可以获得作为指令队列(例如,图7的指令队列770)的部分存储的指令,并且调度要作为一个链或另一链的部分执行的指令。如前所述,两个指令链可以由独立的数据路径(例如,数据路径A 740和数据路径B 760)并行处理。表4示出了用于由指令调度器(例如,图7的指令调度器780)调度指令的示例固件伪代码。
Figure BDA0003875697390000231
表4
继续参考图10,因此,在该示例中,响应于表4中所示的指令,在时间实例T1与T2之间,数据路径A 740可以执行第一类运算(例如,linear1)。在此期间,数据路径B 760可以处于空闲状态。然而,在时间实例T2和T3与时间实例T3和T4之间,第一类运算和第二类运算可以由NFU(例如,NFU 700)重叠。因此,在该示例中,在时间实例T2与T3之间,数据路径A 740可以执行线性运算(例如,linear2),并且数据路径B 760可以执行非线性运算(例如,layernorm1)。类似地,在时间实例T3与T4之间,数据路径A 740可以执行线性运算(例如,linear3),并且数据路径B 760可以执行非线性运算(例如,layernorm2)。最终,在时间实例T4与T5之间,数据路径B 760可以执行非线性运算(例如,layernorm3)。在此期间,数据路径A 740可以是空闲的。尽管图10示出了使用特定数量的链来执行特定数目的运算,但是可以使用不同数目的链来执行附加的或更少的运算。
图11示出了根据一个示例的用于处理指令的方法的流程图1100。在一个示例中,该方法可以使用任何DNN加速器执行,包括前面描述的任何NFU。作为示例,该方法可以在深度神经网络(DNN)加速器(例如,图5的500)中执行,该加速器包括被配置为接收一个或多个指令链的指令调度器(例如,图7的指令调度器780)。一个或多个指令链中的至少一个指令链(例如,表2中所示的指令链)可以包括用于执行与神经网络模型(例如,BERT模型的至少一层)相对应的第一类运算的指令和用于执行与神经网络模型相对应的第二类运算的指令两者。与DNN相对应的加速器的NFU(例如图6的NFU 600)可以包括第一数据路径(例如图6的数据路径640)和与第一数据路径不同的第二数据路径(例如图6的数据路径660),第一数据路径包括至少一个矩阵寄存器文件(例如,图6的MRF 644)和至少一个矩阵向量乘法器(例如,图6的MVM 648),第二数据路径包括至少一个向量寄存器文件(例如,图6的MFU_IVRF662)和至少一个被配置为执行至少一个非线性运算的功能单元(例如,图6的MFU:ADD/MULTIPLY 672)。第一数据路径和第二数据路径中的每个数据路径可以被配置为在输出任何结果之前在本地执行至少一个指令链。该方法可以包括步骤(例如,步骤1110),包括指令调度器将用于执行第一类运算的至少第一指令集转发到第一数据路径。作为示例,该步骤可以包括指令调度器将图8的MVM_CHAIN 830中的指令集转发到图7的数据路径A 740。在转发指令之前,指令调度器可以将指令链(例如,图8的指令链810)分成至少两个指令集。
该方法还可以包括步骤(例如,步骤1120),包括指令调度器将用于执行第二类运算的至少第二指令集转发到第二数据路径。作为示例,该步骤可以包括指令调度器将图8的MFU_CHAIN 860中的指令集转发到图7的数据路径B 760。
下一步骤(例如,步骤1130)可以包括使用第一数据路径和第二数据路径在时间上将与第一指令集相对应的至少第一类运算的子集的执行和与第二指令集相对应的至少第二类运算的子集的执行重叠。作为示例,作为该步骤的部分,如图8所示,在时间实例T6与T8之间,与某些查询和值相对应的线性运算可以和与softmax功能相对应的非线性运算重叠。尽管图11描述了与BERT模型相关的方法的执行,但该方法可以与包括多类运算的执行的任何其他神经网络模型一起使用。
总之,本公开涉及一种深度神经网络(DNN)加速器,包括被配置为接收一个或多个指令链的指令调度器,其中一个或多个指令链中的至少一个指令链包括用于执行与神经网络模型相对应的第一类运算的指令和用于执行与神经网络模型相对应的第二类运算的指令两者。DNN加速器还可以包括第一数据路径,第一数据路径包括至少一个矩阵寄存器文件和至少一个矩阵向量乘法器。DNN加速器还可以包括与第一数据路径不同的第二数据路径,第二数据路径包括至少一个向量寄存器文件和至少一个功能单元,其中第一数据路径和第二数据路径中的每个数据路径被配置为在输出任何结果之前在本地执行至少一个指令链,并且其中指令调度器被配置为将用于执行第一类运算的至少第一指令集转发到第一数据路径并且将用于执行第二类运算的至少第二指令集转发到第二数据路径,并且其中第一数据路径和第二数据路径被配置为在时间上将与第一指令集相对应的至少第一类运算的子集的执行和与第二指令集相对应的至少第二类运算的子集的执行重叠。
第一类运算可以包括矩阵-矩阵乘法运算或矩阵-向量乘法运算或,并且第二类运算可以包括激活运算或、softmax运算或或层归一化运算或。第一数据路径可以经由第一本地交换机耦合到第二数据路径,并且第一本地交换机可以被配置为使用第一数据路径将从与第一指令链相对应的任何运算的执行生成的至少一个中间结果转发到第二数据路径。第二数据路径可以经由第二本地交换机耦合到第一数据路径,并且第二本地交换机可以被配置为使用第二数据路径将从与第二指令链相对应的任何运算的执行生成的至少一个中间结果转发到第一数据路径。
指令链可以包括被布置为单线程的单指令多数据(SIMD)指令集,并且单线程可以以读取指令开始并且以写入指令结束。第一数据路径可以耦合到至少第一本地存储器并且第二数据路径可以耦合到至少第二本地存储器,并且第一数据路径可以被配置为执行运算而不访问至少第二本地存储器,并且第二数据路径可以被配置为执行运算而不访问至少第一本地存储器。神经网络模型可以包括基于变换器的模型。
在另一示例中,本公开涉及一种在深度神经网络(DNN)加速器中的方法,该深度神经网络加速器包括被配置为接收一个或多个指令链的指令调度器,其中一个或多个指令链中的至少一个指令链包括用于执行与神经网络模型相对应的第一类运算的指令和用于执行与神经网络模型相对应的第二类运算的指令两者,第一数据路径包括至少一个矩阵寄存器文件和至少一个矩阵向量乘法器,与第一数据路径不同的第二数据路径包括至少一个向量寄存器文件和至少一个功能单元,其中第一数据路径和第二数据路径中的每个数据路径被配置为在输出任何结果之前在本地执行至少一个指令链。该方法可以包括指令调度器将用于执行第一类运算的至少第一指令集转发到第一数据路径。该方法还可以包括指令调度器将用于执行第二类运算的至少第二指令集转发到第二数据路径。该方法还可以包括使用第一数据路径和第二数据路径在时间上将与第一指令集相对应的至少第一类运算的子集的执行和将第二指令集相对应的至少第二类运算的子集的执行。
第一类运算可以包括矩阵-矩阵乘法运算或矩阵-向量乘法运算,并且第二类运算可以包括激活运算、softmax运算或层归一化运算。第一数据路径可以经由第一本地交换机耦合到第二数据路径,并且该方法还可以包括第一本地交换机使用第一数据路径将从与第一指令链相对应的任何运算的执行生成的至少一个中间结果转发到第二数据路径。第二数据路径可以经由第二本地交换机耦合到第一数据路径,并且该方法还可以包括第二本地交换机使用第二数据路径将从与第二指令链相对应的任何运算的执行生成的至少一个中间结果转发到第一数据路径。
指令链可以包括被布置为单线程的单指令多数据(SIMD)指令集,并且其中单线程可以以读取指令开始并且以写入指令结束。第一数据路径可以耦合到至少第一本地存储器并且第二数据路径可以耦合到至少第二本地存储器,并且第一数据路径可以被配置为执行运算而不访问至少第二本地存储器,并且第二数据路径可以被配置为执行运算而不访问至少第一本地存储器。神经网络模型可以包括基于变换器的模型。
在又一示例中,本公开涉及一种包括第一数据路径的深度神经网络(DNN)加速器,第一数据路径包括至少一个矩阵寄存器文件和至少一个矩阵向量乘法器。DNN加速器还可以包括与第一数据路径不同的第二数据路径,第二数据路径包括至少一个向量寄存器文件和至少一个功能单元。DNN加速器还可以包括耦合到与第一数据路径相关联的第一本地存储器和与第二数据路径相关联的第二本地存储器的交换机。DNN加速器还可以包括指令调度器,指令调度器被配置为:(1)从至少一个指令队列访问一个或多个指令链,其中一个或多个指令链中的至少一个指令链包括用于执行与神经网络模型相对应的第一类运算的指令和用于执行与神经网络模型相对应的第二类运算的指令两者,以及(2)将至少一个或多个指令链分成第一链和第二链,第一链包括仅用于执行第一类运算的指令,第二链包括仅用于执行第二类运算的指令。指令调度器还可以被配置为将第一链转发到第一数据路径并且将第二链转发到第二数据路径,其中第一数据路径被配置为在输出任何结果之前使用第一本地存储器来执行第一链,并且第二数据路径被配置为在输出任何结果之前使用第二本地存储器来执行第二链,并且其中第一数据路径和第二数据路径还被配置为在时间上将与第一链相对应的至少第一类运算的子集的执行和与第二链相对应的至少第二类运算的子集的执行重叠。
第一类运算可以包括矩阵-矩阵乘法运算或矩阵-向量乘法运算,并且第二类运算可以包括激活运算、softmax运算或层归一化运算。交换机可以被配置为使用第一数据路径将从与第一指令链相对应的任何运算的执行生成的至少一个中间结果转发到第二数据路径。交换机可以被配置为使用第二数据路径将从与第二指令链相对应的任何运算的执行生成的至少一个中间结果转发到第一数据路径。
指令链可以包括被布置为单线程的单指令多数据(SIMD)指令集,并且单线程可以以读取指令开始并且以写入指令结束。神经网络模型可以包括基于变换器的模型。
应当理解,本文描述的方法、模块和组件仅仅是示例性的。备选地或另外,本文描述的功能性可以至少部分地由一个或多个硬件逻辑组件来执行。例如但不限于,可以使用的硬件逻辑组件的说明性类型包括现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑器件(CPLD)等。在抽象但仍然明确的意义上,实现相同功能性的任何组件布置都是有效地“关联”的,从而实现了期望的功能性。因此,此处组合以实现特定功能性的任何两个组件可以被视为彼此“关联”,从而实现期望的功能性,而与架构或中间组件无关。同样,如此关联的任何两个组件也可以被视为彼此“可运算地连接”或“耦合”以实现期望的功能性。
与本公开中描述的一些示例相关联的功能性还可以包括存储在非瞬态介质中的指令。如本文所用,术语“非瞬态介质”是指存储使机器以特定方式运算的数据和/或指令的任何介质。示例性非瞬态介质包括非易失性介质和/或易失性介质。非易失性介质包括例如硬盘、固态驱动器、磁盘或磁带、光盘或磁带、闪存、EPROM、NVRAM、PRAM或其他此类介质,或此类介质的联网版本。易失性介质包括例如动态存储器,诸如DRAM、SRAM、高速缓存或其他此类介质。非瞬态介质与传输介质不同,但可以与传输介质结合使用。传输介质用于将数据和/或指令传输到机器或从机器传输。示例性传输介质包括同轴电缆、光纤电缆、铜线和无线介质,诸如无线电波。
此外,本领域技术人员将认识到,上述运算的功能性之间的界限仅仅是说明性的。多个运算的功能性可以组合成单个运算,和/或单个运算的功能性可以分布在附加运算中。此外,备选实施例可以包括特定运算的多个实例,并且可以在各种其他实施例中改变运算的顺序。
尽管本公开提供了具体示例,但是可以进行各种修改和改变而不背离如以下权利要求中阐述的本公开的范围。因此,说明书和附图被认为是说明性的而不是限制性的,并且所有这样的修改旨在包括在本公开的范围内。本文针对特定示例描述的任何益处、优点或问题的解决方案不旨在被解释为任何或所有权利要求的关键、必需或基本特征或元素。
此外,如本文所用,术语“一”或“一个”被定义为一个或多个。此外,在权利要求中使用诸如“至少一个”和“一个或多个”这样的介绍性短语不应被解释为暗示由不定冠词“一”或“一个”引入另一个权利要求元素将包含此类引入的权利要求元素的任何特定权利要求限制为仅包含一个此类元素的发明,即使同一权利要求包括介绍性短语“一个或多个”或“至少一个”和不定冠词,诸如“一”或“一个”。定冠词的使用也是如此。
除非另有说明,否则诸如“第一”和“第二”之类的术语用于任意区分这些术语所描述的元素。因此,这些术语不一定旨在指示这些元素的时间或其他优先级。

Claims (15)

1.一种深度神经网络(DNN)加速器,包括:
指令调度器,被配置为接收一个或多个指令链,其中一个或多个指令链中的至少一个指令链包括用于执行与神经网络模型相对应的第一类运算的指令和用于执行与所述神经网络模型相对应的第二类运算的指令两者;
第一数据路径,包括至少一个矩阵寄存器文件和至少一个矩阵向量乘法器;以及
与所述第一数据路径不同的第二数据路径,包括至少一个向量寄存器文件和至少一个功能单元,其中所述第一数据路径和所述第二数据路径中的每个数据路径被配置为在输出任何结果之前在本地执行至少一个指令链,并且其中所述指令调度器被配置为将用于执行所述第一类运算的至少第一指令集转发到所述第一数据路径,并且将用于执行所述第二类运算的至少第二指令集转发到所述第二数据路径,并且其中所述第一数据路径和所述第二数据路径被配置为:在时间上将与所述第一指令集相对应的至少所述第一类运算的子集的执行和与所述第二指令集相对应的至少所述第二类运算的子集的执行重叠。
2.根据权利要求1所述的DNN加速器,其中所述第一类运算包括矩阵-矩阵乘法运算或矩阵-向量乘法运算,并且其中所述第二类运算包括激活运算、softmax运算或层归一化运算。
3.根据权利要求1所述的DNN加速器,其中所述第一数据路径经由第一本地交换机而被耦合到所述第二数据路径,并且其中所述第一本地交换机被配置为:使用所述第一数据路径将从与第一指令链相对应的任何运算的执行而被生成的至少一个中间结果转发到所述第二数据路径。
4.根据权利要求3所述的DNN加速器,其中所述第二数据路径经由第二本地交换机而被耦合到所述第一数据路径,并且其中所述第二本地交换机被配置为:使用所述第二数据路径将从与第二指令链相对应的任何运算的执行而被生成的至少一个中间结果转发到所述第一数据路径。
5.根据权利要求1所述的DNN加速器,其中指令链包括被布置为单线程的单指令多数据(SIMD)指令集,并且其中所述单线程以读取指令开始并且以写入指令结束。
6.根据权利要求1所述的DNN加速器,其中所述第一数据路径被耦合到至少第一本地存储器,并且所述第二数据路径被耦合到至少第二本地存储器,并且其中所述第一数据路径被配置为执行运算而不访问至少所述第二本地存储器运算,并且所述第二数据路径被配置为执行运算而不访问至少所述第一本地存储器运算。
7.根据权利要求6所述的DNN加速器,其中所述神经网络模型包括基于变换器的模型。
8.一种深度神经网络(DNN)加速器中的方法,所述深度神经网络加速器包括被配置为接收一个或多个指令链的指令调度器,其中一个或多个指令链中的至少一个指令链包括用于执行与神经网络模型相对应的第一类运算的指令和用于执行与所述神经网络模型相对应的第二类运算的指令两者,第一数据路径包括至少一个矩阵寄存器文件和至少一个矩阵向量乘法器,与所述第一数据路径不同的第二数据路径包括至少一个向量寄存器文件和至少一个功能单元,其中所述第一数据路径和所述第二数据路径中的每个数据路径被配置为在输出任何结果之前在本地执行至少一个指令链,所述方法包括:
所述指令调度器将用于执行所述第一类运算的至少第一指令集转发到所述第一数据路径;
所述指令调度器将用于执行所述第二类运算的至少第二指令集转发到所述第二数据路径;以及
使用所述第一数据路径和所述第二数据路径在时间上将与所述第一指令集相对应的至少所述第一类运算的子集的执行和与所述第二指令集相对应的至少所述第二类运算的子集的执行重叠。
9.根据权利要求8所述的方法,其中所述第一类运算包括矩阵-矩阵乘法运算或矩阵-向量乘法运算,并且其中所述第二类运算包括激活运算、softmax运算或层归一化运算。
10.根据权利要求8所述的方法,其中所述第一数据路径经由第一本地交换机而被耦合到所述第二数据路径,并且所述方法还包括:所述第一本地交换机使用所述第一数据路径,将从与第一指令链相对应的任何运算的执行而被生成的至少一个中间结果转发到所述第二数据路径。
11.根据权利要求9所述的方法,其中所述第二数据路径经由第二本地交换机而被耦合到所述第一数据路径,并且所述方法还包括:所述第二本地交换机使用所述第二数据路径,将从与第二指令链相对应的任何运算的执行而被生成的至少一个中间结果转发到所述第一数据路径。
12.根据权利要求8所述的方法,其中指令链包括被布置为单线程的单指令多数据(SIMD)指令集,并且其中所述单线程以读取指令开始并且以写入指令结束。
13.根据权利要求8所述的方法,其中所述第一数据路径被耦合到至少第一本地存储器,并且所述第二数据路径被耦合到至少第二本地存储器,并且其中所述第一数据路径被配置为执行运算而不访问至少所述第二本地存储器运算,并且所述第二数据路径被配置为执行运算而不访问至少所述第一本地存储器运算。
14.根据权利要求13所述的方法,其中所述神经网络模型包括基于变换器的模型。
15.一种深度神经网络(DNN)加速器,包括:
第一数据路径,包括至少一个矩阵寄存器文件和至少一个矩阵向量乘法器;
与所述第一数据路径不同的第二数据路径,包括至少一个向量寄存器文件和至少一个功能单元;
交换机,被耦合到与所述第一数据路径相关联的第一本地存储器和与所述第二数据路径相关联的第二本地存储器两者;
指令调度器,被配置为:(1)从至少一个指令队列访问一个或多个指令链,其中一个或多个指令链中的至少一个指令链包括用于执行与神经网络模型相对应的第一类运算的指令和用于执行与所述神经网络模型相对应的第二类运算的指令两者,以及(2)将至少一个或多个指令链分成第一链和第二链,所述第一链包括仅用于执行所述第一类运算的指令,所述第二链包括仅用于执行所述第二类运算的指令;并且
其中所述指令调度器还被配置为将所述第一链转发到所述第一数据路径,并且将所述第二链转发到所述第二数据路径,其中所述第一数据路径被配置为在输出任何结果之前使用所述第一本地存储器来执行所述第一链,并且所述第二数据路径被配置为在输出任何结果之前使用所述第二本地存储器来执行所述第二链,并且其中所述第一数据路径和所述第二数据路径还被配置为:在时间上将与所述第一链相对应的至少所述第一类运算的子集的执行和与所述第二链相对应的至少所述第二类运算的子集的执行重叠。
CN202180026885.0A 2020-04-01 2021-02-15 具有用于同时处理不同类运算的独立数据路径的深度神经网络加速器 Pending CN115398395A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/837,171 2020-04-01
US16/837,171 US20210312266A1 (en) 2020-04-01 2020-04-01 Deep neural network accelerator with independent datapaths for simultaneous processing of different classes of operations
PCT/US2021/018076 WO2021201997A1 (en) 2020-04-01 2021-02-15 Deep neural network accelerator with independent datapaths for simultaneous processing of different classes of operations

Publications (1)

Publication Number Publication Date
CN115398395A true CN115398395A (zh) 2022-11-25

Family

ID=74860528

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180026885.0A Pending CN115398395A (zh) 2020-04-01 2021-02-15 具有用于同时处理不同类运算的独立数据路径的深度神经网络加速器

Country Status (4)

Country Link
US (1) US20210312266A1 (zh)
EP (1) EP4127916A1 (zh)
CN (1) CN115398395A (zh)
WO (1) WO2021201997A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117667208A (zh) * 2024-02-01 2024-03-08 腾讯科技(深圳)有限公司 数据运算方法、存储器及计算机设备

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11347652B2 (en) 2020-08-31 2022-05-31 Microsoft Technology Licensing, Llc Banked memory architecture for multiple parallel datapath channels in an accelerator
US11734214B2 (en) * 2021-02-01 2023-08-22 Microsoft Technology Licensing, Llc Semi-programmable and reconfigurable co-accelerator for a deep neural network with normalization or non-linearity
EP4285286A1 (en) * 2021-02-01 2023-12-06 Microsoft Technology Licensing, LLC Semi-programmable and reconfigurable co-accelerator for a deep neural network with normalization or non-linearity

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10049322B2 (en) * 2015-05-21 2018-08-14 Google Llc Prefetching weights for use in a neural network processor
US10140252B2 (en) * 2017-02-28 2018-11-27 Microsoft Technology Licensing, Llc Hardware node with matrix-vector multiply tiles for neural network processing
TWI816475B (zh) * 2017-05-17 2023-09-21 美商谷歌有限責任公司 低延遲矩陣乘法單元中之胞元、相關之方法及非暫時性電腦程式產品
TWI812254B (zh) * 2017-05-17 2023-08-11 美商谷歌有限責任公司 用於訓練神經網路之方法、系統及非暫時性電腦可讀儲存媒體
US10860924B2 (en) * 2017-08-18 2020-12-08 Microsoft Technology Licensing, Llc Hardware node having a mixed-signal matrix vector unit
US11556762B2 (en) * 2018-04-21 2023-01-17 Microsoft Technology Licensing, Llc Neural network processor based on application specific synthesis specialization parameters

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117667208A (zh) * 2024-02-01 2024-03-08 腾讯科技(深圳)有限公司 数据运算方法、存储器及计算机设备
CN117667208B (zh) * 2024-02-01 2024-05-24 腾讯科技(深圳)有限公司 数据运算方法、存储器及计算机设备

Also Published As

Publication number Publication date
US20210312266A1 (en) 2021-10-07
EP4127916A1 (en) 2023-02-08
WO2021201997A1 (en) 2021-10-07

Similar Documents

Publication Publication Date Title
US20220012577A1 (en) Neural network processing with model pinning
US11151445B2 (en) Neural network processor with a window expander circuit
CN115398395A (zh) 具有用于同时处理不同类运算的独立数据路径的深度神经网络加速器
JP7262569B2 (ja) マルチポート・メモリーを備えたベクトル・レジスター・ファイルを有する行列ベクトル乗算器
RU2795887C2 (ru) Матрично-векторный умножитель с набором регистров для хранения векторов, содержащим многопортовую память

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