CN114035916A - 计算图的编译、调度方法及相关产品 - Google Patents
计算图的编译、调度方法及相关产品 Download PDFInfo
- Publication number
- CN114035916A CN114035916A CN202111291728.0A CN202111291728A CN114035916A CN 114035916 A CN114035916 A CN 114035916A CN 202111291728 A CN202111291728 A CN 202111291728A CN 114035916 A CN114035916 A CN 114035916A
- Authority
- CN
- China
- Prior art keywords
- execution
- graph
- compiled
- scheduling
- runtime
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/33—Intelligent editors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation 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/5038—Allocation 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Biophysics (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Life Sciences & Earth Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Devices For Executing Special Programs (AREA)
- Advance Control (AREA)
Abstract
本披露公开了一种计算图的编译、调度方法及相关产品。执行计算图的调度的加速器可以实现为计算装置,包括在组合处理装置中,该组合处理装置还可以包括接口装置和其他处理装置。该计算装置与其他处理装置进行交互,共同完成用户指定的计算操作。组合处理装置还可以包括存储装置,该存储装置分别与计算装置和其他处理装置连接,用于存储该计算装置和其他处理装置的数据。本披露的方案通过将动态信息与调度解耦,可以方便实现流水处理,从而提高机器的处理效率。
Description
技术领域
本披露一般地涉及数据处理领域。更具体地,本披露涉及一种计算图的编译方法、运行时调度方法、编译器、加速器、芯片和板卡。
背景技术
深度神经网络(Deep Neural Network,DNN)在广泛的应用中展示出强大的力量,这些应用包括但不限于图像处理、自然语言处理和游戏等。同时,持续发展的DNN技术为特定领域的架构革新也带来了新的机遇。机器学习加速器的很多架构和系统研究致力于加速DNN的训练和推理以获得更好的计算能力、更高的功率效应。
近来,由于动态神经网络技术对具有动态控制流和可变数据尺寸的复杂网络架构具有强大的表达能力,其越来越受到研究人员的关注。随着动态神经网络在自然语言处理和语义分割中日趋重要,目前广泛使用的框架也开始支持动态神经网络技术。
然而,现有的基于神经网络加速器的优化工作通常关注于静态神经网络的优化,在编译时利用静态调度等方式实现对静态计算图的优化。目前仍缺乏一种系统完整的方案用于在神经网络加速器上高效执行动态神经网络。
发明内容
为了至少部分地解决背景技术中提到的一个或多个技术问题,本披露从多个方面提供了解决方案。一方面,提供了一种改进的加速器和计算图的运行时调度方法,其可以帮助实现有效地流水处理。另一方面,提供了一种编程接口或编译器以及相应的编译方法,其可以便于编程人员进行阶段优化,并为调度优化提供了高阶语义。
在第一方面中,本披露公开一种计算图的运行时调度方法,其中所述计算图是已编译计算图,并且所述已编译计算图中包括多个执行块,所述执行块表示所述计算图中各个节点的子操作,所述方法包括:
在运行所述已编译计算图时,响应于执行块的预备执行,存储所述已编译计算图中需要执行的执行块的信息以构建运行时计算图;以及根据依赖关系,基于所述运行时计算图对存储的所述执行块进行调度,以实现流水运算。
在第二方面中,本披露公开一种计算图的编译方法,包括:
将所述计算图中的各个节点拆分成若干执行块以生成已编译计算图,每个执行块表示对应节点的子操作,所述执行块用于在运行所述已编译计算图时,以所述执行块为单位构建运行时计算图并进行调度。
在第三方面中,本披露公开一种加速器,包括:
并行运算电路,用于并行执行运算;
上下文存储电路,用于在运行已编译计算图时,响应于执行块的预备执行,存储所述已编译计算图中需要执行的执行块的信息以构建运行时计算图,其中所述已编译计算图中包括多个执行块,所述执行块表示所述计算图中各个节点的子操作;以及
调度电路,用于根据依赖关系,基于所述运行时计算图调度存储的所述执行块以控制所述并行运算电路实现流水运算。
在第四方面中,本披露提供一种编译器,其包括处理电路,配置用于执行根据本披露第二方面描述的计算图的编译方法。
在第五方面中,本披露提供一种芯片,包括前述第三方面的加速器和/或第四方面的编译器。
在第六方面中,本披露提供一种板卡,包括前述第五方面的芯片。
根据如上提供的调度方案,可以为动态神经网络实现并行的流水处理,从而获得显著的性能提升。此外,所提供的调度方案也可以适用于静态神经网络,其仅引入可忽略的开销。因此,本披露实施例的调度方案还可以适用于动态神经网络与静态神经网络同时存在的混合场景,从而获得整体的性能提升。
附图说明
通过参考附图阅读下文的详细描述,本披露示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本披露的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:
图1示出本披露实施例的板卡的结构图;
图2示出本披露实施例的组合处理装置的结构图;
图3示出本披露实施例的多核计算装置的内部结构示意图;
图4示出节点之间的流水线示例;
图5示出根据本披露实施例的动态流水系统的示意性总览图;
图6示出根据本披露实施例的加速器的示意性简化结构框图;
图7示出根据本披露实施例的计算图编译方法的示例性流程图;
图8示出了根据本披露实施例的一个计算图拆分示例;
图9示出了根据本披露实施例的一个示例性改写的程序;
图10示出了根据本披露实施例的一个示例性编程接口;
图11示出了根据本披露实施例的计算图的运行时调度方法的示例性流程图;以及
图12示出了根据本披露实施例的运行时调度方案的示例性执行过程。
具体实施方式
下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
应当理解,本披露的权利要求、说明书及附图中可能出现的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。
现有的研究主要致力于优化具有固定输入/输出形状和静态计算图的静态神经网络。例如,Auto TVM构建了统计成本模型,并设计了探索模型来搜索在硬件上运行网络的最佳配置。DNNVM设计了一种周期精确仿真器来寻找融合节点的最佳执行策略。这些优化都要求具备预先定义的固定的网络架构的知识,因此很难应用于动态神经网络。
通过分析动态神经网络的推理过程,发明人注意到动态的张量形状和控制流阻碍了调度优化获得更好的计算并行度和硬件利用率。具体地,对于静态神经网络,输入和输出的形状是预先已知的,网络结构也是固定的。因此,用于DNN加速器的编译器可以根据对静态计算图的依赖关系分析、利用软件流水线技术来优化硬件利用率和计算吞吐量。然而,对于动态神经网络,控制流和张量的计算负荷在运行时才能确定。因此,在静态分析期间提前做出最佳调度是极具风险的。此外,对于动态神经网络,需要记录更多的上下文,这无疑增大了寄存器资源的负担。
针对上面提到的一个或多个技术问题,本披露在多个方面中提供了解决方案。一方面,提供了一种改进的加速器,尤其是改进的DNN加速器,其可以帮助实现有效地流水处理。另一方面,提供了一种编程接口或编译器,其可以便于编程人员进行阶段优化,并为调度优化提供了高阶语义。又一方面,提供了一种调度方案,其基于改进的加速器有效地执行动态流水处理。
下面结合附图来详细描述本披露的具体实施方式。
神经网络和计算图
深度神经网络DNN模型通常采用符号化表示来代表网络计算图的结构。例如,TensorFlow使用包含了一组节点和边的有向图来描述计算过程,这个有向图称为计算图。
关于在本披露中提到的术语“节点”和“算子”,需要说明的是,术语“算子”是从计算机的计算层面来说的(或者从软件层面或算法层面来说的);而术语“节点”是一个更形象的说法(从图形层面或者更加直观的层面来说的)。从所指代的内容上来讲,术语“算子”和“节点”实际上指代相同。也即,在本披露中,可以认为术语“算子”和“节点”具有相同的含义,可互换使用,只是从不同的侧面进行描述。
静态神经网络具有固定的网络结构和固定的张量形状。计算图的定义阶段称为静态声明。静态神经网络使得DNN模型能够简单、高效地部署。编译器可以在编译时通过复杂的优化方法来优化网络。批处理技术可以用来提高多核处理器(诸如GPU)的效率。由于这些优势,静态声明是DNN编译器的主要编程范式。
然而,随着自然语言处理和语义分割的持续发展,在越来越多的DNN中应用动态神经网络。相比于静态神经网络,动态神经网络具有不固定的计算图,其包括可变的尺寸、可变的结构或控制流。动态神经网络技术通过运行时的动态声明来支持可变的网络结构,从而赋能需要复杂神经网络结构的应用。
具体地,动态神经网络通常应用于下列场景:1)序列语言模型。这些模型的输入是通常具有可变长度的句子。2)树结构循环神经网络RNN。对于具有情感分析的语言模型,输入是树状结构,并且它们对于不同的句子是变化的。3)神经架构搜索(NAS)。NAS旨在通过反复测试不同网络架构的性能来找到特定任务的最优模型。在任务执行期间,网络结构持续演变。
在一些情况下,动态神经网络可以简化成静态神经网络。例如,对于具有可变句子长度的序列语言模型,通过添加冗余填充,所有句子可以对齐到最长句子。但是这将导致大量冗余且不必要的计算。
示例性硬件环境
DNN加速器是领域特定的处理器,其被设计成提高DNN应用的计算效率和能源效率。DNN加速器的架构特性与传统的CPU或GPU差别极大,这极大地影响了程序模型和编译器的优化。
图1示出本披露实施例的一种板卡10的结构示意图。如图1所示,板卡10包括芯片101,其是一种系统级芯片(System on Chip,SoC),或称片上系统,集成有一个或多个组合处理装置,组合处理装置是一种人工智能运算单元,用以支持各类深度学习和机器学习算法,满足计算机视觉、语音、自然语言处理、数据挖掘等领域复杂场景下的智能处理需求。特别是深度学习技术大量应用在云端智能领域,云端智能应用的一个显著特点是输入数据量大,对平台的存储能力和计算能力有很高的要求,此实施例的板卡10适用在云端智能应用,具有庞大的片外存储、片上存储和强大的计算能力。
芯片101通过对外接口装置102与外部设备103相连接。外部设备103例如是服务器、计算机、摄像头、显示器、鼠标、键盘、网卡或wifi接口等。待处理的数据可以由外部设备103通过对外接口装置102传递至芯片101。芯片101的计算结果可以经由对外接口装置102传送回外部设备103。根据不同的应用场景,对外接口装置102可以具有不同的接口形式,例如PCIe接口等。
板卡10还包括用于存储数据的存储器件104,其包括一个或多个存储单元105。存储器件104通过总线与控制器件106和芯片101进行连接和数据传输。板卡10中的控制器件106配置用于对芯片101的状态进行调控。为此,在一个应用场景中,控制器件106可以包括单片机(Micro Controller Unit,MCU)。
图2是示出此实施例的芯片101中的组合处理装置的结构图。如图2中所示,组合处理装置20包括计算装置201、接口装置202、处理装置203和存储装置204。
计算装置201配置成执行用户指定的操作,主要实现为单核智能处理器或者多核智能处理器,用以执行深度学习或机器学习的计算,其可以通过接口装置202与处理装置203进行交互,以共同完成用户指定的操作。
接口装置202用于在计算装置201与处理装置203间传输数据和控制指令。例如,计算装置201可以经由接口装置202从处理装置203中获取输入数据,写入计算装置201片上的存储装置。进一步,计算装置201可以经由接口装置202从处理装置203中获取控制指令,写入计算装置201片上的控制缓存中。替代地或可选地,接口装置202也可以读取计算装置201的存储装置中的数据并传输给处理装置203。
处理装置203作为通用的处理装置,执行包括但不限于数据搬运、对计算装置201的开启和/或停止等基本控制。根据实现方式的不同,处理装置203可以是中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)或其他通用和/或专用处理器中的一种或多种类型的处理器,这些处理器包括但不限于数字信号处理器(digital signal processor,DSP)、专用集成电路(application specificintegrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本披露的计算装置201而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算装置201和处理装置203整合共同考虑时,二者视为形成异构多核结构。
存储装置204用以存储待处理的数据,其可以是DRAM,为DDR内存,大小通常为16G或更大,用于保存计算装置201和/或处理装置203的数据。
图3示出了计算装置201为多核的内部结构示意图。多核计算装置300采用分层结构设计,多核计算装置300作为一个片上系统,其包括至少一个计算簇(cluster),每个计算簇又包括多个处理器核,换言之,多核计算装置300是以片上系统-计算簇-处理器核的层次所构成的。
以片上系统的层级来看,如图3所示,多核计算装置300包括外部存储控制器31、外设通信模块32、片上互联模块33、同步模块34以及多个计算簇35。
外部存储控制器31可以有多个,在图中示例性地展示2个,其用以响应处理核发出的访问请求,访问外部存储设备,例如图2中的DRAM 204,从而自片外读取数据或是将数据写入。外设通信模块32用以通过接口装置202接收来自处理装置203的控制信号,启动计算装置201执行任务。片上互联模块33将外部存储控制器31、外设通信模块32及多个计算簇35连接起来,用以在各个模块间传输数据和控制信号。同步模块34是一种全局同步屏障控制器(global barrier controller,GBC),用以协调各计算簇的工作进度,确保信息的同步。多个计算簇35是多核计算装置300的计算核心,在图中示例性地展示4个,随着硬件的发展,本披露的多核计算装置300还可以包括8个、16个、64个、甚至更多的计算簇35。计算簇35用以高效地执行深度学习算法。多个计算簇35之间可以形成可以环状通讯的网格结构,也即多个计算簇之间可以具有网格状互联电路。
以计算簇的层级来看,如图3右上方所示,每个计算簇35包括处理单元302和存储核(MEM core)304。处理单元302执行各种计算任务。在一些实现中,处理单元可以是多核架构,例如包括多个处理核(IPU core)311-1~311-n,以完成诸如大规模向量计算任务。本披露不限制处理核311的数量。
处理核311的内部架构如图3下方所示。每个处理核311内可以具有多个用于执行计算任务的计算模块324-1~324-m,以及为执行计算任务所需要的本地存储模块323。
计算模块324是片上基本的张量计算单元,包括但不限于向量运算单元、执行矩阵乘的张量运算单元、具备直接执行卷积运算的运算单元、或者集成了img2col(图像到行列)和gemm(通用矩阵乘)的卷积计算单元。
本地存储模块323可以作为计算簇35内的一个缓存层级(例如第一级缓存L1cache),其可以包括神经元存储单元(neuron RAM,NRAM)和权值存储单元(weight RAM,WRAM)。NRAM用以存储输入神经元、输出神经元和计算后的中间结果;WRAM则用以存储深度学习网络的卷积核,即权值。需特别说明的是,处理核还可以包括各种通信模块,以与外部存储单元进行数据交换。例如,本地存储模块323通过通信模块321,以与存储核304中的共享存储模块315通信。通信模块321例如可以是搬运直接内存访问模块(move directmemory access,MVDMA)。本地存储模块323还可以通过通信模块322以与片外内存,例如DRAM 308进行数据交换。通信模块322例如可以是输入/输出直接内存访问模块(input/output direct memory access,IODMA)。IODMA 322控制本地存储模块323中的NRAM/WRAM与DRAM 308的访存;MVDMA 321则用以控制本地存储模块323中的NRAM/WRAM与共享存储模块315的访存。
继续图3右上方视图,存储核304主要用以存储和通信,即存储处理核311间的共享数据或中间结果、以及执行计算簇35与DRAM 308之间的通信、计算簇35间彼此的通信、处理核311间彼此的通信等。在其他实施例中,存储核304具有标量运算的能力,用以执行标量运算,以实现数据通信中的运算任务。
存储核304包括一个较大的共享存储模块(SRAM)315、广播总线314、计算簇直接内存访问模块(cluster direct memory access,CDMA)318、全局直接内存访问模块(globaldirect memory access,GDMA)316及通信时计算模块317。SRAM 315承担高性能数据中转站的角色,在同一个计算簇35内不同处理核311之间所复用的数据不需要通过处理核311各自向DRAM 308获得,而是经SRAM 315在处理核311间中转,存储核304只需要将复用的数据从SRAM 315迅速分发给多个处理核311即可,以提高核间通讯效率,亦大大减少片上片外的输入/输出访问。
广播总线314、CDMA 318及GDMA 316则分别用来执行处理核311间的通信、计算簇35间的通信和计算簇35与DRAM 308的数据传输。以下将分别说明。
广播总线314用以完成计算簇35内各处理核311间的高速通信,此实施例的广播总线314支持核间通信方式包括单播、多播与广播。单播是指点对点(例如单一处理核至单一处理核)的数据传输,多播是将一份数据从SRAM 315传输到特定几个处理核311的通信方式,而广播则是将一份数据从SRAM 315传输到所有处理核311的通信方式,属于多播的一种特例。
在每个计算簇35内部,每个处理核311可以发起广播,以同时把数据广播到各个核的本地存储模块323中(例如NRAM或WRAM)。广播到NRAM和WRAM上属于两条数据通道,可以并发进行,但是在某个时间节点,每个处理核只能发起一次广播,即不能在同一个核同时发起WRAM和NRAM的广播。
CDMA 318用以控制在同一个计算装置301内不同计算簇35间的SRAM 315的访存。GDMA 316与外部存储控制器31协同,用以控制计算簇35的SRAM 315到DRAM 308的访存,或是将数据自DRAM 308读取至SRAM 315中。从前述可知,DRAM 308与本地存储模块323中的NRAM/WRAM间的通信可以经由2个渠道来实现。第一个渠道是通过IODMA 322直接联系DRAM308与本地存储模块323;第二个渠道是先经由GDMA 316使得数据在DRAM 308与SRAM 315间传输,再经过MVDMA 321使得数据在SRAM 315与本地存储模块323间传输。虽然表面上看来第二个渠道需要更多的元件参与,数据流较长,但实际上在部分实施例中,第二个渠道的带宽远大于第一个渠道,因此DRAM 308与本地存储模块323间的通信通过第二个渠道可能更有效率。本披露的实施例可根据本身硬件条件选择数据传输渠道。
在一些实施例中,存储核304可以作为计算簇35内的一个缓存层级(例如第二级缓存L2 cache),达到拓宽通信带宽的作用。进一步地,存储核304还可以完成与其他计算簇35之间的通信。存储核304例如能够实现计算簇35之间的广播(Broadcast)、撒播(Scatter)、收集(Gather)、规约(Reduce)和全规约(All-reduce)等通信功能。其中,广播是指将同一份数据分发广播给所有计算簇;撒播是指将不同数据分发给不同的计算簇;收集是指将多个计算簇的数据会聚在一起;规约是指将多个计算簇中的数据按照指定的映射函数进行运算得到最后的结果发送给某个计算簇;而全规约与规约的区别在于后者最后的结果只发送给一个计算簇,而全规约需要发送给所有计算簇。
通信时计算模块317可以用于在通信过程中完成例如上述规约、全规约等通信中的计算任务,而不需要借助处理单元302,从而提升通信效率,达到“存算一体”的效果。取决于不同的硬件实现,通信时计算模块317和共享存储模块315可以整合在相同或不同部件中,本披露实施例在此方面没有限制,只要其实现的功能以及达到的技术效果与本披露类似,均属于本披露的保护范围。
DNN加速器可以实现为图2的计算装置201,从图3示出的计算装置201的内部结构可以看出,DNN加速器通常具有复杂的存储架构,其需要通过软件进行显式地管理。此外,加速器采用VLIW(超长指令字)来设计其指令集架构(ISA)以用于向量或矩阵运算。这种ISA需要在运行时通过软件进行调度,以获得更好的模块并行性。基于这些特性,软流水线是DNN加速器上最有效的优化方法之一。
迄今,现有的工具和系统都是基于CPU或GPU,而没有考虑DNN加速器的架构特性。由于完全不同的编程模型,现有的这些方案不适合DNN加速器。因此,在DNN加速器中,为动态神经网络开发高效的架构和系统优化方案是目前亟需的。
示例性动态流水系统
动态神经网络工具支持根据输入变化的神经网络和动态声明。由于这些动态特征,因此在动态神经网络中实现高效的任务调度和计算流水线极具挑战性。
图4示出了节点之间的流水线示例,以阐释动态神经网络中所面临的挑战。在此示例中,省略了节点内的流水线。图中(a)示出了具有固定结构的静态神经网络的软流水处理,(b)示出了具有控制流的动态神经网络的软流水处理。
如(a)所示,静态神经网络通常采用软流水处理,其能够同时执行计算和数据传输以获得更好的硬件利用率,从而提高计算并行度。这种软流水是通过在编译时静态地调度执行顺序来实现的。当神经网络模型的结构固定时,这种软流水简单、高效。
然而对于具有控制流的动态神经网络,调度顺序不能事先确定,因此很难实现最优静态调度。如(b)所示,在此计算图中,节点B或C的执行取决于条件判断的结果。因此,直到运行时才会清楚将执行B还是C。在此示例中,简单的软流水需要插入气泡(bubble),这导致流水线停顿(stall),妨碍了计算并行度的提高。
此外,在寄存器管理方面,动态神经网络也更加复杂。通常对于静态神经网络,诸如张量形状、张量地址和循环次数一类的上下文信息可以提前计算,作为中间值。但是对于动态神经网络,这些都是可变值,所有上下文信息都需要保存在寄存器中。这种要求使得寄存器分配更具挑战,尤其是对于具有较少寄存器或不具有硬件存储管理单元的处理器而言。
鉴于此,在本披露实施例中,提供了一种动态流水方案,其可以通过分别在编译阶段和运行时阶段进行调整,将动态结构与调度相互解耦,从而可以消除由于动态神经网络中的动态特征所带来的低效性。
图5示出了根据本披露实施例的动态流水系统的示意性总览图。
如图5所示,此示例中的动态神经网络的计算图如510所示,其中示出了A、B、C和D这4个节点,同时还包括控制流(切换,Switch),其在运行时根据条件判断执行B还是执行C。
在编译时,编译器将使用高级语言描述的计算图转换为一系列低级机器语言指令,以供机器执行。如图中520所示,计算图510中的各个节点被编译成机器指令。由于此时无法确定动态特征,也即无法确定节点B和节点C中哪个会执行,因此所有节点都会被编译。图中示出按串行顺序对节点A、B、C、D进行编译。
在本披露实施例中,为了支持运行时的流水处理,在编译时,将各个节点拆分成若干执行块,这些执行块表示计算图中节点的子操作。进一步地,这些执行块是根据节点所涉及的硬件模块是否能够并行执行进行拆分的。例如,在图中示例中,节点A拆分成L(加载)、C(计算)和S(回存)三个执行块,节点B、C、D都类似地拆分。可以理解,加载操作涉及从外部存储电路加载数据至本地;计算操作涉及计算电路;回存操作涉及将计算结果存回到外部存储电路。从前面结合图3描述的深度学习加速器的存储架构可知,通过不同的访存接口或分配不同层级的存储电路,可以支持加载和回存操作的并行执行。因此,当所处理的数据相互不依赖时,这三个操作可以并行处理。
接着,在运行已编译计算图时,当诸如图结构和张量形状之类的动态信息确定时,可以利用编译时拆分的执行块来构建运行时计算图。由于在运行时,动态神经网络的动态特征可以确定,例如张量的形状、地址、控制流等,因此所构建的运行时计算图是确定的。具体地,如530所示,在运行计算图的加速器中引入了上下文存储电路532,其可以使用缓冲器来实现,因此也称为上下文缓冲器(Context Buffer),简称CB。该上下文存储电路用于在运行时存储已编译计算图中需要执行的执行块的信息。
例如,在图中示例中,假设在运行时根据动态信息对控制流的条件进行判断,确定将执行节点B这一分支,则节点A、B、D中各执行块的相关信息被存入到上下文存储电路上。通过这种方式,本披露实施例的动态流水系统将动态图转换为保存在上下文存储电路中的确定性图。
继而,调度器531可以基于节点A、B、D所构建的确定性图来进行调度,从而实现流水处理。如图中533所示,调度器可以调度实现三条流水线并行处理。例如,在同一时间,可以加载D、计算B、回存A。由此,通过调度上下文存储电路532中这些确定要执行的执行块,调度器可以实现高效流水线,而不受动态信息的影响。
从上文对动态流水系统的描述可知,本披露实施例一方面提供了一种改进的加速器,其引入了上下文存储电路来维护运行时计算图的结构信息;另一方面提供了一种编译器或编程接口,其在编译时将计算图拆分成多个执行块,以供运行时以执行块为单位构建运行时计算图;再一方面还提供了一种调度器,其在运行时基于上下文存储电路中保存的确定性计算图来调度各个操作,以实现并行流水运算。以下将针对各个方面进行详细描述。
示例性加速器
图6示出了根据本披露实施例的加速器的示意性简化结构框图。
如图所示,加速器600包括并行运算电路610、上下文存储电路620和调度电路630。可以理解,在图6的加速器600中,仅示出了与本实施例有关的组成元素。因此,对于本领域普通技术人员而言显而易见的是:加速器600还可以包括与图6中所示的组成元素不同的常见组成元素,比如:控制电路。
并行运算电路610用于并行执行运算。并行运算电路例如可以包括多个能够并行执行运算的计算单元,包括但不限于向量运算单元、执行矩阵乘的张量运算单元、具备直接执行卷积运算的运算单元、或者集成了img2col(图像到行列)和gemm(通用矩阵乘)的卷积计算单元。并行运算电路例如可以是图3所示的计算模块324。
上下文存储电路620用于在运行时存储已编译计算图中确定需要执行的执行块的信息。在运行时,响应于执行块的预备执行,可以根据确定的动态信息来确定已编译计算图中哪些执行块将要被执行,从而将相应的执行块的信息存储到上下文存储电路620中。
执行块的信息可以包括上下文信息和程序计数器。上下文信息是指算子的所有执行信息,其可以包括但不限于数据源地址、数据目的地址、张量数据形状和计算配置等。对于卷积算子而言,计算配置例如涉及卷积参数,诸如卷积核的尺寸参数、卷积步长、卷积填充等。
程序计数器(PC)是对组成已编译计算图的每条机器指令的标识,其指向内存中的某条机器语言指令,以及含有该条指令的地址。上下文存储电路基于程序计数器来维护执行块的信息,从而方便后续调度器630对执行块的调度。
为了提高实施效率,上下文存储电路620可以是加速器600的片上存储电路,尤其是全局缓存电路,从而相比于使用寄存器来实现,可以提供更大的存储空间和低的访问延迟。上下文存储电路620可以降低维护上下文的复杂度。在优化和执行动态神经网络期间,大量的上下文信息在运行时是变量。若使用寄存器,由于寄存器资源有限,则需要频繁的寄存器溢出(spill)和载入(refill)操作来维护这么大量的上下文信息。寄存器分配是一个NP完备问题,不适当的寄存器分配可能阻塞流水线。因此,相比于有限的寄存器资源,上下文存储电路620提供了更大、更充足的存储空间以用于存储这些上下文。
上下文存储电路620可以是额外配置的缓冲器,也可以是加速器600上现有的存储电路上划分出的存储区域,例如图3的共享存储模块315,或者本地存储模块323中的NRAM或WRAM等,本披露实施例在此方面没有限制。
调度电路630则用于根据依赖关系,基于上下文存储电路620中存储的执行块所构建的确定性的运行时计算图,调度这些执行块在并行运算电路610上执行,以实现流水处理。
具体地,依赖关系可以包括硬件模块依赖关系和/或数据依赖关系。硬件模块依赖关系表示执行操作的多个硬件模块是否能够并行处理。例如,前面提到的L(加载)、C(计算)和回存(S)所涉及的硬件模块可以并行处理。数据依赖关系,则是指数据之间是否存在读写冲突。例如,第二执行块需要使用第一执行块的运算结果,则第一执行块的运算结果需要先写入指定位置,在被第二执行块读出,这样才能保证运行正确。
因此,在一些实施例中,调度电路630根据执行各个执行块的硬件模块依赖关系和/或数据依赖关系,确定运行时计算图的同一节点内和/或不同节点间能够并行执行的执行块,从而基于这些并行性,可以实现流水线处理。
如前面所提到,上下文存储电路620基于程序计数器来维护执行块的信息。因此,调度电路630在进行调度时,可以根据上下文存储电路620中存储的程序计数器来调用对应的执行块。被调用的执行块在执行时从上下文存储电路620加载对应的上下文信息以执行对应操作。
由此,基于本实施例提供的包括上下文存储电路620的加速器,可以在运行时基于构建的确定性计算图来调度流水处理,提高硬件利用率和并行度,从而提高运算效率。
示例性编译器/编程接口
流水线的调度需要区分哪些执行块或代码可以在不同硬件模块上并行执行,这对于动态神经网络而言在运行时是非常耗时的。为了克服这一问题,本披露实施例的动态流水系统通过在编译时,将计算图中的节点拆分为若干执行块,从而显式地指明硬件模块与代码段之间的映射,以利于运行时的调度。
图7示出了根据本披露实施例的计算图编译方法的示例性流程图。
如图所示,在步骤710中,将计算图中的各个节点拆分成若干执行块以生成已编译计算图,每个执行块表示对应节点的子操作。拆分出的这些执行块可以用于在运行已编译计算图时,以执行块为单位构建运行时计算图并进行调度。
在一些实施例中,拆分步骤710可以包括如下子步骤711:将各个节点根据所涉及的硬件模块是否能够并行执行来拆分成若干执行块。
可选地或附加地,拆分步骤710还可以包括子步骤712:。
图8示出了根据本披露实施例的一个计算图拆分示例。
如图所示,根据执行代码所需的硬件模块,可以对应地拆分为L(加载)执行块810、C(计算)执行块820和S(回存)执行块830。
进一步地,可以将在同一硬件模块中执行的相邻代码划分至同一执行块。在图中示例中,三条相邻的分别加载偏置、权值和输入的向量加载指令LoadV由同一硬件模块执行,都是从片外存储电路加载数据至片上存储电路,因此都划分到L执行块810;三条相邻的分别执行卷积Conv、向量加AddV和激活Active的指令都由计算模块执行,因此都划分到C执行块820。S执行块830则只包含一条回存指令,用于将运算结果回存到片外存储电路上。
通过这种执行块的拆分,运行时的调度器只需要调度不同的执行块,这极大地简化了调度处理,减小了运行时调度开销。
另一方面,为了维护执行块的上下文信息,原始程序需要进行适当改写以在运行时保存上下文信息。
图9示出了根据本披露实施例的一个示例性改写的程序,此程序示出了保存L执行块的上下文信息。
如图所示,当L执行块准备就绪时,所涉及的所有变量都被存储到上下文存储电路CB中。这些变量例如包括源地址、目的地址和每个数据的尺寸。源地址例如是片外存储电路DRAM上的地址,例如程序中的&in_ddr,&bias_ddr,&weight_ddr;目的地址则是片上存储电路的地址,例如程序中的&in,&bias,&weight。数据尺寸例如程序中的in_size,bias_size,weight_size。此外,L执行块的程序计数器PC也保存到CB中。
从上述示例性改写程序可以看出,还可以通过编程接口来定制需要在运行时在上下文存储电路中存储的执行块的相关信息和/或其存储格式。由此,上下文存储电路也可以更为灵活地实现。无论定制为何种形式,诸如具体存储哪些参数,参数格式等,只需要在存入和读出上下文信息上保持一致即可。
此外,本披露实施例的动态流水系统还提供了编程接口,以方便定义各个执行块,包括定义执行块的块名称、执行动作等。
图10示出了根据本披露实施例的一个示例性编程接口,此示例示出了L执行块的定义。
如图所示,此处在对执行块定义时,增加了一个关键字:块名称,用以指示执行该执行块所涉及的硬件模块。在此示例中,L执行块的块名称为IO,表示L执行块涉及输入输出硬件模块。
此外,执行块的执行动作或行为还被定义为首先从上下文存储电路CB加载对应的上下文信息,然后基于这些上下文信息来执行该执行块对应的操作。
例如,在图中示例中,首先从CB读取上下文信息,包括目的地址dst、源地址src、数据尺寸size等。接着,执行L执行块的动作,也即执行从片外存储电路DRAM的地址src读取size所指示大小的数据,存入片上存储电路的地址dst中。
由上可知,本披露实施例提供的编译器将运算程序分解为两部分:一部分是维护上下文信息和PC,这方便后续进行灵活的执行块调用;另一部分是定义不同的执行块,并明确指示执行块的块名称,由此可以指示执行块之间的硬件模块依赖关系。基于这些预先设置,运行时的调度器可以以执行块为基本单元来实现动态流水线,而且只需花费很小的运行时开销。
示例性调度流程
图11示出了根据本披露实施例的计算图的运行时调度方法的示例性流程图。从上文描述可知,基于编译时对计算图的拆分以及额外提供的上下文存储电路,即使针对动态神经网络,加速器在运行时也可以实现流水线处理。
如图所示,在步骤1110中,在运行已编译计算图时,响应于计算图中执行块的预备执行,存储该计算图中需要执行的执行块的信息以构建运行时计算图。
当动态神经网络中诸如图结构和张量形状之类的动态信息确定时,可以确定该已编译计算图中的哪些节点需要执行,哪些不需要执行。此时,可以将其中确定需要执行的节点的执行块的信息存储到专门提供的上下文存储电路中。由此,所存储的这些执行块可以构成确定性的运行时计算图。所存储的执行块的信息可以包括上下文信息和程序计数器,具体细节参考前文描述,此处不再重复。
接着,在步骤1120中,根据依赖关系,基于该确定性的运行时计算图对存储的执行块进行调度,以实现流水运算。
具体地,可以根据执行各个执行块的硬件模块依赖关系和/或数据依赖关系,确定该运行时计算图的同一节点内和/或不同节点间能够并行执行的执行块,从而通过在不同硬件模块上并行执行来实现流水处理。
在调度时,可以根据存储的程序计数器来调用对应的执行块。被调用的执行块在执行时,根据其定义(参见前文编译器部分的描述),首先从上下文存储电路加载对应的上下文信息,接着根据这些上下文信息来执行对应的操作。
图12示出了根据本披露实施例的运行时调度方案的示例性执行过程。
图中(a)示出了含有控制流的动态计算图在编译时所有节点均被拆分为若干执行块并生成对应的已编译计算图。所有相关节点的执行块都根据编程接口在编译时已定义。图(a)中的节点A、B、C、D的执行块都已预先定义。
图中(b)-(d)示出了运行时的动态调度过程。在运行时,根据确定的动态信息,仅将需要执行的节点的执行块信息保存到上下文存储电路CB中。例如,当图中计算图的控制流的条件判断为真时,则节点A、B和D的执行块将被存储到CB中。由此,在CB中可以构建确定性的运行时计算图。
具体地,如(b)所示,响应于节点A预备执行,将确定要执行的节点A的各个执行块的信息存入上下文存储电路CB中。在此示例中,节点A不仅根据执行的硬件模块拆分为L、C和S执行块,而且根据硬件单次最大处理量,对数据进行拆分,从而可以存在对应的多个L、C和S执行块。例如,数据拆分为a1、a2、a3时,对应的执行块有La1、Ca1、Sa1、La2、Ca2、Sa2、La3、Ca3和Sa3。此时,调度器可以根据依赖关系,对CB中存储的执行块进行调度。
如(c)所示,响应于节点B预备执行,将确定要执行的节点B的各个执行块的信息存入CB中。在此示例中,节点B同样根据执行的硬件模块和硬件单次最大处理量等拆分为多个L、C和S执行块。例如,拆分为执行块Lb1、Cb1、Sb1、Lb2、Cb2、Sb2、Lb3等等。此时,调度器可以根据依赖关系,对CB中存储的执行块进行调度。
图(d)的过程与前面类似,此处不再详述。
在具体调度时,可以涉及同一节点内和/或不同节点间的调度。以图12中的(b)图为例,其涉及节点A内的调度,图中Lai表示针对第i个数据块时节点A的加载执行块,Cai表示针对第i个数据块时节点A的计算执行块。由于硬件模块依赖关系,La2应当在La1之后执行,因为都涉及同一硬件模块;而由于数据依赖关系,Ca1也应当在La1之后执行。但是,La2和Ca1可以并行执行。因此在(b)中,La2和Ca1可以被同时调度执行。
图12中的(c)图则示出了不同节点间的调度。当节点B准备就绪时,其执行块也被存储到CB中。同时,CB中还有剩余未处理的节点A的执行块,也即San-1,Can和San。在此场景下,调度器可以调用Lb1、San-1和Can并行执行。
由此可见,通过本披露实施例提供的动态流水系统,无需添加冗余的气泡来中断流水,因此可以实现高效的流水线处理。
上面结合各种附图描述了本披露实施例的动态流水方案。实验结果表明,本披露实施例的动态流水方案对于动态神经网络能够获得显著的性能提升,例如其在动态神经网络上可以获得1.7倍的速度提升。此外,实验结果还表明,本披露实施例的动态流水方案同样可以应用于静态神经网络,其由于上下文存储电路所引入的开销几乎可忽略。例如,其在静态神经网络上能够维持超过96%的性能。因此,本披露实施例的动态流水方案不仅适用于动态神经网络,也可以用于静态神经网络,还可以适用于动态神经网络与静态神经网络均存在的混合场景。前文以动态神经网络为例进行的描述同样适用于静态神经网络或混合场景。
本披露一些实施例还提供了包含上述加速器和/或编译器的芯片和板卡,其可以包含前面描述的对应特征,此处不再重复。
根据不同的应用场景,本披露的电子设备或装置可以包括服务器、云端服务器、服务器计算簇、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、PC设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。本披露的电子设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本披露的电子设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本披露方案的算力高的电子设备或装置可以应用于云端设备(例如云端服务器),而功耗小的电子设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
需要说明的是,为了简明的目的,本披露将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本披露的方案并不受所描述的动作的顺序限制。因此,依据本披露的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本披露所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本披露某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本披露对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本披露某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
在具体实现方面,基于本披露的公开和教导,本领域技术人员可以理解本披露所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行拆分,而实际实现时也可以有另外的拆分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
在本披露中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本披露实施例所述方案的目的。另外,在一些场景中,本披露实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如中央处理器、GPU、FPGA、DSP和ASIC等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(Resistive Random Access Memory,RRAM)、动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)、静态随机存取存储器(Static Random Access Memory,SRAM)、增强动态随机存取存储器(Enhanced Dynamic Random Access Memory,EDRAM)、高带宽存储器(High Bandwidth Memory,HBM)、混合存储器立方体(Hybrid Memory Cube,HMC)、ROM和RAM等。
以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本披露的方法及其核心思想;同时,对于本领域的一般技术人员,依据本披露的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本披露的限制。
Claims (32)
1.一种计算图的运行时调度方法,其中所述计算图是已编译计算图,并且所述已编译计算图中包括多个执行块,所述执行块表示所述计算图中各个节点的子操作,所述方法包括:
在运行所述已编译计算图时,响应于执行块的预备执行,存储所述已编译计算图中需要执行的执行块的信息以构建运行时计算图;以及
根据依赖关系,基于所述运行时计算图对存储的所述执行块进行调度,以实现流水运算。
2.根据权利要求1所述的方法,其中所述调度包括:
根据执行所述执行块的硬件模块依赖关系和/或数据依赖关系,确定所述运行时计算图的同一节点内和/或不同节点间能够并行执行的执行块。
3.根据权利要求1-2任一所述的方法,其中所述存储包括:
存储所述需要执行的执行块的上下文信息和程序计数器。
4.根据权利要求3所述的方法,其中所述上下文信息包括以下至少一项:数据源地址、数据目的地址、张量数据形状和计算配置。
5.根据权利要求3-4任一所述的方法,其中所述调度包括:
根据存储的所述程序计数器,调用对应的执行块。
6.根据权利要求5所述的方法,还包括:
被调用的执行块在执行时,加载存储的所述上下文信息以执行对应操作。
7.根据权利要求1-6任一所述的方法,其中所述已编译计算图中的各个节点是在编译时按如下方式被拆分成若干执行块:
将各个节点根据所涉及的硬件模块是否能够并行执行进行拆分。
8.根据权利要求7所述的方法,其中所述已编译计算图中的各个节点是在编译时进一步按如下方式被拆分成若干执行块:
将在同一硬件模块中执行的相邻代码划分至同一执行块。
9.根据权利要求1-8任一所述的方法,其中每个所述执行块具有块名称,用以指示执行当前执行块所涉及的硬件模块,以在调度时指示硬件模块依赖关系。
10.根据权利要求1-9任一所述的方法,其中,所述已编译计算图是动态计算图,所述运行时计算图是确定性计算图。
11.一种计算图的编译方法,包括:
将所述计算图中的各个节点拆分成若干执行块以生成已编译计算图,每个执行块表示对应节点的子操作,所述执行块用于在运行所述已编译计算图时,以所述执行块为单位构建运行时计算图并进行调度。
12.根据权利要求11所述的方法,还包括:
将各个节点根据所涉及的硬件模块是否能够并行执行来拆分成若干执行块。
13.根据权利要求12所述的方法,还包括:
将在同一硬件模块中执行的相邻代码划分至同一执行块。
14.根据权利要求11-13任一所述的方法,还包括:
为每个所述执行块定义块名称,用以指示执行当前执行块所涉及的硬件模块。
15.根据权利要求11-14任一所述的方法,还包括:
定制需要在运行时存储的执行块的相关信息和/或其存储格式。
16.根据权利要求15所述的方法,其中所述执行块的相关信息包括执行块的上下文信息和程序计数器。
17.根据权利要求16所述的方法,其中所述上下文信息包括以下至少一项:
数据源地址、数据目的地址、张量数据形状和计算配置。
18.根据权利要求16-17任一所述的方法,还包括:
将所述执行块的行为定义为首先加载存储的上下文信息,然后基于所述上下文信息执行所述执行块对应的操作。
19.一种加速器,包括:
并行运算电路,用于并行执行运算;
上下文存储电路,用于在运行已编译计算图时,响应于执行块的预备执行,存储所述已编译计算图中需要执行的执行块的信息以构建运行时计算图,其中所述已编译计算图中包括多个执行块,所述执行块表示所述计算图中各个节点的子操作;以及
调度电路,用于根据依赖关系,基于所述运行时计算图调度存储的所述执行块以控制所述并行运算电路实现流水运算。
20.根据权利要求19所述的加速器,其中所述执行块的信息包括上下文信息和程序计数器。
21.根据权利要求20所述的加速器,其中所述上下文信息包括以下至少一项:数据源地址、数据目的地址、张量数据形状和计算配置。
22.根据权利要求19-21任一所述的加速器,其中所述调度电路进一步用于:
根据执行所述执行块的硬件模块依赖关系和/或数据依赖关系,确定所述运行时计算图的同一节点内和/或不同节点间能够并行执行的执行块。
23.根据权利要求20-22任一所述的加速器,其中所述调度电路进一步用于:
根据存储的所述程序计数器,调用对应的执行块。
24.根据权利要求23所述的加速器,其中被调用的执行块在执行时从所述上下文存储电路加载对应的所述上下文信息以执行对应操作。
25.根据权利要求19-24任一所述的加速器,其中所述已编译计算图中的各个节点是在编译时按如下方式被拆分成若干执行块:
将各个节点根据所涉及的硬件模块是否能够并行执行进行拆分。
26.根据权利要求25所述的加速器,其中所述已编译计算图中的各个节点是在编译时进一步按如下方式被拆分成若干执行块:
将在同一硬件模块中执行的相邻代码划分至同一执行块。
27.根据权利要求19-26任一所述的加速器,其中每个所述执行块具有块名称,用以指示执行当前执行块所涉及的硬件模块,以向所述调度电路指示硬件模块依赖关系。
28.根据权利要求19-27任一所述的加速器,其中所述上下文存储电路是所述加速器的片上存储电路。
29.根据权利要求19-28任一所述的加速器,其中所述已编译计算图是动态计算图,所述运行时计算图是确定性计算图。
30.一种编译器,包括:
处理电路,配置用于执行根据权利要求11-18任一所述的编译方法。
31.一种芯片,包括根据权利要求1-14任一所述的加速器和/或根据权利要求30所述的编译器。
32.一种板卡,包括根据权利要求31所述的芯片。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111291728.0A CN114035916A (zh) | 2021-11-01 | 2021-11-01 | 计算图的编译、调度方法及相关产品 |
PCT/CN2022/100305 WO2023071238A1 (zh) | 2021-11-01 | 2022-06-22 | 计算图的编译、调度方法及相关产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111291728.0A CN114035916A (zh) | 2021-11-01 | 2021-11-01 | 计算图的编译、调度方法及相关产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114035916A true CN114035916A (zh) | 2022-02-11 |
Family
ID=80142690
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111291728.0A Pending CN114035916A (zh) | 2021-11-01 | 2021-11-01 | 计算图的编译、调度方法及相关产品 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114035916A (zh) |
WO (1) | WO2023071238A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115268936A (zh) * | 2022-09-27 | 2022-11-01 | 之江实验室 | 一种用于计算图编译的优化方法及装置 |
WO2023071238A1 (zh) * | 2021-11-01 | 2023-05-04 | 寒武纪行歌(南京)科技有限公司 | 计算图的编译、调度方法及相关产品 |
EP4404102A1 (en) * | 2022-12-13 | 2024-07-24 | Imagination Technologies Limited | Variable input shapes at runtime |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116483482B (zh) * | 2023-05-19 | 2024-03-01 | 北京百度网讯科技有限公司 | 深度学习任务处理方法、系统、装置、设备及介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9652286B2 (en) * | 2014-03-21 | 2017-05-16 | Oracle International Corporation | Runtime handling of task dependencies using dependence graphs |
CN110321999B (zh) * | 2018-03-30 | 2021-10-01 | 赛灵思电子科技(北京)有限公司 | 神经网络计算图优化方法 |
CN111246262A (zh) * | 2020-01-09 | 2020-06-05 | 西安万像电子科技有限公司 | 编码调度控制方法及调度控制器 |
CN114035916A (zh) * | 2021-11-01 | 2022-02-11 | 寒武纪行歌(南京)科技有限公司 | 计算图的编译、调度方法及相关产品 |
-
2021
- 2021-11-01 CN CN202111291728.0A patent/CN114035916A/zh active Pending
-
2022
- 2022-06-22 WO PCT/CN2022/100305 patent/WO2023071238A1/zh unknown
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023071238A1 (zh) * | 2021-11-01 | 2023-05-04 | 寒武纪行歌(南京)科技有限公司 | 计算图的编译、调度方法及相关产品 |
CN115268936A (zh) * | 2022-09-27 | 2022-11-01 | 之江实验室 | 一种用于计算图编译的优化方法及装置 |
EP4404102A1 (en) * | 2022-12-13 | 2024-07-24 | Imagination Technologies Limited | Variable input shapes at runtime |
Also Published As
Publication number | Publication date |
---|---|
WO2023071238A1 (zh) | 2023-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114035916A (zh) | 计算图的编译、调度方法及相关产品 | |
US20230023303A1 (en) | Machine learning network implemented by statically scheduled instructions | |
CN112381220B (zh) | 一种神经网络张量处理器 | |
CN112799726B (zh) | 数据处理装置、方法及相关产品 | |
CN112580792B (zh) | 一种神经网络多核张量处理器 | |
CN112465133B (zh) | 控制流多核并行方法、计算机设备和存储介质 | |
WO2024093292A1 (zh) | 计算图的算子自动融合方法及相关产品 | |
WO2024149112A1 (zh) | 卷积算子的编译方法及相关产品 | |
CN113469336A (zh) | 优化神经网络模型的编译方法、执行方法及相关产品 | |
WO2023030507A1 (zh) | 编译优化方法、装置、计算机设备以及存储介质 | |
CN113469326B (zh) | 在神经网络模型中执行剪枝优化的集成电路装置及板卡 | |
CN115840894A (zh) | 一种用于处理多维张量数据的方法及其相关产品 | |
CN112948001A (zh) | 设定张量硬件配置的方法、可读存储介质及装置 | |
CN113469328B (zh) | 执行转数穿过的装置、板卡、方法及可读存储介质 | |
CN113791996B (zh) | 集成电路装置、电子设备、板卡和计算方法 | |
CN113742266B (zh) | 集成电路装置、电子设备、板卡和计算方法 | |
WO2022111013A1 (zh) | 支援多种访问模式的设备、方法及可读存储介质 | |
WO2023016382A1 (zh) | 用于片上系统的方法及其相关产品 | |
CN115543328A (zh) | 对运行于人工智能芯片上的神经网络模型进行转换的编译方法及其相关产品 | |
CN114298292A (zh) | 获取算子数据和离线模型操作的设备及方法 | |
CN117075902A (zh) | 基于张量的编译方法、设备及其计算机可读存储介质 | |
CN117075903A (zh) | 基于张量的编译方法、设备及其计算机可读存储介质 | |
CN118363754A (zh) | 单个算子在多核处理器上的拆分方法及相关产品 | |
CN115545180A (zh) | 对运行于人工智能芯片上的神经网络模型进行优化的编译方法及其相关产品 | |
CN116400926A (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 |