CN112149812A - 与硬件无关的深度神经网络编译器 - Google Patents
与硬件无关的深度神经网络编译器 Download PDFInfo
- Publication number
- CN112149812A CN112149812A CN202010231676.7A CN202010231676A CN112149812A CN 112149812 A CN112149812 A CN 112149812A CN 202010231676 A CN202010231676 A CN 202010231676A CN 112149812 A CN112149812 A CN 112149812A
- Authority
- CN
- China
- Prior art keywords
- memory
- compilation
- tensor
- compiler
- model
- 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
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/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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
Abstract
本公开涉及与硬件无关的深度神经网络编译器。一种编译器接收描述神经网络的图,并且访问描述目标计算设备的数据,所述目标计算设备实施所述神经网络。所述编译器根据所述图和所述数据来生成中间表示,其中,所述中间表示包括算子模型、数据模型和控制模型。所述编译器使用所述中间表示的所述算子模型、数据模型和控制模型来生成二进制可执行文件。
Description
技术领域
本公开总体上涉及计算机系统领域,并且更具体地,涉及用于机器学习计算系统的编译器。
背景技术
机器学习模型是可以由计算系统实施以接收输入并且基于接收到的输入生成输出(例如,预测的输出)的模型。一些机器学习模型是参数模型,并且基于接收到的输入和模型的参数的值生成输出。机器学习模型还可以包括深度学习模型,深度学习模型采用多层模型来生成针对接收到的输入的输出。例如,深度神经网络是以下深度机器学习模型:该深度机器学习模型包括输出层和一个或多个隐藏层,每个隐藏层各自向接收到的输入应用非线性变换以生成输出。一些神经网络是递归神经网络。递归神经网络是接收输入序列并且从输入序列生成输出序列的神经网络。具体地,递归神经网络在处理了输入序列中的先前输入之后、在从输入序列中的当前输入生成输出时使用网络的一些或全部内部状态。已经开发出专用计算系统来更高效地和更有效地实施和使用这种机器学习模型。
发明内容
根据本公开的一方面,提供了一种用于编译计算机可执行代码的方法,所述方法包括:在编译器处接收描述神经网络的图;访问描述目标硬件设备的数据,所述目标硬件设备实施所述神经网络;在所述编译器处根据所述图和所述数据来生成中间表示,其中,所述中间表示包括算子模型、数据模型以及控制模型,所述算子模型用于标识实施所述神经网络要执行的操作的集合,所述数据模型用于标识与所述操作的集合对应的张量的集合,所述控制模型用于标识所述操作的排序;以及使用所述中间表示的所述算子模型、数据模型和控制模型来生成二进制可执行文件。
根据本公开的一方面,提供了一种用于编译计算机可执行代码的方法,所述方法包括:在编译器处接收描述神经网络的图;基于所述图来生成中间表示,其中,所述中间表示标识下述项:实施所述神经网络要执行的操作的集合、与所述操作的集合相关联的张量的集合、以及特定计算设备上的存储器资源的集合;以及使用所述中间表示来执行编译遍次的集合,以生成针对所述特定计算设备的二进制可执行文件,其中,所述编译遍次的集合包括存储器分配遍次,并且执行所述存储器分配遍次包括:针对所述张量的集合中的特定张量,确定所述特定张量的属性;针对所述特定张量,基于所述属性中的一个或多个属性,确定所述特定张量将被存储在所述存储器资源的集合中的特定存储器资源中;以及基于所述属性中的一个或多个属性,在所述特定存储器资源中为所述特定张量分配特定缓冲区,其中所述特定计算设备在执行所述二进制可执行文件时将使用所述特定缓冲区来存储所述特定张量。
根据本公开的一方面,提供了一种用于编译计算机可执行代码的系统,所述系统包括:数据处理器;存储器;以及编译器,所述编译器可由所述数据处理器执行以执行下述操作:接收描述神经网络的图;接收目标描述符,所述目标描述符标识目标计算设备的存储器资源的集合的属性;接收编译描述符,所述编译描述符标识多个编译遍次;基于所述目标描述符和所述图生成中间表示;使用所述编译器基于所述编译描述符执行所述多个编译遍次;以及生成二进制可执行文件以在所述目标计算设备上实施所述神经网络。
根据本公开的一方面,提供了一种系统,包括用于执行如上所述的方法的装置。
附图说明
图1是被配置用于与深度学习计算系统一起使用的示例编译器的简化框图。
图2是根据一些实施例的包括机器学习设备的示例电子设备的简化框图。
图3是根据一些实施例的示例机器学习设备的简化框图。
图4是图示了根据一些实施例的改进的存储器子系统的示例的框图。
图5是根据一些实施例的示例硬件加速器设备的框图。
图6是图示了根据一些实施例的示例硬件加速器设备中的示例处理器元件对存储器资源的使用的框图。
图7是根据一些实施例的示例机器学习设备的子系统的简化框图。
图8是图示了机器学习系统的示例处理器的简化框图。
图9是图示了示例处理器设备的示例体积加速单元的简化流程图。
图10是图示了示例编译器和由编译器生成的示例中间表示的简化框图。
图11A是神经网络图(neural network graph)的示例中间表示的示例算子模型的简化框图。
图11B是神经网络图的示例中间表示的示例数据模型的简化框图。
图11C是神经网络图的示例中间表示的示例控制模型的简化框图。
图12是示例编译器的简化框图。
图13是示例中间表示的示例控制模型的简化框图。
图14是图示了示例编译过程中的存储器分配的简化框图。
图15A至图15B图示了示出了由编译器执行的示例编译过程的流程图。
图16A至图16C是图示了用于使用示例编译器生成二进制可执行文件(binaryexecutable)的示例技术的流程图。
图17是根据一个实施例的示例性处理器的框图。
图18是根据一个实施例的示例性计算系统的框图。
各个附图中的相同附图标记和标号指示相同的元件。
具体实施方式
图1是示出了示例编译器的简化框图100,该示例编译器适用于按照以下方式来从机器学习模型生成可执行代码:适用于优化或高效地并且智能地利用在使用和执行机器学习模型时要利用的特定目标机器学习硬件的处理、存储器和互连资源。例如,可以提供机器学习模型(诸如,示例神经网络模型(或者其它深度学习模型)的图定义110)作为输入以供示例神经网络编译器105使用。可以提供编译描述符数据115以指示一个或多个编译扫描,该一个或多个编译扫描要基于神经网络模型和/或基础硬件中的一者或两者的属性以及目标描述符数据120来执行,目标描述符数据120用于描述目标硬件处理设备125的属性,该目标硬件处理设备125用于执行待由编译器105从图定义110生成的代码。在一些实施方案中,硬件处理设备125可以是并行处理设备,其中,多个处理元件利用共享存储器,其中,可以在设备125内所利用的处理元件和/或共享存储器元件之间采用异构技术。编译器125可以利用这些输入来生成中间表示(IR)140,该中间表示(IR)140包括用于表示由处理设备125提供的可管理资源的多个模型145。这种资源可以包括存储器资源130和计算资源135(以及其它资源,诸如,通信资源或互连资源)。IR 140内的特定模型145可以提供存储器资源130的视图(例如,通过数据模型)和计算资源135的视图(例如,控制模型)、以及在生成的IR内提供的其它示例模型,以提供用于通过编译遍次(compilation pass)的集合来生成代码150(例如,二进制文件(binary))的视图,该代码150是由编译器105自动生成的作为针对处理设备125的架构和资源优化的代码。
传统上,已经证明通用编译器(诸如,GCC编译器和LVMM编译器)不适用于生成用于涉及密集线性代数运算和稀疏线性代数运算的深度学习应用的代码。进一步地,随着越来越多地开发了专用硬件并且越来越多地利用专用硬件来处理机器学习应用,以传统编译器为基础的假设可能不再有效,这进一步使这种编译器成为用于机器学习应用的不良候选者。因此,通常依靠手工编码和优化(如由人类工程师手动执行和实施的)来实施机器学习系统,因为这种“手写”汇编代码通常被认为优于由通用编译器输出的代码的性能。例如,示例通用编译器的一些示例问题和限制可以包括以下设计:这些设计假定针对单个同步计算单元或具有特定形式的并行性和共享存储器能力的多个设备编译代码。作为另一示例,通用编译器可以被配置用于比例或矢量指令集,并且可能不能像矩阵乘法一样将计算程序映射到更广泛的指令类型上。此外,除了其它特征(其限制这种传统编译器处理和优化在现代的(和不断发展的)机器学习应用中所涉及的工作负载的能力)之外,通用编译器可以被构建为假定特定形式的存储器层次结构(其中,大型主存储器可由CPU访问)和在完全由硬件管理的芯片上的高速缓冲存储器层次结构。
转向图2,示出了被配置用于处理机器学习应用的示例计算系统205的简化框图200。例如,计算系统可以体现为利用机器学习处理设备125(诸如,视觉处理单元(VPU)或其他并行处理设备)的一个或多个设备(例如,在一个或多个封装或管芯(die)上),该机器学习处理设备125被配置为有效地执行与深度学习应用相关联的操作。在该示例中,计算系统205可以包括通用处理设备210(例如,CPU),该通用处理设备210具有一个或多个核心、一个或多个存储器元件215和一个或多个接口220以及一个或多个机器学习处理器设备(例如,125)。
在一些实施方案中,示例系统205可以具有存储器215,诸如,计算机可读介质、闪速存储器、磁盘驱动器、光盘驱动器、可编程只读存储器(PROM)和/或只读存储器(ROM)。系统205可以配置有一个或多个处理器210,该一个或多个处理器210处理指令并且运行可以被存储在存储器215中的软件。处理器205还可以与存储器215和接口220通信以与其它设备通信。处理器210可以是任何适用的处理器,例如,结合了CPU、应用处理器和闪速存储器的片上系统,或精简指令集计算(RISC)处理器。
在一些实施例中,可以在存储在存储器215中的软件中实施示例编译器(例如,105)(诸如,示例神经网络编译器(诸如,本文讨论的))以及其它组件,并且示例编译器可以在处理器210上操作。存储器215可以是非暂时性计算机可读介质、闪速存储器、磁盘驱动器、光盘驱动器、可编程只读存储器(PROM)、只读存储器(ROM)或任何其它存储器或存储器的组合。软件可以在能够执行计算机指令或计算机代码的处理器上运行。还可以使用专用集成电路(ASIC)、可编程逻辑阵列(PLA)、现场可编程门阵列(FPGA)或任何其它集成电路在硬件中实施处理器。在一些实施例中,可以在通过接口(例如,220)与系统205通信的单独的计算设备中实施编译器105。例如,除了其它示例实施方案之外,编译器105可以在与系统205通信的服务器中操作。
可以在硬件或软件中实施示例系统的接口(例如,220)。接口220可以用于从网络以及本地源(诸如,电视机的遥控器)接收数据和控制信息。电子设备还可以提供各种用户接口,诸如,键盘、触摸屏、轨迹球、触摸板和/或鼠标。在一些实施例中,电子设备还可以包括扬声器和显示设备。
在一些实施例中,机器学习处理设备125中的处理元件可以包括能够执行计算机指令或计算机代码的集成芯片。还可以使用专用集成电路(ASIC)、可编程逻辑阵列(PLA)、现场可编程门阵列(FPGA)或任何其它集成电路在硬件中实施处理器。在一些实施例中,机器学习设备125可以实施为片上系统(SOC)。在其它实施例中,并行处理设备中的一个或多个块可以实施为单独的芯片,并且并行处理设备可以被封装在系统级封装(SIP)中。在一些实施例中,机器学习设备125可以用于机器学习应用。在一些情况下,示例机器学习设备使设备在机器学习应用中起作用的特征也可以用于其它数据处理应用。实际上,示例机器学习设备125可以不是专门或者特别为机器学习而特定构建的,而是可以配备有硬件以使与机器学习(以及潜在的其它非机器学习应用)相关的复合操作更高效。例如,示例机器学习设备125可以实施为并行处理设备,该并行处理设备被适当地配置为还处理图像处理应用、视频处理应用和其它示例应用。示例机器学习应用可以包括诸如基于图像、对象或视频的序列的机器学习和分类之类的应用、以及增强现实应用、计算机视觉应用、自主导航应用及其它应用。
在一些实施方案中,示例系统205可以实施为计算机设备,诸如,个人计算设备、移动计算设备、服务器计算系统(例如,机架标尺(rack scale)、刀片式服务器或其它服务器计算机)以及其它示例。系统205可以运行操作系统,诸如,Windows、Linux、iOS、SymbianOS、iPhone OS、Windows Mobile、Android以及其它示例。通过这种操作系统(或者在系统上实现的虚拟机或软件容器),系统205可以具有在本地运行应用和/或与由通信网络中的远程服务器提供的应用通信的能力。可以按照各种形状因子和实施例来实施这种系统,诸如,智能电视(TV)、视频投影仪、机顶盒或机顶单元、数字录像机(DVR)、计算机、上网本、膝上型计算机、平板计算机、可穿戴设备、物联网(IoT)设备以及其它示例实施方案。
图3是根据一些示例实施方案的示例机器学习设备125的简化框图300。在该特定示例中,机器学习设备125可以实施VPU,该VPU包括一组专用处理器305a至305h、机器学习加速器310和非标准存储器层次结构315以及多种类型的存储器(例如,320、325)。例如,根据一些实施例,多个处理器305a至305h(例如,流式混合架构矢量引擎(SHAVE)处理器)可以共享多端口存储器子系统315。这种处理器305a至305h可以实施为具有超长指令字(VLIW)指令集的专有或专用处理器以及其它示例。存储器子系统315可以实施为存储器切片的集合,在本文中被称为“连接矩阵”(CMX)切片。CMX存储器315可以实施为快速的本地存储器(例如,SDRAM),并且可以体现可由单独的处理器(例如,305a至305h)使用的暂存存储器(scratchpad memory)。在该示例中,可以进一步提供2级(L2)缓存320和DDR存储器325作为更通用的系统存储器。进一步地,示例机器学习处理设备可以进一步包括精简指令集计算机(RISC)元件330以及其它处理器设备(例如,335)。
一个或多个硬件加速器设备(例如,310)可以被包括在机器学习处理设备中或耦合至机器学习处理设备。这种加速器设备可以是固定功能硬件加速器,这些固定功能硬件加速器被特别配置为支持矩阵算法、特定机器学习操作或其他专用功能以增强机器学习处理设备125的整体能力。在一个示例中,加速器设备本身可以包括若干数据处理单元(DPU),这若干数据处理单元(DPU)可以连接至存储器子系统315以及其它示例特征和组件,并且还可以利用存储器子系统315以及其它示例特征和组件。在图3的示例中,示例存储器子系统315可以包括或定义需要驻留特定张量类型(例如,填充的张量、未填充的张量、网络输入张量和网络输出张量)的特定存储器区域。示例机器学习处理设备125的这些以及其它示例特征可能使将传统编译器应用于这种架构复杂化。
转向图4,示出了简化框图400,该简化框图400图示了在示例机器学习处理设备(诸如,在图3的示例中讨论的)内的存储器交互的视图。具体地,图4示出了一组八个SHAVE处理器(305a至305h)。在该示例中,每个SHAVE处理器可以包括两个加载存储单元(例如,404、406(LSU0、LSU1)),可以通过这两个加载存储单元来从存储器子系统存储器315的CMX切片(例如,412a至412h)加载数据并且将数据存储到CMX切片。每个存储器切片412a至412h可以与SHAVE处理器(305a至305h)中对应的一个SHAVE处理器相关联。进一步地,每个SHAVE处理器(305a至305h)还可以包括可以将指令加载到其中的指令单元(例如,408)。在处理器包括SHAVE的特定实施例中,SHAVE可以包括精简指令集计算机(RISC)、数字信号处理器(DSP)、超长指令字(VLIW)和/或图形处理单元(GPU)中的一个或多个。示例机器学习处理设备可以另外包括将处理器305a至305h和存储器切片412a至412h耦合的互连系统410。该互连系统410可以被称为shave间互连(ISI)。ISI可以包括总线,处理器(例如,305a至305h)可以通过该总线将数据读取到或写入存储器切片(例如,412a至412h)中的任何一个存储器切片的任何部分以及进行其它示例通信和交互。
各种不同的硬件加速器设备可以连接至和/或包括在示例机器学习设备内。例如,转向图5,示出了硬件加速器310的示例实施方案的简化框图500。可以提供硬件加速器,诸如,示例神经计算引擎的电路系统,机器学习设备可以利用该硬件加速器来卸载一个或多个深度神经操作的执行。硬件加速器可以包括数据处理单元(例如,505a至505n)的集合,这些数据处理单元可以连接至(并且甚至包括)机器学习设备的存储器层次结构中的存储器510(例如,CMX存储器)的一部分(例如,通过一个或多个互连515,将硬件加速器耦合至存储器子系统)。例如,在一个示例中,加速器310可以包括20个(或者更多个)数据处理单元(DPU)505a至505n,这些数据处理单元连接至用于输入激活和权重存储的4MB的专用(例如,内部的)CMX存储器。除了其它示例之外,可以在片外(例如,在加速器设备的外部)提供附加的CMX存储器(例如,515)以及其它片外存储器520(例如,实施为DDR存储器)。还可以提供存储器控制器(例如,525)以控制各种组件访问存储器子系统的元件的方式。在一些实施方案中,存储器控制器525还可以包括直接存储器访问(DMA)引擎(例如,530)、以及其它示例组件。
在一个示例中,加速器设备的数据处理单元(例如,505a至505n)可以包括中央处理单元(CPU)。输入传递单元(IDU)可以访问神经网络数据并且将数据提供给DPU的多读取存储器(MRM)。可以提供各种处理元件以对数据进行操作。例如,处理元件可以包括可以通过MAC处理元件(MPE)实施的一组乘法累加(MAC)处理元件(例如,MAC+池)。处理元件可以另外包括若干后处理元件(PPE)(例如,以提供弹性计算)。在图5的示例中,可以为每16个MPE提供PPE,但是在其它示例中,可以提供其它比例和实施方案。示例DPU可以另外包括输出传递单元(ODU),例如,以返回处理元件的结果并且对结果执行各种后处理任务(例如,数据/张量重映射、压缩等)。在其它实施方案中,其它(或者附加)加速器设备可以被耦合并且包括在示例机器学习设备中。
在一些实施方案中,由于示例加速器设备中包括的数据处理单元的数量相对较高,因此,对CMX存储器进行随机访问可能是不可能的。在一个示例中,DPU 505a至DPU 505n可以被组织为集群(例如,5个DPU的4个集群)。可以向每个集群分配对CMX存储器的特定部分(例如,1MB切片)的优选访问(例如,更高的带宽、优先访问等)。在一些实施方案中,给定集群可以另外读取到/写入未分配给集群的其它CMX切片,但是提供给该集群的较低带宽会导致执行停顿和其它示例问题。例如,转向图6的简化框图600,示出了映射连接到示例CMX切片(例如,610a至610d)的示例DPU集群(例如,605a至605d)的示例。在一些实例中,如上面介绍的,除了其它示例实施方案之外,可以向单独的集群分配对CMX切片中的相应CMX切片的优先访问。
在采用加速器(诸如,在图6的示例中图示的)的系统中,为了实现最大性能(例如,8.2TOPs/sec@800MHz),应该始终利用所有DPU以实现最大性能(例如,空闲周期会花费5120个MAC操作)。为了实现这一点,当准备好执行新层时,应该准备好输入激活和权重。这意味着:(1)在前一层执行期间,应该将层权重从DDR加载到CMX,并且(2)应该将层输出激活存储在CMX中以避免到DDR的不必要的DMA传递。
图7是图示了根据一些实施例的示例机器学习设备(诸如,在先前的示例中的)的一部分的简化框图700。该部分包括单个处理器305(例如,HAVE处理器)、与单个处理器305相关联的存储器切片412、将处理器305耦合至机器学习设备的一个或多个其它存储器切片的互连系统410以及用于仲裁存储器切片412中的瓦片(tile)与处理器(例如,305)之间的通信的控制逻辑(例如,705a至705n)。如在图7的示例中图示的,处理器305可以配置为直接访问与处理器305相关联的存储器切片412,而处理器305可以经由互连系统410来访问其它存储器切片(未示出)。在一些实施例中,每个存储器切片(例如,412)可以包括多个RAM瓦片或物理RAM块(例如,710a至710n)。例如,大小为128kB的存储器片切片412n可以包括被组织为4kx32位字的四个32kB单端口RAM瓦片(例如,物理RAM元件)。在一些实施例中,瓦片也可以被称为逻辑RAM块。在一些实施例中,瓦片可以包括单端口互补金属氧化物半导体(CMOS)RAM。单端口CMOS RAM的优点在于:在大多数半导体工艺中通常都可用。在其它实施例中,存储器瓦片(例如,710a至710n)可以包括多端口CMOS RAM。
在一些实施例中,每个存储器瓦片(例如,710a至710n)可以与相应的瓦片控制逻辑(例如,705a至705n)相关联。瓦片控制逻辑(例如,705a至705n)可以配置为接收来自处理器(例如,305)的请求并且提供对相关联的瓦片(例如,710a至710n)的单独的读端口和写端口的访问。例如,当处理元件(例如,305)想要访问RAM瓦片(例如,710a)中的数据时,在处理元件305将存储器数据请求直接发送至RAM瓦片710a之前,处理元件305可以发送对与RAM瓦片710a相关联的瓦片控制逻辑705a的存储器访问请求。该存储器访问请求可以包括处理元件305所请求的数据的存储器地址。随后,瓦片控制逻辑705a可以对存储器访问请求进行分析并且确定处理元件305是否可以访问所请求的存储器。如果处理元件305可以访问所请求的存储器,则瓦片控制逻辑705a可以向处理元件305发送访问许可消息,并且随后,处理元件305可以向RAM瓦片710a发送存储器数据请求。由于可能存在多个处理元件同时访问,因此,在一些实施例中,瓦片控制逻辑(例如,705a至705n)可以包括冲突检测器,该冲突检测器配置为检测两个或更多个处理元件(诸如,处理器或加速器)尝试访问存储器切片中的任何一个切片的实例。冲突检测器可以针对所尝试的同时访问监测对每个瓦片(例如,710a至710n)的访问。除了其它示例特征之外,冲突检测器可以配置为向运行时调度程序(scheduler)报告发生了访问冲突并且需要解决访问冲突。
图8示出了图示了根据一些实施方案的多时隙矢量处理器305(例如,超长指令字(VLIW)矢量处理器)(诸如,SHAVE处理器)的示例实施方案的简化框图。在该示例中,矢量处理器可以包括多个(例如,9个)功能单元(例如,803至811),该多个功能单元可以由多端口存储系统800进行馈送,由矢量寄存器文件(VRF)801和通用寄存器文件(GRF)802进行备份。处理器包括指令解码器(IDEC)812,该指令解码器(IDEC)812对指令进行解码并且生成控制功能单元803至811的控制信号。功能单元803至811是断言执行单元(PEU)803、分支和重复单元(BRU)804、负载存储端口单元(例如,LSU0 805和LSU1 806)、矢量算术单元(VAU)807、标量算术单元(SAU)810、比较和移动单元(CMU)808、整数算术单元(IAU)811和体积加速单元(VXU)809。在该特定实施方案中,VXU 809可以加速对体积数据的操作,包括存储操作/取回操作、逻辑操作和算术操作。虽然在图8的示例中将VXU电路系统809示出为单一组件,但是应该理解的是,VXU(以及其它功能单元803至811中的任何一个)的功能可以分布在多个电路系统之间。进一步地,除了其它示例实施方案之外,在一些实施方案中,VXU 809的功能可以分布在处理器的一个或多个其它功能单元(例如,803至808、810、811)内。
图9是图示了根据一些实施例的VXU 900的示例实施方案的简化框图。例如,VXU900可以提供至少一个64位输入端口901以接受来自矢量寄存器文件或通用寄存器文件的输入。该输入可以连接至多个功能单元,包括寄存器文件903、地址生成器904、点寻址逻辑905、点插入逻辑906、点删除逻辑907、处于X维的3D到2D投影逻辑908、处于Y维的3D到2D投影逻辑909、处于X维的3D到2D投影逻辑910、2D直方图金字塔生成器911、3D直方图金字塔生成器912、群体计数器913、2D路径查找逻辑914、3D路径查找逻辑915以及用于对64位无符号整数体积位图进行操作的其它可能的功能单元。除了其它示例特征之外,可以将来自块902的输出写回到矢量寄存器文件VRF或通用寄存器文件GRF寄存器文件。
传统编译器可能无法为机器学习应用生成有效地并且高效地利用示例机器学习设备的架构元件(诸如,在图2至图8的示例中讨论的)的已编译二进制文件。进一步地,在这种机器学习设备中,设备的已编译二进制文件可以是序列化(serialized)数据,而不是机器代码。除了其它元数据之外,已编译二进制文件可以指定要执行操作的特定调度以及已分配的用于存储张量以供后续操作使用的存储位置,从而优化了推理性能(每秒帧数)和功率性能以及机器学习设备架构的其它方面。
已经开发出了一些特定于机器学习的编译器,但是这种编译器也不是没有其弱点的。例如,TensorFlowTM的Accelerated Linear AlgebraTM(XLA编译器)例如提供了用于重新将TensorFlow的目标设定为非CPU(如同具有或不具有LLVM后端的硬件)的方法。然而,这种编译器的适用性可能受到限制。例如,已经开发出GoogleTM张量处理单元(TPU)作为针对TensorFlow框架特别定制的自定义ASIC。虽然现有的机器学习编译器可以用作非TPU应用的基础,诸如,通过对XLA编译器实施新的后端(除了其它相似示例之外),但是这种解决方案具有若干示例缺点和挑战。例如,制作自定义后端需要大量的工程时间和资源,其中,硬件中的结果仍然受限于与TensorFlow模型紧密耦合。进一步地,XLA为一些节点(诸如,点)发出矢量化的LLVM中间表示(IR),并且依赖于针对其它节点的LLVM矢量化,然而,这可能与一些机器学习设备架构(诸如,在上面的示例中描述的架构)不兼容。在一些实施方案中,示例VPU(诸如,上面讨论的)可能需要抽象计算资源接口在编译时间暴露出来以标识在目标VPU上可用的(一个或多个)计算资源。作为另一示例缺点,XLA编译器(以及其它现有的机器学习编译器)由于其对非抽象存储器类型的接口的假设而可能无法保证最佳的推理性能,这可能导致存储器数据局部性中的非最佳平衡,从而降低了对计算并行性的充分利用。在一些机器学习设备中,可以实施抽象存储器类型接口。进一步地,为了确保充分利用计算并行性,可能需要基于抽象软件的存储器分配机制,该机制使应用编程接口(API)能够用于指定哪些编译器算法将用于管理对存储器的分配。一个这种示例是:指定编译器使用非循环图着色存储器分配。除了其它示例问题之外,作为再一示例问题,TensorFlow以及其它现有的机器学习框架可以被设计为使用标准的如同CPU/GPU的存储器架构而不是优化的存储器架构(诸如,在上面的示例机器学习设备系统中所讨论的示例存储器架构中讨论的)来进行操作。
在一个示例中,可以利用模块化现代编译器基础架构来实施改进的编译器105。在一些情况下,编译器105的特征中的至少一些特征可以基于LLVM原理。如上面讨论的,由于开发自定义后端的限制,在一些机器学习硬件设备架构和算子中利用基于TensorFlow的编译器会很困难/昂贵并且不可扩展。改进的编译器(诸如,讨论的)可以解决这些以及其它示例问题。
在一些实施方案中,改进的编译器可以配置为使用深度神经网络(DNN)的机器学习框架(例如,TensorFlow、CaffeTM等)的表示(例如,110),针对所选择的目标(例如,125)适配(adapt)和优化该表示,并且按照允许编译特定于时间目标的优化的方式来产生与所选择的目标硬件125对应的二进制可执行文件(例如,150)。图10是图示了从图数据结构110生成示例序列化二进制文件150的简化框图1000,该图数据结构110定义用于深度学习应用的训练神经网络模型。可以生成二进制文件150以优化在特定目标机器学习硬件设备(例如,125)处可用的资源。为了产生这种二进制文件150,可以提供改进的编译器105,实施该改进的编译器105以优化深度学习应用的性能。在一些实施方案中,编译器105可以访问神经网络模型110以及与应用和目标硬件125有关的信息(例如,目标描述符文件120),并且生成改进的中间表示(IR)140,从该改进的中间表示(IR)140生成二进制文件150。在一种示例实施方案中,中间表示140可以由一组子模型组成。在图10的特定示例中,中间表示140的模型可以包括算子模型(operatormodel)1005、数据模型1010和控制模型1015。中间表示140还可以被提供有描述目标硬件设备的属性(例如,如从示例目标描述符文件120提取的)的数据(例如,结构数据1020)、以及其它示例子模型和信息。
当从示例编译器(例如,105)的前端使用神经网络模型时,可以如上面讨论的那样生成中间表示(IR)140。在一个示例中,IR 140可以由编译器通过下述操作来构造:对神经网络模型110进行解析以标识用于实施神经网络的相应操作和数据流。进一步地,编译器105可以从目标描述符文件120标识在目标硬件设备上可用的存储器资源和计算资源(以及其它资源(例如,通信资源))(例如,并且将该信息存储在IR中(例如,存储在结构模型1020中))。除了其它示例实施方案之外,一组子模型(例如,1005、1010、1015)可以被生成并且被封装在中间表示140内以提供在图110中描述的神经网络的数学结构的可配置表示(例如,中间表示的计算模型),例如,以一个或多个计算图的形式,可以从该一个或多个计算图构造二进制文件。子模型可以分别提供不同的视图,但是是指相同的基础结构,即,中间表示的计算模型。这可以允许简化中间表示的整体复杂性以在保持逻辑空间的一致性的同时单独解决编译问题,这允许高效地处理所考虑的所有类型的实体之间的相互关系。
图11A是表示根据至少一些实施例的示例算子模型1005的简化框图。在该示例(以及下面结合图11B至图11C讨论的对应示例)中,在示例图数据结构中定义并且描述了示例神经网络。改进的编译器可以接受图数据结构连同目标描述符和编译描述符作为输入,目标描述符描述特定目标设备的属性,编译描述符描述关于将神经网络编译成供目标设备使用的二进制文件所要执行的原理和编译遍次。在神经网络的该(简化的)示例中,将在神经网络处接收输入1105,并且执行操作(例如,1110、1115、1120、1125、1130)的集合以实施神经网络层(例如,通过乘法累加(MACC)运算、执行激活函数等),并且生成输出1135(例如,推理结果、分类结果、特征矢量等)。
在一些实施方案中,算子模型1005以计算图的形式提供神经网络(例如,DNN)的数学结构的可配置表示。在一些实施方案中,算子模型图可以标识以下内容并且对其进行建模:用作神经网络的构建块的数学运算(或者简称为“运算”);表示运算的乘积(例如,多维数组)的张量;以及神经网络的数据流,这些数据流表示操作之间参考张量的数据依赖性。算子模型1005可以标识在该数据流中的操作(例如,1105至1135)和张量(例如,1140、1145、1150、1155、1160、1165)中的每一个。张量表示神经网络的操作中的至少一个操作的预期结果。因此,张量可以与对应的操作(例如,将生成对应的张量(例如,1150)作为结果的操作(例如,1110))相关联。在一些实施方案中,可以通过下述操作来生成算子模型(例如,1005):将神经网络图110中的每个节点映射到相应的操作(例如,1105至1135),并且为神经网络图110中的每个边定义张量。
图11B是表示根据至少一些实施例的示例数据模型1010的简化框图。数据模型(例如,1010)可以用作中间表示的资源子模型以对在目标机器学习设备中可用的可管理资源进行建模,该目标机器学习设备可以用于实施特定神经网络(例如,由图110建模的)。这种资源可以包括存储器资源和计算(computation)(或者“计算(compute)”)资源,存储器资源表示具有用于存储张量的定义能力并且可由设备上的各种类型的计算资源访问的各种类型的存储器,计算(computation)(或者“计算(compute)”)资源表示机器学习设备的使得能够计算和处理执行的数据或者控制的硬件模块。中间表示的资源子模型可以使两种类型的可管理资源都具有专用视图,该专用视图允许编译器生成可执行文件以高效地并且最佳地访问和操纵它们。在存储器资源的情况下,可以提供数据模型1010。
在图11B的示例中,数据模型1010可以包括用于表示针对神经网络确定的张量(例如,1140至1165)的图,并且可以另外包括针对目标机器学习设备的每个存储器资源的存储器分配器对象(例如,1170、1175)。在一些实施方案中,目标描述符120文件(例如,实施为JSON文件)可以由编译器105使用,并且可以标识目标机器的可用存储器资源(例如,一个或多个片外存储器块、一个或一组暂存存储器块、以及其它存储器资源),并且可以使对应的存储器分配器对象实例化。除了其它潜在的示例之外,在图11B的特定示例中,已经在特定目标机器学习硬件中检测到两个存储器资源,诸如,本地暂存存储器资源和片外DDR资源。因此,在图11B的示例中,针对目标的两个标识的存储器资源中的每一个,编译器可以分别使两个对应的存储器分配器对象(例如,1170和1175)实例化。
在一些实施方案中,存储器分配器对象可以定义要为对应的存储器资源确定的一组属性以及可以被调用(例如,由编译器)以确定属性的值并且将这些值填充在存储器分配器对象中的一组方法。存储器分配器对象可以实现以下编译器:该编译器能够进行灵活的存储器管理方法以在深度神经网络应用中获得最佳推理性能。每个存储器分配器对象可以针对其相应类型的存储器资源(以及在目标描述符文件中指定的存储器区域)管理对数据缓冲区(例如,1180、1185、1190、1195)的分配。这使得能够在执行过程中的任何给定阶段对每条数据进行精确定位,该执行过程在编译时间将是已知的。除了其它示例好处之外,通过这些存储器分配器对象促进的、编译器中的这种专门的存储器管理方法可以用作改进的编译器的关键使能器以生成可执行文件,这些可执行文件使目标硬件能够实现比在传统实施方案中更好的推理性能。
图11C是表示根据至少一些实施例的示例控制模型1015的简化框图1100c。控制模型1015还可以实施中间表示的资源子模型的一部分。具体地,控制模型1015可以用于对计算资源进行建模。控制模型1015可以对被确定为实施神经网络的操作的集合的顺序和依赖性进行建模(例如,结合算子模型的生成)。不仅可以从神经网络图的节点,而且可以从目标硬件系统的属性和资源约束(如在目标描述符文件中标识的)确定顺序。
图11C示出了控制模型1015的简化示例(与图11A至图11B中的示例算子和数据模型对应)。在该特定示例中,标识的示例机器学习设备的硬件资源约束能够促进如在神经网络图中本来描述的顺序和依赖性。例如,控制模型1015可以定义:操作1110将在完成操作1105之后开始(并且依赖于操作1105的完成),操作1115将在完成操作1110之后开始(并且依赖于操作1110的完成),并且操作1120和1125将在完成操作1115之后开始(并且各自依赖于操作1115的完成)。由于操作1125与操作1120和1130在并行分支中,因此,操作1125不依赖于操作1120或1130,并且可以在操作1125之前、之后或与操作1125并行执行操作1120和1130,等等。在其它实施方案中,由于被确定为实施给定神经网络的操作的复杂性和要求和/或由于所选择的目标机器学习设备的资源限制(例如,有限的存储器资源、计算资源或通信资源),可以开发示例控制模型(例如,1015)(例如,基于一个或多个编译遍次和对应目标描述符文件中的信息),该示例控制模型不仅考虑在神经网络图中表达的本地顺序,而且反映硬件目标硬件的硬件资源限制。例如,由于资源约束,可以确定附加的依赖性以在特定目标硬件上实施神经网络,并且还可以在针对这种示例生成的控制模型中描述这些附加的依赖性并且对其进行建模。
示例编译器利用中间表示的子模型来执行编译遍次的集合以生成针对特定目标硬件调整的可执行文件。取决于编译遍次,可以选择中间表示子模型中的一个特定中间表示子模型并且将其用于执行编译遍次。通常,将编译过程划分成编译遍次,这些编译遍次是在中间表示的计算模型上的函数。然而,应该了解,除了其它示例之外,单个编译遍次的范围不受限制,而是通常适应解决孤立的任务,诸如,向如同常量的存储器分配静态填充张量或用更高效的等效物来代替操作的子图。在一些实施方案中,该编译过程将神经网络图模型的通用的、与目标无关的条目形式转换为适合于目标硬件的表示。作为该过程的一部分,使用中间表示来向操作分配计算资源(同时用目标定义的等效物来代替通用操作)并且向张量分配存储器资源。进一步地,除了其它示例特征之外,控制模型还可以增强中间表示以定义执行流程,例如,以使得能够并行执行深度神经网络的特定部分。
转向图12,示出了图示了示例编译器105的组件和功能(诸如,在本文讨论的改进的实施例中描述的)的简化框图1200。在该示例中,编译器105可以包括前端1202、中端1205和后端1250。在一些实施方案中,可以在前端处(例如,通过前端API 1204)接收描述特定训练神经网络的编译图110。在一些实例中,可以根据开源平台(例如,TensorFlow、Caffe等)来生成图110。前端可以使用图110并且对图110进行解析,并且生成合成API调用(例如,从API适配器1206到合成API 1208),并且使用编译器105发起为特定神经网络生成可执行二进制文件(例如,150)。
在一些实施方案中,可以提供合成API,该合成API配置为针对特定神经网络生成中间表示或“计算模型”140。在一些实例中,可以提供操作注册表1212以在编译器内定义编译器105熟悉的并且可以与示例神经网络图中的节点对应的若干操作。操作注册表1212可以用于定义编译器处理对硬件资源的分配的方式以使得能够执行特定操作。在一些情况下,操作注册表1212可以包括与深度学习模型的实施相关联的操作定义的集合。
除了其它示例实施方案之外,在一些实例中,可以提供示例编译器,该示例编译器包括能够与一个或多个外部应用(例如,1215)(或者在一些情况下,在一系列深度学习集成开发环境工具中提供的应用)通过接口连接的编译API 1216,其中,应用配置为使用户能够创作和生成特定神经网络模型的图。在任何实例中,都可以为图生成对应的中间表示。在一些实施方案中,中间表示可以包括算子模型、数据模型(具有存储器分配器)和控制模型,可以结合各种编译遍次(例如本文讨论的)的执行来使用它们。
在一些实施方案中,除了在编译器105处接受神经网络图之外,还可以接收其它输入以针对特定编译项目定制编译器105的配置。例如,如上面介绍的,可以提供编译描述符文件115作为输入以指示关于生成用于实施特定神经网络的特定代码150而要由编译器执行的一组支持的编译遍次。编译描述符可以定义要在编译期间执行的遍次的列表。在这种列表上的条目及其顺序可以特定于目标平台和编译目标两者,例如,以针对性能进行优化或针对大小进行优化。此外,可以提供目标描述符文件120作为输入以指定特定神经网络计算设备的属性,该特定神经网络计算设备将实施神经网络,并且将针对特定神经网络计算设备调整或优化可执行代码150。在一些实施方案中,配置API 1225可以接收编译描述符115和目标描述符120,并且可以从文件115、120提取信息以生成编译配置130,该编译配置130可以由负责协调编译的编译单元1210和遍次管理器1220(或者其它组件)使用。
示例编译单元(例如,1210)可以配置为管理编译器105的操作的序列。编译单元1210可以利用计算模型140和编译配置1230来驱动对要针对特定机器学习设备调整的神经网络的特定编译。例如,可以对编译描述符115进行解析以确定要执行的编译遍次的特定集合。例如,除了其它示例实施方案之外,编译描述符115可以包括编译遍次的列表(例如,由用户工程师或者由系统选择的),或者可以对编译遍次的特定预定义集合或封包进行命名,编译器105可以识别这些编译遍次以确定关于特定编译项目要执行支持的编译遍次的哪个子集。编译描述符115可以定义一个或多个编译遍次的顺序或依赖性以及用于执行一个或多个编译遍次的条件、以及其它示例信息。遍次注册表1218可以被维持在编译器105中,并且包括要由编译器选择并执行的用于执行下述操作的逻辑:执行由编译器支持的并且在编译描述符115中列出的编译遍次的集合中的任何一个编译遍次。在一些实施方案中,遍次注册表1218可以是可扩展的,因为新的并且改进过的编译遍次可以被添加到遍次注册表1218的编译遍次的集合中包括的编译遍次或代替遍次注册表1218的编译遍次的集合中包括的编译遍次。将示例编译描述符的简化表示提供为下面的说明性示例。
在一些实施方案中,遍次管理器1220可以与编译单元1210通过接口连接,并且使用中间表示140来发起并且协调一系列编译遍次(例如,根据在编译描述符115中命名的并且通过编译配置130提供的编译遍次的列表)。在一些实施方案中,编译遍次可以开始于一个或多个初始验证遍次1232以在继续编译遍次的下一阶段之前针对正确性验证神经网络图。在完成(一个或多个)编译遍次(例如,1236、1240、1244)的阶段之后,可以执行对应的验证遍次(例如,1238、1242、1246)。在每个验证遍次之后,可以生成相应的编译输出(例如,1235a至1235d)以记录验证遍次的结果,并且提供系统工程师数据和调试程序数据以对编译的进度和性能进行评估。在一些实施方案中,编译输出数据(例如,1235a至1235d)可以被包括或被呈现到图的图形表示(如在验证遍次中评估的)中(例如,并且被注释以指示在验证遍次期间检测到的任何问题以及标识与这些问题相关联的节点和边、以及其它示例信息)。
在一个示例中,可以将编译遍次分组成编译遍次的集合(例如,特定类型或类别的编译遍次的集合)。编译遍次会产生中间表示图的变换版本,其中,验证遍次确认这些变换的、修改过的IR图有效。在一些实例中,编译描述符120可以标识这些遍次组中的每个遍次,并且指定要在每个组或编译阶段中执行的单独的遍次。例如,在一个示例中,可以在其它类别的编译遍次(例如,优化遍次1240和/或结束遍次1244等)之前定义并且执行一个或多个适配编译遍次1236的集合。除了其它示例之外,适配遍次1236可以是标识下述机会(独立于目标硬件)的编译遍次:所述机会用于例如通过融合编译遍次(例如,以将两个操作组合成单个操作)或替换编译遍次(例如,用在功能上等效的并且更高效的或更能适应的替换操作来代替操作),来修改神经网络图本身并且潜在地简化和优化与神经网络相关联的操作和数据流。这种编译遍次可以标识与硬件无关(hardware-agnostic)的机会,这些与硬件无关的机会源于以下操作的基础数学:这些操作要被执行以实施神经网络,以生成神经网络的简化过的、更高效的版本(并且在中间表示图的变换中反映这些修改)。
在执行了适配遍次1236以执行基础神经网络图的与硬件无关的优化之后,一个或多个对应的验证遍次(例如,1235b)确定通过适配遍次1236对图进行的改变是否导致错误、不一致、冲突或图中的其它问题。如果中间表示的变换版本未通过验证遍次,则编译过程会中断(例如,以允许进行调试)或终止。验证遍次成功会使进一步的编译遍次阶段(例如,1236、1240、1244等)能够继续。在一个或多个适配遍次1236之后,路径管理器1220可以使得执行优化遍次1240的集合。优化遍次1240可以包括用于确定用于执行下述操作的目标硬件的最佳计算资源(例如,使用中间表示的算子模型)的编译遍次:执行针对神经网络确定的操作的集合(例如,由编译遍次1236产生的简化过的操作的集合)中的每个操作。除了其它示例之外,优化遍次1240还可以包括用于确定执行操作的最佳顺序的编译遍次(例如,使用中间表示的控制模型)。
在完成优化遍次1240之后,会产生计算模型140的进一步修改过的版本,并且可以对产生的模型执行一个或多个对应的验证遍次(例如,1242)。在成功完成优化遍次1240之后,在一些实施方案中,可以在生成结果可执行文件150之前执行附加的结束编译遍次1244。在一些实施方案中,结束遍次1244可以包括以下编译遍次:这些编译遍次配置为最佳地确定用于在模型中定义的各种张量的缓冲区,以及针对这些缓冲区向目标硬件的存储器分配和指定地址并且确定分配的存储器的寻址。除了其它示例之外,附加的编译遍次可以基于针对缓冲区对存储器的初始分配来确定在变换的计算图中定义的某些并行数据流是否将使用比在目标设备上可用的存储器更多的存储器,从而使编译遍次潜在地插入其它控制边以减少并行操作(例如,适应目标设备的存储器资源限制)。在结束遍次中执行的这种存储器分配遍次期间,可以使用中间表示的数据模型的存储器分配器对象。在一些实施方案中,可以基于在编译描述符115中指定的一种或多种特定存储器分配算法来执行存储器分配遍次。进一步地,在一些实施方案中,编译器可以维持针对特定目标硬件标识的所有资源的临时的、上下文定义的状态。可以按照计算阶段的形式来存储这种状态,这允许捕获计算的时变特性。具体地,除了其它示例特征和好处之外,阶段数据可以由编译器用于确保在执行的任何时刻都没有过度分配单个资源。
在完成了结束遍次1244之后,在将进一步修改过的计算模型140发送至编译器后端1250之前,可以执行最终验证遍次1246,其中,对计算模型140执行序列化遍次1252以生成能够由目标硬件执行以实施神经网络的二进制文件150。该二进制文件150可以是串行二进制文件(例如,一次一个字节地串行流送的二进制文件),该串行二进制文件被优化以便根据提供给编译器105的编译描述符115和目标描述符120文件来在特定硬件设备上实施神经网络。
如本文提到的,可以利用目标描述符文件120(例如,实施为JSON文件或其它人类可读的和可编辑的文件)来指定目标机器学习设备的硬件资源的特定属性。按照这种方式,改进的编译器105可以配置为针对各种各样的不同机器学习设备和架构优化神经网络可执行文件,其中,定义相应的目标描述符文件并且将其用于配置编译器以针对目标设备的特定属性进行优化。因此,相同的编译器可以基于描述对应目标硬件的相应目标描述符针对相同的神经网络图生成不同的可执行文件。目标硬件的属性可以包括标识目标硬件的计算资源(包括标识目标的哪些计算资源能够执行哪些类型的操作(例如,如编译器理解的(从操作注册表1212)))的属性。目标描述符文件可以另外标识目标硬件的各种存储器资源,包括存储器的类型、这些存储器的大小、存储器块与计算资源之间的密切关系或连接以及其它示例信息。目标描述符120可以另外标识与目标硬件有关的其它信息,包括目标硬件所支持的数据类型、目标机器学习设备的互连资源或其它通信资源以及其它示例。
转向图13,示出了图示了由改进的编译器生成的特定神经网络的中间表示的算子模型1005的示例的简化框图1300。示例算子模型1005可以反映如通过一个或多个编译遍次(例如,适配遍次和/或优化遍次)变换的算子模型。例如,可以通过这种编译遍次来确定并且填充有关在算子模型1005中描述的操作和张量的信息,从而对如从输入神经网络图和/或特定目标机器学习设备的目标描述符确定的算子模型1005的初始版本进行构建。
在图13的特定示例中,通过示例算子模型来对简化的神经网络进行建模,简化的神经网络包括两个层:卷积层和ReLu层。可以将两种操作1305、1310定义为与访问要输入到卷积层的数据和相关的卷积操作1325对应。例如,操作1305可以是以下输入操作:在分类或推理时将存储器中要作为输入提供的样本(例如,图像)加载到神经网络。操作1310可以提供要在利用加载在算子中的样本(1305)的卷积中使用的常数值(例如,权重)。算子模型1005可以包括用于标识操作的属性的字段(例如,基于操作的类型),包括操作类型的标识符。例如,操作1305、1310可以分别涉及将数据加载到存储器中,并且算子模型1005可以包括属性,诸如,将被加载的数据的类型、将执行加载的顺序(例如,通道→高度→宽度(CHW))、数据的形状(例如,具有3个(例如,3RGB)通道(224x224x3)的224x224像素图像)以及其它示例信息。对于将加载常数的操作1310,用于操作的算子模型字段可以标识常数。对于其它操作(例如,卷积操作1325和ReLu操作1335),同样可以定义这些操作类型的属性,并且使用算子模型内的相应字段填充的值用于标识这些属性。
继续图13的示例,示例算子模型1005还可以对通过操作输出的张量(例如,1315、1320、1330、1340)进行建模。输出操作(例如,1345)可以简单地将(多个)最后生成的张量加载到存储器中。示例算子模型还可以定义用于填充针对张量中的每个张量确定的(通过一个或多个编译遍次)属性的字段。例如,这种张量属性字段可以包括用于存储属性信息(诸如,用于分配用于将张量存储在目标上的存储器的对应存储器分配器的名称、张量的数据类型、张量的流动、张量的形状、用于存储张量的顺序等)的字段。可以在其它编译遍次(例如,存储器分配遍次)中利用该信息以保留适当数量的存储器来存储张量以及其它示例信息。例如,可以利用早期的编译遍次来确定操作和张量的属性(使用中间表示的算子模型)。利用该信息,可以执行其它编译遍次(使用IR的算子模型和/或控制模型)以确定哪些操作将由哪些计算资源并且将以什么顺序来执行。在通过先前的编译遍次分配了计算资源和操作命令集以及张量属性信息的集合的情况下,可以执行存储器分配遍次(使用IR的数据模型)以确定如何最好地分配存储器以实现快速并且高效地使用张量,从而优化特定目标硬件对神经网络的操作的执行。
转向图14,示出了图示了根据至少一些实施方案的针对示例张量的示例存储器分配的框图1400。在图14的特定示例中,已经在生成特定神经网络的中间表示期间通过编译器构造了数据模型1010。可以生成数据模型1010以为目标机器学习设备的存储器资源中的每个存储器资源创建若干存储器分配器对象(例如,1405、1410)(例如,基于提供给编译器并且描述设备的目标描述符)。在该(简化的)示例中,特定目标设备的存储器资源包括CMX暂存存储器资源和DDR片外存储器。可以创建存储器分配器1405以促进在暂存存储器中针对缓冲区分配存储器,并且同样可以创建存储器分配器1410以促进在片外存储器中分配缓冲区。
图14的特定示例图示了为特定缓冲区(例如,缓冲区2)分配暂存存储器内的存储器。可以咨询特定的一个张量1415的属性(例如,如在中间表示的算子模型和/或数据模型中描述的)以首先确定可用存储器资源中的哪个资源将最适合用于存储张量。在该示例中,由相同的或附近的计算资源执行的后续操作可以将特定张量确定为(例如,通过一个或多个编译遍次)在卷积操作中使用,并且因此,可以分配特定张量以存储在暂存存储器(如果有的话)中。一个或多个编译遍次还可以利用中间表示的模型来确定张量的属性(例如,其块大小、在张量中使用的铺垫(padding)、在操作中应用的步幅、张量(例如,其组成分量矩阵1415a至1415c)是否应该被存储在连续的存储器中以优化性能以及其它示例信息)。确定该信息可以允许确定缓冲区的足以存储张量的大小(例如,1420)。编译遍次可以针对数据模型中的每个张量确定相似的信息,并且存储器分配器对象(例如,1405、1410)可以提取该信息并且定义缓冲区以标识用于针对在执行神经网络期间存储每个张量进行“预留”或分配的存储器的数量。存储器分配编译遍次还可以起作用以在目标的要实施每个缓冲区的存储器中肯定地定义地址范围,并且可以在传递给目标机器学习设备并且由目标机器学习设备使用的二进制可执行文件内定义该信息。
如上面介绍的,改进的编译器可以使各种目标机器学习设备(例如,视觉处理单元(VPU)、TPU等)的可管理资源(包括设备的可以对其执行特定神经网络操作的计算资源和用于存储在神经网络操作中使用的张量的存储器资源)抽象化。例如,示例编译器可以接受并且使用目标描述符,并且编译器可以使用在目标描述符内的信息来针对多个不同设备中的可能的任何一个设备的特定硬件架构灵活地调整编译过程。例如,目标描述符可以指定在执行哪些类型的神经网络操作时,设备的哪些计算资源是可比较的(例如,指定可以在SHAVE处理器或硬件加速器上执行卷积)。示例目标描述符还可以指定特定计算资源可以支持的操作的参数(例如,内核大小)(例如,指定特定硬件加速器限于11x11的内核大小)。在目标描述符JSON文件中描述了这些资源,该目标描述符JSON文件是针对编译的输入。
改进的编译器还可以利用模块化的基于软件的存储器分配方法来向数据结构(例如,图中的张量)分配物理存储器以指定在目标描述符文件中描述的特定存储器区域。这表明了计算资源(例如,硬件加速器、SHAVE处理器、其它处理器)可以如何访问它们需要进行计算的数据,并且使得能够生成代码,该代码以优化的方式标识每条数据在执行过程中的任何给定阶段的精确位置。进一步地,为了确保充分利用计算并行性,除了其它示例特征之外,编译器还可以提供API以用于指定使用哪些编译器算法(例如,非循环图着色存储器分配)来管理对存储器的分配。
在一些实施方案中,为了使得能够消耗和使用目标描述符,示例编译器可以配备有与编译器的核心集成的软件模块。进一步地,编译器可以提供其自己的API以允许用户定义和修改对目标平台的描述,作为编译流水线的一部分。例如,API(例如,DescribableTarget API)可以提供用于定义存储器资源和计算资源的方法。例如,API(以及目标描述符)定义针对存储器资源的信息,包括存储器资源的类型、存储器资源的大小、字节对齐、字大小、性能索引、可分配的张量的定义以及其它示例属性。可以在目标描述符中定义有关计算资源的信息以包括计算资源的类型、设备上的特定类型的计算实例的实例总数或数量、计算资源的可分配操作类型、目标特定操作类型的转换图、由于操作的属性以及其它使用限制而导致的分配限制以及其它示例信息。通过使用目标描述符,可以在由编译器针对各种神经网络模型生成的中间表示内定义资源子模型,作为编译过程的初始化的一部分。
在一些实施方案中,通过目标描述符文件提供的抽象允许将编译器的软件核心在逻辑上与任何特定目标解耦合,并且有效地使其易于重用和修改。实际上,在一些实例中,可以在加载目标描述符期间至少部分地定义由编译器开发的中间表示,从而引入编译器的极端适应性(例如,实现对机器学习设备的自定义配置的编译以及涉及为特定目的构建的专用和专有机器学习设备的编译)以及其它示例好处。
在一些实施方案中,为了提供有效的机制来按照自动化方式处理在特定目标描述符实例中收集到的信息,同时维持对其内容的宽松限制的假设,可以定义特定于域的元语言以用于目标描述符。特定于域的元语言可以支持对结构化操作数之间的复杂条件关系的有效表示,该有效表示可按照JSON格式表达并且与编译器核心集成。进一步地,与目标描述符兼容的编译器可以支持动态遍次管理,从而使得能够在编译时包括并且控制自定义遍次。
下面是根据一些通用实施方案的简化示例目标描述符文件的一部分的伪代码表示:
在上面的示例中,目标描述符文件可以包括描述示例目标机器学习设备的资源的各种信息。例如,如在上面的示例中示出的,目标描述符可以标识若干操作(例如,与在编译器的操作注册表中定义的操作对应)并且对能够执行操作的单独的计算资源进行命名。例如,在上面的示例中,在目标描述符中对卷积操作进行了命名,并且将两种计算资源(“SHAVE处理器”和“硬件加速器”)命名为能够执行卷积的计算资源。进一步地,在每种计算资源下,指定了计算资源的属性,诸如,由资源用于执行操作的变量、目标上的计算资源的实例数量、计算资源所支持的数据类型以及其它示例信息。进一步地,在上面的示例中对存储器资源以及每个存储器资源的特定属性进行了命名。例如,除了其它示例信息(例如,存储技术的类型)之外,为每种存储资源指定了名称、对齐、数据类型大小和存储器大小属性。还可以提供进一步的信息,包括类似的针对计算资源和通信资源的特定于资源的属性、目标的数据精度、目标所支持的(一种或多种)数据类型以及其它示例。
在一些实施方案中,在将训练神经网络编译成序列化二进制文件以进行推理期间,编译器将向在目标描述符文件中指定的存储器区域中的数据结构(张量)分配特定物理存储器地址。这些存储器区域可以依赖于目标设备的资源。通常在编译遍次期间确定特定数据结构被分配驻留在其中的特定存储器区域,这些编译遍次确定操作的执行顺序和/或将每个操作的执行映射到特定计算资源。为了分配特定物理存储器地址,编译器可以创建存储器分配器对象。存储器分配器可以在编译器中实施为基于软件的高级存储器管理对象。编译器可以针对在目标描述符中指定的每个存储器类型使存储器分配器对象实例化。存储器分配器对象可以包括可调用以根据在编译描述符文件中指定的算法来管理对在相应存储器分配器所管理的存储器区域中的数据的缓冲区的分配的方法。例如,在上面的示例目标描述符中,在示例目标系统中标识了六个示例存储器区域(例如,DDR_HEAP、CMX_NN、CMX_UPA、DDR_BSS、ProgrammableInput、ProgrammableOutput等)。因此,在这种示例中,编译器可以基于接收到目标描述符来使六个对应的存储器分配器对象实例化,每个存储器分配器负责在存储器区域中的一个对应存储器区域中分配数据的缓冲区。在一些情况下,除了其它架构考虑之外,硬件加速器可能要求其读取的数据与存储器中的特定边界对齐。因此,存储器分配器在分配期间管理特定存储器缓冲区属性,其可以基于这种架构要求。表2图示了示例属性,可以针对存储器资源将这些示例属性存储在示例目标描述符中,除了其它示例用途之外,这些示例目标描述符可以由编译器的IR数据模型使用并且可以用于存储器分配编译遍次中:
表2:目标描述符中的示例存储器资源属性
转向图15A至图15B,示出了图示了使用改进的编译器(诸如,上面讨论的)的示例编译的流程图1500。(注意,在图15A中图示了流程图1500的顶部部分,其继续到图15B中图示的流程图1500的底部部分。)在改进的编译器的一个示例实施方案中,可以发起编译器的编译单元(1502),该编译单元配置为管理将深度神经网络编译成二进制文件以在特定目标设备上执行。编译器可以组成深度神经网络的中间表示(1504),并且可以配置编译单元(1506),例如,使用目标描述符中的信息和输入到编译器的编译描述符。可以基于针对特定目标设备获得(例如,从对应的目标描述符文件)的信息来使存储器分配器对象的集合实例化和初始化(1508)。编译流程继续(通过箭头1510表示),其中,编译器执行编译遍次(在1512、1514、1516、1518等处)的集合。在完成了编译遍次之后,可以使用神经网络图的变换版本(通过编译遍次1512、1514、1516、1518等变换的)来生成二进制文件(1520),该二进制文件可以由目标设备执行以实施深度神经网络。
继续由流程图1500图示的示例,组成DNN的中间表示可以包括(在1522处):在编译器处对神经网络二进制文件(例如,实施为图数据结构)进行解析,并且利用直接将一个算子变换为一个或多个节点以生成中间表示的子模型来组成网络的内部表示。在一些实施方案中,诸如本文讨论的,子模型可以包括算子子模型、数据子模型和控制子模型。算子子模型可以用作数据流图,并且可以通过进行解析来生成算子子模型(1524)。进一步地,可以确定与在算子图中建模的操作对应的张量以及其类型(例如,填充的(例如,利用常数或针对神经网络的其它建立的输入)或未填充的(例如,利用将被确定为对操作的计算的输出的值),并且可以将张量存储为图的边的属性(1526)。
在一些实施方案中,配置示例编译器的编译单元(1506)可以包括:加载并解析目标描述符文件(在1528处)以及加载并解析编译描述符文件(在1534处)。对于目标描述符文件,可以将在目标描述符文件中标识的存储器区域存储在数据结构中以供编译器将来使用(1530),并且同样,也可以将在目标描述符中标识的计算资源存储在对应的数据结构中以供以后用于编译(1532)。还可以将在编译描述符中命名的编译器遍次的列表存储在数据结构中(1536)。编译描述符还可以向编译器标识在编译期间要使用的存储器分配算法以及其它附加的编译配置参数(例如,由编译器作为输出而生成的图形视图(例如,包括算子模型、数据模型和/或控制模型))(在1538处),上述存储器分配算法和其它附加的编译配置参数可以被存储到在编译过程期间要应用的编译器的数据结构中(1540)。
可以使用由编译器创建的(在1542处)与示例目标设备的每个标识的存储器区域对应的存储器分配对象、连同与由编译器开发的其它模型(例如,中间表示的子模型),以执行在编译描述符中命名的各种编译遍次。在一示例中,可以执行编译遍次(在1510处),这包括:遍历神经网络图输入并且执行与硬件无关的图优化遍次(例如,如在编译描述符中指定的)(1544),诸如,操作融合或操作替换以及其它示例。可以对图的所产生的版本进行另一些编译遍次(例如,1514),诸如进行下述操作的遍次:调度操作的执行顺序(1546),以及执行生动性分析以确定每个操作的所确定的输入/输出张量驻留在其中的存储器区域(1548)。可以执行附加的编译遍次(例如,1516)以将操作映射到目标硬件的标识的计算资源(在1550处),例如,通过对算子参数(例如,最大内核大小)进行分析并且基于这种操作参数来将操作分配给相应的计算资源(1552)。
在使存储器分配器初始化并且执行了用于优化基础神经网络图、确定操作的顺序、并将操作映射到相应的计算资源的编译遍次之后,可以执行一个或多个附加的编译遍次(在1518处),该一个或多个附加的编译遍次构成存储器分配遍次(在1554处)。例如,可以遍历在图(图的经过变换的版本)中标识的张量(1556),并且每个张量的类型(例如,填充的或未填充的)可以被标识并且用作确定应该将张量存储在何处(例如,存储在目标的哪个一般存储器区域中)的基础(1558)。例如,填充的张量可以被指定为存储在DDR存储器中(例如,根据所应用的存储器分配算法)(例如,1564)。除了其它示例规则之外,在运行时为未填充的张量(例如,硬件加速器的输出)分配的存储器可以被指定为存储在本地暂存存储器中(例如,在1566处),并且为神经网络的输出分配的存储器可以被分配为存储在DDR存储器的特定区域中(例如,在1568处)。此外,可以对张量执行任何必要的铺垫(1560)以与存储器边界对齐,这对于确定要在特定计算资源(例如,一些硬件加速器)上被执行的操作而言可能是需要的。接下来,可以基于针对张量确定的属性根据指定的存储器分配算法来向特定存储器区域分配数据缓冲区(1562)(例如,使用对应的存储器分配器)。当完成了所有编译遍次时,可以执行序列化遍次(例如,在1520处)以创建二进制文件,该二进制文件指定要执行的操作的序列以及张量中的每个张量的存储器位置,针对目标硬件的特定硬件调整了所有这些内容。
图16A至图16C是示出了用于使用改进的编译器生成用于在目标计算设备上实施神经网络的二进制可执行文件的示例技术(诸如,上面讨论的)的简化流程图1600a至1600c。例如,在图16A的示例中,可以接收图作为到编译器的输入(1605),图描述特定神经网络/对特定神经网络进行建模。编译器可以访问数据(1610),该数据描述了要在其上实施神经网络的目标计算设备的属性。编译器可以基于图和数据生成图的中间表示(1615),其中,中间表示由子模型(诸如,算子模型、数据模型和控制模型)组成。可以使用中间表示来执行编译遍次的集合(1620)。在一些实施方案中,子模型本身可以被构造为图,并且各种编译器遍次可以利用子模型(并且对子模型图执行基于图论的分析)以优化基础神经网络图和/或优化在目标上实施神经网络时对目标计算设备的硬件资源的利用。从编译遍次的集合,可以生成二进制可执行文件(1625),该二进制可执行文件可由目标计算设备执行以实施神经网络。
在图16B的示例中,可以接收图作为到编译器的输入(1630),图描述特定神经网络/对特定神经网络进行建模。编译器可以配置用于通过以下操作来在特定目标计算系统上优化神经网络:接收目标描述符文件(例如,JSON文件)(1635),该目标描述符文件标识目标系统的各种硬件资源(例如,存储器资源、计算资源、通信资源等);并且还接收编译描述符文件(例如,JSON文件)(1640),该编译描述符文件标识要执行的编译遍次的列表。在一些实施方案中,除了其它示例信息之外,编译描述符还可以另外标识要由编译遍次的列表中的一个或多个特定遍次使用的规则和特定算法。可以由编译器基于图和目标描述符中的信息来生成中间表示(1645)。可以使用中间表示(并且根据编译描述符)来执行编译遍次的集合(1650),并且可以基于完成的编译遍次的集合的结果来生成二进制可执行文件(1655)。
在图16C的示例中,可以接收图作为到编译器的输入(1660),图描述特定神经网络/对特定神经网络进行建模。可以基于图生成中间表示(1665)。该中间表示可以标识要用于实施神经网络的操作的集合、与操作的集合相关联的张量的集合、以及特定目标设备上将用于实施特定神经网络的存储器资源的集合、以及其它信息。可以使用中间表示来执行编译遍次的集合。编译遍次中的一个或多个可以是存储器分配编译遍次。执行示例存储器分配遍次可以包括:确定张量中的每个张量的属性(1670)。还可以基于张量中的每个张量的所确定的属性,来针对用于该张量的相应缓冲区的分配确定存储器资源中的一个相应存储器资源(1675)。可以在为张量确定的对应存储器资源中分配用于每个张量的缓冲区(1680)。基于一个或多个存储器分配遍次(以及其它编译遍次)的结果,可以生成针对目标计算设备调整的二进制可执行文件(1685)。
图17至图18是可以根据本文公开的实施例使用的示例性计算机架构的框图。例如,可以利用在这些示例中示出的计算机架构来实施或执行改进的编译器和/或目标计算设备的一部分。在其它示例中,除了其它合作用途之外,在这些示例中示出的计算机架构可以使用由神经网络生成的结果,提供数据以用作神经网络的输入。应该了解,也可以使用本领域中已知的用于处理器和计算系统的其它计算机架构设计。通常,用于本文公开的实施例的合适的计算机架构可以包括但不限于:在图17至图18中图示的配置。
图17是根据实施例的系统的示例图示。处理器1700是可以结合上述实施方案使用的一种硬件设备的示例。处理器1700可以是任何类型的处理器,诸如,微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器、多核处理器、单核处理器或用于执行代码的其它设备。虽然在图17中图示了仅一个处理器1700,但是可替代地,处理元件可以包括一个以上在图17中图示的处理器1700。处理器1700可以是单线程核心,或者对于至少一个实施例,处理器1700可以是多线程的,因为其每一个核心可以包括一个以上硬件线程上下文(或者“逻辑处理器”)。
图17还图示了根据一个实施例的耦合至处理器1700的存储器1702。存储器1702可以是本领域中的技术人员已知的或以其它方式可获得的各种存储器(包括存储器层次结构的各个层)中的任何存储器。这种存储器元件可以包括但不限于:随机存取存储器(RAM)、只读存储器(ROM)、现场可编程门阵列(FPGA)的逻辑块、可擦除可编程只读存储器(EPROM)和电可擦除可编程ROM(EEPROM)。
处理器1700可以执行与本文详细描述的算法、过程或操作相关联的任何类型的指令。通常,处理器1700可以将元件或物品(例如,数据)从一种状态或事物变换为另一种状态或事物。
在适当的情况下并且基于特定需要,代码1704(该代码1704可以是要由处理器1700执行的一个或多个指令)可以存储在存储器1702中,或者可以存储在软件、硬件、固件或其任何合适的组合中或者任何其它内部或外部组件、设备、元件或对象中。在一个示例中,处理器1700可以遵循由代码1704指示的指令的程序序列。每个指令进入前端逻辑1706,并且由一个或多个解码器处理。解码器可以按照预定义格式来生成微操作(诸如,固定宽度微操作)作为其输出,或者可以生成反映原始代码指令的其它指令、微指令或控制信号。前端逻辑1706还包括寄存器重命名逻辑1710和调度逻辑1712,它们通常分配资源并且对与指令对应的操作进行排队以用于执行。
处理器1700还可以包括具有一组执行单元1716a、1716b、1716n等的执行逻辑1714。一些实施例可以包括专用于特定功能或功能集的若干执行单元。其它实施例可以只包括一个执行单元或可以执行特定功能的一个执行单元。执行逻辑1714执行由代码指令指定的操作。
在完成对由代码指令指定的操作的执行之后,后端逻辑1718可以引退(retire)代码1704的指令。在一个实施例中,处理器1700允许无序(out of order)执行,但是要求按顺序引退指令。引退逻辑1720可以采取各种已知形式(例如,重新排序缓冲区等)。按照这种方式,至少在由解码器生成的输出、由寄存器重命名逻辑1710利用的硬件寄存器和表以及由执行逻辑1714修改的任何寄存器(未示出)方面,在执行代码1704期间对处理器1700进行变换。
虽然在图17中未示出,但是处理元件可以包括在具有处理器1700的芯片上的其它元件。例如,处理元件可以包括存储器控制逻辑以及处理器1700。处理元件可以包括I/O控制逻辑和/或可以包括与存储器控制逻辑集成在一起的I/O控制逻辑。处理元件还可以包括一个或多个高速缓冲存储器。在一些实施例中,非易失性存储器(诸如,闪速存储器或保险丝)也可以被包括在具有处理器1700的芯片上。
图18图示了根据实施例的按照点对点(PtP)配置布置的计算系统1800。具体地,图18示出了处理器、存储器和输入/输出设备通过若干点对点接口相互连接的系统。
处理器1870和1880还可以分别包括集成存储器控制器逻辑(MC)1872和1882以与存储器元件1832和1834通信。示例处理器(例如,1870、1880)可以包括一个或多个处理器核心(例如1874a-b、1848a-b),该一个或多个处理器核心可以耦合至相应的高速缓冲存储器(例如,1871、1882)。在替代实施例中,存储器控制器逻辑1872和1882可以是与处理器1870和1880分离的离散逻辑。存储器元件1832和/或1834可以存储在实现本文概述的操作和功能时处理器1870和1880要使用的各种数据。
处理器1870和1880可以是任何类型的处理器,诸如,结合其它附图讨论的那些处理器。处理器1870和1880可以分别使用点对点接口电路1878和1888经由点对点(PtP)接口1850来交换数据。处理器1870和1880可以分别使用点对点接口电路1876、1886、1894和1898经由单独的点对点接口1852和1854来与芯片集1890交换数据。芯片集1890还可以经由接口1839来与协处理器1838(诸如,高性能图形电路、机器学习加速器或其它协处理器1838)交换数据,该接口1839可以是PtP接口电路。在替代实施例中,在图18中图示的任何或者所有PtP链路可以实施为多点总线而不是PtP链路。
芯片集1890可以经由接口电路1896来与总线1820通信。总线1820可以具有通过其来进行通信的一个或多个设备,诸如,总线桥1818和I/O设备1816。经由总线1810,总线桥1818可以与其它设备通信,诸如,用户接口1812(诸如,键盘、鼠标、触摸屏或其它输入设备)、通信设备1826(诸如,调制解调器、网络接口设备或可以通过计算机网络1860来进行通信的其它类型的通信设备)、音频I/O设备1814和/或数据存储设备1828。数据存储设备1828可以存储代码1830,该代码1830可以由处理器1870和/或1880执行。在替代实施方案中,可以利用一个或多个PtP链路来实施总线架构的任何部分。
在图18中描绘的计算机系统是可以利用来实施本文讨论的各种实施例的计算系统的实施例的示意图。要了解,可以在片上系统(SoC)架构中或者按照能够实现本文提供的示例和实施例的功能和特征的任何其它合适的配置来组合在图18中描绘的系统的各种组件。
虽然已经将本文描述的和图示的系统和解决方案中的一些系统和解决方案描述为包括多个元件或与多个元件相关联,但是并非可以在本公开的每种替代实施方案中利用明确地图示或描述的所有元件。此外,本文描述的元件中的一个或多个元件可以位于系统的外部,而在其它实例中,某些元件可以被包括在其它所描述的元件中的一个或多个元件以及在说明的实施例中未描述的其它元件内或作为其一部分。进一步地,某些元件可以与其它组件组合,而且除了本文描述的那些目的之外,还用于替代目的或附加目的。
进一步,应该了解,上面提出的示例是非限制性示例,这些非限制性示例仅为了说明某些原理和特征而提供,而不一定限制或约束本文描述的概念的潜在实施例。例如,可以利用本文描述的特征和组件的各种组合来实现各种不同的实施例,包括通过本文描述的组件的各种实施方案而实现的组合。应该从本说明书的内容中了解其它实施方案、特征和细节。
尽管已经根据某些实施方案和通常相关联的方法描述了本公开,但是对于本领域的技术人员而言,这些实施方案和方法的变更和置换将是显而易见的。例如,可以按照与所描述的顺序不同的顺序来执行本文描述的动作,但是仍然实现期望的结果。作为一个示例,在附图中描绘的过程不一定需要所示的特定顺序或相继顺序来实现期望的结果。在某些实施方案中,多任务处理和并行处理可以是有利的。此外,可以支持其它用户接口布局和功能。其它变型在以下权利要求书的范围内。
虽然本说明书包括许多具体实施方案细节,但是不应该将这些细节视为对任何发明或者可能被要求保护的内容的范围的限制,而是作为对针对特定发明的特定实施方案的特征的描述。本说明书中在单独的实施例的背景下描述的某些特征也可以组合地实施在单种实施例中。相反,在单种实施例的背景下描述的各种特征也可以单独地或者按照任何合适的子组合实施在多种实施例中。此外,虽然上文可能将特征描述为以某些组合来起作用并且最初甚至按此来要求保护该特征,但是在一些情况下,来自所要求保护的组合的一个或者多个特征可以从该组合中删除。并且所要求保护的组合可以指向子组合或者子组合的变化。
同样,虽然在附图中按照特定顺序示出了操作,但是不应该将其理解为需要按照所示的特定顺序或者按照相继的顺序来执行这种操作,或者需要执行所有图示的操作以实现期望的结果。在某些情况下,多任务处理和并行处理可以是有利的。此外,不应该将在上述实施例中的各种系统组件的分离理解为在所有实施例中需要这种分离,并且应该理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中或者封装到多个软件产品中。
以下示例涉及根据本说明书的实施例。示例1是一种机器可读存储介质,该机器可读存储介质上存储有指令,其中,指令可由机器执行以使机器执行以下操作:在编译器处接收描述神经网络的图;访问描述目标硬件设备的数据,该目标硬件设备实施神经网络;在编译器处根据图和数据来生成中间表示,其中,中间表示包括算子模型、数据模型以及控制模型,算子模型用于标识实施神经网络要执行的操作的集合,数据模型用于标识与操作的集合对应的张量的集合,控制模型用于标识操作的排序;以及使用中间表示的算子模型、数据模型和控制模型来生成二进制可执行文件。
示例2包括示例1的主题,其中,算子模型从图的每个节点标识操作的集合中的相应操作,并且还从图的每个边标识张量的集合中的相应张量。
示例3包括示例1至2中任一项的主题,其中,数据模型标识要在目标硬件设备的存储器中分配的缓冲区的集合,并且将张量的集合中的每个张量映射到缓冲区的集合中的相应缓冲区。
示例4包括示例1至3中任一项的主题,其中,控制模型标识操作的集合之间的依赖性。
示例5包括示例1至4中任一项的主题,其中,数据包括目标描述符,该目标描述符用于标识目标硬件设备的存储器资源和计算资源。
示例6包括示例5的主题,其中,目标硬件设备包括两个或更多个不同类型的计算资源以及两个或更多个不同类型的存储器资源。
示例7包括示例6的主题,其中,目标硬件设备包括硬件加速器,两个或更多个不同类型的计算资源中的一个在硬件加速器上实现,并且两个或更多个不同类型的计算资源中的另一个在硬件加速器外实现。
示例8包括示例6至7中任一项的主题,其中,两个或更多个不同类型的存储器资源中的一个包括本地暂存存储器,并且两个或更多个不同类型的存储器资源中的另一个包括随机存取存储器(RAM)。
示例9包括示例1至8中任一项的主题,其中,指令还可由机器执行以使机器使用算子模型、数据模型和控制模型执行编译遍次的集合来生成二进制可执行文件。
示例10包括示例9的主题,其中,执行编译遍次的集合包括:针对编译遍次的集合中的每一个编译遍次,基于相应的编译遍次来选择算子模型、数据模型或控制模型中的一者;以及使用算子模型、数据模型或控制模型中所选择的一者来执行对应的编译遍次。
示例11包括示例10的主题,其中,算子模型、数据模型和控制模型中的每一者包括相应的图,并且编译遍次的集合中的一个或多个编译遍次包括对算子模型、数据模型或控制模型中的对应的一者的基于图论的分析。
示例12包括示例9的主题,其中,指令还可由机器执行以使机器接收编译描述符,该编译描述符用于标识编译器在生成二进制可执行文件时要使用的编译遍次的集合。
示例13包括示例1至12中任一项的主题,其中,二进制可执行文件包括要提供给目标硬件设备的序列化数据。
示例14包括示例1至13中任一项的主题,其中,二进制可执行文件用于使用目标硬件设备的资源来优化神经网络的实施。
示例15是一种方法,包括:在编译器处接收描述神经网络的图;访问描述目标硬件设备的数据,该目标硬件设备实施神经网络;在编译器处根据图和数据来生成中间表示,其中,中间表示包括算子模型、数据模型以及控制模型,算子模型用于标识实施神经网络要执行的操作的集合,数据模型用于标识与操作的集合对应的张量的集合,控制模型用于标识操作的排序;以及使用中间表示的算子模型、数据模型和控制模型来生成二进制可执行文件。
示例16包括示例15的主题,其还包括:使用中间表示执行编译遍次的集合来生成图的转换版本,其中,二进制可执行文件是基于图的转换版本生成的。
示例17包括示例16的主题,其中,执行编译遍次的集合包括:针对编译遍次的集合中的每一个编译遍次,基于相应的编译遍次来选择算子模型、数据模型或控制模型中的一者;以及使用算子模型、数据模型或控制模型中所选择的一者来执行对应的编译遍次。
示例18包括示例17的主题,其中,算子模型、数据模型和控制模型中的每一者包括相应的图,并且编译遍次的集合中的一个或多个编译遍次包括对算子模型、数据模型或控制模型中的对应的一者的基于图论的分析。
示例19包括示例16的主题,其中,指令还可由机器执行以使机器接收编译描述符,该编译描述符用于标识编译器在生成二进制可执行文件时要使用的编译遍次的集合。
示例20包括示例15至19中任一项的主题,其中,算子模型从图的每个节点标识操作的集合中的相应操作,并且还从图的每个边标识张量的集合中的相应张量。
示例21包括示例15至20中任一项的主题,其中,数据模型标识要在目标硬件设备的存储器中分配的缓冲区的集合,并且将张量的集合中的每个张量映射到缓冲区的集合中的相应缓冲区。
示例22包括示例15至21中任一项的主题,其中,控制模型标识操作的集合之间的依赖性。
示例23包括示例15至22中任一项的主题,其中,数据包括目标描述符,该目标描述符用于标识目标硬件设备的存储器资源和计算资源。
示例24包括示例23的主题,其中,目标硬件设备包括两个或更多个不同类型的计算资源以及两个或更多个不同类型的存储器资源。
示例25包括示例24的主题,其中,目标硬件设备包括硬件加速器,两个或更多个不同类型的计算资源中的一个在硬件加速器上实现,并且两个或更多个不同类型的计算资源中的另一个在硬件加速器外实现。
示例26包括示例24至25中任一项的主题,其中,两个或更多个不同类型的存储器资源中的一个包括本地暂存存储器,并且两个或更多个不同类型的存储器资源中的另一个包括随机存取存储器(RAM)。
示例27包括示例15至26中任一项的主题,其中,二进制可执行文件包括要提供给目标硬件设备的序列化数据。
示例28包括示例15至27中任一项的主题,其中,二进制可执行文件用于使用目标硬件设备的资源来优化神经网络的实施。
示例29是一种系统,包括用于执行根据示例15至28中任一项的方法的装置。
示例30包括示例29的主题,其中,装置包括可由数据处理器执行的编译器程序。
示例31是一种系统,包括:数据处理器;存储器;以及编译器,该编译器可由数据处理器执行以用于:接收描述神经网络的图;访问描述目标硬件设备的数据,该目标硬件设备实施神经网络;根据图和数据来生成中间表示,其中,中间表示包括算子模型、数据模型以及控制模型,算子模型用于标识实施神经网络要执行的操作的集合,数据模型用于标识与操作的集合对应的张量的集合,控制模型用于标识操作的排序;以及使用中间表示的算子模型、数据模型和控制模型来生成二进制可执行文件。
示例32包括示例31的主题,其中,编译器还用于:访问描述第二不同目标硬件设备的第二数据,该第二不同目标硬件设备实施神经网络;根据图的实例和第二数据来生成第二中间表示,其中,第二中间表示包括相应的算子模型、数据模型和控制模型,其中,第二中间表示与中间表示不同;以及使用第二中间表示生成第二二进制可执行文件,其中,第二二进制可执行文件与二进制可执行文件不同。
示例33包括示例31的主题,其中,数据包括目标描述符文件,该目标描述符文件标识目标计算设备的存储器资源的集合的属性,编译器还用于:接收目标描述符作为输入,其中,中间表示是基于属性生成的;接收标识多个编译遍次的编译描述符;以及基于编译描述符执行多个编译遍次来生成二进制可执行文件。
示例34包括示例31的主题,其中,编译器用于执行多个编译遍次来生成二进制可执行文件,并且多个编译遍次包括存储器分配遍次,并且执行存储器分配遍次包括:针对张量的集合中的特定张量,确定特定张量的属性;针对特定张量,基于属性中的一个或多个属性确定特定张量将被存储在存储器资源的集合中的特定存储器资源中;以及基于属性中的一个或多个属性,在特定存储器资源中为特定张量分配特定缓冲区,其中,目标计算设备在执行二进制可执行文件时将使用特定缓冲区来存储特定张量。
示例35是一种机器可读存储介质,该机器可读存储介质上存储有指令,其中,指令可由机器执行以使机器执行以下操作:在编译器处接收描述神经网络的图;在编译器处接收目标描述符,该目标描述符标识目标计算设备的存储器资源的集合的属性;在编译器处接收标识多个编译遍次的编译描述符;在编译器处基于目标描述符和图生成中间表示;使用编译器基于编译描述符执行多个编译遍次;以及从多个编译遍次生成二进制可执行文件以在目标计算设备上实施神经网络。
示例36包括示例35的主题,其中,中间表示标识操作的集合和张量的集合。
示例37包括示例36的主题,其中,多个编译遍次中的至少一个确定在存储器资源的集合中分配的缓冲区的集合以存储与一个或多个操作相关联的一个或多个张量。
示例38包括示例37的主题,其中,生成中间表示以包括存储器分配器对象的集合,并且存储器分配器对象的集合用于分配缓冲区的集合。
示例39包括示例38的主题,其中,由编译器为存储器资源的集合中的每个存储器资源创建相应的存储器分配器对象。
示例40包括示例35至39中任一项的主题,其中,多个编译遍次包括一个或多个存储器分配遍次以基于存储器分配算法来分配存储器以实施缓冲区的集合。
示例41包括示例40的主题,其中,在编译描述符中标识存储器分配算法。
示例42包括示例41的主题,其中,存储器分配算法包括编译器所支持的多种存储器分配算法中的特定存储器分配算法。
示例43包括示例36至42中任一项的主题,其中,目标描述符还标识目标计算设备的多种计算资源的属性,多个编译遍次中的至少一个编译遍次为操作的集合中的每个操作确定多种计算资源的集合中用于执行相应的操作的一种计算资源。
示例44包括示例35至43中任一项的主题,其中,指令进一步可执行以使机器执行以下操作:生成用于标识目标计算设备的存储器资源的第一数据结构;并且生成用于标识多个编译遍次的第二数据结构。
示例45包括示例35至44中任一项的主题,其中,多个编译遍次包括特定于目标计算设备的特征的特定编译遍次。
示例46包括示例35至45中任一项的主题,其中,目标计算设备包括异构存储器资源。
示例47包括示例35至46中任一项的主题,其中,二进制可执行文件包括要提供给目标硬件设备的序列化数据。
示例48包括示例35至47中任一项的主题,其中,二进制可执行文件用于使用目标硬件设备的资源来优化神经网络的实施。
示例49是一种方法,包括:在编译器处接收描述神经网络的图;在编译器处接收目标描述符,该目标描述符标识目标计算设备的存储器资源的集合的属性;在编译器处接收标识多个编译遍次的编译描述符;在编译器处基于目标描述符和图生成中间表示;使用编译器基于编译描述符执行多个编译遍次;以及从多个编译遍次生成二进制可执行文件以在目标计算设备上实施神经网络。
示例50包括示例49的主题,其中,中间表示标识操作的集合和张量的集合。
示例51包括示例50的主题,其中,多个编译遍次中的至少一个确定在存储器资源的集合中分配的缓冲区的集合以存储与一个或多个操作相关联的一个或多个张量。
示例52包括示例51的主题,其中,生成中间表示以包括存储器分配器对象的集合,并且存储器分配器对象的集合用于分配缓冲区的集合。
示例53包括示例52的主题,其中,编译器为存储器资源的集合中的每个存储器资源创建相应的存储器分配器对象。
示例54包括示例49至53中任一项的主题,其中,多个编译遍次包括一个或多个存储器分配遍次以基于存储器分配算法来分配存储器以实施缓冲区的集合。
示例55包括示例54的主题,其中,在编译描述符中标识存储器分配算法。
示例56包括示例55的主题,其中,存储器分配算法包括编译器所支持的多种存储器分配算法中的特定存储器分配算法。
示例57包括示例40至56中任一项的主题,其中,目标描述符还标识目标计算设备的多种计算资源的属性,多个编译遍次中的至少一个编译遍次为操作的集合中的每个操作确定多种计算资源的集合中用于执行相应的操作的一种计算资源。
示例58包括示例49至57中任一项的主题,其中,指令进一步可执行以使机器执行以下操作:生成用于标识目标计算设备的存储器资源的第一数据结构;并且生成用于标识多个编译遍次的第二数据结构。
示例59包括示例49至58中任一项的主题,其中,多个编译遍次包括特定于目标计算设备的特征的特定编译遍次。
示例60包括示例49至59中任一项的主题,其中,目标计算设备包括异构存储器资源。
示例61包括示例49至60中任一项的主题,其中,二进制可执行文件包括要提供给目标硬件设备的序列化数据。
示例62包括示例49至61中任一项的主题,其中,二进制可执行文件用于使用目标硬件设备的资源来优化神经网络的实施。
示例63是一种系统,包括用于执行根据示例49至62中任一项的方法的装置。
示例64包括示例63的主题,其中,装置包括可由数据处理器执行的编译器程序。
示例65是一种系统,包括:数据处理器;存储器;以及编译器,该编译器可由数据处理器执行以用于:接收描述神经网络的图;接收标识目标计算设备的存储器资源的集合的属性的目标描述符;接收标识多个编译遍次的编译描述符;基于目标描述符和图生成中间表示;使用编译器基于编译描述符执行多个编译遍次;以及生成二进制可执行文件以在目标计算设备上实施神经网络。
示例66包括示例65的主题,其中,目标描述符还标识目标计算设备的计算资源的集合。
示例67包括示例65的主题,其中,编译器还用于为存储器资源的集合中的每个存储器资源创建存储器分配器对象的相应实例,并且存储器分配器对象由编译器用于在存储器资源的集合中分配缓冲区。
示例69包括示例65的主题,其中,中间表示包括算子模型、数据模型以及控制模型,算子模型用于标识实施神经网络要执行的操作的集合,数据模型用于标识与操作的集合对应的张量的集合,控制模型用于标识操作的排序。
示例69包括示例65的主题,其中,多个编译遍次包括存储器分配遍次,并且执行存储器分配遍次包括:针对张量的集合中的特定张量,确定特定张量的属性;针对特定张量,基于属性中的一个或多个属性确定特定张量将被存储存储器资源的集合中的特定存储器资源中;以及基于属性中的一个或多个属性,在特定存储器资源中为特定张量分配特定缓冲区,其中,目标计算设备在执行二进制可执行文件时将使用特定缓冲区来存储特定张量。
示例70是一种机器可读存储介质,该机器可读存储介质上存储有指令,其中,指令可由机器执行以使机器执行以下操作:在编译器处接收描述神经网络的图;基于图生成中间表示,其中,中间表示标识:实施神经网络要执行的操作的集合、与操作的集合相关联的张量的集合、以及特定计算设备上的存储器资源的集合;以及使用中间表示执行编译遍次的集合,来为特定计算设备生成二进制可执行文件。编译遍次的集合包括存储器分配遍次,并且执行存储器分配遍次包括:针对张量的集合中的特定张量,确定特定张量的属性;针对特定张量,基于属性中的一个或多个属性确定特定张量将被存储在存储器资源的集合中的特定存储器资源中;以及基于属性中的一个或多个属性,在特定存储器资源中为特定张量分配特定缓冲区,其中,特定计算设备在执行二进制可执行文件时将使用特定缓冲区来存储特定张量。
示例71包括示例70的主题,其中,一个或多个属性包括张量的类型,并且张量的类型包括填充的张量或未填充的张量中的一个。
示例72包括示例71的主题,其中,当特定张量包括未填充的张量时,将在本地暂存存储器中分配特定缓冲区。
示例73包括示例71的主题,其中,当特定张量包括填充的张量时,将在片外存储器中分配特定缓冲区。
示例74包括示例70至73中任一项的主题,其中,一个或多个属性包括张量的大小。
示例75包括示例70至74中任一项的主题,其中,一个或多个属性包括张量的铺垫。
示例76包括示例70至75中任一项的主题,其中,存储器分配遍次还包括:在中间表示中遍历张量的集合的图表示,并且将在存储器分配遍次中为张量的集合中的每个张量分配相应的缓冲区。
示例77包括示例70至76中任一项的主题,其中,将在执行存储器分配遍次之前执行编译遍次的集合的子集,其中,编译遍次的子集分配特定计算资源中的计算资源以执行操作的集合,并且建立操作的集合的顺序。
示例78包括示例77的主题,其中,编译遍次的子集包括一个或多个适配遍次以确定针对图的与硬件无关的优化。
示例79包括示例78的主题,其中,一个或多个适配遍次执行算子融合或算子替换中的至少一个。
示例80包括示例78至79中任一项的主题,其中,适配遍次从通过图确定的原始数量改变集合中张量的数量。
示例81包括示例70至80中任一项的主题,其中,生成中间表示包括:为存储器资源的集合创建存储器分配器对象的集合,并且在存储器分配遍次中使用存储器分配器对象的集合。
示例82包括示例81的主题,其中,为存储器资源的集合中的每个存储器资源创建相应的存储器分配器对象。
示例83包括示例81至82中任一项的主题,其中,存储器分配器对象的集合中的每个存储器分配器对象包括一组方法,该组方法可通过编译器执行以确定对应的存储器资源的属性的集合。
示例84包括示例70至83中任一项的主题,其中,中间表示包括算子模型,该算子模型包括用于标识操作的集合和张量的集合的图。
示例85包括示例70至84中任一项的主题,其中,指令进一步可执行以使机器接收目标描述符,该目标描述符用于标识特定计算设备的存储器资源的集合的属性,并且还标识特定计算设备的计算资源的集合。
示例86包括示例85的主题,其中,特定计算设备的计算资源的集合包括特定计算设备上的特定处理器设备的集合中的资源,并且还包括特定计算设备上的机器学习加速器设备的资源。
示例87包括示例85至86的主题,其中,存储器资源的集合包括异构存储器资源。
示例88包括示例85至87中任一项的主题,其中,编译遍次中的另一编译遍次将针对操作的集合中的每个操作确定将由计算资源的集合中的哪个计算资源执行哪个操作。
示例89包括示例70至88中任一项的主题,其中,指令进一步可执行以使机器接收编译描述符,该编译描述符用于指示生成二进制可执行文件要执行的编译遍次。
示例90包括示例89的主题,其中,编译描述符标识特定存储器分配算法,并且将基于编译描述符在存储器分配遍次中应用特定存储器分配算法。
示例91包括示例89至90中任一项的主题,其中,编译遍次的集合包括特定于目标计算设备的特征的特定编译遍次。
示例92包括示例70至91中任一项的主题,其中,二进制可执行文件包括要提供给特定计算设备的序列化数据。
示例93包括示例70至92中任一项的主题,其中,二进制可执行文件用于使用特定计算设备的资源来优化神经网络的实施。
示例94是一种方法,包括:在编译器处接收描述神经网络的图;基于图生成中间表示,其中,中间表示标识:实施神经网络要执行的操作的集合、与操作的集合相关联的张量的集合、以及特定计算设备上的存储器资源的集合;以及使用中间表示执行编译遍次的集合,来为特定计算设备生成二进制可执行文件。编译遍次的集合包括存储器分配遍次,并且执行存储器分配遍次包括:针对张量的集合中的特定张量,确定特定张量的属性;针对特定张量,基于属性中的一个或多个属性确定特定张量将被存储在存储器资源的集合中的特定存储器资源中;以及基于属性中的一个或多个属性,在特定存储器资源中为特定张量分配特定缓冲区,其中,特定计算设备在执行二进制可执行文件时将使用特定缓冲区来存储特定张量。
示例95包括示例94的主题,其中,一个或多个属性包括张量的类型,并且张量的类型包括填充的张量或未填充的张量中的一个。
示例96包括示例95的主题,其中,当特定张量包括未填充的张量时,将在本地暂存存储器中分配特定缓冲区。
示例97包括示例95的主题,其中,当特定张量包括填充的张量时,将在片外存储器中分配特定缓冲区。
示例98包括示例94至97中任一项的主题,其中,一个或多个属性包括张量的大小。
示例99包括示例94至98中任一项的主题,其中,一个或多个属性包括张量的铺垫。
示例100包括示例94至99中任一项的主题,其中,存储器分配遍次还包括:在中间表示中遍历张量的集合的图表示,并且将在存储器分配遍次中为张量的集合中的每个张量分配相应的缓冲区。
示例101包括示例94至100中任一项的主题,其中,将在执行存储器分配遍次之前执行编译遍次的集合的子集,其中,编译遍次的子集分配特定计算资源中的计算资源以执行操作的集合,并且建立操作的集合的顺序。
示例102包括示例101的主题,其中,编译遍次的子集包括一个或多个适配遍次以确定针对图的与硬件无关的优化。
示例103包括示例102的主题,其中,一个或多个适配遍次执行算子融合或算子替换中的至少一个。
示例104包括示例102至103中任一项的主题,其中,适配遍次从通过图确定的原始数量改变集合中张量的数量。
示例105包括示例94至104中任一项的主题,其中,生成中间表示包括:为存储器资源的集合创建存储器分配器对象的集合,并且在存储器分配遍次中使用存储器分配器对象的集合。
示例106包括示例105的主题,其中,为存储器资源的集合中的每个存储器资源创建相应的存储器分配器对象。
示例107包括示例105至106中任一项的主题,其中,存储器分配器对象的集合中的每个存储器分配器对象包括一组方法,该组方法可通过编译器执行以确定对应的存储器资源的属性的集合。
示例108包括示例94至107中任一项的主题,其中,中间表示包括算子模型,该算子模型包括用于标识操作的集合和张量的集合的图。
示例109包括示例94至108中任一项的主题,其中,指令进一步可执行以使机器接收目标描述符,该目标描述符用于标识特定计算设备的存储器资源的集合的属性,并且还标识特定计算设备的计算资源的集合。
示例110包括示例109的主题,其中,特定计算设备的计算资源的集合包括特定计算设备上的特定处理器设备的集合中的资源,并且还包括特定计算设备上的机器学习加速器设备的资源。
示例111包括示例109至110的主题,其中,存储器资源的集合包括异构存储器资源。
示例112包括示例109至111中任一项的主题,其中,编译遍次中的另一编译遍次将针对操作的集合中的每个操作确定将由计算资源的集合中的哪个计算资源执行哪个操作。
示例113包括示例94至112中任一项的主题,其中,指令进一步可执行以使机器接收编译描述符,该编译描述符用于指示生成二进制可执行文件要执行的编译遍次。
示例114包括示例113的主题,其中,编译描述符标识特定存储器分配算法,并且将基于编译描述符在存储器分配遍次中应用特定存储器分配算法。
示例115包括示例113至114中任一项的主题,其中,编译遍次的集合包括特定于目标计算设备的特征的特定编译遍次。
示例116包括示例94至115中任一项的主题,其中,二进制可执行文件包括要提供给特定计算设备的序列化数据。
示例117包括示例94至116中任一项的主题,其中,二进制可执行文件用于使用特定计算设备的资源来优化神经网络的实施。
示例118是一种系统,包括用于执行根据示例94至117中任一项的方法的装置。
示例119包括示例118的主题,其中,装置包括可由数据处理器执行的编译器程序。
示例120是一种系统,包括:数据处理器;存储器;以及编译器,该编译器可由数据处理器执行以用于:在编译器处接收描述神经网络的图;基于图生成中间表示,其中,中间表示标识:实施神经网络要执行的操作的集合、与操作的集合相关联的张量的集合、以及特定计算设备上的存储器资源的集合;以及使用中间表示执行编译遍次的集合,来为特定计算设备生成二进制可执行文件。编译遍次的集合包括存储器分配遍次,并且执行存储器分配遍次包括:针对张量的集合中的特定张量,确定特定张量的属性;针对特定张量,基于属性中的一个或多个属性确定特定张量将被存储在存储器资源的集合中的特定存储器资源中;以及基于属性中的一个或多个属性,在特定存储器资源中为特定张量分配特定缓冲区,其中,特定计算设备在执行二进制可执行文件时将使用特定缓冲区来存储特定张量。
示例121包括示例120的主题,其中,编译器还用于针对在存储器分配遍次期间要使用的存储器资源的集合使存储器分配器的集合初始化。
示例122包括示例120的主题,其中,当特定张量包括未填充的张量时,将在本地暂存存储器中分配特定缓冲区,并且当特定张量包括填充的张量时,将在片外存储器中分配特定缓冲区。
示例123包括示例120的主题,其中,中间表示包括算子模型、数据模型、以及控制模型,算子模型用于标识实施神经网络要执行的操作的集合,数据模型用于标识与操作的集合对应的张量的集合,控制模型用于标识操作的排序。
示例124包括示例120的主题,其中,编译器还用于:接收目标描述符作为输入,其中,目标描述符标识存储器资源的集合的属性,并且中间表示是基于属性生成的;以及接收定义编译遍次的集合的编译描述符。
示例125是一种编译器,该编译器可执行以执行示例15至28、49至62、94至117中任一项的方法。
因此,已经描述了主题的特定实施例。其它实施例在以下权利要求书的范围内。在一些情况下,权利要求书中叙述的动作可以按照不同的顺序来执行,并且仍然实现期望的结果。另外,在附图中描绘的过程不一定需要所示的特定顺序或相继顺序来实现期望的结果。
Claims (35)
1.一种用于编译计算机可执行代码的方法,所述方法包括:
在编译器处接收描述神经网络的图;
访问描述目标硬件设备的数据,所述目标硬件设备实施所述神经网络;
在所述编译器处根据所述图和所述数据来生成中间表示,其中,所述中间表示包括算子模型、数据模型以及控制模型,所述算子模型用于标识实施所述神经网络要执行的操作的集合,所述数据模型用于标识与所述操作的集合对应的张量的集合,所述控制模型用于标识所述操作的排序;以及
使用所述中间表示的所述算子模型、数据模型和控制模型来生成二进制可执行文件。
2.根据权利要求1所述的方法,其中,所述算子模型从所述图的每个节点标识所述操作的集合中的相应操作,并且还从所述图的每个边标识所述张量的集合中的相应张量。
3.根据权利要求1-2中任一项所述的方法,其中,所述数据模型标识要在所述目标硬件设备的存储器中分配的缓冲区的集合,并且将所述张量的集合中的每个张量映射到所述缓冲区的集合中的相应缓冲区。
4.根据权利要求1-3中任一项所述的方法,其中,所述控制模型标识所述操作的集合之间的依赖性。
5.根据权利要求1-4中任一项所述的方法,其中,所述数据包括目标描述符,所述目标描述符用于标识所述目标硬件设备的存储器资源和计算资源。
6.根据权利要求5所述的方法,其中,所述目标硬件设备包括两个或更多个不同类型的计算资源以及两个或更多个不同类型的存储器资源。
7.根据权利要求6所述的方法,其中,所述目标硬件设备包括硬件加速器,所述两个或更多个不同类型的计算资源中的一个类型在所述硬件加速器上实现,并且所述两个或更多个不同类型的计算资源中的另一个类型在所述硬件加速器外实现。
8.根据权利要求6-7中任一项所述的方法,其中,所述两个或更多个不同类型的存储器资源中的一个类型包括本地暂存存储器,并且所述两个或更多个不同类型的存储器资源中的另一个类型包括随机存取存储器(RAM)。
9.根据权利要求1-8中任一项所述的方法,还包括:使用所述算子模型、所述数据模型和所述控制模型执行编译遍次的集合以生成所述二进制可执行文件。
10.根据权利要求9所述的方法,其中,执行所述编译遍次的集合包括:
针对所述编译遍次的集合中的每一个编译遍次,基于相应的编译遍次来选择所述算子模型、所述数据模型或所述控制模型中的一者;以及
使用所述算子模型、所述数据模型或所述控制模型中所选择的一者来执行对应的编译遍次。
11.根据权利要求10所述的方法,其中,所述算子模型、所述数据模型和所述控制模型中的每一者包括相应的图,并且所述编译遍次的集合中的一个或多个编译遍次包括对所述算子模型、所述数据模型或所述控制模型中的对应的一者的基于图论的分析。
12.根据权利要求9所述的方法,还包括:接收编译描述符,所述编译描述符用于标识所述编译器在生成所述二进制可执行文件时要使用的所述编译遍次的集合。
13.根据权利要求1-12中任一项所述的方法,其中,所述二进制可执行文件包括要提供给所述目标硬件设备的序列化数据。
14.根据权利要求1-13中任一项所述的方法,其中,所述二进制可执行文件用于使用所述目标硬件设备的资源来优化所述神经网络的实施。
15.一种系统,包括用于执行如权利要求1-14中任一项所述的方法的装置。
16.根据权利要求15所述的系统,其中,所述装置包括其上存储有指令的机器可读介质,所述指令可由机器执行以执行如权利要求1-14中任一项所述的方法。
17.一种用于编译计算机可执行代码的方法,所述方法包括:
在编译器处接收描述神经网络的图;
基于所述图来生成中间表示,其中,所述中间表示标识下述项:实施所述神经网络要执行的操作的集合、与所述操作的集合相关联的张量的集合、以及特定计算设备上的存储器资源的集合;以及
使用所述中间表示来执行编译遍次的集合,以生成针对所述特定计算设备的二进制可执行文件,其中,所述编译遍次的集合包括存储器分配遍次,并且执行所述存储器分配遍次包括:
针对所述张量的集合中的特定张量,确定所述特定张量的属性;
针对所述特定张量,基于所述属性中的一个或多个属性,确定所述特定张量将被存储在所述存储器资源的集合中的特定存储器资源中;以及
基于所述属性中的一个或多个属性,在所述特定存储器资源中为所述特定张量分配特定缓冲区,其中所述特定计算设备在执行所述二进制可执行文件时将使用所述特定缓冲区来存储所述特定张量。
18.根据权利要求17所述的方法,其中,所述一个或多个属性包括张量的类型,并且张量的类型包括填充的张量或未填充的张量中的一者。
19.根据权利要求18所述的方法,其中,当所述特定张量包括未填充的张量时,所述特定缓冲区将被分配在本地暂存存储器中,并且当所述特定张量包括填充的张量时,所述特定缓冲区将被分配在片外存储器中。
20.根据权利要求17-19中任一项所述的方法,其中,所述一个或多个属性包括张量的大小和张量的铺垫。
21.根据权利要求17-20中任一项所述的方法,其中,所述存储器分配遍次还包括:在所述中间表示中遍历所述张量的集合的图表示,并且在所述存储器分配遍次中将针对所述张量的集合中的每个张量分配相应的缓冲区。
22.根据权利要求17-21中任一项所述的方法,其中,所述编译遍次的集合的子集将在执行所述存储器分配遍次之前被执行,其中,编译遍次的所述子集分配所述特定计算资源中的计算资源以执行所述操作的集合并且建立所述操作的集合的顺序。
23.根据权利要求22所述的方法,其中,编译遍次的所述子集包括一个或多个适配遍次以确定针对所述图的与硬件无关的优化。
24.根据权利要求23所述的方法,其中,所述一个或多个适配遍次执行算子融合或算子替换中的至少一者,并且所述适配遍次从通过所述图确定的原始数量改变所述集合中张量的数量。
25.根据权利要求17-24中任一项所述的方法,其中,生成所述中间表示包括:针对所述存储器资源的集合创建存储器分配器对象的集合,并且在所述存储器分配遍次中使用所述存储器分配器对象的集合。
26.根据权利要求17-25中任一项所述的方法,其中,所述中间表示包括算子模型,所述算子模型包括用于标识所述操作的集合和所述张量的集合的图。
27.根据权利要求17-26中任一项所述的方法,还包括:接收编译描述符,所述编译描述符用于指示生成所述二进制可执行文件要执行的所述编译遍次的集合。
28.一种系统,包括用于执行如权利要求17-27中任一项所述的方法的装置。
29.根据权利要求28所述的系统,其中,所述装置包括其上存储有指令的机器可读介质,所述指令可由机器执行以执行如权利要求17-27中任一项所述的方法。
30.根据权利要求29所述的系统,其中,所述装置包括可由所述机器执行的编译器程序。
31.一种用于编译计算机可执行代码的系统,所述系统包括:
数据处理器;
存储器;以及
编译器,所述编译器可由所述数据处理器执行以执行下述操作:
接收描述神经网络的图;
接收目标描述符,所述目标描述符标识目标计算设备的存储器资源的集合的属性;
接收编译描述符,所述编译描述符标识多个编译遍次;
基于所述目标描述符和所述图生成中间表示;
使用所述编译器基于所述编译描述符执行所述多个编译遍次;以及
生成二进制可执行文件以在所述目标计算设备上实施所述神经网络。
32.根据权利要求31所述的系统,其中,所述目标描述符还标识所述目标计算设备的计算资源的集合。
33.根据权利要求31-32中任一项所述的系统,其中,所述编译器还用于针对所述存储器资源的集合中的每个存储器资源创建存储器分配器对象的相应实例,并且所述存储器分配器对象由所述编译器用于在所述存储器资源的集合中分配缓冲区。
34.根据权利要求31-33中任一项所述的系统,其中,所述中间表示包括算子模型、数据模型以及控制模型,所述算子模型用于标识实施所述神经网络要执行的操作的集合,所述数据模型用于标识与所述操作的集合对应的张量的集合,所述控制模型用于标识所述操作的排序。
35.根据权利要求31-34中任一项所述的系统,其中,所述多个编译遍次包括存储器分配遍次,并且执行所述存储器分配遍次包括:
针对张量的集合中的特定张量,确定所述特定张量的属性;
针对所述特定张量,基于所述属性中的一个或多个属性,确定所述特定张量将被存储在所述存储器资源的集合中的特定存储器资源中;以及
基于所述属性中的一个或多个属性,在所述特定存储器资源中为所述特定张量分配特定缓冲区,其中所述目标计算设备在执行所述二进制可执行文件时将使用所述特定缓冲区来存储所述特定张量。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/457,851 US20190392296A1 (en) | 2019-06-28 | 2019-06-28 | Hardware agnostic deep neural network compiler |
US16/457,851 | 2019-06-28 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112149812A true CN112149812A (zh) | 2020-12-29 |
Family
ID=68981962
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010231676.7A Pending CN112149812A (zh) | 2019-06-28 | 2020-03-27 | 与硬件无关的深度神经网络编译器 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20190392296A1 (zh) |
CN (1) | CN112149812A (zh) |
DE (1) | DE102020110688A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113626035A (zh) * | 2021-07-23 | 2021-11-09 | 南方科技大学 | 基于tvm面向risc-v设备的神经网络编译方法 |
CN113792852A (zh) * | 2021-09-09 | 2021-12-14 | 湖南艾科诺维科技有限公司 | 基于并行神经网络的信号调制方式识别系统及识别方法 |
CN114186678A (zh) * | 2021-12-10 | 2022-03-15 | 北京百度网讯科技有限公司 | 基于深度学习的硬件适配装置和方法 |
WO2022179024A1 (zh) * | 2021-02-26 | 2022-09-01 | 上海商汤智能科技有限公司 | 代码生成方法、装置、设备及存储介质 |
Families Citing this family (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11615297B2 (en) | 2017-04-04 | 2023-03-28 | Hailo Technologies Ltd. | Structured weight based sparsity in an artificial neural network compiler |
US10387298B2 (en) | 2017-04-04 | 2019-08-20 | Hailo Technologies Ltd | Artificial neural network incorporating emphasis and focus techniques |
DE102020118563A1 (de) * | 2019-07-17 | 2021-01-21 | Steering Solutions Ip Holding Corporation | Middleware-system und -verfahren |
US20210056220A1 (en) * | 2019-08-22 | 2021-02-25 | Mediatek Inc. | Method for improving confidentiality protection of neural network model |
US20210081806A1 (en) * | 2019-09-13 | 2021-03-18 | Latent AI, Inc. | Using a runtime engine to facilitate dynamic adaptation of deep neural networks for efficient processing |
EP4066146A1 (en) * | 2019-11-26 | 2022-10-05 | Mythic, Inc. | Systems and methods for implementing operational transformations for restricted computations of a mixed-signal integrated circuit |
US11347486B2 (en) | 2020-03-27 | 2022-05-31 | Advanced Micro Devices, Inc. | Compiler-initiated tile replacement to enable hardware acceleration resources |
CN111680799B (zh) | 2020-04-08 | 2024-02-20 | 北京字节跳动网络技术有限公司 | 用于处理模型参数的方法和装置 |
CN113537476A (zh) * | 2020-04-16 | 2021-10-22 | 中科寒武纪科技股份有限公司 | 运算装置以及相关产品 |
US11709664B2 (en) * | 2020-06-02 | 2023-07-25 | SambaNova Systems, Inc. | Anti-congestion flow control for reconfigurable processors |
CN111967568B (zh) * | 2020-06-29 | 2023-09-01 | 北京百度网讯科技有限公司 | 深度学习模型的适配方法、装置及电子设备 |
CN111899149A (zh) * | 2020-07-09 | 2020-11-06 | 浙江大华技术股份有限公司 | 基于算子融合的图像处理方法和装置、存储介质 |
US11645057B2 (en) * | 2020-09-24 | 2023-05-09 | SambaNova Systems, Inc. | Systems and methods for memory layout determination and conflict resolution |
US11874900B2 (en) | 2020-09-29 | 2024-01-16 | Hailo Technologies Ltd. | Cluster interlayer safety mechanism in an artificial neural network processor |
US11811421B2 (en) | 2020-09-29 | 2023-11-07 | Hailo Technologies Ltd. | Weights safety mechanism in an artificial neural network processor |
US20220100601A1 (en) * | 2020-09-29 | 2022-03-31 | Hailo Technologies Ltd. | Software Defined Redundant Allocation Safety Mechanism In An Artificial Neural Network Processor |
CN114385867A (zh) * | 2020-10-16 | 2022-04-22 | 中科寒武纪科技股份有限公司 | 一种对多维数据进行处理的设备、方法和计算机程序产品 |
US20220147812A1 (en) * | 2020-11-06 | 2022-05-12 | Micron Technology, Inc. | Compiler with an artificial neural network to optimize instructions generated for execution on a deep learning accelerator of artificial neural networks |
US20220147809A1 (en) * | 2020-11-06 | 2022-05-12 | Micron Technology, Inc. | Deep learning accelerators with configurable hardware options optimizable via compiler |
US20220147808A1 (en) * | 2020-11-06 | 2022-05-12 | Micron Technology, Inc. | Compiler configurable to generate instructions executable by different deep learning accelerators from a description of an artificial neural network |
US20220147810A1 (en) * | 2020-11-06 | 2022-05-12 | Micron Technology, Inc. | Discovery of hardware characteristics of deep learning accelerators for optimization via compiler |
TW202223629A (zh) * | 2020-11-30 | 2022-06-16 | 財團法人工業技術研究院 | 神經網路加速器硬體之驗證系統與驗證方法 |
CN112711422B (zh) * | 2020-12-31 | 2024-01-19 | 北京清微智能科技有限公司 | 一种神经网络编译的优化方法及系统 |
US11516311B2 (en) * | 2021-01-22 | 2022-11-29 | Avago Technologies International Sales Pte. Limited | Distributed machine-learning resource sharing and request routing |
CN113065639B (zh) * | 2021-03-08 | 2023-06-13 | 深圳云天励飞技术股份有限公司 | 算子融合方法、系统、设备及存储介质 |
US11775317B2 (en) * | 2021-04-30 | 2023-10-03 | International Business Machines Corporation | Locate neural network performance hot spots |
CN113031966B (zh) * | 2021-05-20 | 2021-09-21 | 之江实验室 | 一种智能选择编译加速库的深度学习编译优化方法 |
US11797270B2 (en) | 2021-06-17 | 2023-10-24 | International Business Machines Corporation | Single function to perform multiple operations with distinct operation parameter validation |
US20220405348A1 (en) * | 2021-06-17 | 2022-12-22 | International Business Machines Corporation | Reformatting of tensors to provide sub-tensors |
US11675592B2 (en) * | 2021-06-17 | 2023-06-13 | International Business Machines Corporation | Instruction to query for model-dependent information |
CN113657584B (zh) * | 2021-08-31 | 2024-04-09 | 安谋科技(中国)有限公司 | 神经网络模型计算方法、数据处理方法、电子设备及介质 |
KR20230041444A (ko) * | 2021-09-17 | 2023-03-24 | 삼성전자주식회사 | 뉴럴 네트워크를 위한 컴파일 방법 및 장치 |
CN113885877A (zh) * | 2021-10-11 | 2022-01-04 | 北京超弦存储器研究院 | 编译的方法、装置、设备及介质 |
EP4170482A1 (en) * | 2021-10-25 | 2023-04-26 | Scailable B.V. | Deployment of machine learned models to plurality of devices |
US20230305845A1 (en) * | 2022-03-22 | 2023-09-28 | Nvidia Corporation | Techniques to selectively store data |
CN114461351B (zh) * | 2022-04-13 | 2022-06-17 | 之江实验室 | 一种用于神经网络计算的动态图执行方法及装置 |
US20230342876A1 (en) * | 2022-04-26 | 2023-10-26 | Mediatek Inc. | Enhanced computer vision application programming interface |
CN115659281B (zh) * | 2022-11-16 | 2023-10-27 | 之江实验室 | 一种自适应加速算子融合的方法及装置 |
CN115496217B (zh) * | 2022-11-16 | 2023-03-24 | 深圳鲲云信息科技有限公司 | 一种推理验证方法、装置、电子设备和存储介质 |
CN117392301B (zh) * | 2023-11-24 | 2024-03-01 | 淘宝(中国)软件有限公司 | 图形渲染方法、系统、装置、电子设备及计算机存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102631381B1 (ko) * | 2016-11-07 | 2024-01-31 | 삼성전자주식회사 | 컨볼루션 신경망 처리 방법 및 장치 |
US11561833B1 (en) * | 2018-06-28 | 2023-01-24 | Amazon Technologies, Inc. | Allocation and placement of resources for network computation |
US20200042216A1 (en) * | 2018-08-03 | 2020-02-06 | Alibaba Group Holding Limited | Storage-based graph for enabling computation graph optimization |
US10884707B1 (en) * | 2019-06-27 | 2021-01-05 | Amazon Technologies, Inc. | Transpose operations using processing element array |
-
2019
- 2019-06-28 US US16/457,851 patent/US20190392296A1/en active Pending
-
2020
- 2020-03-27 CN CN202010231676.7A patent/CN112149812A/zh active Pending
- 2020-04-20 DE DE102020110688.2A patent/DE102020110688A1/de active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022179024A1 (zh) * | 2021-02-26 | 2022-09-01 | 上海商汤智能科技有限公司 | 代码生成方法、装置、设备及存储介质 |
CN113626035A (zh) * | 2021-07-23 | 2021-11-09 | 南方科技大学 | 基于tvm面向risc-v设备的神经网络编译方法 |
CN113792852A (zh) * | 2021-09-09 | 2021-12-14 | 湖南艾科诺维科技有限公司 | 基于并行神经网络的信号调制方式识别系统及识别方法 |
CN113792852B (zh) * | 2021-09-09 | 2024-03-19 | 湖南艾科诺维科技有限公司 | 基于并行神经网络的信号调制方式识别系统及识别方法 |
CN114186678A (zh) * | 2021-12-10 | 2022-03-15 | 北京百度网讯科技有限公司 | 基于深度学习的硬件适配装置和方法 |
Also Published As
Publication number | Publication date |
---|---|
US20190392296A1 (en) | 2019-12-26 |
DE102020110688A1 (de) | 2020-12-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112149812A (zh) | 与硬件无关的深度神经网络编译器 | |
US20190391796A1 (en) | Control of scheduling dependencies by a neural network compiler | |
US11847508B2 (en) | Convergence among concurrently executing threads | |
CN111258744A (zh) | 一种基于异构计算的任务处理方法及软硬件框架系统 | |
TWI806550B (zh) | 處理器操作方法、相關電腦系統、及非暫時性電腦可存取儲存媒體 | |
US11409579B2 (en) | Multiple independent synchonization named barrier within a thread group | |
CN107004253A (zh) | 用于增强的图像处理并行性的具有等价类的基于图形的应用程序编程接口架构 | |
US20220114429A1 (en) | Method and device for generating operation data and related product | |
BR102020019652A2 (pt) | Aparelho e método para facilitar processamento de matriz; processador de gráficos | |
BR102021001207A2 (pt) | Aparelho e método para realizar filtragem de meios não locais com o uso de conjunto de circuitos de estimativa de movimento de um processador gráfico | |
US11907756B2 (en) | Concurrent workload scheduling with multiple level of dependencies | |
US20220291955A1 (en) | Asynchronous input dependency resolution mechanism | |
BR102020019646A2 (pt) | aparelho e método para facilitar o particionamento de memória local e unidade de processamento de gráficos | |
BR102021001163A2 (pt) | Aparelho e método para realizar consultas de caixa em hardware de travessia de raios | |
Hegde et al. | CaffePresso: Accelerating convolutional networks on embedded SoCs | |
US20230195519A1 (en) | Low power inference engine pipeline in a graphics processing unit | |
Wu et al. | CGMBE: a model-based tool for the design and implementation of real-time image processing applications on CPU–GPU platforms | |
BR102020019666A2 (pt) | aparelho e método para facilitar operações de multiplicação de matriz; acelerador de hardware | |
Khammassi et al. | Mhpm: Multi-scale hybrid programming model: A flexible parallelization methodology | |
US20230305823A1 (en) | Merging Skip-Buffers | |
US20240126519A1 (en) | Program analysis, design space exploration and verification for high-level synthesis via e-graph rewriting | |
US20230325346A1 (en) | Buffer Splitting | |
US20240135076A1 (en) | Super-optimization explorer using e-graph rewriting for high-level synthesis | |
US20240126967A1 (en) | Semi-automatic tool to create formal verification models | |
US20230144553A1 (en) | Software-directed register file sharing |
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 |