CN113939830A - 神经网络模型的高效处理 - Google Patents
神经网络模型的高效处理 Download PDFInfo
- Publication number
- CN113939830A CN113939830A CN202080041079.6A CN202080041079A CN113939830A CN 113939830 A CN113939830 A CN 113939830A CN 202080041079 A CN202080041079 A CN 202080041079A CN 113939830 A CN113939830 A CN 113939830A
- Authority
- CN
- China
- Prior art keywords
- neural network
- sequence
- model
- hardware accelerator
- models
- 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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/10—Interfaces, programming languages or software development kits, e.g. for simulating neural networks
- G06N3/105—Shells for specifying net layout
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- 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
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
-
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44557—Code layout in executable memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/70—Arrangements for image or video recognition or understanding using pattern recognition or machine learning
- G06V10/82—Arrangements for image or video recognition or understanding using pattern recognition or machine learning using neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Molecular Biology (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Medical Informatics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Databases & Information Systems (AREA)
- Multimedia (AREA)
- Neurology (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
描述了一种计算装置的编译器,该编译器标识被计算装置的应用频繁调用的神经网络模型的序列,按照该序列编译模型,并且仅当来自先前调用的另一相同序列的相同编译后的模型并非在SRAM中已经存在时,才将编译后的模型加载到硬件加速器的静态随机存取存储器(SRAM)。这样防止了不必要地将编译后的模型重新加载到SRAM中,从而提高运行速度并节省计算能量。
Description
技术领域
本公开涉及神经网络模型在硬件加速器上的高效处理。
背景技术
各种移动装置应用(例如,相机应用、社交媒体应用等)可能都需要在硬件加速器上使用对应的神经网络模型。通常,硬件加速器的架构允许在其存储器中存储单个神经网络模型的参数,并且因此硬件加速器的编译器一次只能编译一个神经网络模型。当需要执行另一神经网络模型(例如,另一应用的模型)时,该神经网络模型的参数替换先前神经网络模型的参数。因此,当需要通过硬件加速器来处理先前的神经网络模型时,将这个模型的参数再次加载到硬件加速器的一个或多个存储器中。这样将参数重新加载到存储器中会消耗大量存储器和电力,从而导致延迟。
发明内容
描述了一种计算装置的编译器,该编译器标识被计算装置的应用频繁调用的神经网络模型的序列,按照该序列编译模型,并且仅当来自先前调用的另一相同序列的相同编译后的模型并非在SRAM中已经存在时,才将编译后的模型加载到硬件加速器的静态随机存取存储器(SRAM)。
在一个方面中,描述了一种通过编译器进行的方法。编译器能够标识第一神经网络模型集,该第一神经网络模型集在过去的预设时间量中已经在计算装置的硬件加速器上被执行超过阈值次数。编译器能够标识第一模型集在硬件加速器上被执行的序列。第一神经网络模型集中的每个神经网络模型都能够被编译,以用于由硬件加速器执行。对于第一神经网络模型集中的每个神经网络模型,编译器能够将编译后的模型输出到硬件加速器以用于根据序列存储在硬件加速器的一个或多个存储器中。根据序列对第一神经网络模型集中的每个神经网络模型的编译后的模型的存储当第一神经网络模型集要在所述硬件加速器上再次被执行时,防止需要将第一神经网络模型集的序列的编译后的结果再编译重新加载到一个或多个存储器中。
在一些实施方式中,该方法还能够包括以下一个或多个方面,这些方面能够另外地单独地被实现或通过任何可行的组合被实现。对于第一神经网络模型集中的每个神经网络模型,能够接收包括神经网络模型参数的数据结构。该编译能够进一步包括编译第一神经网络模型集中的每个神经网络模型的数据结构,以生成第一神经网络模型集中的每个神经网络模型的编译后的数据结构,其中该编译后的数据结构是编译后的模型。
能够将相同的第一散列指派给序列中的每个编译后的模型。能够将第一散列连同序列中的每个编译后的模型一起输出到硬件加速器,以用于存储在硬件加速器的一个或多个存储器中。能够将相同的第二散列指派给模型的第二序列中的每个编译后的模型。第二序列能够在第一序列之后。当第二序列与第一序列相同时,第二散列能够与第一散列相同。当第二序列与第一序列不同时,第二散列能够与第一散列不同。如果第二散列与第一散列不同,则硬件加速器被配置为利用一个或多个存储器中的第二序列中的每个编译后的模型替换一个或多个存储器中的第一序列中的每个编译后的模型。如果第二散列与第一散列相同,则硬件加速器被配置为防止从一个或多个存储器中擦除第一序列中的每个编译后的模型。
第一神经网络模型集中的每个神经网络模型在过去已经在硬件加速器上被处理预设次数(例如,5次)以上。编译器编译第一神经网络模型集,同时硬件加速器同时执行其他一个或多个神经网络模型的神经网络计算。能够在预设时间间隔后更新第一模型集的标识和序列的标识。编译器能够响应于第一神经网络模型集的编译故障,放弃更新达预设时间。该放弃能够包括响应于第一神经网络模型集的编译故障,放弃更新达7500毫秒。
第一神经网络模型集的编译能够包括确定第一神经网络模型集中的每个神经网络模型具有与编译兼容的特定大小。第一神经网络模型集的编译能够包括在任何时候只编译单个神经网络模型。该序列能够包括面部识别神经网络模型以及要在处理面部识别神经网络模型之后被处理的一个或多个从属神经网络模型。
在另一方面中,描述了一种包括编译器和硬件加速器的***。编译器能够标识第一神经网络模型集,该第一神经网络模型集在过去的预设时间量中已经在计算装置的硬件加速器上被执行超过阈值次数。编译器能够标识第一模型集在硬件加速器上被执行的序列。编译器能够编译第一神经网络模型集中的每个神经网络模型,以用于由硬件加速器执行。对于第一神经网络模型集中的每个神经网络模型,编译器能够将编译后的模型输出到硬件加速器,以用于根据序列存储在硬件加速器的一个或多个存储器中。硬件加速器能够包括一个或多个存储器,以用于根据序列存储第一神经网络模型集中的每个神经网络模型的编译后的模型。在一个或多个存储器中根据编译后的模型的序列对第一神经网络模型集中的每个神经网络模型的存储能够当第一神经网络模型集要在硬件加速器上再次被执行时,防止需要将第一神经网络模型集的序列的编译结果再编译重新加载到一个或多个存储器中。
在某些实施方式中,能够另外单独实现或通过任何可行的组合来实现以下的一个或多个。一个或多个存储器能够是静态随机存取存储器(SRAM)。硬件加速器还能够包括多个计算单元,该多个计算单元被配置为处理第一神经网络模型集。多个计算单元中的每个计算单元能够包括至少一个处理器和存储器。多个计算单元能够经由至少一个总线串行地耦合。第一神经网络模型集能够包括至少一个面部识别神经网络模型。响应于控制器从计算装置接收执行至少一个面部识别神经网络模型的指令,至少一个面部识别神经网络模型能够被激活。
计算装置能够包括应用和应用编程接口(API)。应用能够生成经由API发送的指令。应用能够是相机应用。API能够是神经网络API(NNAPI)。计算装置能够是Android装置。
本文中所描述的主题提供许多优点。例如,在硬件加速器的SRAM中同时存储序列中的多个编译后的模型,防止之前也被调用的相同序列的相同、先前加载的编译后的模型从SRAM中冗余删除并重新加载到SRAM中。SRAM的不必要清理以及将编译后的数据重新加载到SRAM中的这种避免能够显著减少延迟并提高处理速度。此外,在SRAM中存储参数以及从SRAM中检索这些参数与在主存储器—即,动态随机存取存储器(DRAM)中存储以及从主存储器中检索相比要明显更快,且更节能。另外,在编译处理故障这种未必但是可能出现的事件中,编译器能够通过将频繁调用的神经网络模型或其序列的识别暂停达一段时间来防止重复的编译故障。此外,仅当频繁出现的神经网络模型中的每个神经网络模型具有小于预设量(例如,5兆字节)的大小时,编译器才会尝试编译它们,这能够增加(例如,最大化)编译后的模型同时被存储在SRAM中以用于其的模型的数量。
本文中所描述的主题的一个或多个变化的细节在附图和说明书中给出。根据说明书、附图和权利要求,本文所述主题的其他特征和优点将显而易见。
附图说明
图1图示一种具有硬件加速器的装置,该硬件加速器以减少的延迟处理神经网络模型。
图2图示一种通过编译器执行的方法,以防止在硬件加速器的静态随机存取存储器(SRAM)中的编译后的数据的冗余清理和重新加载。
图3图示模型的两个不同序列,数据结构连同对应的散列一起为其被编译,并对其进行比较,以确定是否需要清理SRAM并利用所编译的数据重新加载SRAM。
图4图示通过硬件加速器进行的步骤,以将编译后的数据存储在SRAM中,并响应于确定是否需要清理SRAM中现有的编译后的数据以及是否需要在SRAM中重新加载新的编译后的数据来进行动作。
图5图示硬件加速器的多个方面,该硬件加速器包括用于存储编译后的数据的SRAM,该编译后的数据包括用于处理神经网络模型的参数。
各个附图中相同的附图标记表示相同的元件。
具体实施方式
图1图示具有硬件加速器104的计算装置102,硬件加速器104以减少的延迟(例如,低延迟)处理神经网络模型。计算装置102能够是移动装置,诸如电话、平板电脑、平板电脑、笔记本电脑和/或任何其他移动装置。虽然将计算装置102描述为移动装置,但是在一些实施方式中,计算装置102能够是台式计算机或计算机集群或计算机网络。硬件加速器104指的是专门制造以执行某些功能的计算机硬件,与在通用处理器上运行的软件相比效率更高。例如,硬件加速器104能够使用专用硬件,例如,矩阵乘法,来执行指定操作,专用硬件允许硬件加速器比通用处理器更高效地执行深度前馈神经网络,诸如卷积神经网络(CNN)。为了使硬件加速器104执行神经网络模型,专门为加速器104编译神经网络模型。
硬件加速器104能够是张量处理单元(TPU)。虽然描述了TPU,但是在其他实施方式中,硬件加速器104能够是任何其他硬件加速器104,诸如图形处理单元(GPU)、数字信号处理器(DSP)、现场可编程模拟阵列(FPAA)、声卡、网络处理器、密码加速器、人工智能加速器、物理处理单元(PPU)、数据压缩加速器、片上网络、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、复杂可编程逻辑装置和/或片上***。
计算装置102进一步包括“N”个软件应用106,诸如相机应用、社交网络应用和任何其他软件应用。N能够是任何整数,诸如5、10、20、100或任何其他整数。为了这些应用106与硬件加速器106通信(例如,向硬件加速器106提供输入并从硬件加速器106接收输出),移动计算装置102进一步采用应用编程接口(API)108、处理器110和处理器112,API 108输出响应于应用106的执行要被处理的特定数据结构,处理器110用于对特定数据结构执行量化(也称为量化器110),并且处理器112实现被配置为使用量化数据结构的编译器。
API 108能够进行应用106与处理器110之间的通信。API 108能够是促进这种通信的通信协议(例如,通信的语法、语义和同步以及可能的错误恢复方法)。API 108能够是,例如,神经网络API(NN-API)。API 108能够允许应用106生成数据结构,数据结构包括构成响应于应用106的执行要被处理的神经网络模型的数学运算。例如,响应于通过相机应用106获取图像,API 108能够允许相机应用106生成数据结构(例如,TensorFlow数据结构)109,其指示构成在加速器上要被实现的面部识别模型的数学运算。数据结构109能够具有被表示为浮点数的参数数据(例如,神经网络的权重和输入数据),浮点数具有预设位数(例如,32位浮点数)。
处理器/量化器110能够从API 108(或者,在一些实施方式中从应用106)接收数据结构109,并将其转换为具有相同参数数据(例如,神经网络模型的权重和输入数据,如同在数据结构109中)的更小的数据结构(例如,TensorFlowLite数据结构)111,该参数数据被表示为具有较低预设位数的定点数(例如,8位定点数)。将数据结构109中的所有32位浮点数转换为数据结构111中最接近的8位定点数被称为量化。量化有利地使得数据结构更小,并因此使得通过硬件加速器104对数据进行的操作更快、计算强度更小。此外,虽然这些低位(例如,8位)表示可能不如数据结构109中对应的高位(例如,32位)表示精确,但是不显著地(即,不明显地)影响神经网络的推理精度。虽然本文将量化描述为发生在API调用期间,但是在一些实施方式中,能够在编译量化数据之前的任何时间执行量化,如下所述。此外,虽然将量化描述为量化器110自动接收数据并基于该数据执行量化的自动处理,但是在一些实施方式中,数据结构109中的至少一部分值已经被量化,例如,在外部***。
处理器112实现编译器114。编译器114将量化数据结构111编译成与硬件加速器104兼容的编译后的数据结构116。除了量化数据结构111之外,编译后的数据结构116能够包括机器级代码,该机器级代码包括要通过硬件加速器104被执行的低级指令。通常,编译器114能够在任何适当的操作***上被运行,例如,Android***或基于Debian的Linux***。
此外,虽然描述了量化数据的量化和编译,但是在一些实施方式中,因为量化可能不一定必要,所以不执行量化(例如,如果诸如GPU或TPU的硬件加速器104能够进行浮点操作,那么编译器114能够直接在浮点模型上工作而不需要量化)。
硬件加速器104能够执行各种神经网络计算,以基于编译后的数据结构116来处理神经网络模型(例如,面部识别模型)。每次硬件加速器104处理神经网络模型(例如,面部识别模型)时,硬件加速器104都需要访问所述神经网络模型的参数。为了这种访问,硬件加速器104包括一个或多个存储器—具体地,是静态随机访问存储器(SRAM)—其存储数据结构116,包括神经网络模型(例如,面部检测神经网络模型)的参数。参数被存储在SRAM中而不是计算装置102的主存储器中,因为SRAM允许通过硬件加速器104更快地访问其中存储的数据,从而提高处理速度和能量效率并减少延迟。
硬件加速器104上的SRAM具有有限的存储器空间(例如,最多8兆字节),能够存储模型的编译后的数据结构116(包括参数)。当单独地编译具有参数的数据结构时,编译器114为每个编译后的数据结构提供唯一的散列(例如,64位数)以用于唯一标识。当在运行时间执行神经网络模型时,硬件加速器将该散列与存储在SRAM中的先前编译的数据结构的散列进行比较。如果令牌匹配,则硬件加速器使用所存储的先前编译的数据结构,从而避免将编译后的数据结构116重新加载到SRAM中的需要。如果令牌不匹配,则硬件加速器104消除/擦除所存储的数据结构(即先前编译的数据结构),并且转而将编译后的数据结构116写入SRAM(即清理并重新加载SRAM),从而提高(例如,在一些实施方式中最大化)在SRAM中使用该有限存储器空间(例如,最多8兆字节)的效率。然而,硬件加速器104被配置为对应于单个散列存储数据(包括参数)。因此,当所有编译后的数据结构116具有不同的散列时,在每次通过编译器114单独编译之后,利用新的编译后的数据116将SRAM重新加载,这将导致延迟。
通过以下方式,由于在每次编译之后SRAM的这种重新加载导致的延迟和电力需求被编译器114显著地减少:
(1)标识执行频繁出现的神经网络模型的序列——例如,每次用户在计算装置102上使用相机应用106点击多个图像时,计算装置102可以调用和处理序列中的以下神经网络模型:(a)首先是用于检测每个图像中的面部的面部检测模型,(b)然后是用于检测每个图像中的方位的方位检测模型,(c)然后是用于检测每个图像中的模糊的模糊检测模型,(d)然后是用于基于(a)、(b)和(c)的检测来建议最佳图像的另一神经网络模型;
(2)一起编译该序列中神经网络模型的所有数据结构111,以生成多个编译后的数据结构116,其中每个编译后的数据结构116对应于该序列中相应神经网络模型的编译结果;以及
(3)将用于该序列中的模型的编译后的数据结构116输出到硬件加速器104,以用于根据一个或多个存储器(更具体地—是硬件加速器104的SRAM)中的序列进行存储。
无论何时再次调用模型集的相同的频繁出现的序列时(例如,响应于用户在计算装置102上再次使用相机应用106点击多个图像),硬件加速器104能够直接从SRAM快速访问编译后的数据结构116,从而避免清理(即消除/擦除)SRAM并利用相同的编译后的数据结构重新加载SRAM的需要。避免清理和重新加载SRAM能够有利地转换处理资源和电力,并提高处理速度,从而大幅减少延迟。
用于硬件加速器104的SRAM中的序列中的所有模型的编译后的数据结构116的同时存储被执行如下。每次编译器114将编译后的数据结构输出到硬件加速器104时,编译器114计算并发送单独的唯一散列(例如,64位数),以用于编译后的数据结构116的唯一标识。然而,在对于序列中的神经网络模型确定多个编译后的数据结构116时,编译器114分配单个散列(例如,64位数),以标识所有这些编译后的数据结构。例如,用于序列中的所有模型的编译后的数据结构116被指派相同的散列,并且用于不在该序列内的任何模型的编译后的数据结构将具有不同的散列。编译器114计算相同模型的相同散列,从而计算模型的相同序列的相同散列。因此,如果散列与先前为其在SRAM中存储编译后的数据结构的模型的散列相同,这指示当前模型序列与先前为其存储编译后的数据结构的先前序列相同,从而避免清理SRAM然后利用相同的编译后的数据结构重新加载SRAM的需要。对于清理SRAM然后不必要地重新加载SRAM的这种防止显著地减少延迟。
分配给每个模型的SRAM数量在编译时是固定的,并基于由编译器编译后的数据结构的顺序来确定优先级。例如,当序列中的两个模型A和B(其中A在B之前被调用)被编译并且对应的数据结构116被指派相同的散列时,首先将所需的尽可能多的SRAM空间分配给模型A的数据结构116,并且如果此后仍然有SRAM空间剩余,则将SRAM空间给予模型B的数据结构116。如果一部分模型数据结构116不能够适配SRAM,则转而其被存储在外部存储器(例如,计算装置102的主存储器)中并在运行时间从中被提取。如果整个模型不适配SRAM,则编译器114为加速器104生成适当的指令,以从动态随机存取存储器(DRAM)提取数据。通过这种方式最大限度地利用SRAM能够有利地提高(例如最大化)处理速度。
在一些实施方式中,如果若干模型被编译,有些模型可能没有在SRAM中被分配空间,因此这些模型必须从外部存储器(例如,计算装置102的主存储器)加载所有数据。从外部存储器加载与从SRAM加载相比更慢,但是当在频繁被调用的模型的序列中运行模型时,这仍然比每次运行任何模型时交换(即清理和重新加载)SRAM更快。如上所述,如果整个模型不适配SRAM,则编译器114生成加速器104执行的适当指令,以从动态随机存取存储器(DRAM)提取数据。注意,编译器114与加速器104之间的这种交互不同于通常的中央处理单元(CPU),其通常具有自动将最常用数据存储在SRAM中的硬件高速缓存。
编译器114能够继续编译神经网络模型的数据结构,而硬件加速器104同时执行其他一个或多个神经网络模型的神经网络计算。这种同步功能防止在编译活动期间神经网络模型的处理被编译器暂停,从而有利地提高速度和减少延迟。
编译器114能够在预设时间间隔(例如,1秒、30秒、1分钟、5分钟、10分钟、20分钟、30分钟、1小时、24小时、5天或任何其他合适的时间)之后更新第一模型集的标识和序列的标识(即,重新标识第一模型集并重新标识序列)。这种更新确保SRAM以最佳方式被使用以同时存储最相关模型的参数(即,当前或最近被确定为被最频繁调用的模型,而不是很久以前(例如,超过阈值时间之前)已经完成的这种确定)。编译器能够响应于第一神经网络模型集的编译故障,放弃更新达预设时间(例如,7500毫秒)。放弃达预设时间能够针对瞬态故障提供保护,否则瞬态故障可能触发连续编译循环,导致功耗显著增加。故障之后暂停联合编译达预设时间增加了活跃模型集将会变化的可能性,从而避免编译故障的再次发生。在某些实施方式中,预设时间能够具有其他值,诸如1秒、2秒、5秒、10秒、30秒、1分钟,或者能够避免编译故障再次发生的任何其他值。这种放弃能够节省编译资源,因为立即使用这些资源进行编译可能导致另一编译故障。
第一神经网络模型集的编译能够包括在编译之前确定要被编译的每个数据结构与编译器114兼容(例如,以兆字节为单位)。例如,编译器114可能不编译具有大于预设量(例如,5兆字节)的大小的数据结构,这样确保该模型的参数能够与其他神经网络模型的参数同时被存储在SRAM中。
图2图示通过编译器114执行的方法,以防止SRAM的冗余清理和重新加载。在步骤202,编译器114能够标识神经网络模型的频繁出现序列。模型的频繁出现序列能够是通过应用106在特定序列中一起被调用、在过去的预设时间量中被硬件加速器处理超过阈值次数的神经网络模型集。例如,用户可以在手机上频繁使用相机应用106点击多个图像(例如,超过阈值次数),并且在这种情况下,频繁出现的模型和对应的序列能够是:(a)首先是用于检测每个图像中的面部的面部检测模型,(b)然后是用于检测每个图像中的定向的定向检测模型,(c)然后是用于检测每个图像中的模糊的模糊检测模型,(d)然后是用于基于(a)、(b)和(c)的检测来建议最佳图像的另一神经网络模型。为了使序列符合频繁出现序列的条件,需要重复序列的阈值次数能够是5次,在其他实施方式中能够是4次、6次、10次、15次、20次或任何其他整数(大于1)。可以考虑用于该确定的过去预设时间量可以从将硬件加速器104被部署为对于对应的应用106进行神经网络计算的时间开始。在另一实施方式中,这种过去预设时间量可以是1分钟、5分钟、10分钟、20分钟、30分钟、1小时、24小时、5天或任何其他合适的时间。在一些实施方式中,可以基于一个或多个应用106的用户的使用情况来动态地计算要被用于确定频繁出现序列的过去预设时间量。
在步骤204,对于神经网络模型的频繁出现序列中的每个神经网络模型,编译器114能够接收包括模型参数的数据结构。在一些示例中,由编译器114接收的数据结构能够在数据结构111中具有8位定点数,例如,其能够通过量化具有32位浮点数的数据结构109来获得。每个神经网络模型的模型参数能够包括该神经网络模型的权重和数据。
在步骤206,编译器114能够编译序列中每个神经网络模型的数据结构,以生成每个神经网络模型的编译后的数据结构116。这种编译能够按照序列的顺序被执行。例如,首先序列中的第一模型被编译,然后序列中的第二模型被编译,然后序列中的第三模型被编译,依此类推,直到最后序列中的最后一个模型被编译。通过生成要被硬件加速器104访问和执行的机器级代码,能够使用执行编译的任何适当技术(包括任何常规技术)来编译各个模型。
在步骤208,对于神经网络模型集中的每个神经网络模型,编译器114能够向编译后的数据结构116指派散列。散列能够是唯一的64位数,用于唯一地标识编译后的数据结构116。虽然将散列描述为64位数,但是在其他实施方式中,它可以具有任何其他位数。通常,散列函数接收编译后的数据结构作为输入,并输出散列(例如,64位数),该散列例如能够被用作散列表中的指数。在各种实施方式中,散列也能够被称为散列值、散列代码或摘要。散列函数能够是MD5、SHA-2、CRC32、任何其他一个或多个散列函数和/或其任何组合。
在步骤210,当散列(例如,第一64位数)不同于SRAM中先前标识的另一序列的另一散列(例如,第二64位数)时,编译器能够根据序列将编译后的数据结构和散列输出到硬件加速器104,以用于存储在SRAM中(即,重新加载SRAM)。当两个散列相同时,SRAM的这种重新加载是不必要的,并且编译器114因此防止在这种情况下清理和重新加载SRAM。换句话说,如果第一序列中所有模型的散列不同于先前序列中所有模型的另一个散列(这指示两个序列不同),则进行SRAM的清理和重新加载。如果两个散列相同,这指示两个序列相同,并且因此不需要清理和重新加载SRAM,从而减少延迟。
图3图示模型的两个不同序列,数据结构连同对应的散列一起为其被编译,并对其进行比较,以确定是否需要清理SRAM并利用编译后的数据重新加载。频繁出现序列中的每个模型都被指派相同的散列(64位唯一数)。例如,第一序列的每个模型被指派第一散列(由编译器计算),第二序列的每个模型被指派第二散列(由编译器计算)。编译器114对相同的模型计算相同的散列,并且从而为模型的相同序列计算相同的散列。因此,如果第二散列与第一散列相同,那么这指示第二序列与第一序列相同,并且因此不需要在硬件加速器104的SRAM中重新加载用于模型的第二序列的编译后的数据结构116,从而减少延迟。在这种情况下,编译器114因此防止SRAM的清理和重新加载。
图4图示通过硬件加速器104执行的步骤,以将编译后的数据存储在SRAM中,并响应于确定是否需要清理和重新加载SRAM来进行动作。在步骤402,硬件加速器104能够分配SRAM空间,以用于存储图3的编译后的数据结构116和第一散列。如果第二散列与第一散列不同,那么在步骤404,硬件加速器104能够擦除用于编译后的数据结构116的SRAM空间,并利用第二序列的编译结果将其替换。如果第二散列与第一散列相同,那么在步骤406,硬件加速器104能够避免从SRAM擦除编译后的数据结构116,这有利地减少延迟。
图5图示硬件加速器104的多个方面,硬件加速器104包括用于存储编译后的数据结构116的SRAM 501,编译后的数据结构116包括用于处理神经网络模型的参数。硬件加速器106经由应用编程接口(API)108与应用106通信。API 108经由编译器向硬件加速器104发送数据,并且能够从硬件加速器104输出数据(例如,经由未示出的反编译器)。例如,API108能够向编译器114发送响应于应用106的执行而要被处理的特定数据结构。API 108可能需要经由量化器向编译器发送数据,这取决于硬件加速器104的配置,如图1所述。
硬件加速器104被配置为响应于从计算装置102上运行的应用接收的指令和输入数据执行神经网络计算。加速器102能够具有控制器502和多个单独的计算单元504。虽然示出了八个计算单元504,但是在替代实施方式中,硬件加速器104能够具有任何其他数量的计算单元504,诸如2到16之间的任何数量。每个计算单元504能够具有至少一个可编程处理器506和至少一个存储器508。在一些实施方式中,如编译后的数据结构116所示,用于处理神经网络模型的参数可以被分布在一个或多个(例如,全部)存储器508上。
计算单元504能够加速神经网络层的机器学习推理工作负载。每个计算单元504是自包含的,并且能够独立地执行多层神经网络的给定层所需的计算。硬件加速器104能够通过在多个计算单元504上分布张量计算来执行神经网络层的计算。在神经网络层内执行的计算处理可以包括输入张量与参数张量的乘积,输入张量包括输入激活,参数张量包括权重。计算能够包括将输入激活乘以一个或多个循环上的权重,并在多个循环上执行乘积的累积。本文中使用的术语“张量”表示多维几何对象,其能够是矩阵或数据阵列。
每个计算单元504能够通过处理遍历N维张量(其中N能够是任意整数)的嵌套循环来实现软件算法以执行张量计算。在一个示例计算处理中,每个循环能够负责遍历N维张量的特定维度。对于给定的张量构造,计算单元504能够要求访问特定张量的元素,以执行与张量相关联的多个点积计算。当输入激活与参数或权重相乘时计算发生。当乘法结果被写入输出总线时,张量计算结束,输出总线串行地连接计算单元504,数据在计算单元之间通过总线传递并存储在存储器中。
硬件加速器104能够支持特定类型的数据结构(例如,具有32位浮点数的结构109),这些数据结构被量化(例如,以获得具有8位浮点数的结构111),然后专门为硬件加速器104进行编译(例如,获得编译后的结构116)。
硬件加速器104能够基于由编译器114生成的编译后的数据结构116来执行各种神经网络计算,以处理神经网络模型(例如,面部识别模型)。每次硬件加速器104处理神经网络模型(例如,面部识别模型)时,硬件加速器104需要访问该神经网络模型的编译后的数据结构116内的参数。为了存储从编译器114和API 108接收的数据(包括编译后的数据结构116中的参数),硬件加速器104进一步包括指令存储器510、SRAM 501和数据存储器512。
SRAM 501具有有限的内存空间(例如,最多8兆字节),可以存储模型的编译后的数据结构116。为了最好地使用SRAM 501,编译器114能够标识其中频繁出现的神经网络模型被执行的序列,将该序列中的所有数据结构一起编译,以生成被指派相同标识(例如散列)的编译后的数据结构116,并通过选择性的方式(具体地,仅当调用模型的不同序列时)将编译后的数据结构116输出到SRAM 501。这样防止了SRAM 501的冗余重新加载。
分配给每个模型的SRAM 501的数量在编译时是固定的,并基于由编译器编译的数据结构的顺序进行优先级排序。例如,对于编译后的模型,如果利用相同的散列来编译两个模型A和B,那么首先将所需的尽可能多的SRAM 501空间分配给模型A的数据结构,并且如果此后仍然有SRAM 501空间剩余,则将SRAM 501空间给予模型B的数据结构。如果模型A或模型B的其中一个的数据结构116不能够适配SRAM 501,则转而其被存储在外部存储器(例如,计算装置102的主存储器)中并在运行时间从外部存储器被拾取。
如果若干模型被编译,有些模型可能没有在SRAM 501中被分配空间,因此这些模型必须从外部存储器加载所有数据。从外部存储器加载与从SRAM 501加载相比更慢,但是当在频繁序列中运行模型时,这仍然比每次运行任何模型时交换SRAM 501更快。
本说明书中所描述的主题和功能操作的实施方式能够以数字电子电路、以有形地体现的计算机软件或固件、计算机硬件中被实现,包括本说明书公开的结构及其结构等同物,或者它们一个或多个的组合。本说明书中所描述的主题的实施方式能够被实现为一个或多个计算机程序,即,在有形非暂时性程序载体上编码、用于通过数据处理设备执行或控制数据处理设备的操作的计算机程序指令的一个或多个模块。替代地或另外,程序指令能够在人工生成的传播信号(例如,机器生成的电、光或电磁信号)上被编码,其被生成为对信息编码,以用于传输到适当的接收器设备,以用于通过数据处理设备执行。计算机存储介质能够是机器可读存储装置、机器可读存储基板、随机或串行访问存储器装置,或者它们一个或多个的组合。
本说明书中所描述的处理和逻辑流能够通过一个或多个可编程计算机执行,可编程计算机通过对输入数据进行操作并生成(多个)输出来执行一个或多个计算机程序以执行功能。处理和逻辑流也能够由专用逻辑电路执行,装置也能够被实现为专用逻辑电路,例如,FPGA(现场可编程门阵列)、ASIC(专用集成电路)或GPGPU(通用图形处理单元)。
作为示例,适合于执行计算机程序的计算机能够基于通用或专用微处理器或两者,或任何其他类型的中央处理单元。通常,中央处理单元将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的基本元件是用于进行或执行指令的中央处理单元和用于存储指令和数据的一个或多个存储装置。通常,计算机还将包括从用于存储数据的一个或多个大容量存储装置(例如,磁盘、磁光盘或光盘)接收数据或向其传送数据,或者可操作性地耦合到一个或多个大容量存储装置。但是,计算机并不需要具有这样的装置。
适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器装置,作为示例,包括半导体存储器装置,例如,EPROM、EEPROM和闪存装置;磁盘,例如,内部硬盘或可移动磁盘。处理器和存储器能够由专用逻辑电路补充或被并入其中。
虽然本说明书包含许多具体实施方式细节,但是不应将其解释为对任何发明或可能要求保护的范围的限制,而是解释为对可能特定于特定发明的特定实施方式的特征的描述。在单独实施方式的情境下,在本说明书中描述的某些特征也能够在单个实施方式中组合实现。相反,在单个实施方式的情境下描述的各种特征也可以单独地或者通过任何适当的子组合的方式在多个实施方式中实现。此外,虽然将特征描述为在某些组合中起作用,甚至一开始这样要求保护,但是在某些情况下,能够从所要求保护的组合中删除来自所要求保护的组合的一个或多个特征,并且所要求保护的组合可能针对子组合或子组合的变体。
类似地,虽然在附图中按照特定顺序描述操作,但是这不应被理解为要求按照所示的特定顺序或按照依次的顺序执行这些操作,或要求执行所有图示的操作,来实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施方式中的各种***模块和组件的分离不应被理解为在所有实施方式中都需要这种分离,并且应当理解,通常可将所描述的程序组件和***都集成在单个软件产品中,或者封装到多个软件产品中。
已经描述了主题的特定实施方式。其他实施方式落入以下权利要求的范围内。例如,能够按照不同的顺序来执行权利要求中列举的动作,并且仍然实现期望的结果。作为一个示例,在附图中描述的处理不一定要求所示的特定顺序或连续的顺序来实现期望的结果。在某些实施方式中,多任务和并行处理可能是有利的。
Claims (20)
1.一种由编译器执行的方法,所述方法包括:
标识第一神经网络模型集,所述第一神经网络模型集在过去的预设时间量中已经在计算装置的硬件加速器上被执行超过阈值次数;
标识所述第一模型集在所述硬件加速器上被执行的序列;
编译所述第一神经网络模型集中的每个神经网络模型以用于由所述硬件加速器执行;以及
对于所述第一神经网络模型集中的每个神经网络模型,将编译后的模型输出到所述硬件加速器以用于根据所述序列存储在所述硬件加速器的一个或多个存储器中,当所述第一神经网络模型集要在所述硬件加速器上再次被执行时,对于所述第一神经网络模型集中的每个神经网络模型根据所述序列对所述编译后的模型的所述存储防止需要将所述第一神经网络模型集的所述序列的编译结果再编译重新加载到所述一个或多个存储器中。
2.根据权利要求1所述的方法,进一步包括:
对于所述第一神经网络模型集中的每个神经网络模型,接收包括该神经网络模型的参数的数据结构,
其中,所述编译进一步包括编译所述第一神经网络模型集中的每个神经网络模型的数据结构,以生成所述第一神经网络模型集中的每个神经网络模型的编译后的数据结构,所述编译后的数据结构是所述编译后的模型。
3.根据权利要求1所述的方法,进一步包括:
将相同的第一散列指派给所述序列中的每个编译后的模型;
将所述第一散列连同所述序列中的每个编译后的模型一起输出到所述硬件加速器,以用于存储在所述硬件加速器的所述一个或多个存储器中;
将相同的第二散列指派给模型的第二序列中的每个编译后的模型,所述第二序列在所述第一序列之后,当所述第二序列与所述第一序列相同时,所述第二散列与所述第一散列相同,当所述第二序列与所述第一序列不同时,所述第二散列与所述第一散列不同,
其中:
如果所述第二散列与所述第一散列不同,则所述硬件加速器被配置为利用所述一个或多个存储器中的所述第二序列中的每个编译后的模型替换所述一个或多个存储器中的所述第一序列中的每个编译后的模型;
如果所述第二散列与所述第一散列相同,则所述硬件加速器被配置为防止从所述一个或多个存储器中擦除所述第一序列中的每个编译后的模型。
4.根据权利要求1所述的方法,其中,所述第一神经网络模型集中的每个神经网络模型在过去已经在所述硬件加速器上被处理五次以上。
5.根据权利要求4所述的方法,其中,所述编译器编译所述第一神经网络模型集,同时所述硬件加速器同时执行其他一个或多个神经网络模型的神经网络计算。
6.根据权利要求1所述的方法,进一步包括:
在预设时间间隔之后更新所述第一模型集的标识和所述序列的标识。
7.根据权利要求6所述的方法,进一步包括:
响应于所述第一神经网络模型集的所述编译故障,放弃更新达预设时间。
8.根据权利要求7所述的方法,其中,所述放弃包括:
响应于所述第一神经网络模型集的所述编译故障,放弃更新达7500毫秒。
9.根据权利要求1所述的方法,其中,所述第一神经网络模型集的所述编译包括:
确定所述第一神经网络模型集内的每个神经网络模型具有与所述编译兼容的特定大小。
10.根据权利要求1所述的装置,其中,所述第一神经网络模型集的所述编译包括:
在任何时间只编译单个神经网络模型。
11.根据权利要求1所述的方法,其中,所述序列包括面部识别神经网络模型以及要在处理所述面部识别神经网络模型之后被处理的一个或多个从属神经网络模型。
12.一种***,包括:
编译器,所述编译器被配置为:
标识第一神经网络模型集,所述第一神经网络模型集在过去的预设时间量中已经在计算装置的硬件加速器上被执行超过阈值次数;
标识所述第一模型集在所述硬件加速器上被执行的序列;
编译所述第一神经网络模型集中的每个神经网络模型以用于由所述硬件加速器执行;以及
对于所述第一神经网络模型集中的每个神经网络模型,将编译后的模型输出到所述硬件加速器以用于根据所述序列存储在所述硬件加速器的一个或多个存储器中;以及
所述硬件加速器,包括所述一个或多个存储器,用于根据所述序列存储所述第一神经网络模型集中的每个神经网络模型的编译后的模型,当所述第一神经网络模型集要在所述硬件加速器上再次被执行时,在所述一个或多个存储器中对于所述第一神经网络模型集中的每个神经网络模型根据所述序列对所述编译后的模型的所述存储防止需要将所述第一神经网络模型集的所述序列的编译结果再编译重新加载到所述一个或多个存储器中。
13.根据权利要求12所述的***,其中,所述一个或多个存储器是静态随机存取存储器SRAM。
14.根据权利要求12所述的***,其中,所述硬件加速器进一步包括多个计算单元,所述多个计算单元被配置为处理所述第一神经网络模型集。
15.根据权利要求14所述的***,其中:
所述多个计算单元中的每个计算单元包括至少一个处理器和存储器;以及
所述多个计算单元经由至少一个总线串行地耦合。
16.根据权利要求12所述的***,其中,所述第一神经网络模型集包括至少一个面部识别神经网络模型。
17.根据权利要求16所述的***,其中,所述至少一个面部识别神经网络模型响应于所述控制器从所述计算装置接收执行所述至少一个面部识别神经网络模型的指令而被激活。
18.根据权利要求17所述的***,其中,所述计算装置包括应用和应用编程接口API,所述应用生成要经由所述API被发送的指令。
19.根据权利要求18所述的***,其中,所述应用是相机应用。
20.根据权利要求18所述的***,其中:
所述API是神经网络API(NNAPI);以及
所述计算装置是Android装置。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2020/021714 WO2021183105A1 (en) | 2020-03-09 | 2020-03-09 | Efficient processing of neural network models |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113939830A true CN113939830A (zh) | 2022-01-14 |
Family
ID=70285820
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080041079.6A Pending CN113939830A (zh) | 2020-03-09 | 2020-03-09 | 神经网络模型的高效处理 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20220300826A1 (zh) |
EP (2) | EP3966680B1 (zh) |
CN (1) | CN113939830A (zh) |
WO (1) | WO2021183105A1 (zh) |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190286973A1 (en) * | 2018-03-14 | 2019-09-19 | Microsoft Technology Licensing, Llc | Hardware accelerated neural network subgraphs |
KR20230173223A (ko) * | 2018-04-10 | 2023-12-26 | 구글 엘엘씨 | 게이밍 렌더링에서의 메모리 관리 |
-
2020
- 2020-03-09 US US17/637,190 patent/US20220300826A1/en active Pending
- 2020-03-09 WO PCT/US2020/021714 patent/WO2021183105A1/en unknown
- 2020-03-09 CN CN202080041079.6A patent/CN113939830A/zh active Pending
- 2020-03-09 EP EP20718870.7A patent/EP3966680B1/en active Active
- 2020-03-09 EP EP22207462.7A patent/EP4195031A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
EP3966680B1 (en) | 2022-11-16 |
US20220300826A1 (en) | 2022-09-22 |
EP3966680A1 (en) | 2022-03-16 |
EP4195031A1 (en) | 2023-06-14 |
WO2021183105A1 (en) | 2021-09-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6660991B2 (ja) | マルチスレッドプロセッサでのタスクのスケジューリング | |
US10558914B2 (en) | Real-time resource usage reduction in artificial neural networks | |
US11609792B2 (en) | Maximizing resource utilization of neural network computing system | |
US11556756B2 (en) | Computation graph mapping in heterogeneous computer system | |
CN113688062B (zh) | 用于存储数据的方法和相关产品 | |
JP2021034020A (ja) | ワークロードのスタティックマッピングの順不同にパイプライン化された実行を可能にする方法及び装置 | |
KR20150129327A (ko) | 파이프라이닝된 소프트웨어의 동적 최적화 | |
CN110825514A (zh) | 人工智能芯片以及用于人工智能芯片的指令执行方法 | |
CN111381883B (zh) | 多线程处理器中的指令高速缓存 | |
CN108549935B (zh) | 一种实现神经网络模型的装置及方法 | |
CN108139929B (zh) | 用于调度多个任务的任务调度装置和方法 | |
US11409839B2 (en) | Programmable and hierarchical control of execution of GEMM operation on accelerator | |
CN113939830A (zh) | 神经网络模型的高效处理 | |
CN116680063A (zh) | 任务调度方法、装置、计算***、电子设备和存储介质 | |
US20140223439A1 (en) | Superscalar control for a probability computer | |
CN114661474A (zh) | 信息处理方法、装置、设备、存储介质及程序产品 | |
CN110969259B (zh) | 具有数据关联自适应舍入的处理核心 | |
CN115280286A (zh) | 学习模型计算资源的动态分配和重新分配 | |
CN112602058B (zh) | 处理器存储器存取 | |
US12020076B2 (en) | Techniques for balancing workloads when parallelizing multiply-accumulate computations | |
Upadhyay et al. | An efficient speculative task detection algorithm for mapreduce schedulers | |
US20230236837A1 (en) | Elastically managing workers of multi-worker workloads on accelerator devices | |
US20230236878A1 (en) | Efficiently launching tasks on a processor | |
CN117591242B (zh) | 基于底层虚拟机的编译优化方法、***、存储介质及终端 | |
Ren et al. | CuCodeML: GPU-Accelerated CodeML for the Branch-Site Model in Phylogenetics |
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 |