CN117677929A - 机器学习硬件加速器中的分层编译和执行 - Google Patents

机器学习硬件加速器中的分层编译和执行 Download PDF

Info

Publication number
CN117677929A
CN117677929A CN202180098206.0A CN202180098206A CN117677929A CN 117677929 A CN117677929 A CN 117677929A CN 202180098206 A CN202180098206 A CN 202180098206A CN 117677929 A CN117677929 A CN 117677929A
Authority
CN
China
Prior art keywords
core
jobs
executed
chip
array
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
CN202180098206.0A
Other languages
English (en)
Inventor
约翰·纳维尔·约瑟夫
杰克·刘
禹同爀
蒲敬
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.)
Google LLC
Original Assignee
Google 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 Google LLC filed Critical Google LLC
Publication of CN117677929A publication Critical patent/CN117677929A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • 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/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • 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
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • 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
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本公开描述了一种用于在多核计算设备的阵列中编译和执行机器学习推断的系统和方法。每个多核计算设备可以是专用集成电路(ASIC)或ASIC的群组。在许多应用中,计算设备的阵列在各个推断间发生变化,并且可以基于推断的要求来调整。另外,每个ASIC可以具有多个处理核和多个类型的处理核。因此,在编译时间执行优化和调度可以在执行推断时显著增加阵列的效率。在一些实现中,可以选择在编译期间优化要花费的时间或努力的量,从而在确定在编译期间还是在执行期间花费时间方面给予用户灵活性。

Description

机器学习硬件加速器中的分层编译和执行
技术领域
本公开总体上涉及在机器学习硬件加速器中编译和执行代码。
背景技术
机器学习系统通常经历训练的时段。使用经训练或经部分训练的机器学习系统来执行任务通常被称为使用系统来推断,即处理数据以执行任务。训练机器学习系统可以涉及在向系统提供训练数据的同时使用系统来推断。
机器学习可以在通用CPU(中央处理单元)上和/或DSP(数字信号处理器)、GPU(图形处理单元)或诸如TPU(张量处理单元)的专用机器学习硬件上实现。一些机器学习系统在云中实现,但是对于要在本地或在“边缘(edge)”处——特别是当在推断中操作时——实现的机器学习系统存在增长的需求。
发明内容
本说明书总体上涉及用于例如在推断中—特别是在边缘处——有效率实现机器学习和其他计算的技术。在实现中,这些技术将计算架构——例如,分层(hierarchical)架构——与适于架构的方法组合以用于编译和执行机器学习模型。
在一个方面,描述了一种用于在多核计算设备的阵列中分发可执行作业的方法。该方法包括:接收要在多核计算设备的阵列中执行的多个作业,每个多核计算设备包括多个不同类型的处理核;以及指派多个作业中的每个特定作业要由多个不同类型的处理核中的一个执行。
指派可以包括分析特定作业以确定多个不同类型的处理核中的哪一个适合于执行特定作业,以及基于分析将特定作业指派给核类型。分析哪个核适合于特定作业可以包括例如使用可以是机器学习模型的模型来评估核对于作业的适合性的一个或多个度量和/或处理表示作业的数据,以确定性地或随机地将作业指派给核。
该方法还可以包括将多个作业中的每个作业编译成可单独执行的文件,并且生成表示可单独执行的文件到多个不同类型的处理核中的具体处理核的映射的执行图。在实现中,执行图识别可单独执行的文件之间的依赖关系,特别是用于将可执行作业分发给多核计算设备,更具体地,分发给处理核。例如,在实现中,执行图中的依赖关系定义作业应当被执行的序列。
该方法可以包括执行可单独执行的文件。这可以涉及接收执行图并将执行图中的作业指派给多核计算设备的阵列中的多个多核计算设备,特别是使用图及其识别的依赖关系。这还可以涉及每个多核计算设备执行所指派的作业,并且将所执行的作业的输出返回到共享存储器,并且组合所返回的输出以生成执行图返回。
分析哪个核适合于特定作业可以包括启发式分析,例如,作业的核的适合性的度量可以包括启发式度量。可以基于在编译时间之前的用户输入来选择针对每个特定作业的分析的深度。分析的深度可以由允许用于例如用于确定核对于作业的适合性的分析的计算资源或时间来表示。
不同类型的处理核可以包括第一类型的核和第二类型的核。第一类型的核可以是ARM处理器(核),即具有RISC(精简指令集计算)架构的核。这种架构可以表征为具有单周期存储器存取指令的加载/存储架构。第二类型的核可以是TPU(张量处理单元)或TPU片块(tile)处理器(核)。这种TPU核可以表征为被配置为实现以下中的一个或多个的硬件:对具有三个或更多个维度的张量的张量运算;矩阵-矩阵乘法;整数矩阵运算;脉动(systolic)阵列;实现神经网络激活函数的激活单元。
在实现中,执行图是分层的。因此,执行图可以包括以层级——例如至少四个层级——布置的(分层)子图。这些层级可以包括:i)TPU层级,其包括要在TPU核类型上运行的可执行文件,ii)芯片级(物理集成电路级)层级,其包括TPU层级的一个或多个子图和要在ARM核类型上运行的可执行文件;iii)多芯片层级,其包括两个或更多个芯片级子图;以及iv)主机级层级,其包括多芯片层级子图和被配置为在第三类型的核上执行的一个或多个子图。第三类型的核可以是CPU,例如主机设备CPU。在层级处的子图可以包括执行图的一部分,更具体地,要在低层级处执行的执行图的一部分;类似于执行图,其可以定义作业或作业应当被执行的序列之间的依赖关系。
在一些实现中,可以提供机制以协调和序列化在多核计算设备——例如ASIC——的ARM核和TPU核之间的操作。例如,这可以包括在ARM核上——例如在固件中——运行的代码(“解释器(interpreter)”),其调度用于ARM核或TPU核的操作,例如,用于低时延。这可以用于在运行时将作业调度和分配给处理核。
在一些实现中,执行图可以包括一个或多个常量缓冲器,即,被分配为存储常量的存储器区域。在这种情况下,常量缓冲器不需要是执行图本身的一部分,而是替代地,一个或多个“带外缓冲器(out of band buffer)”可以在运行时与图相关联。这可以帮助保持图存储器占用空间小。
在另一方面,描述了一种用于编译用于在多核计算设备的阵列中执行的可执行作业的方法。在实现中,多核计算设备的阵列与诸如主机系统的硬件结合。在实现中,硬件——例如,主机系统——包括第一核类型的处理核。多核计算设备的阵列中的每个多核计算设备包括第二核类型和第三核类型的处理核。
在实现中,该方法包括:接收要在推断中使用的机器学习模型;解析机器学习模型以确定要执行的多个作业;以及生成表示要执行的多个作业中的每个以及要执行的多个作业之间的依赖关系的执行图,例如,如前所述。
在实现中,该方法还包括调用多芯片级编译器以生成执行图,例如映射的执行图。映射执行图可以表示可单独执行的文件到多个不同类型的处理核中的具体处理核的映射。在实现中,这涉及多芯片级编译器识别要由第一核类型执行的多个作业中的一个或多个第一作业,以及将一个或多个第一作业编译成要由第一核类型执行的可执行文件。在实现中,第一作业与阵列中的多核计算设备不兼容。如果作业的一个或多个操作不能在多核计算设备上执行,或者如果作业不适合于在多核计算设备上执行(其中适合性可以如先前描述的确定),则作业可能与多核计算设备不兼容。
在实现中,该方法还包括将执行图的剩余作业划分成多个第一子图,将每个第一子图指派给多核计算设备的阵列中的特定多核计算设备,以及针对每个第一子图,调用单芯片级编译器。
在实现中,该方法包括:单芯片级编译器识别要由第二核类型执行的来自第一子图的一个或多个芯片级作业;将来自第一子图的一个或多个芯片级作业中的每个编译成要由第二核类型执行的可执行文件;将第一子图的剩余作业划分成多个第二子图;以及将多个第二子图中的每个指派给第三核类型。在实现中,该方法还包括:针对多个第二子图中的每个,调用核级编译器,该核级编译器将第二子图中的每个编译成要由第三核类型执行的可执行文件。
在实现中,映射的执行图用于分发编译的可执行作业,例如如前所述。因此,该方法包括使用映射的执行图来分发可执行作业,例如如前所述。
第一、第二和第三核类型可以分别对应于先前描述的第三类型的核、第一类型的核和第二类型的核,例如第一核类型可以是(主机系统)CPU;第二核类型可以是ARM(RISC)核;并且第三核类型可以是TPU(片块)核。阵列中的每个多核计算设备可以包括包含TPU的专用集成电路(ASIC)。
在实现中,识别一个或多个第一作业和/或识别一个或多个芯片级作业是基于要执行的多个作业的启发式分析来完成的。启发式分析可以是涉及确定针对每个作业的启发式度量的分析。在实现中,基于在编译时间之前的用户输入来选择例如基于允许用于分析的时间或计算资源针对每个特定作业的启发式分析的深度。
在实现中,该方法还包括由多核计算设备的阵列接收包括第一作业的映射的执行图,并且多个第一子图包括一个或多个芯片级作业和多个第二子图,将第一作业、芯片级作业和多个第二子图中的剩余作业指派给多核计算设备的阵列中的相关联的核。在实现中,该方法还包括:由每个核多核计算设备执行所指派的作业并且将所执行的作业的输出返回到共享存储器;以及组合所返回的输出以生成执行图返回。
在一些实现中,第二核类型——例如,ARM或RISC核——可以被指派控制流操作,该控制流操作跨越多个芯片上的作业,例如以促进单芯片操作或过程,诸如波束搜索操作或过程,随后是多芯片操作或过程。该方法然后可以涉及(例如,使用编译器)确定将多个第一(单芯片级)子图和对要由第二核类型——例如,在诸如主芯片(ASIC)的另一芯片(ASIC)中——执行的控制流操作的引用组合的序列图。可以例如在运行时由解释器处理序列图,使得主芯片中的第二核类型控制多芯片操作或过程在多个芯片上的执行。
根据上述方面的方法和方法的特征可以被组合。
各种实现提供以下优点中的一个或多个。
该方法的实现提供了一种分层编译器,该分层编译器生成分层可执行文件,该分层可执行文件在运行时可以跨越主机CPU以及多核计算设备(ASIC)中的固件。所描述的分层编译器方法结合包括不同类型的硬件资源的分层架构来促进机器学习和其他计算的有效率的实现。这是因为,在实现中,不同类型的硬件资源——包括ARM核和TPU——被暴露给编译器,例如编译器可以编译成要在这些资源上执行的固件。例如,给定机器学习模型或其他计算,该方法可以分析模型或计算,并且例如在性能和功率使用方面决定最佳方式,以使用暴露给编译器的不同硬件单元来执行模型/计算。还可以在不同的硬件单元之间拆分操作以限制CPU和ASIC之间的通信,并且为了高性能和低功率而优化所生成的可执行代码。此外,可以对操作的图进行划分,使得不太适合用于TPU核的操作以低时延方式在ARM核上执行。
在一些实现中,分层架构的最低级是仅TPU级,随后是包括ARM核和一个或多个TPU核的单芯片(ASIC)级,可选地随后是多芯片(多ASIC)级,可选地随后是主机(CPU)级。在编译器的一个级处生成的可执行文件可以被嵌入到在更高级处生成的可执行文件中,以此类推,在给定级处的可执行文件是编译器与在该级处的运行时之间的“契约(contract)”。该方法进一步促进有效率的操作,因为编译器可以编译到单芯片和多芯片级,例如以针对调用单芯片级编译器来编译在该芯片上运行的子图的每个芯片实现流水线并行性、数据并行性和/或模型并行性。在多芯片级处的代码可以在固件上执行。
在这种分层方法中,在单个芯片级处的可执行文件可以涉及对多个不同类型的核——例如TPU核和ARM核——的操作。这可以促进诸如波束搜索和排序的操作的执行,这通过除了TPU之外的ARM核的可用性来促进。而且,在单芯片级处,这种方法允许混合的TPU和ARM核操作并行地执行,同时流式传输和同步数据传输。该同步可以通过执行图表达。
在实现中,将主机CPU包括在层次结构中可以进一步促进有效率的操作。例如,这可以允许主机与ASIC之间的缓冲器共享,避免昂贵的存储器复制操作;其可以促进精细粒度的同步;并且其还促进主机CPU在由ASIC生成数据时消费(consume)数据。所描述的基于图的作业映射和执行促进这种划分和调度。
在附图和以下描述中阐述了本说明书的主题的一个或多个实现的细节。根据说明书、附图和权利要求书,主题的其他特征、方面和优点将变得显而易见。
附图说明
图1描绘了编译和执行图可执行文件的机器学习硬件加速器的示例系统架构。
图2是示出示例执行图的图。
图3A是示出具有分区和指派的示例执行图的图。
图3B是示出具有附加更高层级指派的示例执行图的图。
图4是描述用于在多核计算设备的阵列中分发可执行作业的示例过程的流程图。
图5是描述用于在多核计算设备的阵列中编译可执行作业的示例过程的流程图。
图6示出了在作为示例计算系统的机器学习硬件加速器中使用的ASIC的框图。
图7示出了示例神经网络(NN)计算片块。
图8示出了示例分层执行图。
各个附图中相同的附图标记和标号指示相同的元件。
具体实施方式
本公开描述了一种用于在多核计算设备的阵列中编译和执行机器学习推断的系统和方法。每个多核计算设备可以是专用集成电路(ASIC)或ASIC的群组。在许多应用中,计算设备的阵列在各个推断间发生变化,并且可以基于推断的要求来调整。另外,每个ASIC可以具有多个处理核和多个类型的处理核。因此,在编译时执行优化和调度可以在执行推断时显著增加阵列的效率。在一些实现中,可以选择在编译期间优化要花费的时间或努力的量,从而在确定在编译期间还是在执行期间花费时间方面给予用户灵活性。
图1示出了编译和执行图可执行文件的机器学习硬件加速器的示例系统架构。硬件加速器100包括主机系统102,其指导和协调操作,以及在用户和加速器100之间提供接口。主机系统102与ASIC 108的阵列交互。每个ASIC 108包括多个核类型并且被配置为在机器学习推断期间执行操作的主体。
主机系统102包括一个或多个中央处理单元或CPU 104。CPU 104可以向主机提供处理以执行某些控制或物流操作。在一些实现中,CPU 104可以在推断期间执行一些过程。通常,CPU 104执行指令并操纵数据以执行主机系统102的操作。每个CPU 104可以具有单个或多个核,其中每个核可用于托管和执行单独的处理线程。此外,可以基于与主机系统102相关联的请求、交互和操作的数量来动态地确定用于执行本文描述的操作的CPU 104的数量、类型和特定CPU 104。
主机系统102还包括存储器106。主机系统102的存储器106可以表示单个存储器或多个存储器。存储器106可以包括任何存储器或数据库模块,并且可以采取易失性或非易失性存储器的形式,包括但不限于磁介质、光学介质、随机存取存储器(RAM)、只读存储器(ROM)、可移除介质或任何其他合适的本地或远程存储器组件。存储器106可以存储各种对象或数据,包括执行图、机器学习模型、管理设置、高速缓存、应用、备份数据以及与主机系统102相关联的任何其他适当的信息,包括任何参数、变量、算法、指令、规则、约束或对其的引用。虽然被示出在主机系统102内,但是在一些情况下,存储器106或其任何部分——包括特定示出的组件中的一些或全部——可以在一些情况下位于远离主机系统102,包括作为云应用或存储库,或者在主机系统102本身是基于云的系统时作为单独的云应用或存储库。在一些示例中,存储在存储器106中的数据可以例如经由网络120可访问,并且可以由硬件加速器100的特定应用或功能获得。
通常,主机系统102执行高级应用,并且向用户提供“前端”,同时将执行图(下面进一步详细描述)分发给ASIC 108的阵列。
阵列中的ASIC 108包括主机接口110、核处理器112、片块116的阵列——其可以是ASIC 108的主要计算单元——以及对等接口114和共享存储器118。核处理器112可以是执行操作并控制ASIC 108的处理器,并且可以包括例如ARC、Alpha、Am29000、ARM、Atmel AVR、Blackfin、i860、i960、M88000、MIPS、PA-RISC、Power ISA、RISC-V、SuperH、SPARC或其他处理架构。
共享存储器118可以是由片块116、核处理器112以及多个ASIC 108经由高速网络122访问的存储器。共享存储器118可以包括任何存储器或数据库模块,并且可以采取易失性或非易失性存储器的形式,包括但不限于磁介质、光学介质、随机存取存储器(RAM)、只读存储器(ROM)、可移除介质或任何其他合适的本地或远程存储器组件。共享存储器118可以存储各种对象或数据、管理设置、高速缓存、应用、备份数据、存储动态信息的存储库以及与硬件加速器100相关联的任何其他适当的信息,包括用于推断、变量、算法、指令、规则、约束或引用的任何参数。共享存储器118包括共享地址空间,其由ASIC 108中的多个片块116中的每一个使用。
主机接口110用于协调和管理ASIC 108与主机系统102之间的通信。通常,主机接口110包括以合适的组合在软件和/或硬件中编码并且可操作以与主机系统102和其他组件通信的逻辑。更具体地,接口110可以包括支持与通信相关联的一个或多个通信协议的软件,使得网络110和/或接口的硬件可操作以在所示加速器100内和外部传送物理信号。更进一步地,接口110可以允许ASIC 108与主机系统和/或网络120通信以执行本文描述的操作。
对等(peer-to-peer)接口114可以类似于主机接口110,除了它提供并管理从ASIC108到ASIC 108的通信。以这种方式,ASIC 108可以在它们之间分发计算作业,以及共享返回或中间参数。对等通信可以最小化主机系统102及其相关联的CPU 104上的负载,并且提供可扩展的解决方案。这使得系统100能够具有任意大数量的ASIC 108,其不受主机系统102或CPU 104的限制。
ASIC可以包括核处理器112,诸如高级RISC机器(ARM)核。核处理器112可以处理要分发在片块116之中的作业和任务的控制和管理。核处理器112执行ASIC 108的计算操作和管理。另外,可以在核处理器112上更有效率或快速地执行在推断期间的一些操作。核处理器112在计算中指导并指示片块116。它维持定义执行推断过程所需的信息的一个或多个上下文。每个上下文可以包括但不限于指令、激活数据、参数、硬件状态、计算操作数和结果等。该数据可以存储在片块存储器中或共享存储器118中。在一些实现中,核处理器112在ARC、Alpha、Am29000、ARM、Atmel AVR、Blackfin、i860、i960、M88000、MIPS、PA-RISC、PowerISA、RISC-V、SuperH、SPARC或其他处理架构上操作。
片块116可以是被配置为运行推断的定制计算核。每个片块116可以包括存储器并接收输入和输出,其可以在片块之间或在核处理器112和片块116之间共享。除了它们自己的存储器(例如,SRAM)之外,每个片块116还可以经由高速网络122访问共享存储器118。下面参考图6和图7更详细地描述片块116。
图2是示出示例执行图200的图。执行图200包括要由机器学习硬件加速器执行的多个操作202A-202J。图2的箭头表示操作之间的依赖关系。例如,操作202C依赖于操作202A和202B的输出。应当注意,为了清楚起见,示出的执行图已经被简化,并且实际执行图可以由数千个操作和依赖关系组成。可以基于要执行的经训练的机器学习模型来构建该初始图。例如,.MLIR文件可以被提供并且可以被编译或部分编译以生成操作和依赖关系的列表并构建执行图200。
执行图200通常可以描述为了执行推断而需要发生的操作。操作可以是基本级计算(例如,AND操作、OR操作或XOR操作)或更高级的计算,诸如比较和平均。并非所有操作都具有相等的计算开销,并且一些操作在特定核类型上执行得更快或更有效率。例如,需要一系列顺序计算的操作可能更适合于ARM类型的处理器或类似的处理器(例如,图1的核处理器112)。在另一示例中,共享单个输入的一组并行操作可以最适合于诸如GPU或TPU(例如,图1的片块116)的并行处理器。
图3A是示出具有分区(partition)和指派的示例执行图的图。例如,为了在执行执行图时提高机器学习硬件加速器的效率,当其被编译用于特定硬件加速器上的特定推断时,其可以被进一步处理。例如,编译该图可以将每个分区306指派给具体ASIC,并且将每个操作302指派给特定核以用于执行。
可以在分布式环境中执行执行图,并且在各种处理单元间拆分操作的方式可能影响正在执行的推断的效率和速度。在编译时,确定硬件配置。例如,主机系统可以使用10个多核设备(例如,Google TPU)来执行特定推断。每个多核设备可以具有多个处理核和多个核类型。例如,多核设备可以具有处理“片块(tile)”(例如,如关于图1所描述的片块116)的阵列和一个或多个核处理器。一旦将执行推断的硬件配置是已知的,执行图300就可以被进一步定义和优化以用于在已知的硬件配置上执行。
执行图可以被划分成各种子图。分区306可以被选择以分离相对独立的操作的组。在一些实现中,分区可以表示推断中的检查点或同步点,其中硬件加速器将在继续执行之前同步参数。在一些实现中,在划分之后执行图300的每个部分可以在硬件加速器的处理设备间拆分,以最大化并行计算。
可以评估执行图300中的每个操作,并且可以为该操作选择优选的处理核。例如,操作302A-302H更适合于在TPU片块上执行,并且因此应当优先地由TPU片块执行。操作304A-304C更适合于在核处理器上执行,并且因此可以优先在ASIC的核处理器(例如,图1的核处理器112)处执行。在一些实现中,优选的核不一定是在其上执行操作的核。例如,如果存在具有交替的优选的核类型的操作序列,则在单个核上执行所有操作以最小化硬件加速器内的通信业务可能是更优化的。另外,虽然仅示出了两个优选的核类型(操作302和304),但是本公开预见到三个或更多个优选的类型。例如,一些操作可能最适合于主机系统CPU(例如,图1的CPU 104)并且因此应当由主机系统执行。
在一些实现中,某些操作需要具体核类型。例如,一些操作可以仅由ARM核(或其他特定RISC核)执行,并且这些操作不能在TPU片块上正确运行。例如,在一些实现中,收集、分散或波束搜索操作可能无法由TPU片块执行。具有硬核类型要求的操作可以被适当地指派给它们的正确的核。许多操作可以在任一核上执行,但将在一种类型上更高效。另外,操作的组合或群组可以更好地适合于特定核类型。可以执行启发式分析以分析执行图300或操作302和304以确定针对每个操作优选哪个核类型。启发式分析可以包括对所使用的片块的数量的评估(例如,尝试最大化所使用的片块的数量)。在一些实现中,启发式分析计算针对每个核类型的时间延迟或软件开销。
一旦确定了优选的核类型,并且执行图300被分成分区,就可以将操作指派给机器学习硬件加速器的具体硬件。通常,对具体硬件组件的操作的指派可以是基于操作优选的核类型、预期通信业务以及可用硬件。例如,典型的机器学习硬件加速器可以具有比核处理器更多的TPU片块,并且因此可以优先将操作指派给TPU片块。另外,可以分层地完成指派。例如,主机系统可以在其可用ASIC间拆分操作的大群组,其可用ASIC然后将它们自身内的操作单独地指派给具体片块/处理器。在一些实现中,主机系统仅需要将整个执行图300指派给单个ASIC,这可以跨ASIC的阵列以对等方式分发图的部分。这将参考图3B进一步描述。
在一些实现中,在编译期间要对执行图300执行的优化量是可调整的。例如,用户可以指定在推断要开始之前优化和分析执行图300要花费的具体时间量。
图3B是示出具有附加的更高层级指派的示例执行图的图。如图3A所示,各个操作在它们的优选的核类型被确定之后已经被指派给特定核。一旦确定了期望的核类型,对于每个分区,可以由更高级的编译器选择具体ASIC。例如,在第二分区中,操作302D和302E已经分别被指派给硬件加速器的ASIC#1的片块A和B。同时,操作302C和304B已经被指派给ASIC#2的片块A和ARM核。
由于它们的分层性质,这些指派的每个层级只需要由机器学习硬件加速器的相关联的组件做出。例如,主机系统(例如,主机系统102)可以向硬件加速器的ASIC#1提供执行图300。ASIC#1然后可以将操作302C和304B卸载到ASIC#2,并且将操作302D和302E分别指派给片块A和B。同时,ASIC#2可以接收其指派的操作并且将它们分发在ASIC#2中的适当的计算核(例如,片块或ARM核)之中。
图4是描述用于在多核计算设备的阵列中分发可执行作业的示例过程的流程图。过程400可以由机器学习硬件加速器(例如,如关于图1所描述的机器学习硬件加速器100)或其一部分来执行。
在402处,在多核计算设备的阵列中接收多个可执行作业。多核计算设备的阵列可以类似于如参考图1描述的机器学习硬件加速器100。在一些实现中,可以接收多个可执行作业作为经训练的机器学习模型或模型的特性的列表。
在404处,将多个作业中的每个作业指派给多核计算设备的具体核类型。在一些情况下,可以执行分析以确定最适合于执行每个作业的核类型。示例核类型可以包括但不限于ARM核(或其他RISC核)、CPU、GPU和TPU。可以基于可执行作业的启发式分析、用户输入以及硬件要求和可用性来执行分析。启发式分析可以确定哪些作业或作业的群组将在哪个核类型上最有效率地执行。用户可以提供输入,诸如花费多长时间分析,或者分析优先级应当是什么,包括定义要执行的启发式分析的参数。在一些实现中,用户输入可以包括期望的分析深度,其可以描述例如每个作业要执行多少计算以便决定其应当被指派哪个核类型。硬件要求可以包括可能需要在具体核类型上执行某些作业的具体硬件限制。例如,TPU片块可能不能执行涉及将张量对象返回到单独的ASIC的通信路由作业。该作业可能需要由ASIC本身中的核处理器执行。另外,可用硬件可以通知用于指派作业的分析。例如,硬件加速器可以具有比第二类型的处理核更多可用的第一类型的处理核。在该示例中,可以基于第一类型的核的附加相对可用性,将作业优先地指派给第一类型的核。
在406处,根据每个作业的核类型指派将每个作业编译成可单独执行的文件。这些可单独执行的文件可以被配置为由其指派的核类型连同一个或多个输入一起消费以产生一个或多个输出。例如,指派TPU片块的作业被编译成TPU可执行文件。类似地,指派给ARM的作业被编译成ARM可执行文件。
在408处,生成执行图,该执行图表示可单独执行的文件到具体类型的处理核的映射。执行图可以识别可单独执行的文件之间的依赖关系。在一些实现中,执行图是节点和边图,其中每个节点表示可执行文件和附加元数据或信息,并且每条边表示两个节点之间的依赖关系。执行图可以类似于如关于图2、图3A和图3B描述的执行图200或300。执行图还可以是分层的,并且包括类似于如下面更详细地参考图8所描述的执行图800的一个或多个子图。执行图中的每个节点可以包含可以分发在整个机器学习硬件加速器中的一个或多个可执行文件。
图5是描述用于在多核计算设备的阵列中编译可执行作业的示例过程的流程图。过程500可以由机器学习硬件加速器(例如,如关于图1所描述的机器学习硬件加速器100)或其一部分来执行。
在502处,机器学习硬件加速器接收机器学习模型,要在该机器学习模型上执行推断。机器学习模型可以定义诸如神经网络中的神经元之间的权重和连接以及每层中的层/神经元的数量等的参数。接收到的机器学习模型还可以包括要提供给神经网络以便执行推断的一个或多个输入,以及要进行的操作,以及要由操作使用的具体输入、输出和参数。
在504处,解析接收到的机器学习模型以确定要执行的多个作业。多个作业可以包括依赖于来自其他作业的结果的作业,以及系统与为了执行推断而要完成的其他计算之间的通信。在一些实现中,评估作业以确定哪个核类型是在其上优选执行作业的。例如,可以进行类似于上述的启发式分析的启发式分析以识别作业将在其上最佳操作的核类型。
在506处,生成表示多个作业和多个作业之间的依赖关系的执行图。在一些实现中,执行图是节点和边示意图,类似于如参考图2和图3描述的执行图200或300。在一些情况下,这类似于如上所述的408完成。
在508处,调用多芯片编译器以将执行图编译为经映射的执行图。经映射的执行图是其中所有作业已经被指派给适当的核类型并被编译的图;经映射的执行图包含要在多核机器学习加速器中运行的必要的编译的可执行文件。通常,多芯片编译器将图拆分成要由低层级编译器处理的子图。必须在最高层级处执行的一些作业立即被编译,并且其余作业被进一步拆分成子图,子图然后由它们各自的编译器编译。虽然被描述为具有多芯片级、单芯片级和核级的三层级分层结构,但是在本公开的范围内可以考虑更多或更少的层级。
在510处,识别多个作业中的与多核计算设备不兼容的一个或多个第一作业。换句话说,这些作业必须在高级(例如,由诸如如参考图1描述的CPU 104的主机CPU)执行。例如,执行开始、停止、作业返回等。主机CPU可以构成第一核类型。
在512处,将执行图的剩余作业划分成表示单芯片级的多个第一子图,并且将其指派给多核计算设备的阵列中的多核计算设备。多核计算设备的阵列可以是类似于如参考图1描述的并且下面参考图6和图7更详细地描述的ASIC 108的ASIC。
在514处,调用芯片级编译器来编译第一子图中的每个。来自更高层级的每个子图包含要被指派在当前层级处的可执行文件,或者被进一步划分成甚至更低级子图。
在516处,识别一个或多个芯片级作业,该一个或多个芯片级作业只能在芯片级处执行并且不适合于或是优选在芯片级处执行。这些作业例如是在多核计算设备的核之间的业务协调作业或同步作业。这些作业然后被编译为由第二核类型(例如,多核计算设备的ARM核控制器)执行。
在518处,将第一子图的剩余作业划分为多个第二子图并且指派给第三核类型(例如,TPU片块)。在520处,调用核级编译器来处理每个第二子图。在522处,核级编译器将第二子图中的每个编译成要由第三核类型(例如,TPU片块)执行的一个或多个可执行文件。
在524处,返回所得到的经映射的执行图,从而得到包含可执行文件和子图的执行图。每个子图本身包含可执行文件和潜在的附加子图。每个图和子图可以指定要在多核计算设备的阵列中执行的核类型。
图6示出了在机器学习硬件加速器中用作用于加速与深度神经网络(DNN)相关联的张量计算的示例计算系统600的ASIC的框图。系统600可以是例如如参考图1描述的ASIC108。系统600通常包括控制器602、主机接口608、输入/输出(I/O)链路610、包括第一片块集612和第二片块集614的多个片块、分类器部分616、以及在总线映射618(其为了清楚起见而示出,但是不包括在系统600中)中识别的数据总线。片块集612和片块集614中的片块可以与如参考图1所讨论的片块116相同或不同。控制器602通常包括数据存储器604、指令存储器606和被配置为执行在计算机可读存储介质中编码的一个或多个指令的至少一个处理器。指令存储器606可以存储可由控制器602的一个或多个处理器执行的一个或多个机器可读指令。数据存储器604可以是用于存储和随后存取与系统600内发生的计算有关的各种数据的各种数据存储介质中的任一种。
控制器602被配置为执行与系统600内的张量计算有关的一个或多个指令,包括存储在指令存储器606中的指令。在一些实现中,数据存储器604和指令存储器606是一个或多个易失性存储器单元。在一些其他实现中,数据存储器604和指令存储器606是一个或多个非易失性存储器单元。数据存储器604和指令存储器606也可以是另一种形式的计算机可读介质,诸如软盘设备、硬盘设备、光盘设备、或磁带设备、闪存或其他类似的固态存储器设备、或设备阵列,包括存储区域网络或其他配置中的设备。在各种实现中,控制器602也可以被引用或称为核管理器602。
如所描绘的,主机接口608耦合到I/O链路610、控制器602和分类器部分616。主机接口608从I/O链路610接收指令和数据参数,并向控制器602提供指令和数据。一般来说,可以通过指令总线624(下文描述)将指令提供到系统600中的一个或多个设备,并且可以通过环形总线628(下文描述)将参数提供到系统600中的一个或多个设备。在一些实现中,指令由控制器602在初始时间从主机接口618接收并且存储在指令存储器606中以供控制器602在稍后的时间执行。
分类器部分616同样耦合到控制器602和第二片块集614的片块7。在一些实现中,分类器部分616被实现为系统600内的单独片块。在替代实现中,分类器部分616作为控制器602的子电路或子设备设置或定位在控制器602内。分类器部分616通常被配置为对作为全连接层的输出接收的累积的预激活值执行一个或多个函数。全连接层可以跨片块集612和614中的片块被划分。因此,每个片块被配置为产生可以存储在片块的存储器单元中的预激活值(即,线性输出)的子集。分类结果总线620提供从分类器部分616到控制器602的数据路径。包括后函数值(即,结果)的数据经由分类结果总线620从分类器部分616提供给控制器602。
总线映射618示出了在第一片块集612和第二片块集614的片块之间提供一个或多个互连的数据通信路径的数据总线。如图6中所描绘,总线映射618提供用于识别分类结果总线620、CSR/主总线622、指令总线624、网状总线626和环形总线628的图例。通常,片块是系统600的加速器架构内的核组件,并且是在系统中发生的张量计算的焦点。每个片块是与系统中的其他片块协作以加速跨多层神经网络的一个或多个层的计算的单独的计算单元。尽管片块集612、614中的片块可以共享与给定指令相关联的张量计算的执行,但是单独的计算单元是被配置为相对于片块集612、614内的其他对应片块独立地执行张量计算的子集的自足式(self-contained)计算组件。
CSR总线622是单主多从总线,其使得控制器602能够传输设置与一个或多个片块相关联的程序配置和读取状态寄存器的一个或多个指令。CSR总线622可以以单个菊花链配置与一个主总线段和多个从总线段连接。如图6所示,CSR总线622通过总线数据路径提供通信耦合,该总线数据路径将片块集612、614中的片块和控制器602以环形连接到主机接口610。在一些实现中,主机接口610是CSR总线环的单个主控者,并且整个CSR总线地址空间是映射到主机接口610中的存储器空间的存储器。
CSR总线622可以由主机接口610用于执行一个或多个操作,包括例如编程控制器602中的存储器缓冲器指针以使得控制器602能够开始从指令存储器606获取指令,更新/编程在一个或多个计算期间保持静态的各种片块设置(例如,用于多项式近似计算的系数表),和/或将固件加载/重新加载到分类部分616。在一个示例中,固件重新加载可以包括要应用于线性输出(即,预激活值)的新函数。因此,具有对CSR总线622的访问的每个从属者将具有绑定到从属者并识别它的不同节点标识符(节点ID)。节点ID将是指令地址的一部分,并且将由CSR从属者(即,控制器602、片块612、614和分类器616)使用、检查或以其他方式审查以确定CSR分组是否被寻址到从属者。
在一些实现中,主机接口602可以通过控制器602发送一个或多个指令。指令可以例如是32位宽,其中前7位包括指示要接收和执行指令的指令地址/目的地的报头信息。报头的前7位可以包含表示特定节点ID的数据参数。因此,CSR总线环上的从属者(例如,每个片块)可以检查指令的报头以确定主控者(主机接口610)的请求是否被寻址到检查报头的片块。如果报头的节点ID不指示目的地是检查片块,则检查片块将将输入CSR指令分组复制到连接到下一个片块的CSR总线输入,以供下一个片块检查。
指令总线624源自控制器602,并且类似于CSR总线622,还通过总线数据路径提供通信耦合,该总线数据路径将片块集612、614中的片块以环形连接回到控制器602。在一个实现中,控制器602经由指令总线624广播一个或多个指令。由控制器602广播的指令可以不同于经由CSR总线622提供的指令。然而,片块接收和/或消费或执行经由总线624接收到的指令的方式可以类似于用于执行经由CSR总线622接收到的指令的过程。
在一个示例中,指令的报头(即,位图)向接收片块指示接收片块需要基于与指令相关联的位图来消费特定指令。位图可以具有根据位定义的特定宽度。指令通常基于指令的参数从一个片块转发到下一个片块上。在一个实现中,指令总线624的宽度可以被配置为小于指令的大小/宽度。因此,在这样的配置中,指令的传输将在若干循环内,并且指令总线624的总线停止部将具有将在片块处接收到的指令放置在与该片块相关联的适当的目标指令缓冲器中的解码器。
如下文进一步描述,片块集612、614中的片块通常被配置为支持两个广泛类别的指令。这两个广泛类别也可以被称为指令类型。指令类型包括张量运算(TensorOp)指令和直接存储器存取(DMAOp)指令。在一些实现中,DMAOp指令具有被允许并发的一个或多个具体化。一个或多个具体化可以被称为DMAOp指令子类型或操作码。在一些情况下,每个唯一和/或有效的DMAOp指令类型/子类型元组将在特定片块内具有单独的指令缓冲器。
在片块612、614的特定片块处,与指令总线624相关联的总线停止部将审查报头位图以确定指令类型/子类型。指令可以由片块接收并且随后在由片块执行指令之前写入到片块的指令缓冲器。其中写入指令的片块的指令缓冲器可以由指令的类型和子类型指示符/字段确定。指令缓冲器可以包括对一个或多个相关指令的消费进行优先级排序的先进先出(FIFO)控制方案。因此,在该FIFO控制方案下,将始终按照指令到达指令总线的顺序执行相同类型/子类型的指令。
片块内的不同指令缓冲器是TensorOp指令缓冲器和DMAOp指令缓冲器。如上所述,指令类型包括TensorOp指令和DMAOp指令。关于DMAOp指令,指令子类型(指示‘写入到(write-to)’缓冲器位置)包括以下:1)网状入站指令缓冲器;2)网状出站指令缓冲器;3)窄宽DMA指令缓冲器;4)宽窄DMA指令缓冲器;以及5)环形总线DMA指令缓冲器。下面将参考图7更详细地描述这些缓冲器位置。在整个说明书中使用宽和窄名称,并且通常是指一个或多个存储器单元的宽度(位/字节)的近似大小。如本文中所使用,“窄”可以是指各自具有小于16位的大小或宽度的一个或多个存储器单元,并且“宽”可以是指各自具有大小或宽度或小于64位的一个或多个存储器单元。
网状总线626提供与CSR总线622、指令总线624和环形总线628(下面描述)不同的数据通信路径。如图6所示,网状总线626提供通信路径,该通信路径在X和Y维度两者上将每个片块耦合或连接到其对应的相邻片块。在各种实现中,网状总线626可以用于在相邻片块中的一个或多个窄存储器单元之间传输输入激活量。如图所示,网状总线626不允许将输入激活数据直接转发到非相邻片块。
在各种实现中,网状总线626和经由网状总线626连接的各种片块可以具有以下配置。网格的四个拐角片块具有两个出站端口和两个入站端口。网格的四个边缘片块具有三个入站端口和三个出站端口。所有非边缘非拐角片块具有四个入站端口和四个出站端口。一般来说,给定示例N×N片块布局,边缘片块是仅具有三个相邻片块的片块,而拐角片块是具有两个相邻片块的片块。关于经由网状总线626的数据流方法,通常,对于特定片块经由网状总线626到达的每个输入激活必须被提交到片块的一个或多个窄存储器单元。此外,对于具有少于四个入站端口的片块配置,DMAOp指令可以将零值写入到片块的窄存储器中的位置,而不是等待在缺失输入端口上的数据。同样,对于具有少于四个出站端口的片块配置,DMAOp指令将不执行与针对任何缺失端口的传送有关的窄存储器读取和端口写入。
在一些实现中,将由张量遍历单元(以下称为“TTU”)基于经由网状总线626提供的入站/出站DMAOp来生成特定输入激活将被写入或从其读取特定输入激活的窄存储器单元的位置或地址。入站DMAOp和出站DMAOp可以同时执行,并且任何所需的同步将通过由控制器602管理的同步标志控制方案来管理。下面参考图7进一步详细描述TTU。
环形总线628源自控制器602,并且类似于CSR总线622和指令总线624,还通过总线数据路径提供通信耦合,该总线数据路径将片块612、614以环形连接回到控制器602。在各种实现中,环形总线628通常在所有片块612、614中连接或耦合所有宽存储器单元(下文参考图7更详细地描述)。因此,环形总线628的有效载荷宽度对应于设置在片块集612、片块集614中的每个片块内的宽存储器单元的宽度。如上所述,环形总线628还包括位图报头,该位图报头指示需要消费包括经由环形总线628传送的指令或参数的有效载荷数据的片块。
关于经由环形总线628在特定片块处接收到的数据(即,有效载荷),响应于接收到信息,在将数据转发到另一片块上之前,每个片块将清零(即,清除)在位图报头中指示的对于接收片块是唯一的位置数据。因此,当报头位图不具有指示要接收有效载荷的特定片块的剩余位集数据时,将停止向另一个片块转发有效载荷。有效载荷数据通常是指在基于深度嵌套循环的执行而执行的张量计算期间由一个或多个片块使用的激活和权重。
在一些实现中,控制器602可以被描述为环形总线628的一部分。在一个示例中,对于在特定片块内执行的DMAOp指令,控制器602可以用于从环形总线停止部弹出数据/有效载荷,并且将有效载荷转发到环中的下一个片块中的环形总线停止部。如果位图报头中的指令需要这样的动作,则控制器602还可以使有效载荷数据被提交到片块的一个或多个宽存储器单元。数据需要被写入到的一个或多个宽存储器单元的地址可以由特定片块内的DMAOp指令生成。
在各种实现中,片块集612、614中的每个片块可以是有效载荷数据的生产者或有效载荷数据的消费者。当片块是有效载荷数据的生产者时,片块从其宽存储器单元中的一个或多个读取数据,并且通过环形总线628多播数据以供一个或多个其它片块消费。当片块是有效载荷数据的消费者时,片块接收数据并将数据写入片块内的一个或多个宽存储器单元并转发有效载荷数据以供一个或多个其他片块消费。关于经由环形总线628的有效载荷数据的移动,通常在任何给定时间在环形总线628上仅存在一个数据的生产者/主控者。所有片块中的DMAOp指令执行顺序(例如,FIFO控制方案)将确保在给定时间在环形总线628上仅存在一个数据的生产者/主控者。
在一些实现中,控制器602使用同步标志控制结构来确保在给定时间在环形总线628上仅存在一个有效载荷数据的生产者/主控者。在一个示例中,由片块对环形输出的每次写入将触发对应的同步标志计数的递增。控制器602可以审查有效载荷数据以确定包括有效载荷的数据块或段的数量。然后,控制器602监测片块的执行,以确保在另一个片块以主控者模式执行之前预期数量的数据段由片块转发和/或消费。
当存在经由环形总线628连接的在环形总线上不具有重叠区域的本地多播组时发生确保在给定时间在环形总线628上仅存在一个数据的生产者/主控者的例外。例如,片块0(主控者)可以多播(即,产生数据)到片块0至片块3分组中的片块,而片块4(主控者)可以与片块4至片块7分组中的片块相同。这种双主控者多播方法的重要要求是不同的多播群组必须不被允许看到彼此的数据分组,因为分组重叠可能发生并且导致一个或多个数据计算错误。
如图6所示,控制器602提供将片块集612、614中的片块耦合或连接到I/O 610并且包括若干核心功能的通信数据路径。控制器602的核心功能通常包括将一个或多个I/O输入激活馈送到片块集612、614中的片块,将从I/O 610接收到的一个或多个输入激活和参数馈送到片块,将从I/O 610接收到的一个或多个指令馈送到片块,将I/O输出激活发送到主机接口608,并且用作CSR总线622以及环形总线628的环形停止部。如下文更详细描述的,第一片块集612和第二片块集614各自包括多个片块,这些片块用于执行基于由内循环和外循环组成的深循环嵌套执行的一个或多个张量计算。
系统600通常如下操作。主机接口608将向控制器602提供定义针对给定计算发生的直接存储器存取操作(DMAOp)的一个或多个指令。与馈送到控制器602的指令相关联的描述符将包括控制器促进与多维数据阵列(张量)相关联的大规模点积计算所需的信息。通常,控制器602从主机接口608接收输入激活、片块指令和模型参数(即,权重)以用于针对神经网络的给定层执行张量计算。然后,控制器602可以使指令以由指令定义的数据流方式多播到片块612、614。如上文所讨论的,消费指令的片块可以然后基于指令报头中的位图数据来发起新的/随后的指令到另一片块的广播。
关于数据流,输入激活和参数经由环形总线628传输到片块集612、614中的片块。片块612、614中的每个将存储计算指派给该特定片块的输出激活的子集所需的输入激活的子集。用于片块的DMAOp指令将使得输入激活从宽存储器移动到窄存储器。当需要的输入激活、参数/权重和计算指令(TTU操作、存储器地址等)在片块中可用时,片块内的计算开始。当片块内的MAC运算器(下面描述)完成由指令集定义的所有点积运算并且预激活函数被应用于乘法运算的结果(即,输出激活)时,在片块内发生的计算结束。
一个或多个张量计算的结果包括将计算层的输出激活写入到执行计算的片块的窄存储器单元。对于某些张量计算,将存在经由网状总线626向相邻片块的输出边缘激活的传送。当计算跨越多个层时,需要将输出边缘激活传送到相邻片块以计算随后的层的输出激活。当所有层的计算完成时,DMAOp将通过环形总线628将最终激活移动到分类器片块616。控制器602然后将从分类器片块616读取最终激活,并且执行DMAOp以将最终激活移动到主机接口608。在一些实现中,分类器部分616执行NN的输出层(即,最后一层)的计算。在其他实现中,NN的输出层是通常与神经网络相关联的分类器层、回归层或另一层类型中的一个。
图7示出了可以在如参考图1描述的ASIC 106中使用的示例神经网络(NN)计算片块700。一般来说,示例片块700可以对应于上文参考图6讨论的第一片块集612和第二片块集614内的片块中的任一个。在各种实现中,计算片块700也可以被引用或称为计算单元700。每个计算片块700是被配置为独立于片块集612、614内的其他对应片块执行指令的自足式计算单元。如上文简要讨论的,每个计算片块700执行两种类型的指令——TensorOp指令和DMAOp指令。通常,每个指令类型将包括与深度循环嵌套相关联的计算操作,并且因此每个指令类型通常将在多个时间时期内执行以确保所有循环迭代的完成。
如下文更详细地讨论的,不同指令类型由计算片块700内的独立控制单元执行,该独立控制单元通过在计算片块700内管理的同步标志控制来同步数据。同步标志控制管理计算片块700内的不同指令类型的执行之间的并发性。与每个指令类型相关联的每个计算操作将以严格的发布顺序(即,先进先出)执行。关于两种指令类型,TensorOP和DMAOp,在这些不同的指令类型之间不存在排序保证,并且每个类型由计算片块700作为单独的控制线程来对待。
关于数据流构造,计算片块700通常包括数据路径702和数据路径705,其各自提供用于流入和流出计算片块700的数据流的通信路径。如上所述,系统600包括以环形配置——CSR总线622、指令总线624和环形总线628——布置的三个不同的数据总线结构。参考图7,数据路径705对应于指令总线624,而数据路径702通常对应于CSR总线622和环形总线628中的一个。如图所示,数据路径702包括为离开计算片块700的数据提供输出路径的环形输出703和为进入计算片块700的数据提供输入路径的环形输入704。
计算片块700还包括:TensorOp控件706,其包括TensorOp张量遍历单元(TTU)726;以及DMAOp控件708,其包括DMAOp TTU 728。TensorOp控件706通常管理到TensorOp TTU寄存器732的写入和从TensorOp TTU寄存器732的读取,并且管理用于由TensorOp TTU 726执行的遍历操作。同样,DMAOp控件708通常管理到DMAOp TTU寄存器734的写入和从DMAOp TTU寄存器734的读取,并且管理用于由DMAOp TTU 728执行的遍历操作。TTU寄存器732包括用于存储一个或多个指令的指令缓冲器,所述指令包括当由TensorOp控件706执行指令时要由TensorOp TTU 726执行的操作。同样,TTU寄存器734包括用于存储一个或多个指令的指令缓冲器,所述指令包括在由DMAOp控件708执行指令时要由TTU 708执行的操作。如下文进一步描述的,计算片块700使用TTU来遍历通常驻留在窄存储器710和宽存储器712中的一个或多个张量的阵列元素。
在一些实现中,用于由计算片块700执行的某些指令经由数据路径705(即,指令总线624的一部分)到达片块。计算片块700将审查报头位图以确定指令类型(TensorOp或DMAOp)和指令子类型(读取操作或写入操作)。由计算片块700接收到的指令随后取决于指令类型而被写入特定指令缓冲器。一般来说,在由计算片块700的组件执行指令之前接收并存储指令(即,写入到缓冲器)。如图7所示,指令缓冲器(即,TensorOp TTU寄存器732和DMAOp TTU寄存器734)可以各自包括对一个或多个相关指令的消费(执行)进行优先级排序的先进先出(FIFO)控制方案。
如上面简要讨论的,张量是多维几何对象,并且示例多维几何对象包括矩阵和数据阵列。包括深度嵌套循环的算法可以由计算片块700执行以通过迭代一个或多个嵌套循环以遍历N维张量来执行张量计算。在一个示例计算过程中,循环嵌套的每个循环可以负责遍历N维张量的特定维度。如本文所述,TensorOp控件706通常管理一个或多个张量运算,该张量运算驱动遍历和访问特定张量构造的维度元素以完成由深度嵌套循环定义的计算的序列。
计算片块700还包括窄存储器710和宽存储器712。窄和宽名称通常指代窄存储器710和宽存储器712的存储器单元的宽度(位/字节)的大小。在一些实现中,窄存储器710包括各自具有小于16位的大小或宽度的存储器单元,并且宽存储器712包括各自具有大小或宽度或小于32位的存储器单元。通常,计算片块700经由数据路径705接收输入激活,并且DMA控件708执行将输入激活写入到窄存储器710中的操作。同样,计算片块700经由数据路径702接收参数(权重),并且DMA控件708执行将参数写入到宽存储器712中的操作。在一些实现中,窄存储器710可以包括存储器仲裁器,该存储器仲裁器通常在共享存储器系统中使用以针对每个存储器周期决定将允许哪个控制设备(例如,TensorOp控件706或DMAOp控件708)存取窄存储器710的该共享存储器单元。
计算片块700还包括输入激活总线716和MAC阵列714,MAC阵列714包括多个cell,每个单元包括MAC运算器715和和寄存器720。通常,MAC阵列714使用跨多个cell的MAC运算器715和和寄存器720来执行包括与点积计算有关的算术运算的张量计算。输入激活总线716提供数据路径,在该数据路径中由窄存储器710针对由MAC阵列714的每个MAC运算器715的相应存取来逐个地提供输入激活。因此,基于输入激活的逐个广播,特定cell的单个MAC运算器715将各自接收输入激活。由MAC阵列714的MAC运算器执行的算术运算通常包括将由窄存储器710提供的输入激活与从宽存储器712存取的参数相乘以产生单个输出激活值。
在算术运算期间,部分和可以被累加并存储在对应的例如和寄存器720中,或写入到宽存储器712并由MAC阵列714的特定cell重新存取以完成后续乘法运算。张量计算可以被描述为具有第一部分和第二部分。当乘法运算产生输出激活时,例如,通过完成输入激活和参数的乘法以生成输出激活,第一部分完成。第二部分包括将非线性函数应用于输出激活并且当在应用该函数之后输出激活被写入到窄存储器710时第二部分完成。
计算片块700还包括输出激活总线718、包括输出激活流水线724的非线性单元(NLU)722、NLU控件738和指示计算片块700中的组件的核心属性的参考映射730。为了清楚起见,示出了参考映射730,但是不包括在计算片块700中。核心属性包括特定组件是单元、存储设备、运算器、控制设备还是数据路径。通常,在完成张量计算的第一部分时,经由输出激活总线718从MAC阵列714向NLU 722提供输出激活。在到达NLU 722之后,经由激活流水线724接收的指定激活函数的数据被应用于输出激活,并且然后输出激活被写入到窄存储器710。在一些实现中,输出激活总线718包括至少一个流水线式移位寄存器736,并且完成张量计算的第二部分包括使用激活总线718的移位寄存器736来将输出激活朝向窄存储器710移位。
关于例如对于单个计算片块700的两个多维数据阵列的点积计算,MAC阵列714提供稳健的单指令多数据(SIMD)功能。SIMD通常意味着所有并行单元(多个MAC运算器715)共享相同的指令(基于深度循环嵌套),但是每个MAC运算器715在不同的数据元素上执行指令。在一个基本示例中,在一个循环中将阵列[1,2,3,4]和[5,6,7,8]逐元素地相加以获得阵列[6,8,10,12]通常将需要四个算术单元来对每个元素执行操作。通过使用SIMD,四个单元可以共享相同的指令(例如,“相加”)并且并行执行计算。因此,系统600和计算片块700通过现有方法在张量计算中提供增强的加速和并行性。
在一个示例中,并且如下面更详细描述的,单个指令可以由控制器602提供给多个计算片块700(参见图6的片块集612、614)以供多个MAC阵列714消费。通常,神经网络层可以包括多个输出神经元,并且输出神经元可以被划分,使得与输出神经元的子集相关联的张量计算可以被指派给片块集612、614中的特定片块。片块集612、614中的每个片块然后可以对给定层的不同神经元组执行相关张量计算。因此,计算片块700可以提供至少两种形式的并行性:1)一种形式包括在片块集612、614的多个片块之中划分输出激活(对应于输出神经元的子集);以及2)另一种形式包括基于片块集612、614中的片块之中的划分来(利用单个指令)同时计算输出神经元的多个子集。
图8示出了示例分层执行图。所示的分层执行图800示出了更高级的图,其可以类似于如关于图2和图3所描述的执行图200或300。在一些实现中,执行图800通过与如参考图4和图5描述的过程400或过程500类似的过程来产生。
根图802描述整个执行图800。它包括运行时级指令、多芯片级指令、单芯片级指令、定义其将要在其上执行的硬件布局的列表和参数、可以定义用于推断的存储器空间的变量的常量缓冲器的列表、以及子图804的列表。
包含在根图802中的每个子图804包括张量808的列表和操作806的列表。子图804还包括输入和输出的列表以及定义张量参数和存储位置的索引。另外,子图804可以包括可以向分层执行图800提供附加层级的其他子图(未示出)。
包含在子图804内的操作806可以是具有具体类型定义以及特定于操作的附加数据的经编译的可执行文件。操作806可以包括:元数据—指定优选的核类型,或与操作的执行相关联的其他参数。类似于子图的操作可以包括输入和输出的列表,其可以包括识别要执行操作所需的各种张量或其他数据的位置的索引。在一些实现中,张量是元素的多维阵列,其中所有元素是单个已知数据类型。
张量808定义由各种子图804和操作808以及潜在地由根图802摄取和处理的数据。每个张量808可以具有预定义的维度或形状以及预定义的变量类型。在一些实现中,张量被存储在可由多个核或计算设备访问的共享存储器中。
以上描述是在一个或多个特定实现的场境中提供的。在不脱离本公开的范围的情况下,可以进行所公开的实现的各种修改、更改和置换。因此,本公开不旨在仅限于所描述或图示的实现,而是被赋予与本文公开的原理和特征一致的最宽范围。
虽然本说明书包含许多具体实现细节,但是这些细节不应被解释为对所要求保护的任何发明或内容的范围的限制,而是应当被解释为可能特定于特定发明的特定实施例的特征的描述。在本说明书中在单独实施例的场境中描述的某些特征也可以在单个实施例中组合实现。相反,在单个实施例的场境中描述的各种特征也可以单独地或以任何合适的子组合在多个实施例中实现。此外,尽管特征可以在以上描述为以某些组合起作用并且甚至最初如此要求保护,但是在一些情况下,来自所要求保护的组合的一个或多个特征可以从组合中删除,并且所要求保护的组合可以涉及子组合或子组合的变型。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应当被理解为要求以所示的特定顺序或以先后顺序执行这样的操作,或者执行所有示出的操作以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中都要求这种分离,并且应当理解,所描述的程序组件和系统通常可以在单个软件产品中集成在一起或封装成多个软件产品。
已经描述了主题的特定实施例。其他实施例在所附权利要求的范围内。例如,尽管总线被描述为“可控”,但是并非所有总线都需要具有相同级别的控制。例如,可以存在不同程度的可控性,其中一些总线线路可以仅仅在一些总线线路在它们可以从其接收数据或它们可以将数据发送到的片块的数量方面受到限制的情况下被控制。在另一示例中,一些总线线路可专用于沿单个方向提供数据,单个方向诸如如本文所述的北、东、西或南。在一些情况下,权利要求中记载的动作可以以不同的顺序执行并且仍然实现期望的结果。作为一个示例,附图中描绘的过程不一定要求所示的特定顺序或先后顺序以实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。

Claims (38)

1.一种用于在多核计算设备的阵列中分发可执行作业的方法,包括:
接收要在所述多核计算设备的阵列中执行的多个作业,每个多核计算设备包括多个不同类型的处理核;
通过以下操作将所述多个作业中的每个特定作业指派为由所述多个不同类型的处理核中的一个执行:
分析所述特定作业以确定所述多个不同类型的处理核中的哪一个适合于执行所述特定作业;
基于所述分析来将所述特定作业指派给核类型;
将所述多个作业中的每个作业编译成可单独执行的文件;以及
生成执行图,所述执行图表示所述可单独执行的文件到所述多个不同类型的处理核中的具体处理核的映射,其中所述执行图识别可单独执行的文件之间的依赖关系。
2.根据权利要求1所述的方法,还包括:
通过以下操作来执行所述可单独执行的文件:
接收所述执行图;
将所述执行图中的作业指派给所述多核计算设备的阵列中的多个多核计算设备;
由每个多核计算设备执行所指派的作业;
由每个多核计算设备将所执行的作业的输出返回到共享存储器;以及
组合所返回的输出以生成执行图返回。
3.根据权利要求1或2所述的方法,其中,使用启发式分析来完成分析所述特定作业。
4.根据权利要求1、2或3所述的方法,其中,基于在编译时间之前的用户输入来选择针对每个特定作业的分析的深度。
5.根据权利要求1至4中任一项所述的方法,其中,所述多个不同类型的处理核包括第一类型的核和第二类型的核。
6.根据权利要求5所述的方法,其中,所述第一核类型是核处理器,并且其中,所述第二核类型是TPU片块处理器。
7.根据权利要求5或6所述的方法,其中,所述执行图在性质上是分层的,包括布置在至少四个层级中的子图:
TPU层级,所述TPU层级包括要在所述第二核类型上运行的可执行文件;
芯片级层级,所述芯片级层级包括所述TPU层级的一个或多个子图和要在所述第一核类型上运行的可执行文件;
多芯片层级,所述多芯片层级包括两个或更多个芯片级子图;以及
主机级层级,所述主机级层级包括多芯片层级子图和被配置为在第三类型的核上执行的一个或多个子图。
8.根据权利要求7所述的方法,其中,所述第三类型的所述核是主机设备CPU。
9.一种非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质耦合到一个或多个处理器并且具有存储在其上的指令,所述指令在由所述一个或多个处理器执行时使所述一个或多个处理器执行用于在多核计算设备的阵列中分发可执行作业的操作,所述操作包括:
接收要在所述多核计算设备的阵列中执行的多个作业,每个多核计算设备包括多个不同类型的处理核;
通过以下操作将所述多个作业中的每个特定作业指派为由所述多个不同类型的处理核中的一个执行:
分析所述特定作业以确定所述多个不同类型的处理核中的哪一个适合于执行所述特定作业;
基于所述分析来将所述特定作业指派给核类型;
将所述多个作业中的每个作业编译成可单独执行的文件;以及
生成执行图,所述执行图表示所述可单独执行的文件到所述多个不同类型的处理核中的具体处理核的映射,其中所述执行图识别可单独执行的文件之间的依赖关系。
10.根据权利要求9所述的计算机可读介质,所述操作还包括:
通过以下操作来执行所述可单独执行的文件:
接收所述执行图;
将所述执行图中的作业指派给所述多核计算设备的阵列中的多个多核计算设备;
由每个多核计算设备执行所指派的作业;
由每个多核计算设备将所执行的作业的输出返回到共享存储器;以及
组合所返回的输出以生成执行图返回。
11.根据权利要求9或10所述的计算机可读介质,其中,使用启发式分析来完成分析所述特定作业。
12.根据权利要求9、10或11所述的计算机可读介质,其中,基于在编译时间之前的用户输入来选择针对每个特定作业的分析的深度。
13.根据权利要求9至12中任一项所述的计算机可读介质,其中,所述多个不同类型的处理核包括第一类型的核和第二类型的核。
14.根据权利要求13所述的计算机可读介质,其中,所述第一核类型是核处理器,并且其中,所述第二核类型是TPU片块处理器。
15.根据权利要求13或14所述的计算机可读介质,其中,所述执行图在性质上是分层的,包括布置在至少四个层级中的子图:
TPU层级,所述TPU层级包括要在所述第二核类型上运行的可执行文件;
芯片级层级,所述芯片级层级包括所述TPU层级的一个或多个子图和要在所述第一核类型上运行的可执行文件;
多芯片层级,所述多芯片层级包括两个或更多个芯片级子图;以及
主机级层级,所述主机级层级包括多芯片层级子图和被配置为在第三类型的核上执行的一个或多个子图。
16.根据权利要求15所述的计算机可读介质,其中,所述第三类型的所述核是主机设备CPU。
17.一种系统,包括:
一个或多个计算机;以及
计算机可读存储设备,所述计算机可读存储设备耦合到所述一个或多个计算机并且其上存储有指令,所述指令在由所述一个或多个计算机执行时使所述一个或多个计算机执行用于在多核计算设备的阵列中分发可执行作业的操作,所述操作包括:
接收要在所述多核计算设备的阵列中执行的多个作业,每个多核计算设备包括多个不同类型的处理核;
通过以下操作将所述多个作业中的每个特定作业指派为由所述多个不同类型的处理核中的一个执行:
分析所述特定作业以确定所述多个不同类型的处理核中的哪一个适合于执行所述特定作业;
基于所述分析来将所述特定作业指派给核类型;
将所述多个作业中的每个作业编译成可单独执行的文件;以及
生成执行图,所述执行图表示所述可单独执行的文件到所述多个不同类型的处理核中的具体处理核的映射,其中所述执行图识别可单独执行的文件之间的依赖关系。
18.根据权利要求17所述的系统,所述操作还包括:
通过以下操作来执行所述可单独执行的文件:
接收所述执行图;
将所述执行图中的作业指派给所述多核计算设备的阵列中的多个多核计算设备;
由每个多核计算设备执行所指派的作业;
由每个多核计算设备将所执行的作业的输出返回到共享存储器;以及
组合所返回的输出以生成执行图返回。
19.根据权利要求17或18所述的系统,其中,使用启发式分析来完成分析所述特定作业。
20.根据权利要求17、18或19所述的系统,其中,基于在编译时间之前的用户输入来选择针对每个特定作业的分析的深度。
21.一种用于编译用于在与包括第一核类型的处理核的硬件结合的多核计算设备的阵列中执行的可执行作业的方法,其中所述多核计算设备的阵列中的每个多核计算设备包括第二核类型和第三核类型的处理核,所述方法包括:
接收要在推断中使用的机器学习模型;
解析所述机器学习模型以确定要执行的多个作业;
生成执行图,所述执行图表示要执行的所述多个作业中的每个以及要执行的所述多个作业之间的依赖关系;
调用多芯片级编译器以生成经映射的执行图,所述多芯片级编译器:
识别要由所述第一核类型执行的所述多个作业中的一个或多个第一作业;
将所述一个或多个第一作业编译成要由所述第一核类型执行的可执行文件,其中所述第一作业与所述阵列中的所述多核计算设备不兼容;
将所述执行图的剩余作业划分为多个第一子图;
将每个第一子图指派给所述多核计算设备的阵列中的特定多核计算设备;以及
针对每个第一子图,调用单芯片级编译器,所述单芯片级编译器:
识别要由所述第二核类型执行的来自所述第一子图的一个或多个芯片级作业;
将来自所述第一子图的所述一个或多个芯片级作业中的每个编译成要由所述第二核类型执行的可执行文件;
将所述第一子图的剩余作业划分为多个第二子图;
将所述多个第二子图中的每个指派给所述第三核类型;以及
针对所述多个第二子图中的每个,调用核级编译器,所述核级编译器:
将所述第二子图中的每个编译成要由所述第三核类型执行的可执行文件。
22.根据权利要求21所述的方法,其中,所述第一核类型是主机系统CPU,其中,所述第二核类型是核处理器,并且其中,所述第三核类型是TPU片块核。
23.根据权利要求21或22所述的方法,其中,所述多核计算设备的阵列中的每个多核计算设备是包括TPU的专用集成电路(ASIC)。
24.根据权利要求21、22或23所述的方法,其中,识别一个或多个第一作业以及识别一个或多个芯片级作业是基于对要执行的所述多个作业的启发式分析来进行的。
25.根据权利要求24所述的方法,其中,基于在编译时间之前的用户输入来选择针对每个特定作业的启发式分析的深度。
26.根据权利要求21至25中任一项所述的方法,包括:
由所述多核计算设备的阵列接收包括所述第一作业的所述经映射的执行图,并且所述多个第一子图包括所述一个或多个芯片级作业和所述多个第二子图;
将所述第一作业、芯片级作业和所述多个第二子图中的剩余作业指派给所述多核计算设备的阵列中的相关联的核;
由每个核多核计算设备执行所指派的作业;
由每个多核计算设备将所执行的作业的输出返回到共享存储器;以及
组合所返回的输出以生成执行图返回。
27.一种非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质耦合到一个或多个处理器并且其上存储有指令,所述指令在由所述一个或多个处理器执行时使所述一个或多个处理器执行用于编译用于在与包括第一核类型的处理核的硬件结合的多核计算设备的阵列中执行的可执行作业的操作,其中所述多核计算设备的阵列中的每个多核计算设备包括第二核类型和第三核类型的处理核,所述操作包括:
接收要在推断中使用的机器学习模型;
解析所述机器学习模型以确定要执行的多个作业;
生成执行图,所述执行图表示要执行的所述多个作业中的每个以及要执行的所述多个作业之间的依赖关系;
调用多芯片级编译器以生成经映射的执行图,所述多芯片级编译器:
识别要由所述第一核类型执行的所述多个作业中的一个或多个第一作业;
将所述一个或多个第一作业编译成要由所述第一核类型执行的可执行文件,其中所述第一作业与所述阵列中的所述多核计算设备不兼容;
将所述执行图的剩余作业划分为多个第一子图;
将每个第一子图指派给所述多核计算设备的阵列中的特定多核计算设备;以及
针对每个第一子图,调用单芯片级编译器,所述单芯片级编译器:
识别要由所述第二核类型执行的来自所述第一子图的一个或多个芯片级作业;
将来自所述第一子图的所述一个或多个芯片级作业中的每个编译成要由所述第二核类型执行的可执行文件;
将所述第一子图的剩余作业划分为多个第二子图;
将所述多个第二子图中的每个指派给所述第三核类型;以及
针对所述多个第二子图中的每个,调用核级编译器,所述核级编译器:
将所述第二子图中的每个编译成要由所述第三核类型执行的可执行文件。
28.根据权利要求27所述的计算机可读介质,其中,所述第一核类型是主机系统CPU,其中,所述第二核类型是核处理器,并且其中,所述第三核类型是TPU片块核。
29.根据权利要求27或28所述的计算机可读介质,其中,所述多核计算设备的阵列中的每个多核计算设备是包括TPU的专用集成电路(ASIC)。
30.根据权利要求27、28或29所述的计算机可读介质,其中,识别一个或多个第一作业以及识别一个或多个芯片级作业是基于对要执行的所述多个作业的启发式分析来进行的。
31.根据权利要求30所述的计算机可读介质,其中,基于在编译时间之前的用户输入来选择针对每个特定作业的启发式分析的深度。
32.根据权利要求27至31中任一项所述的计算机可读介质,所述操作包括:
由所述多核计算设备的阵列接收包括所述第一作业的所述经映射的执行图,并且所述多个第一子图包括所述一个或多个芯片级作业和所述多个第二子图;
将所述第一作业、芯片级作业和所述多个第二子图中的剩余作业指派给所述多核计算设备的阵列中的相关联的核;
由每个核多核计算设备执行所指派的作业;
由每个多核计算设备将所执行的作业的输出返回到共享存储器;以及
组合所返回的输出以生成执行图返回。
33.一种系统,包括:
一个或多个计算机;以及
计算机可读存储设备,所述计算机可读存储设备耦合到所述一个或多个计算机并且其上存储有指令,所述指令在由所述一个或多个计算机执行时使所述一个或多个计算机执行用于编译用于在与包括第一核类型的处理核的硬件结合的多核计算设备的阵列中执行的可执行作业的操作,其中所述多核计算设备的阵列中的每个多核计算设备包括第二核类型和第三核类型的处理核,所述操作包括:
接收要在推断中使用的机器学习模型;
解析所述机器学习模型以确定要执行的多个作业;
生成执行图,所述执行图表示要执行的所述多个作业中的每个以及要执行的所述多个作业之间的依赖关系;
调用多芯片级编译器以生成经映射的执行图,所述多芯片级编译器:
识别要由所述第一核类型执行的所述多个作业中的一个或多个第一作业;
将所述一个或多个第一作业编译成要由所述第一核类型执行的可执行文件,其中所述第一作业与所述阵列中的所述多核计算设备不兼容;
将所述执行图的剩余作业划分为多个第一子图;
将每个第一子图指派给所述多核计算设备的阵列中的特定多核计算设备;以及
针对每个第一子图,调用单芯片级编译器,所述单芯片级编译器:
识别要由所述第二核类型执行的来自所述第一子图的一个或多个芯片级作业;
将来自所述第一子图的所述一个或多个芯片级作业中的每个编译成要由所述第二核类型执行的可执行文件;
将所述第一子图的剩余作业划分为多个第二子图;
将所述多个第二子图中的每个指派给所述第三核类型;以及
针对所述多个第二子图中的每个,调用核级编译器,所述核级编译器:
将所述第二子图中的每个编译成要由所述第三核类型执行的可执行文件。
34.根据权利要求33所述的系统,其中,所述第一核类型是主机系统CPU,其中,所述第二核类型是核处理器,并且其中,所述第三核类型是TPU片块核。
35.根据权利要求33或34所述的系统,其中,所述多核计算设备的阵列中的每个多核计算设备是包括TPU的专用集成电路(ASIC)。
36.根据权利要求33、34或35所述的系统,其中,识别一个或多个第一作业以及识别一个或多个芯片级作业是基于对要执行的所述多个作业的启发式分析来进行的。
37.根据权利要求36所述的系统,其中,基于在编译时间之前的用户输入来选择针对每个特定作业的启发式分析的深度。
38.根据权利要求27至37中任一项所述的系统,所述操作包括:
由所述多核计算设备的阵列接收包括所述第一作业的所述经映射的执行图,并且所述多个第一子图包括所述一个或多个芯片级作业和所述多个第二子图;
将所述第一作业、芯片级作业和所述多个第二子图中的剩余作业指派给所述多核计算设备的阵列中的相关联的核;
由每个核多核计算设备执行所指派的作业;
由每个多核计算设备将所执行的作业的输出返回到共享存储器;以及
组合所返回的输出以生成执行图返回。
CN202180098206.0A 2021-06-08 2021-06-08 机器学习硬件加速器中的分层编译和执行 Pending CN117677929A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2021/036418 WO2022260656A1 (en) 2021-06-08 2021-06-08 Hierarchical compiling and execution in a machine learning hardware accelerator

Publications (1)

Publication Number Publication Date
CN117677929A true CN117677929A (zh) 2024-03-08

Family

ID=76731046

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180098206.0A Pending CN117677929A (zh) 2021-06-08 2021-06-08 机器学习硬件加速器中的分层编译和执行

Country Status (4)

Country Link
EP (1) EP4320513A1 (zh)
KR (1) KR20230169285A (zh)
CN (1) CN117677929A (zh)
WO (1) WO2022260656A1 (zh)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10372493B2 (en) * 2015-12-22 2019-08-06 Intel Corporation Thread and/or virtual machine scheduling for cores with diverse capabilities
JP2022500755A (ja) * 2018-09-11 2022-01-04 ホアウェイ・テクノロジーズ・カンパニー・リミテッド 順次計算dagのための異種スケジューリング
US11003429B1 (en) * 2019-02-04 2021-05-11 Amazon Technologies, Inc. Compile-time scheduling

Also Published As

Publication number Publication date
WO2022260656A1 (en) 2022-12-15
EP4320513A1 (en) 2024-02-14
KR20230169285A (ko) 2023-12-15

Similar Documents

Publication Publication Date Title
Mittal et al. A survey of techniques for optimizing deep learning on GPUs
US9710265B1 (en) Neural network compute tile
US20200249998A1 (en) Scheduling computation graph heterogeneous computer system
US11500959B2 (en) Multiple output fusion for operations performed in a multi-dimensional array of processing units
JP6581727B2 (ja) 動的なパーティショニングを使用してデータを処理すること
CN105468439B (zh) 在cpu-gpu异构框架下遍历固定半径内邻居的自适应并行方法
CN113748399B (zh) 在异构计算资源上调度计算图的方法、装置及可读介质
US11385931B2 (en) Method, electronic device, and computer program product for processing computing job
CN113420517B (zh) 面向云端深度学习推理的fpga虚拟化硬件系统栈设计
WO2012019111A2 (en) A method and apparatus for a compiler and related components for stream-based computations for a general-purpose, multiple-core system
US20220245453A1 (en) Redistributing tensor elements between machine learning computing units
CN111630505A (zh) 深度学习加速器系统及其方法
US20230418677A1 (en) Preemption in a machine learning hardware accelerator
CN117677929A (zh) 机器学习硬件加速器中的分层编译和执行
JP2024520326A (ja) 機械学習ハードウェアアクセラレータでの階層的なコンパイルおよび実行
WO2013058396A1 (ja) タスク配置装置及びタスク配置方法
CN117355819A (zh) 一种计算模型的处理方法及装置
CN113568599B (zh) 用于处理计算作业的方法、电子设备和计算机程序产品
US11675572B2 (en) Sharing data structures
CN114860417B (zh) 多核神经网络处理器及用于该处理器多任务分配调度方法
Majumder et al. Task allocation strategies for fpga based heterogeneous system on chip
Genet et al. Assembly operations for multicore architectures using task-based runtime systems
Kumar et al. Performance Models for Data Transfers: A Case Study with Molecular Chemistry Kernels
CN116048759A (zh) 数据流的数据处理方法、装置、计算机和存储介质

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