CN114600128A - 神经网络处理器中的三维卷积 - Google Patents
神经网络处理器中的三维卷积 Download PDFInfo
- Publication number
- CN114600128A CN114600128A CN202080074320.5A CN202080074320A CN114600128A CN 114600128 A CN114600128 A CN 114600128A CN 202080074320 A CN202080074320 A CN 202080074320A CN 114600128 A CN114600128 A CN 114600128A
- Authority
- CN
- China
- Prior art keywords
- output
- data
- circuit
- neural
- multiply
- 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
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
- G06F17/153—Multidimensional correlation or convolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
- G06N20/10—Machine learning using kernel methods, e.g. support vector machines [SVM]
-
- 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
-
- 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
- G06N3/084—Backpropagation, e.g. using gradient descent
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
- G06N20/20—Ensemble learning
-
- 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/044—Recurrent networks, e.g. Hopfield networks
-
- 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/048—Activation functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/01—Dynamic search techniques; Heuristics; Dynamic trees; Branch-and-bound
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Neurology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Medical Informatics (AREA)
- Image Analysis (AREA)
Abstract
本公开的实施方案涉及一种神经处理器电路的神经引擎,该神经处理器电路具有多个相乘相加电路以及耦接到这些相乘相加电路的累加器电路。这些相乘相加电路使用内核对输入数据的工作单元执行三维卷积的相乘相加运算,以在处理周期中生成输出数据的至少一部分。该累加器电路包括累加器的多个批次。累加器的每个批次在该处理周期之后接收并且存储针对多个输出深度平面中的每个输出深度平面的该输出数据的该部分。累加器的对应批次在该处理周期之后存储针对这些输出通道的子集以及针对每个输出深度平面的该输出数据的该部分。
Description
背景技术
1.技术领域
本公开涉及一种用于执行与神经网络相关的操作的电路,并且更具体地涉及神经网络处理器的执行三维卷积操作的神经引擎电路。
2.相关技术描述
人工神经网络(ANN)是使用连接节点的集合来处理输入数据的计算系统或模型。ANN通常被组织成层,其中不同的层对其输入执行不同类型的转换。ANN的扩展或变体诸如卷积神经网络(CNN)、递归神经网络(RNN)和深度信念网络(DBN)已受到大量关注。这些计算系统或模型通常涉及广泛的计算操作,包括相乘和累加。例如,CNN是一类主要使用输入数据和内核(kernel)数据之间的卷积的机器学习技术,卷积可分解为相乘和累加操作。
根据输入数据的类型和待执行的操作,这些机器学习系统或模型可被不同地配置。此类变化的配置将包括例如预处理操作、输入数据中的通道数量、待使用的内核数据、待应用于卷积结果的非线性函数以及各种后处理操作的应用。使用中央处理单元(CPU)及其主存储器来实例化和执行各种配置的机器学习系统或模型相对容易,因为此类系统或模型仅通过更新代码即可实例化。然而,仅依赖于CPU进行这些机器学习系统或模型的各种操作将消耗中央处理单元(CPU)的大量带宽以及增加总体功率消耗。
发明内容
实施方案涉及一种神经处理器电路的神经引擎电路,该神经引擎电路对输入数据执行三维(3D)卷积的运算。该神经引擎电路包括多个相乘相加(multiply-add)电路以及带有耦接到这些相乘相加电路的输出的多个累加器的累加器电路。这些相乘相加电路使用内核对输入数据的工作单元(work unit)执行3D卷积的相乘相加操作,以在神经引擎电路的处理周期中生成输出数据的至少一部分。该累加器电路被划分成累加器的多个批次。累加器的每个批次在处理周期之后接收并且存储针对多个输出深度平面中的每个输出深度平面以及针对多个输出通道中的对应输出通道的输出数据的部分。这些输出数据的每个输出深度平面包括针对具有输出宽度和输出高度的输出通道的输出数据的部分。
附图说明
图1是根据一个实施方案的电子设备的高级图。
图2是示出根据一个实施方案的电子设备中的部件的框图。
图3是示出根据一个实施方案的神经处理器电路的框图。
图4A是根据一个实施方案的神经处理器电路中的神经引擎的框图。
图4B是根据一个实施方案的带有被划分成累加器的多个批次的累加器电路的图4A的神经引擎的框图。
图5是根据一个实施方案的神经处理器电路中的平面引擎的框图。
图6是示出根据一个实施方案的用于在神经处理器电路处处理输入数据的回路的概念图。
图7是示出根据一个实施方案的在神经引擎处对输入数据执行三维卷积的方法的流程图。
仅仅出于示例目的,附图描绘以及详细说明描述各种非限定性实施方案。
具体实施方式
现在将详细地参考实施方案,这些实施方案的示例在附图中示出。下面的详细描述中示出许多具体细节,以便提供对各种所描述的实施方案的充分理解。然而,可以在没有这些具体细节的情况下实施所述实施方案。在其他情况下,没有详细地描述众所周知的方法、过程、部件、电路和网络,从而不会不必要地使实施方案的各个方面晦涩难懂。
本公开的实施方案涉及一种神经处理器电路的神经引擎电路,该神经引擎电路被配置为对输入数据执行三维(3D)卷积的运算。该神经引擎电路包括耦接到多个累加器的多个相乘相加电路。在神经引擎电路的处理周期期间,相乘相加电路对输入数据的工作单元以及内核数据执行3D卷积的运算,以生成具有用于每个输出通道的3D空间支持的输出数据的一部分。在3D卷积期间存储输出数据的累加器被划分成累加器的多个批次。累加器的每个批次在处理周期结束时接收并且存储针对对应深度平面以及针对输出通道的至少一个子集的输出数据的部分。
本文所述的3D卷积是对三维输入数据执行的卷积。3D卷积是2D卷积的扩展,增加了一个附加维度(例如,深度维度)。输入数据的3D卷积涉及对于每个输入通道的3D空间支持(例如,宽度、高度和深度维度)以及具有3D空间支持的内核数据。3D卷积可用于处理体数据(例如,具有宽度维度、高度维度和深度维度的输入数据)或时间视频数据(例如,具有宽度维度、高度维度和时间维度的输入数据)。
示例性电子设备
本文描述了电子设备、此类设备的用户界面和使用此类设备的相关过程的实施方案。在一些实施方案中,该设备为还包含其他功能诸如个人数字助理(PDA)和/或音乐播放器功能的便携式通信设备,诸如移动电话。便携式多功能设备的示例性实施方案包括但不限于来自Apple Inc.(Cupertino,California)的设备、iPod设备、Apple设备和设备。可选地使用其他便携式电子设备,诸如可穿戴设备、膝上型电脑或平板计算机。在一些实施方案中,该设备不是便携式通信设备,而是台式计算机或不是为便携式使用而设计的其他计算设备。在一些实施方案中,所公开的电子设备可包括触敏表面(例如,触摸屏显示器和/或触摸板)。下文结合图1描述的示例性电子设备(例如,设备100)可包括用于接收用户输入的触敏表面。电子设备还可包括一个或多个其他物理用户接口设备,诸如物理键盘、鼠标和/或操纵杆。
图1是根据一个实施方案的电子设备100的高级图。设备100可包括一个或多个物理按钮,诸如“home”按钮或菜单按钮104。菜单按钮104例如用于导航到在设备100上执行的一组应用程序中的任何应用程序。在一些实施方案中,菜单按钮104包括识别菜单按钮104上的指纹的指纹传感器。指纹传感器能够被用来确定菜单按钮104上的手指是否具有与为解锁设备100存储的指纹匹配的指纹。另选地,在一些实施方案中,菜单按钮104被实现为触摸屏上显示的图形用户界面(GUI)中的软键。
在一些实施方案中,设备100包括触摸屏150、菜单按钮104、用于使设备开/关机和用于锁定设备的下压按钮106、音量调节按钮108、订户身份模块(SIM)卡槽110、耳麦插孔112和对接/充电外部端口124。下压按钮106可被用于通过压下该按钮并将该按钮保持在压下状态达预定义的时间间隔来对设备进行开关机;通过压下该按钮并在该预定义的时间间隔过去之前释放该按钮来锁定设备;和/或对设备进行解锁或发起解锁过程。在另选的实施方案中,设备100还通过麦克风113接受用于激活或去激活某些功能的语音输入。设备100包括各种部件,包括但不限于存储器(可包括一个或多个计算机可读存储介质)、存储器控制器、一个或多个中央处理单元(CPU)、外围设备接口、RF电路、音频电路、扬声器111、麦克风113、输入/输出(I/O)子系统和其他输入或控制设备。设备100可包括一个或多个图像传感器164、一个或多个接近传感器166,以及一个或多个加速度计168。设备100可包括多于一种类型的图像传感器164。每种类型可包括多于一个图像传感器164。例如,一种类型的图像传感器164可以是相机,并且另一类型的图像传感器164可以是用于由存储在设备100中的一个或多个机器学习模型执行的面部识别的红外传感器。设备100可包括图1中未示出的部件,诸如环境光传感器、点投影仪和用于支持面部识别的泛光照明器。
设备100仅是电子设备的一个示例,并且设备100可具有比上文列出的更多或更少的部件,其中一些部件可组合成一个部件或具有不同的配置或布置。以上列出的设备100的各种部件体现为硬件、软件、固件或其组合,包括一个或多个信号处理和/或专用集成电路(ASIC)。
图2是示出根据一个实施方案的设备100中的部件的框图。设备100可执行各种操作,包括实施一个或多个机器学习模型。出于此目的和其他目的,设备100可包括图像传感器202、片上系统(SOC)部件204、系统存储器230、永久存储器(例如,闪存)228、运动传感器234和显示器216,以及其他部件。图2中所示的部件仅为例示性的。例如,设备100可包括图2中未示出的其他部件(诸如扬声器或麦克风)。另外,一些部件(诸如运动传感器234)可从设备100中省略。
图像传感器202是用于捕获图像数据的部件,并且可实现为例如互补金属氧化物半导体(CMOS)有源像素传感器、相机、摄像机或其他设备。图像传感器202生成原始图像数据,其被发送到SOC部件204以进行进一步处理。在一些实施方案中,由SOC部件204处理的图像数据显示在显示器216上,存储在系统存储器230、永久存储器228中,或经由网络连接发送到远程计算设备。由图像传感器202生成的原始图像数据可以是Bayer色彩内核阵列(CFA)图案。
运动传感器234是用于感测设备100的运动的部件或一组部件。运动传感器234可生成指示设备100的取向和/或加速度的传感器信号。传感器信号被发送到SOC部件204以用于各种操作,诸如打开设备100或旋转显示器216上显示的图像。
显示器216是用于显示由SOC部件204生成的图像的部件。显示器216可包括例如液晶显示器(LCD)设备或有机发光二极管(OLED)设备。基于从SOC部件204接收的数据,显示器116可显示各种图像,诸如菜单、所选择的操作参数、由图像传感器202捕获并由SOC部件204处理的图像,和/或从设备100的用户界面接收的其他信息(未示出)。
系统存储器230是用于存储由SOC部件204执行的指令以及用于存储由SOC部件204处理的数据的部件。系统存储器230可体现为任何类型的存储器,包括例如动态随机存取存储器(DRAM)、同步DRAM(SDRAM)、双倍数据速率(DDR、DDR2、DDR3等)RAMBUS DRAM(RDRAM)、静态RAM(SRAM)或其组合。
永久存储器228是用于以非易失性方式存储数据的部件。即使电力不可用,永久存储器228也保留数据。永久存储器228可体现为只读存储器(ROM)、闪存或其他非易失性随机存取存储器设备。永久存储器228存储设备100的操作系统和各种软件应用程序。永久存储器228也可存储一个或多个机器学习模型,诸如回归模型、随机森林模型、支持向量机(SVM)诸如内核SVM、以及人工神经网络(ANN)诸如卷积网络网络(CNN)、递归网络网络(RNN)、自编码器、和长短期记忆(LSTM)。机器学习模型可以是与神经处理器电路218和设备100的各种软件应用程序或传感器一起工作的独立模型。机器学习模型也可以是软件应用程序的一部分。机器学习模型可执行各种任务,诸如面部识别、图像分类、对象、概念和信息分类、语音识别、机器翻译、声音识别、语音命令识别、文本识别、文本和上下文分析、其它自然语言处理、预测和建议。
存储在设备100中的各种机器学习模型可被完全训练、未经训练、或部分训练以允许设备100加强或继续在设备100被使用时训练机器学习模型。机器学习模型的操作包括在训练模型以及利用模型确定运行时间结果的各种计算。例如,在一种情况下,设备100捕获用户的面部图像并使用该图像继续改善用于锁定或解锁设备100的机器学习模型。
SOC部件204体现为一个或多个集成电路(IC)芯片并执行各种数据处理过程。SOC部件204可包括除了别的子部件之外的图像信号处理器(ISP)206、中央处理器单元(CPU)208、网络接口210、传感器接口212、显示控制器214、神经处理器电路218、图形处理器(GPU)220、存储器控制器222、视频编码器224、存储控制器226和连接这些子组件的总线232。SOC部件204可包括比图2中所示的子部件更多或更少的子部件。
ISP 206是执行图像处理流水线的各级的电路。在一些实施方案中,ISP 206可从图像传感器202接收原始图像数据,并且将原始图像数据处理成SOC部件204的其他子部件或设备100的部件可用的形式。ISP 206可执行各种图像操纵操作,诸如图像平移操作、水平和竖直缩放、色彩空间转换和/或图像稳定变换。
CPU 208可使用任何合适的指令集架构来实现,并且可被配置为执行在该指令集架构中定义的指令。CPU 208可以是使用各种指令集架构(ISA)中的任一者的通用或嵌入式处理器,诸如x86、PowerPC、SPARC、RISC、ARM或MIPS ISA,或任何其他合适的ISA。尽管图2中示出了单个CPU,但是SOC部件204可包括多个CPU。在多处理器系统中,每个CPU可共同实现相同的ISA,但不是必需的。
图形处理单元(GPU)220是用于执行图形数据的图形处理电路。例如,GPU 220可渲染要显示到帧缓冲器中的对象(例如,包括整个帧的像素数据的帧缓冲器)。GPU 220可包括一个或多个图形处理器,该图形处理器可执行图形软件以执行部分或全部的图形操作或某些图形操作的硬件加速。
神经处理器电路218是基于包括相乘、相加和累加的计算来执行各种机器学习操作的电路。此类计算可被布置为例如执行各种类型的张量乘积,诸如张量积和输入数据和内核数据的卷积。神经处理器电路218是可配置电路,该可配置电路以快速且高功效的方式执行这些操作,同时缓解了CPU 208与神经网络操作相关联的资源密集型操作。神经处理器电路218可从传感器接口212、图像信号处理器206、永久存储器228、系统存储器230或其他源诸如网络接口210或GPU 220接收输入数据。神经处理器电路218的输出可被提供给设备100的各个部件诸如图像信号处理器206、系统存储器230或CPU 208用于各种操作。神经处理器电路218的结构和操作在下文中参考图3详细描述。
网络接口210是支持经由一个或多个网络(例如,载体或代理设备)在设备100和其他设备之间交换数据的子部件。例如,视频或其他图像数据可经由网络接口210从其他设备接收并且被存储在系统存储器230中以用于后续处理(例如,经由到图像信号处理器206的后端接口)和显示。网络可包括但不限于局域网(LAN)(例如,以太网或公司网络)和广域网(WAN)。经由网络接口210接收的图像数据可由ISP 206进行图像处理过程。
传感器接口212是用于与运动传感器234交接的电路。传感器接口212从运动传感器234接收传感器信息并且处理传感器信息以确定设备100的取向或移动。
显示控制器214是用于发送要在显示器216上显示的图像数据的电路。显示控制器214从ISP 206、CPU 208、图形处理器或系统存储器230接收图像数据,并将图像数据处理成适用于在显示器216上显示的格式。
存储器控制器222为用于与系统存储器230通信的电路。存储器控制器222可从系统存储器230读取数据以供ISP 206、CPU 208、GPU 220或SOC部件204的其他子部件处理。存储器控制器222还可将数据写入从SOC部件204的各种子部件接收的系统存储器230。
视频编码器224是硬件、软件、固件或其组合,用于将视频数据编码成适于存储在永久存储器128中的格式,或者用于将数据传递到网络接口210以通过网络传输到另一设备。
在一些实施方案中,SOC部件204的一个或多个子部件或这些子部件的一些功能可由在神经处理器电路218、ISP 206、CPU 208或GPU 220上执行的软件部件来执行。此类软件部件可存储在系统存储器230、永久存储器228或经由网络接口210与设备100通信的另一设备中。
示例神经处理器电路
神经处理器电路218是对神经处理器电路218的输入数据执行机器学习操作的可编程电路。机器学习操作可包括用于训练机器学习模型以及用于基于经训练的机器学习模型执行推断或预测的不同计算。
以CNN为机器学习模型的示例,CNN的训练可包括正向传播和反向传播。神经网络可包括输入层、输出层、和一个或多个中间层,该中间层可被称为隐藏层。每个层可包括一个或多个节点,该一个或多个节点可完全或部分地连接到相邻层中的其它节点。在正向传播中,神经网络基于前一层的输出在正向方向上执行计算。节点的操作可由一个或多个函数限定。限定节点的操作的函数可包括各种计算操作,诸如利用一个或多个内核的数据卷积、层的池化、张量乘积等。函数还可包括调节节点的输出的权重的激活函数。不同层中的节点可与不同函数相关联。例如,CNN可包括与池化层混合、并且之后跟着一个或多个完全连接的层的一个或多个卷积层。
机器学习模型中的函数中的每一者(包括内核)可与在训练期间能调节的不同系数相关联。另外,神经网络中的一些节点各自也可与决定正向传播中节点的输出的权重的激活函数相关联。常见的激活函数可包括阶跃函数、线性函数、S形函数、双曲正切函数(tanh)、和整流线性单元函数(ReLU)。在一批训练样本数据在正向传播中通过神经网络之后,可将结果与训练样本的训练标签进行比较以计算网络的损失函数,其表示网络的性能。进而,神经网络通过使用坐标下降诸如随机坐标下降(SGD)调节各个函数中的系数以改善损失函数的值来执行反向传播。
在训练中,设备100可使用神经处理器电路218执行正向传播和反向传播中的所有或一些操作。多轮正向传播和反向传播可由神经处理器电路218单独地或与其它处理器诸如CPU 208、GPU 220和ISP 206协调地执行。训练可在损失函数不再改善(例如,机器学习模型已收敛)时或在特定训练样本的预定轮数之后完成。当使用设备100时,设备100可继续收集用于神经网络的附加训练样本。
为了预测或推断,设备100可接收一个或多个输入样本。神经处理器电路218可取输入样本执行正向传播以确定一个或多个结果。输入样本可以是图像、语音、文本文件、传感器数据或其它数据。
机器学习中的数据和函数(例如,输入数据、内核、函数、层输出、梯度数据)可被保存并由一个或多个张量表示。与机器学习模型的训练和运行时间有关的常见操作可包括张量积、张量转置、张量逐元素操作、卷积、激活函数的应用、自动微分以确定张量中的值的梯度、统计和聚合(例如,平均、方差、标准偏差)、张量秩和尺寸操纵等。
虽然作为示例讨论了神经网络的训练和运行时间,但是神经处理器电路218也可用于其它类型的机器学习模型的操作,诸如内核SVM。
参见图3,示例性神经处理器电路218除了别的部件之外可包括神经任务管理器310、多个神经引擎314A至314N(在下文中统称为“多个神经引擎314”并且还单独地称为“神经引擎314”)、内核直接存储器存取(DMA)324、数据处理器电路318、数据处理器DMA 320、和平面引擎340。神经处理器电路218可包括更少的部件或者图3中未示出的附加部件。
神经引擎314中的每一个神经引擎并行地执行机器学习的计算操作。根据操作负荷,整组神经引擎314可正在操作,或者仅神经引擎314的子集可正在操作,而其余神经引擎314被置于功率节省模式以节省功率。神经引擎314中的每一个神经引擎包括用于存储一个或多个内核、用于执行相乘累加操作以及用于后处理以生成输出数据328的部件,如下文参考图4详细描述。神经引擎314可专门执行计算量大的操作,诸如卷积操作和张量积操作。卷积操作可包括不同种类的卷积,诸如交叉通道卷积(累加来自不同通道的值的卷积)、逐通信卷积、和转置卷积。
平面引擎340可专门执行更简单的计算操作,其速度可主要取决于数据传输的输入和输出(I/O)速度而不是平面引擎340内的计算速度。那些计算操作可被称为I/O约束的计算。相比之下,神经引擎314可聚焦于复杂的计算,其速度可主要取决于每个神经引擎314内的计算速度。例如,平面引擎340对于执行单个通道内的操作是高效的,而神经引擎314对于执行可能涉及数据重度累加的跨多个通道的操作是高效的。使用神经引擎314计算I/O约束的计算不可能在速度和功率消耗两个方面都是高效的。在一个实施方案中,输入数据可以是秩大于三(例如,具有三个或更多个维度)的张量。张量中的一组维度(两个或更多个)可被称为平面,而另一维度可被称为通道。神经引擎314可利用内核将张量中平面的数据卷积,并跨不同通道累加不同平面卷积的结果。另一方面,平面引擎340可专用于平面内的操作。
平面引擎340的电路可被编程用于多种模式下的一种模式下的操作,包括池化模式、逐元素模式和缩减模式。在池化模式下,平面引擎340缩减输入数据的空间尺寸。在逐元素模式下,平面引擎340生成从一个或多个输入的逐元素操作导出的输出。在缩减模式下,平面引擎340缩减张量的秩。例如,可将秩5张量缩减到秩2张量,或者可将秩3张量缩减到秩0张量(例如,标量)。下面参考图5进一步详细地论述平面引擎340的操作。
神经任务管理器310管理神经处理器电路218的总体操作。神经任务管理器310可从由CPU 208执行的编译器接收任务列表,将任务存储在其任务队列中,选择待执行的任务,并且向神经处理器电路218的其他部件发送任务命令以用于执行所选择的任务。数据可与指示要对数据执行的操作的类型的任务命令相关联。神经处理器电路218的数据包括从另一源诸如系统存储器230传输的输入数据、以及由神经处理器电路218在先前操作循环中生成的数据。每个数据集可与指定要对数据执行的操作的类型的任务命令相关联。神经任务管理器310还可以在检测到事件诸如从CPU 208接收指令时执行任务的切换。在一个或多个实施方案中,神经任务管理器310将光栅器信息发送给神经处理器电路218的部件以使这些部件中的每一者能够跟踪、检索或处理输入数据和内核数据的适当部分。例如,神经任务管理器310可包括存储关于数据集的尺寸和秩的信息以供神经处理器电路218处理的寄存器。尽管在图3中神经任务管理器310被示出为神经处理器电路218的一部分,但是神经任务管理器310可以是神经处理器电路218外部的部件。
内核DMA 324是从源(例如,系统存储器230)获取内核数据并将内核数据326A至326N发送到神经引擎314中的每一个神经引擎的读取电路。内核数据表示可从中提取内核元素的信息。在一个实施方案中,内核数据可以是在神经引擎314中的每一个神经引擎处解压缩的压缩格式。尽管在一些情况下提供给神经引擎314中的每一个神经引擎的内核数据可相同,但是在大多数情况下提供给神经引擎314中的每一个神经引擎的内核数据是不同的。在一个实施方案中,内核DMA 324的直接存储器访问性质可允许内核DMA 324直接从源获取和写入数据,而没有CPU 208参与。
数据处理器电路318管理神经处理器电路218的数据流量和任务绩效。数据处理器电路318可包括流控制电路332和缓冲器334。缓冲器334是临时存储装置,用于存储与神经处理器电路218和平面引擎340的操作相关联的数据,诸如从系统存储器230传输的输入数据(例如,来自机器学习模型的数据)和在神经处理器电路218或平面引擎340内生成的其它数据。存储在数据处理器电路318中的数据可包括不同子集,所述不同子集被发送给各个下游部件,诸如神经引擎314和平面引擎340。
在一个实施方案中,缓冲器334被实施为可被神经引擎314和平面引擎340访问的非暂态存储器。缓冲器334可存储用于馈送到对应神经引擎314A至314N或平面引擎340的输入数据322A至322N、以及用于反馈到一个或多个神经引擎314或平面引擎340中、或发送给目标电路(例如,系统存储器230)的来自神经引擎314A至314N或平面引擎340中每一者的输出数据328A至328N。缓冲器334还可存储平面引擎340的输入数据342和输出数据344,并且允许神经引擎314与平面引擎340之间的数据交换。例如,神经引擎314的一个或多个输出数据328A至328N用作对平面引擎340的输入342。同样,平面引擎340的输出344可用作神经引擎314的输入数据322A至322N。神经引擎314或平面引擎340的输入可以是存储在缓冲器334中的任何数据。例如,在各个操作循环中,引擎之一从中获取以作为输入的源数据集可以是不同的。引擎的输入可以是先前循环中同一引擎的输出、不同引擎的输出、或存储在缓冲器334中的任何其它合适的源数据集。此外,缓冲器334中的数据集可被划分并发送给不同的引擎,以用于下一操作循环中的不同操作。缓冲器334中的两个数据集也可联合以用于下一操作。
数据处理器电路318的流控制电路332可控制神经引擎314与平面引擎340之间的数据交换。数据处理器电路318与神经处理器电路218的其他部件的操作被协调使得存储在数据处理器电路318中的输入数据和中间数据可跨神经引擎314和平面引擎340处的多个操作被重复使用,从而减少往返于系统存储器230的数据传输。流控制电路332可执行以下操作中的一者或多者:(i)监视正被神经引擎314和平面引擎340处理的数据的尺寸和秩(例如,数据可以是一个或多个张量),(ii)基于与不同数据子集相关联的任务命令确定哪些数据子集被传输给神经引擎314或平面引擎340,(iii)确定数据被传输给神经引擎314和平面引擎340的方式(例如,数据处理器电路318可在广播模式下操作,其中相同的数据被馈送到神经引擎314的多个输入通道,使得多个或所有神经引擎314接收相同的数据,或者可在单播模式下操作,其中不同的神经引擎314接收不同的数据),和(iv)传输配置命令给平面引擎340以指示平面引擎340对其自己编程以用于在多个操作模式之一中操作。
存储在缓冲器334中的神经处理器电路218的数据可以是图像数据、取向梯度(HOG)数据的柱状图、音频数据、元数据、神经引擎314的前一循环的输出数据328、以及从SOC部件204的其他部件接收的其他经处理的数据等等的一部分。
数据处理器DMA 320包括从源(例如,系统存储器230)接收输入数据的片段以用于存储在缓冲器334中的读取电路以及将数据从缓冲器334转发到目标部件(例如,系统存储器)的写入电路。在一个实施方案中,数据处理器DMA 320的直接存储器访问性质可允许数据处理器DMA 320直接从源(例如,系统存储器230)获取和写入数据。而没有CPU 208参与。缓冲器334可以是在CPU 208不参与的情况下存储设备100的机器学习模型的数据的直接存储器访问缓冲器。
示例神经引擎架构
图4A是根据一个实施方案的神经引擎314的框图。神经引擎314执行各种操作以促进机器学习,诸如卷积、张量积,并且其它操作可涉及大的计算量。为此,神经引擎314接收输入数据322,基于所存储的内核数据对输入数据322执行相乘累加操作(例如,卷积操作),对相乘累加操作的结果执行进一步后处理操作,并且生成输出数据328。神经引擎314的输入数据322和/或输出数据328可以是单个通道的或跨多个通道。
神经引擎314可除了别的部件之外还包括输入缓冲电路402、计算核416、神经引擎(NE)控件418、内核提取电路432、累加器电路414和输出电路424。神经引擎314可包括比图4A中所示更少的部件或包括图4A中未示出的另外的部件。
输入缓冲电路402是当神经处理器电路218的数据的子集被从源接收时存储该数据子集的电路。源可以是数据处理器电路318、平面引擎340或另一合适的部件。输入缓冲电路402发送用于当前任务或处理回路的数据的适当片段408给计算核416以用于处理。输入缓冲电路402可包括移位器410,该移位器对输入缓冲电路402的读取位置进行移位以改变发送给计算核416的数据的片段408。通过经由移位改变提供给计算核416的输入数据的片段,神经引擎314可基于较少数量的读取操作针对输入数据的不同片段执行相乘累加。在一个或多个实施方案中,神经处理器电路218的数据包括差异卷积组和/或输入通道的数据。
内核提取电路432是从内核DMA 324接收内核数据326并提取内核系数422的电路。在一个实施方案中,内核提取电路432参考查找表(LUT)并使用掩模来基于LUT从压缩内核数据326重建内核。该掩模指示重建内核中待用零填补的位置以及待用数字填充的剩余位置。将重建内核的内核系数422发送到计算核416以填充计算核416的乘加(MAD)电路中的寄存器。在其他实施方案中,内核提取电路432接收未压缩格式的内核数据,并且在不参考LUT或使用掩模的情况下确定内核系数。
计算核416是执行计算操作的可编程电路。为此,计算核416可包括MAD电路MAD0至MADN以及后处理器428。MAD电路MAD0至MADN中的每一者可将输入值存储在输入数据的片段408中并且将对应内核系数存储在内核系数422中。在MAD电路中的每一个MAD电路中将输入值和对应内核系数相乘以生成经处理的值412。
累加器电路414是包括从MAD电路接收并且存储经处理的值412的多个累加器的存储器电路。在一个或多个实施方案中,累加器电路414包括多组累加器,并且每组累加器耦接到不同的MAD电路MAD0至MADN。在一个实施方案中,累加器电路414中的每组累加器包括相同数量的累加器,例如,在该组中累加器的数量等于经处理的值412的输出通道的数量。另选地,累加器电路414中的这些组累加器可包括不同数量的累加器。存储在累加器电路414中的经处理的值可作为反馈信息419被发送回以在MAD电路处进行进一步相乘和相加操作,或者被发送到后处理器428以进行后处理。累加器电路414与MAD电路组合形成了相乘累加器(MAC)404。在一个或多个实施方案中,累加器电路414可具有子单元(或批次),其中每个子单元将数据发送到神经引擎314的不同部件。例如,在处理周期期间,存储在累加器电路414的第一子单元中的数据被发送到MAC电路,同时存储在累加器电路414的第二子单元中的数据被发送到后处理器428。
后处理器428是对从累加器电路414接收到的值412执行进一步处理的电路。后处理器428可执行操作,包括但不限于应用线性函数(例如,整流线性单元(ReLU))、归一化互相关性(NCC)、将对8位数据执行神经操作的结果合并成16位数据以及局部响应归一化(LRN)。此类操作的结果作为经处理的值417从后处理器428输出到输出电路424。在一些实施方案中,绕过后处理器428处的处理。例如,累加器电路414中的数据可被直接发送到输出电路424以供神经处理器电路218的其他部件访问。
NE控件418基于神经处理器电路218的操作模式和参数来控制神经引擎314的其他部件的操作。根据不同的操作模式(例如,组卷积模式或非组卷积模式)或参数(例如,输入通道的数量和输出通道的数量),神经引擎314可以不同的顺序对不同的输入数据进行操作,将不同的值从累加器电路414返回到MAD电路,并且在后处理器428处执行不同类型的后处理操作。为了配置神经引擎314的部件以期望的方式操作,NE控件418发送可被包括在信息419中的任务命令给神经引擎314的部件。NE控件418可包括光栅器430,该光栅器跟踪在神经引擎314处处理的当前任务或处理回路,如下文参考图6详细描述。
输入数据通常被分成更小的数据片,用于在多个神经引擎314或者神经引擎314和平面引擎340处进行并行处理。用于卷积操作的一组数据可被称为卷积组,其可分成多个较小单元。较小单元(片段)的层级结构可以是卷积组、切片、区块、工作单元、输出通道组、输入通道(Cin)、用于输入步幅的子Cin等。例如,卷积组可被分成若干切片;切片可分成若干区块;区块可分成若干工作单元;等等。在神经引擎314的上下文中,工作单元可以是输入数据的片段,诸如由平面引擎340处理的数据或神经引擎314的先前循环处理的数据,其具有生成在计算核416的单个循环期间适合神经引擎314的累加器414的输出值的尺寸。在一种情况下,每个工作单元的尺寸是256字节。在此类实施方案中,例如,工作单元可被成形为16×16、32×8、64×4、128×2或256×1数据集中的一者。在平面引擎340的上下文中,工作单元可以是(i)输入数据的片段,(ii)来自神经引擎314的数据或(iii)来自平面引擎340的先前循环的数据,其可在平面引擎340处同时处理。
光栅器430可执行与将输入数据分为较小单元(片段)相关联的操作,并通过MAC404和累加器414调控较小单元的处理。光栅器430保持跟踪输入/输出数据的片段的尺寸和秩(例如,组、工作单元、输入通道、输出通道)并且指示神经处理器电路218的部件用于正确处理输入数据的片段。例如,光栅器430在输入缓冲电路402中操作移位器410以将输入数据的正确片段408转发给MAC 404并将完成的输出数据328发送给数据缓冲器334。神经处理器电路218的其他部件(例如,内核DMA 324、缓冲器DMA 320、缓冲器334、平面引擎340)也可具有其对应的光栅器,用于监视输入数据的划分以及不同部件中输入数据的各个片段的并行计算。
输出电路424从后处理器428接收经处理的值417,并且与数据处理器电路318交接以将经处理的值417存储在数据处理器电路318中。为此,输出电路424可以与在后处理器428中处理经处理的值417的顺序或格式不同的顺序或格式作为输出数据328发出。
神经引擎314中的部件可在配置周期期间由NE控件418和神经任务管理器310配置。为此,神经任务管理器310在配置周期期间将配置信息发送到神经引擎314。可配置参数和模式可包括但不限于输入数据元素和内核元素之间的映射、输入通道的数量、输出通道的数量、输出步幅的执行以及在后处理器428处启用/选择后处理操作。
神经引擎处的三维卷积运算
图4B是根据一个实施方案的带有被划分成累加器的多个批次的累加器电路414的神经引擎314的框图。MAC 404的MAD电路MAD0至MADN使用内核系数422对输入数据408的工作单元执行三维(3D)卷积的相乘相加运算,以在计算核416的每个处理周期中生成针对输出通道的至少一个子集的经处理的值412。3D卷积可用于处理体数据(例如,具有宽度维度、高度维度和深度维度的输入数据408)或时间视频数据(例如,具有宽度维度、高度维度和时间维度的输入数据408)。与二维(2D)卷积相比,3D卷积的运算涉及在本文中称为深度维度的附加维度。2D卷积的所有运算,包括但不限于跨步卷积、转置卷积、使用稀疏和调色内核的卷积,都可以应用于3D卷积的运算的深度维度。
存储在输入缓冲电路402中的输入数据408包括多个输入深度平面Din,每个深度平面具有针对多个输入通道中的每个输入通道Cin的输入宽度Win和输入高度Hin。因此,输入数据408的空间支持是Win×Hin×Din×Cin。来自内核提取电路432的内核系数422可表示为多个内核深度平面Kd,每个内核深度平面具有内核宽度Kw和内核高度Kh。因此,内核系数422(或内核)的空间支持是Kw×Kh×Kd。经处理的值412(或输出值)和输出数据328的空间支持是Wout×Hout×Dout×Cout,其中Dout是输出深度平面的数量,每个输出深度平面具有宽度Wout和高度Hout,并且Cout是输出通道的数量。
MAD电路MAD0至MADN使用内核系数422作为3D卷积的一部分对输入数据408的工作单元执行相乘相加运算,以在计算核416的处理周期期间生成经处理的值412。经处理的值412包括多个输出深度平面(例如,Dout个深度平面),每个深度平面具有针对Cout个输出通道的子集的每个输出通道的输出宽度Wout和输出高度Hout。在处理周期结束时,经处理的值412被传递以便存储并累加到累加器电路414中的累加器的对应批次中。所累加的经处理的值412作为反馈信息419被反馈回到MAD电路MAD0至MADN中以在计算核416的下一处理周期期间进行相乘相加运算作为3D卷积的一部分。
累加器电路414耦接到MAD电路MAD0至MADN。在一个或多个实施方案中,累加器电路414包括N+1组累加器,并且累加器电路414中的每组累加器耦接到对应MAD电路MAD0至MADN。累加器电路414中的每组累加器可包括Cout个累加器。带有N+1组Cout个累加器的累加器电路414被划分成用于存储对应输出通道的经处理的值412的累加器的多个批次,即,批次414A、414B至414K。
累加器电路414在处理周期之后接收针对每个输出深度平面以及针对输出通道Cout的子集的经处理的值412,并且将其存储在累加器的对应批次414A、414B至414K中。累加器的批次414A、414B至414K的数量可等于内核深度平面的数量Kd。另选地,累加器的批次414A、414B至414K的数量大于内核深度平面的数量Kd。累加器的每个批次414A、414B至414K可包括相同数量的累加器。另选地,不同批次可包括不同数量的累加器。
在一个或多个实施方案中,累加器电路414包括N+1组累加器,每组累加器耦接到对应MAD电路MAD0至MADN,并且包括用于接收并且存储(例如,通过多个处理周期)八个输出通道的经处理的值412的Cout=8个累加器。在一个实施方案中,用于内核系数422的空间支持包括两个内核深度平面,例如,Kd=2。在这种情况下,累加器电路414被划分成两个批次,例如,批次414A和414B,每个批次具有N+1组四个累加器,因为原始N+1组八个累加器中的每一组被划分成两组(Kd=2)四个累加器。在计算核416的处理周期期间,MAC 404使用内核系数422对输入数据408的工作单元执行3D卷积运算,以生成针对四个输出通道(例如,输出通道1至Cout/2(例如,当Cout=8时))的经处理的值412。累加器的第一批次414A存储针对四个输出通道1至Cout/2和第一深度平面的经处理的值412,并且累加器的第二批次414B存储针对相同四个输出通道1至Cout/2和第二深度平面的经处理的值412。在计算核416的第二处理周期期间,MAC 404使用内核系数422对输入数据408的另一工作单元执行3D卷积运算,以生成针对剩余四个输出通道(例如,输出通道Cout/2+1至Cout)的经处理的值412。累加器的第一批次414A存储针对四个剩余输出通道Cout/2+1至Cout和第一深度平面的经处理的值412。累加器的第二批次414B存储针对相同四个剩余输出通道Cout/2+1至Cout和第二深度平面的经处理的值412。
在另一个实施方案中,用于内核系数422的空间支持包括四个内核深度平面,例如,Kd=4。在这种情况下,累加器电路414被划分成四个批次,例如,批次414A、414B、414C、414D,每个批次具有N+1组两个累加器,因为原始N+1组八个累加器中的每一组被划分成四组(Kd=4)两个累加器。在计算核416的处理周期期间,MAC 404使用内核系数422对输入数据408的第一工作单元执行3D卷积运算,以生成针对两个输出通道(例如,输出通道1至Cout/4(例如,当Cout=8时))的经处理的值412。累加器的第一批次414A存储针对两个输出通道1至Cout/4和第一深度平面的经处理的值412。累加器的第二批次414B存储针对相同两个输出通道1至Cout/4和第二深度平面的经处理的值412。累加器的第三批次414C存储针对相同两个输出通道1至Cout/4和第三深度平面的经处理的值412。累加器的第四批次414D存储针对相同两个输出通道1至Cout/4和第四深度平面的经处理的值412。在计算核416的第二处理周期期间,MAC404使用内核系数422对输入数据408的第二工作单元执行3D卷积运算,以生成针对接下来两个输出通道(例如,输出通道Cout/4+1至Cout/2)的经处理的值412。累加器的第一批次、第二批次、第三批次和第四批次414A、414B、414C、414D存储针对两个输出通道Cout/4+1至Cout/2以及相应的第一深度平面、第二深度平面、第三深度平面和第四深度平面的经处理的值412。在计算核416的第三处理周期期间,MAC 404使用内核系数422对输入数据408的第三工作单元执行3D卷积运算,以生成针对接下来两个输出通道(例如,输出通道Cout/2+1至3*Cout/4)的经处理的值412。累加器的第一批次、第二批次、第三批次和第四批次414A、414B、414C、414D存储针对两个输出通道Cout/2+1到3*Cout/4以及相应的第一深度平面、第二深度平面、第三深度平面和第四深度平面的经处理的值412。在计算核416的第四处理周期期间,MAC 404使用内核系数422对输入数据408的第四工作单元执行3D卷积运算,以生成针对剩余两个输出通道(例如,输出通道3*Cout/4+1至Cout)的经处理的值412。累加器的第一批次、第二批次、第三批次和第四批次414A、414B、414C、414D存储针对两个输出通道3*Cout/4+1至Cout以及相应的第一深度平面、第二深度平面、第三深度平面和第四深度平面的经处理的值412。
输入缓冲电路402,例如在数据处理器318的时钟周期期间从数据处理器电路318接收针对每个输入通道的输入数据322的深度切片(即,所有输入深度平面z=0、1、...、Din-1)。数据处理器电路318从系统存储器230接收并且存储输入数据322的图块。输入缓冲电路402在计算核416的每个处理周期中将输入数据322的深度切片的不同部分作为输入数据408的对应工作单元传递到MAC 404上。MAC 404的MAD电路MAD0至MADN对输入数据408的对应工作单元和内核系数422执行相乘累加运算,其中作为3D卷积运算的部分进行部分累加以生成部分输出总和412,该部分输出总和存储在累加器的批次414A至414K中并且作为反馈信息419反馈回到MAD电路MAD0至MADN以生成存储在累加器的批次414A至414K中的最终经处理的值412。在计算核416的处理周期期间,存储在累加器的批次414A至414K中的部分输出总和412与所有输出深度平面Dout以及输出通道的至少一部分相关联。
后处理器428按照预先确定的缩放因子对每个输出深度平面的经处理的值412进行缩放,以生成经处理的值417。可针对每个输出深度平面预先确定唯一的缩放因子。另选地,缩放因子对于两个或更多个深度平面可以为共同的。输出电路424从后处理器428接收经处理的值417,并且与数据处理器电路318交接以将经处理的值417存储在数据处理器电路318中。为此,输出电路424可以与在后处理器428中处理经处理的值417的顺序或格式不同的顺序或格式发出输出数据328。用于输出数据328的空间支持可与用于经处理的值412的空间支持相同,即Wout×Hout×Dout×Cout。
示例性平面引擎
图5是根据一个实施方案的平面引擎340的框图。平面引擎340是与所述多个神经引擎314分开的电路并且可被编程为以不同的操作模式执行。例如,平面引擎340可在池化模式、缩减模式、增益偏置模式、和逐元素模式下操作,池化模式缩减数据的空间尺寸,缩减模式缩减张量的秩,增益偏置模式提供偏置和按缩放因子的缩放的单程加法,并且逐元素模式包括逐元素操作。为此,平面引擎340除了其他部件之外还可包括第一格式转换器502、第一过滤器506(在本文中也称为“多模水平过滤器506”)、行缓冲器510、第二过滤器514(在本文中也称为“多模竖直过滤器514”)、后处理器518、第二格式转换器522和平面引擎(PE)控件530(包括光栅器540)。平面引擎340可包括更少的部件或可包括图5中未示出的其它部件。平面引擎340中的每个部件可被实施成电路或与固件或软件组合的电路。
可从保存在数据处理器电路318中的一个或多个源数据集获取平面引擎340的输入数据342。如果平面引擎340要处理的数据集大于平面引擎340能同时处理的数据的工作单元,则可将此类数据集分段成多个工作单元以用于作为输入数据342读取到平面引擎340。取决于平面引擎340的模式,输入数据342可包括来自一个或多个源数据集的数据。本文描述的源数据集是指保存在神经处理器电路218中用于处理的不同数据。神经处理器电路218的不同部件可生成或传输保存在数据处理器电路318中的数据。例如,神经引擎314、平面引擎340(其在先前操作循环中生成了数据)和系统存储器230可生成或传输保存在数据处理器电路318的不同存储器位置中的不同数据集。各个源数据集可表示不同的张量。在平面引擎340的操作循环中,不同的源数据集可被一起获取作为输入数据342。例如,在涉及两个不同张量相加以导出所得张量的逐元素模式下,输入数据342可包括来自两个不同源数据集的数据,每个源数据集提供单独的张量。在其它模式下,单个源数据集可提供输入数据342。例如,在池化模式下,可从单个源数据集获取输入数据342。
第一格式转换器502是对一种格式(例如,用于存储在缓冲器334中的格式)的输入数据342执行一个或多个格式转换到另一形式以用于在平面引擎340的后续部件中处理的电路。此类格式转换可包括以下等等:将ReLU函数应用于输入数据342的一个或多个值、将输入数据342的一个或多个值转换为其绝对值、对包括在源中的张量转置、对输入数据342的一个或多个值应用增益、偏置输入数据342的一个或多个值、归一化或解除归一化输入数据342的一个或多个值、将浮点数转换为带符号或无符号的数(或反之亦然)、对数量子化、和改变张量的尺寸,诸如通过在一个或多个维度中广播张量的值以扩展张量的秩。到平面引擎340的转换后的输入数据342和未转换的输入数据342在本文中统称为“输入数据的版本”。
第一过滤器506是在一个方向上执行过滤操作的电路。为此目的,第一过滤器506除了其他部件之外可包括加法器、比较器和乘法器。第一过滤器506执行的过滤可以是例如平均、选择最大值或选择最小值。当平均时,加法器用于加和输入数据342的值,并且加权因子可利用乘法器应用于所述加和以获得平均值作为所得值。当选择最大值和最小值时,可使用比较器代替加法器和乘法器以选择值。
行缓冲器510是用于存储结果的存储器电路,诸如从第一过滤器506或第二过滤器514获得的一个或多个中间数据。行缓冲器510可存储不同行的值并且允许从第二过滤器514或其它下游部件访问以获取中间数据来用于进一步处理。在一些模式下,绕过行缓冲器510。行缓冲器510也可包括逻辑电路用于除仅存储中间数据以外执行附加操作。例如,行缓冲器510包括加法器电路512,加法器电路与存储器部件组合使得行缓冲器510能够充当累加器,累加器聚合从第一过滤器506或第二过滤器514的结果生成的数据以单独存储不缩减的维度的聚合数据。
类似于第一过滤器506,第二过滤器514执行过滤操作,但在与第一滤波器506不同的方向上执行过滤操作。为此目的,第二过滤器514除了其他部件之外可包括加法器、比较器和乘法器。在池化模式下,第一过滤器506在第一维度中执行过滤操作,而第二过滤器514在第二维度中执行过滤操作。在其它模式下,第一过滤器506和第二过滤器514可不同地操作。在缩减模式下,例如,第一过滤器506执行逐元素操作,而第二过滤器514充当缩减树用于聚合数据值。
后处理器518是执行从其他上游部件获取的值的进一步处理的电路。后处理器518可包括对于执行利用通用计算电路执行可能低效的某些类型的数学计算高效的专用电路。后处理器518执行的操作除了其他之外可包括在缩减模式下执行平方根操作和值的倒数。后处理器518可在其它操作模式下被绕过。
第二格式转换器522是将平面引擎340中先前部件的结果从一种格式转换为用于输出数据344的另一格式的电路。此类格式转换可包括以下等等:将ReLU函数应用于结果、对所得张量转置、归一化或解除归一化结果的一个或多个值、以及其它数字格式转换。输出数据344可作为神经处理器电路218的输出或作为对神经处理器电路218的其它部件(例如,神经引擎314)的输入被存储在数据处理器电路318中。
PE控件530是基于平面引擎340的操作模式控制平面引擎340中其他部件的操作的电路。根据不同操作模式,PE控件530对与平面引擎340中的不同部件相关联的寄存器编程,使得经编程的部件以某种方式操作。部件或平面引擎340中部件之间的连接的流水线也可被重新配置。在池化模式下,例如,被第一过滤器506处理的数据可被存储在行缓冲器510中,然后被第二过滤器514读取以用于进一步过滤。然而,在缩减模式下,数据由第一过滤器506处理,接着在第二过滤器514处处理,然后在被编程为累加器的行缓冲器510中累加。在逐元素模式下,可绕过行缓冲器510。
PE控件530还包括光栅器540,其跟踪在平面引擎340处处理的当前任务或处理回路。光栅器540是跟踪输入数据的单元或片段和/或用于处理平面引擎340中的输入数据的回路的电路。光栅器540可控制每个操作循环中向平面引擎340的片段获取,并且可监视由平面引擎340处理的每个片段的尺寸和秩。例如,数据集的较小片段可按光栅器次序被获取作为输入数据342以用于在平面引擎340处处理,直到源数据集的所有片段被处理。在获取片段时,光栅器540监视数据集中片段的坐标。与数据集如何被分段到输入数据328中以用于在神经引擎314处处理相比,数据集被分段到输入数据342中以用于在平面引擎340处处理的方式可以是不同的。
用于在平面引擎340处处理的数据集可大于可在单个操作循环中处理的平面引擎340的容量。在这种情况下,平面引擎340获取数据集的不同片段作为多个操作循环中的输入数据342。所获取的片段可与先前获取的片段和/或将获取的下一片段部分地重叠。在一个实施方案中,重叠数据的部分仅被获取一次并且被重复使用以降低平面引擎340在获取数据中的时间和功率消耗成本。
对数据进行分段以用于在神经处理器电路处处理的操作
图6是示出根据一个实施方案的用于在神经处理器电路218处处理输入数据的回路的概念图。如果使用涉及多个卷积组的组卷积,则最外回路表示对卷积组的处理。组卷积是其中每个组中输入通道的输入数据仅用于生成每个组的输出通道的输出数据但不用于生成其他组的输出通道的输出数据的卷积。因此,组卷积的每个组可被视为单独的卷积操作。
每个卷积组的回路中是用于输入数据切片的处理回路。卷积运算(例如,3D卷积运算)的整个输入数据以重叠方式被分段成多条切片。重叠部分是输入数据的在两个相邻切片中被过获取以为对应内核提供空间支持的部分。第二最外回路针对输入数据中的每个切片执行卷积运算(例如,3D卷积运算)。切片的回路内是用于切片的图块的处理回路。每个图块被分段成多个工作单元。重叠部分是切片中的输入数据的在两个相邻图块中被过获取以为对应内核提供空间支持的部分。最右边的图块通常将具有小于切片的其他图块的宽度。在一个实施方案中,每个图块的输入数据在读取周期中被加载到数据缓冲器318上,并且被重复用于图块的处理回路中的操作。在图块的处理回路中是用于工作单元的处理回路。每个图块被分段成多个工作单元。工作单元是具有在计算核416的单个周期期间产生拟合到神经引擎314的累加器电路414中的输出值的尺寸的输入数据的一部分。每个工作单元的形状可以是水平条带。然而,根据图块的形状和尺寸,工作单元的形状可不同。该工作单元还具有表示过获取的以为对应内核提供支持的重叠部分。尤其是,如果图块为高的,则用于切片的最后图块的工作单元可具有竖直条的形状。在一个或多个实施方案中,如所讨论的,每个工作单元的尺寸是256字节。在此类实施方案中,例如,工作单元可被成形为16×16、32×8、64×4、128×2或256×1维度中的一者。
对于每个工作单元,可为输出通道组(OCG)提供内部处理回路。由计算核416的单个周期为给定工作单元产生的输出通道的数量被称为OCG。根据操作模式,每个神经引擎314可处理用于输入数据单次加载到其输入缓冲电路402中的不同数量的输出通道(例如,8个通道、32个通道)的输出数据。
对于每个输出通道组,可为输入深度(Din)提供内部处理回路。对于每个输入深度平面,可为输入通道(Cin)提供内部处理回路。如果实施输入步幅以跳过某些输入数据,则可在用于输入通道(Cin)的处理回路内提供用于子输入通道(Sub-Cin)的回路。
对于每个输入通道或每个子输入通道,提供内部回路以用于处理内核的竖直空间支持、每个竖直空间支持内的水平空间支持以及每个水平空间支持内的深度空间支持。空间支持是指用于与内核3D卷积的输入数据,并且包括用于在输入数据的边缘处执行3D卷积的过获取输入数据。
过获取是指在当前切片、图块或工作单元中获取附加输入数据,使得可提供适当维度的输入数据以用于与内核3D卷积。在一个或多个实施方案中,在切片之间竖直地执行过获取以获得输入数据的附加行,在图块之间水平地执行过获取以获得输入数据的附加列,并且在图块内的工作单元之间竖直地执行过获取以获得输入数据的附加行。
对于用于内核的每个空间支持,提供了输出通道(OC)的内部处理回路以生成用于每个输出通道(Cout)的输出数据。在输出步幅实现空间上采样的情况下,提供用于处理每个子输出通道的附加内回路。在输出通道(OC)或子输出通道(如果实现输出步幅)的回路内执行内核系数和MAC操作的加载,以生成用于输出通道(OC)或子输出通道的输出数据。
图6的嵌套回路结构仅仅是例示性的。根据各种因素,可不同地省略、添加或结构化回路。例如,如果仅使用单个卷积组,则可移除最外回路。此外,用于水平空间支持、竖直空间支持和深度空间支持的回路结构可呈不同次序。
在神经引擎架构处的示例过程
图7是示出根据一个实施方案的在神经引擎314中对输入数据执行三维(3D)卷积运算的方法的流程图。神经引擎314使用内核(例如,内核系数422)对输入数据(例如,输入数据408)的工作单元执行702(例如,使用MAC 404的MAD电路MAD0至MADN)3D卷积运算的相乘相加运算,以在神经引擎314的处理周期中生成输出数据的至少一部分(例如,经处理的值412)。
在处理周期之后,神经引擎314将针对多个输出深度平面中的每个输出深度平面的输出数据的部分(例如,经处理的值412)存储704在累加器的多个批次中(例如,存储在批次414A至414K中)。输出深度平面包括针对具有输出宽度和输出高度的输出通道的输出数据的部分。神经引擎314在处理周期之后将针对输出通道的子集以及针对每个输出深度平面的输出数据的部分(例如,经处理的值412)存储在累加器的对应批次中。
上文参考图7所述的过程的实施方案仅仅是例示性的。此外,可修改或省略该过程的顺序。
虽然已经说明和描述了具体的实施方案和应用,但是应当理解,本发明不限于本文所公开的精确构造和部件以及,并且在不脱离本公开的实质和范围的情况下,可对本文所公开的方法和装置的布置、操作和细节进行对本领域的技术人员将显而易见的各种修改、改变和变型。
Claims (20)
1.一种神经引擎电路,包括:
多个相乘相加电路,所述多个相乘相加电路被配置为使用内核对输入数据的工作单元执行三维(3D)卷积的相乘相加运算,以在处理周期中生成输出数据的至少一部分;和
累加器电路,所述累加器电路耦接到所述多个相乘相加电路,所述累加器电路包括累加器的多个批次,所述累加器的多个批次中的每个批次被配置为在所述处理周期之后接收并且存储针对多个输出深度平面中的每个输出深度平面的所述输出数据的所述部分,所述输出深度平面包括具有输出宽度和输出高度的输出通道的所述输出数据的所述部分。
2.根据权利要求1所述的神经引擎电路,其中所述多个相乘相加电路被进一步配置为:
执行所述相乘相加运算作为所述3D卷积的部分以生成包括所述多个输出深度平面的所述输出数据,所述多个输出深度平面具有针对多个输出通道中的每个输出通道的所述输出宽度和所述输出高度。
3.根据权利要求2所述的神经引擎电路,其中所述累加器电路被进一步配置为:
在所述处理周期之后将针对所述多个输出通道的子集以及针对每个输出深度平面的所述输出数据的所述部分存储在所述累加器的对应批次中。
4.根据权利要求1所述的神经引擎电路,其中所述输入数据包括多个输入深度平面,所述多个输入深度平面具有针对多个输入通道中的每个输入通道的输入宽度和输入高度,并且所述内核包括具有内核宽度和内核高度的多个内核深度平面。
5.根据权利要求4所述的神经引擎电路,其中所述累加器的批次的数量等于所述内核深度平面的数量。
6.根据权利要求1所述的神经引擎电路,其中所述神经引擎电路被配置为:
在时钟周期期间从数据缓冲器接收所述输入数据的深度切片,所述数据缓冲器位于所述神经引擎电路和所述神经引擎电路外部的系统存储器之间。
7.根据权利要求6所述的神经引擎电路,其中所述相乘相加电路和所述累加器被配置为:
对所述输入数据的所述深度切片的所述工作单元和所述内核执行带有部分累加的相乘累加运算作为所述3D卷积的部分,以生成存储在所述累加器的多个批次中的部分输出总和。
8.根据权利要求7所述的神经引擎电路,其中存储在所述累加器的多个批次中的所述部分输出总和与所述输出数据的所有输出深度平面以及输出通道的至少一部分相关联。
9.根据权利要求1所述的神经引擎电路,还包括:
后处理器,所述后处理器被配置为按照针对所述输出深度平面预先确定的缩放因子对针对每个输出深度平面的所述输出数据进行缩放。
10.一种操作神经引擎电路的方法,包括:
使用多个相乘相加电路,使用内核对输入数据的工作单元执行三维(3D)卷积的相乘相加运算,以在处理周期中生成输出数据的至少一部分;以及
在所述处理周期之后,在耦接到所述多个相乘相加电路的累加器电路的累加器的多个批次中的每个批次中存储针对多个输出深度平面中的每个输出深度平面的所述输出数据的所述部分,所述输出深度平面包括具有输出宽度和输出高度的输出通道的所述输出数据的所述部分。
11.根据权利要求10所述的方法,还包括:
执行所述相乘相加运算作为所述3D卷积的部分以生成包括所述多个输出深度平面的所述输出数据,所述多个输出深度平面具有针对多个输出通道中的每个输出通道的所述输出宽度和所述输出高度。
12.根据权利要求11所述的方法,还包括:
在所述处理周期之后将针对所述多个输出通道的子集以及针对每个输出深度平面的所述输出数据的所述部分存储在所述累加器的对应批次中。
13.根据权利要求10所述的方法,其中所述输入数据包括多个输入深度平面,所述多个输入深度平面具有针对多个输入通道中的每个输入通道的输入宽度和输入高度,并且所述内核包括具有内核宽度和内核高度的多个内核深度平面。
14.根据权利要求13所述的方法,其中所述累加器的批次的数量等于所述内核深度平面的数量。
15.根据权利要求10所述的方法,还包括:
在时钟周期期间从数据缓冲器接收所述输入数据的深度切片,所述数据缓冲器位于所述神经引擎电路和所述神经引擎电路外部的系统存储器之间。
16.根据权利要求15所述的方法,还包括:
对所述输入数据的所述深度切片的所述工作单元和所述内核执行带有部分累加的相乘累加运算作为所述3D卷积的部分,以生成存储在所述累加器的多个批次中的部分输出总和。
17.根据权利要求16所述的方法,其中存储在所述累加器的多个批次中的所述部分输出总和与所述输出数据的所有输出深度平面以及输出通道的至少一部分相关联。
18.根据权利要求10所述的方法,还包括:
按照针对所述输出深度平面预先确定的缩放因子对针对每个输出深度平面的所述输出数据进行缩放。
19.一种电子设备,所述电子设备包括:
至少一个神经引擎电路,所述至少一个神经引擎电路包括:
多个相乘相加电路,所述多个相乘相加电路被配置为使用内核对输入数据的工作单元执行三维(3D)卷积的相乘相加运算,以在处理周期中生成输出数据的至少一部分,以及
累加器电路,所述累加器电路耦接到所述多个相乘相加电路,所述累加器电路包括累加器的多个批次,所述累加器的多个批次中的每个批次被配置为在所述处理周期之后接收并且存储针对多个输出深度平面中的每个输出深度平面的所述输出数据的所述部分,所述输出深度平面包括具有输出宽度和输出高度的输出通道的所述输出数据的所述部分;
平面引擎电路,所述平面引擎电路耦接到所述至少一个神经引擎电路,所述平面引擎电路被配置为对所述输出数据的至少所述部分执行至少一个平面运算;
数据缓冲器,所述数据缓冲器被配置为在时钟周期期间将所述输入数据的深度切片广播到所述至少一个神经引擎电路;和
内核获取器电路,所述内核获取器电路被配置为将所述内核发送到所述至少一个神经引擎电路。
20.根据权利要求19所述的电子设备,其中:
所述多个相乘相加电路被进一步配置为执行所述相乘相加运算作为所述3D卷积的部分以生成包括所述多个输出深度平面的所述输出数据,所述多个输出深度平面具有针对多个输出通道中的每个输出通道的所述输出宽度和所述输出高度;并且
所述累加器电路被进一步配置为在所述处理周期之后将针对所述多个输出通道的子集以及针对每个输出深度平面的所述输出数据的所述部分存储在所述累加器的对应批次中。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/662,789 | 2019-10-24 | ||
US16/662,789 US11475283B2 (en) | 2019-10-24 | 2019-10-24 | Multi dimensional convolution in neural network processor |
PCT/US2020/052053 WO2021080724A1 (en) | 2019-10-24 | 2020-09-22 | Three dimensional convolution in neural network processor |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114600128A true CN114600128A (zh) | 2022-06-07 |
Family
ID=72717926
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080074320.5A Pending CN114600128A (zh) | 2019-10-24 | 2020-09-22 | 神经网络处理器中的三维卷积 |
Country Status (5)
Country | Link |
---|---|
US (2) | US11475283B2 (zh) |
KR (1) | KR20220083820A (zh) |
CN (1) | CN114600128A (zh) |
DE (1) | DE112020005140T5 (zh) |
WO (1) | WO2021080724A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11513799B2 (en) * | 2019-11-04 | 2022-11-29 | Apple Inc. | Chained buffers in neural network processor |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9451142B2 (en) * | 2007-11-30 | 2016-09-20 | Cognex Corporation | Vision sensors, systems, and methods |
US10042982B2 (en) * | 2014-05-19 | 2018-08-07 | Unitedhealth Group Incorporated | Centralized accumulator systems and methods |
JP6450053B2 (ja) | 2015-08-15 | 2019-01-09 | セールスフォース ドット コム インコーポレイティッド | 3dバッチ正規化を伴う三次元(3d)畳み込み |
JP6700712B2 (ja) * | 2015-10-21 | 2020-05-27 | キヤノン株式会社 | 畳み込み演算装置 |
US10546211B2 (en) | 2016-07-01 | 2020-01-28 | Google Llc | Convolutional neural network on programmable two dimensional image processor |
US10891538B2 (en) * | 2016-08-11 | 2021-01-12 | Nvidia Corporation | Sparse convolutional neural network accelerator |
US10242311B2 (en) | 2016-08-11 | 2019-03-26 | Vivante Corporation | Zero coefficient skipping convolution neural network engine |
WO2018067603A1 (en) * | 2016-10-04 | 2018-04-12 | Magic Leap, Inc. | Efficient data layouts for convolutional neural networks |
US10395165B2 (en) | 2016-12-01 | 2019-08-27 | Via Alliance Semiconductor Co., Ltd | Neural network unit with neural memory and array of neural processing units that collectively perform multi-word distance rotates of row of data received from neural memory |
US10417364B2 (en) * | 2017-01-04 | 2019-09-17 | Stmicroelectronics International N.V. | Tool to create a reconfigurable interconnect framework |
US10387298B2 (en) * | 2017-04-04 | 2019-08-20 | Hailo Technologies Ltd | Artificial neural network incorporating emphasis and focus techniques |
US10795836B2 (en) * | 2017-04-17 | 2020-10-06 | Microsoft Technology Licensing, Llc | Data processing performance enhancement for neural networks using a virtualized data iterator |
US10325342B2 (en) * | 2017-04-27 | 2019-06-18 | Apple Inc. | Convolution engine for merging interleaved channel data |
CN107145939B (zh) * | 2017-06-21 | 2020-11-24 | 北京图森智途科技有限公司 | 一种低计算能力处理设备的计算机视觉处理方法及装置 |
US11803377B2 (en) * | 2017-09-08 | 2023-10-31 | Oracle International Corporation | Efficient direct convolution using SIMD instructions |
CN107909148B (zh) * | 2017-12-12 | 2020-10-20 | 南京地平线机器人技术有限公司 | 用于执行卷积神经网络中的卷积运算的装置 |
US11693625B2 (en) * | 2019-12-04 | 2023-07-04 | Flex Logix Technologies, Inc. | Logarithmic addition-accumulator circuitry, processing pipeline including same, and methods of operation |
-
2019
- 2019-10-24 US US16/662,789 patent/US11475283B2/en active Active
-
2020
- 2020-09-22 WO PCT/US2020/052053 patent/WO2021080724A1/en active Application Filing
- 2020-09-22 DE DE112020005140.4T patent/DE112020005140T5/de active Pending
- 2020-09-22 CN CN202080074320.5A patent/CN114600128A/zh active Pending
- 2020-09-22 KR KR1020227017395A patent/KR20220083820A/ko unknown
-
2022
- 2022-09-14 US US17/944,889 patent/US11853868B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
DE112020005140T5 (de) | 2022-07-14 |
WO2021080724A1 (en) | 2021-04-29 |
US20210125041A1 (en) | 2021-04-29 |
US11475283B2 (en) | 2022-10-18 |
KR20220083820A (ko) | 2022-06-20 |
US11853868B2 (en) | 2023-12-26 |
US20230018248A1 (en) | 2023-01-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11604975B2 (en) | Ternary mode of planar engine for neural processor | |
US20220156575A1 (en) | Multi-dimensional tensor support extension in neural network processor | |
US11537864B2 (en) | Reduction mode of planar engine in neural processor | |
US20240037399A1 (en) | Texture unit circuit in neural network processor | |
US11513799B2 (en) | Chained buffers in neural network processor | |
CN112074847A (zh) | 拆分用于在神经网络处理器中处理的输入数据 | |
CN114761969A (zh) | 用于神经处理器的多模平面引擎 | |
US11934941B2 (en) | Asynchronous task execution for neural processor circuit | |
US11853868B2 (en) | Multi dimensional convolution in neural network processor | |
US20220036163A1 (en) | Chained neural engine write-back architecture | |
US20230206051A1 (en) | Broadcasting mode of planar engine for neural processor | |
KR20220089712A (ko) | 뉴럴 프로세서 회로에서의 보안 모드 스위칭 | |
US20230169316A1 (en) | Indexing Operations In Neural Network Processor | |
US20230394276A1 (en) | Subtask storage for streaming convolutions in neural network processor | |
US11144615B1 (en) | Circuit for performing pooling operation in neural processor | |
US20220108155A1 (en) | Mappable filter for neural processor circuit | |
US20220036158A1 (en) | Task skew management for neural processor circuit | |
US20220222509A1 (en) | Processing non-power-of-two work unit in neural processor circuit | |
US20230128047A1 (en) | Binary comparison and reduction operations in neural network processor | |
US20230121448A1 (en) | Reduction operation with retention in neural network processor | |
US20230236799A1 (en) | Stochastic rounding for neural processor circuit | |
US20220398440A1 (en) | Circular buffering in neural network processor | |
US20230289291A1 (en) | Cache prefetch for neural processor circuit | |
US20220222510A1 (en) | Multi-operational modes of neural engine circuit | |
US20230368008A1 (en) | Memory-efficient streaming convolutions in neural network processor |
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 |