首页> 中国专利> 使用混合精度数据格式训练神经网络加速器

使用混合精度数据格式训练神经网络加速器

摘要

公开了与使用混合精度数据格式训练神经网络加速器相关的技术。在所公开的技术的一个示例中,一种神经网络加速器被配置为加速多层神经网络的给定层。给定层的输入张量可以从普通精度浮点格式转换为量化精度浮点格式。可以使用转换后的输入张量执行张量运算。张量运算的结果可以从块浮点格式转换为普通精度浮点格式。经转换的结果可以用于生成神经网络的该层的输出张量,其中输出张量是以普通精度浮点格式。

著录项

  • 公开/公告号CN113196305A

    专利类型发明专利

  • 公开/公告日2021-07-30

    原文格式PDF

  • 申请/专利权人 微软技术许可有限责任公司;

    申请/专利号CN201980083108.2

  • 申请日2019-12-05

  • 分类号G06N3/063(20060101);G06N3/04(20060101);

  • 代理机构11256 北京市金杜律师事务所;

  • 代理人马明月

  • 地址 美国华盛顿州

  • 入库时间 2023-06-19 12:02:28

说明书

背景技术

机器学习(ML)和人工智能(AI)技术可以用于解决很多复杂的计算问题,诸如识别图像和语音、分析和分类信息,以及执行各种分类任务。机器学习是计算机科学领域,其使用统计技术来给予计算机系统从一组训练数据中提取更高级别的特征的能力。具体地,可以通过训练诸如人工神经网络(NN)或深度神经网络(DNN)等模型来提取特征。在模型被训练之后,可以将新数据应用于模型,并且可以使用已训练模型对新数据进行分类(例如,可以提取更高级别的特征)。机器学习模型通常在通用处理器(也称为中央处理单元(CPU))上执行。但是,使用模型的计算量可能很大,因此可能无法使用通用处理器实时执行特征提取。降低使用模型的计算复杂度可以潜在地减少在推理期间提取特征的时间,减少训练期间的调节时间,和/或减少训练和/或推理期间的能量消耗。因此,有大量机会改善计算机硬件和软件以实现神经网络。

发明内容

公开了与使用混合精度数据格式训练神经网络加速器相关的技术。在所公开的技术的一个示例中,一种神经网络加速器被配置为加速多层神经网络的给定层。给定层的输入张量可以从普通精度浮点格式转换为量化精度浮点格式。可以使用转换后的输入张量执行张量运算。张量运算的结果可以从块浮点格式转换为普通精度浮点格式。经转换的结果可以用于生成神经网络的该层的输出张量,其中输出张量是以普通精度浮点格式。

附图说明

图1是可以在所公开的技术的某些示例中实现的启用量化的系统的框图。

图2是描绘为可以使用本文中公开的某些示例方法和装置来建模的深度神经网络的图。

图3是描绘为可以在所公开的技术的某些示例中执行的将普通浮点格式转换为量化浮点格式的某些方面的图。

图4描绘了为可以用于所公开的技术的某些示例中的可以用于表示量化神经网络模型的多个替代块浮点格式。

图5描绘了为可以用于所公开的技术的某些示例中的可以用于表示量化神经网络模型的多个替代块浮点格式。

图6是描绘为可以在所公开的技术的某些示例中实现的训练与量化模型一起使用的神经网络的方法的流程图。

图7是描绘为可以在所公开的技术的某些示例中实现的混合精度浮点环境以及在普通精度浮点域与量化浮点域之间的边界的框图。

图8是描绘为可以在所公开的技术的某些示例中实现的使用混合精度数据格式训练神经网络加速器的方法的流程图。

图9是描绘为可以在所公开的技术的某些示例中实现的使用混合精度数据格式来操作神经网络加速器的方法的流程图。

图10是示出用于实现所公开的技术的一些实施例的合适的计算环境的框图。

具体实施方式

一般考虑因素

在代表性实施例的上下文中阐述本发明,这些代表性实施例无意以任何方式进行限制。

除非上下文另有明确规定,否则如本申请中使用的,单数形式“一个(a)”、“一个(an)”和“该(the)”包括复数形式。另外,术语“包括(includes)”表示“包括(comprises)”。此外,术语“耦合(coupled)”包括将物品耦合或链接在一起的机械、电气、磁性、光学以及其他实际方式,并且不排除在耦合的项目之间的中间元件的存在。此外,如本文中使用的,术语“和/或”表示短语中的任何一个项目或项目组合。

本文中描述的系统、方法和装置不应当被解释为以任何方式进行限制。相反,本公开内容单独地并且以彼此的各种组合和子组合涉及各种公开的实施例的所有新颖和非明显的特征和方面。所公开的系统、方法和装置不限于任何特定方面或特征或其组合,所公开的事物和方法也不要求存在任何一个或多个特定优点或解决问题。此外,所公开的实施例的任何特征或方面可以以彼此的各种组合和子组合使用。

尽管为了方便呈现,以特定的顺序次序描述了一些所公开的方法的操作,但是应当理解,这种描述方式包括重新布置,除非下面阐述的特定语言需要特定顺序。例如,在某些情况下,顺序描述的操作可以重新布置或同时执行。此外,为了简单起见,附图可能未示出所公开的内容和方法可以与其他事物和方法结合使用的各种方式。另外,本说明书有时使用诸如“产生(produce)”、“生成(generate)”、“显示(display)”、“接收(receive)”、“验证(verify)”、“执行(execute)”和“发起(initiate)”等术语来描述所公开的方法。这些术语是对所执行的实际操作的高级描述。与这些术语相对应的实际操作将根据具体顺序而变化,并且本领域普通技术人员可以容易地辨别。

本文中参考本公开的装置或方法而呈现的操作理论、科学原理或其他理论描述已经被提供以便方便理解,而非不旨在限制范围。所附权利要求中的装置和方法不限于以这种操作理论描述的方式起作用的装置和方法。

所公开的任何方法可以实现为存储在一个或多个计算机可读介质(例如,计算机可读介质,诸如一个或多个光学介质盘、易失性存储器组件(诸如DRAM或SRAM)或非易失性存储器组件(诸如硬盘驱动器))上并且在计算机(例如,任何商用计算机,包括智能电话或包括计算硬件的其他移动设备)上执行的计算机可执行指令。用于实现所公开的技术的任何计算机可执行指令、以及在所公开的实施例的实现期间创建和使用的任何数据可以存储在一个或多个计算机可读介质(例如,计算机可读存储介质)上。计算机可执行指令可以是例如专用软件应用或经由网络浏览器访问或下载的软件应用或其他软件应用(诸如远程计算应用)的一部分。这样的软件可以例如在单个本地计算机上执行,或者使用一个或多个网络计算机在网络环境中执行(例如,经由互联网、广域网、局域网、客户端服务器网络(诸如云计算网络)或其他这样的网络)。

为清楚起见,仅描述了基于软件的实现的某些所选择的方面。省略了本领域公知的其他细节。例如,应当理解,所公开的技术不限于任何特定的计算机语言或程序。例如,所公开的技术可以由用C、C++、Java或任何其他合适的编程语言编写的软件来实现。同样地,所公开的技术不限于任何特定计算机或硬件类型。合适的计算机和硬件的某些细节是公知的,并且不需要在本公开中详细阐述。

此外,可以通过合适的通信装置上载、下载或远程访问任何基于软件的实施例(包括例如用于引起计算机执行任何所公开的方法的计算机可执行指令)。这种合适的通信装置包括例如互联网、万维网、内联网、软件应用、电缆(包括光纤电缆)、磁通信、电磁通信(包括RF、微波和红外通信)、电子通信、或其他这样的通信装置。

概述

人工神经网络(ANN或本文中通篇使用的“NN”)被应用于人工智能和机器学习中的很多应用,包括图像识别、语音识别、搜索引擎和其他合适的应用。这些应用的处理可以在诸如个人计算机或蜂窝电话等个体设备上进行,但也可以在大型数据中心进行。同时,可与NN一起使用的硬件加速器包括专用NN处理单元,诸如被编程为加速神经网络处理的张量处理单元(TPU)和现场可编程门阵列(FPGA)。由于其灵活的特性和每单位计算的低功耗,这样的硬件设备正被部署在消费设备以及数据中心中。

传统上,NN已经使用单精度浮点(32比特浮点或float32格式)被训练和部署。但是,已经表明,可以以最小的准确性损失使用较低精度的浮点格式(诸如16比特浮点(float16))或定点来执行推理操作。在专用硬件(诸如FPGA)上,精度降低格式可以大大改善DNN处理的延迟和吞吐量。

以普通精度浮点格式表示的数字(例如,以16比特浮点格式、32比特浮点格式、64比特浮点格式或80比特浮点格式表示的浮点数)可以转换为量化精度格式数字,从而允许在执行操作时获取性能优势。特别地,NN权重和激活值可以以较低精度的量化格式表示,其中引入可接受的误差水平。较低精度量化格式的示例包括具有减少比特宽的格式(包括通过减少用于表示数字尾数或指数的比特数)和块浮点格式,在块浮点格式中,两个或更多个数字共享相同的单个指数。

FPGA设备上的计算的特性之一是它通常缺乏硬件浮点支持。使用灵活的逻辑可以在惩罚下执行浮点运算,但在FPGA实现中,支持浮点所需要的逻辑数量通常是令人望而却步的。已经开发出一些支持浮点计算的较新FPGA,但即使在这些FPGA上,同一设备在整数模式下使用时每单位时间产生的计算输出也将多一倍。通常,NN是在考虑浮点计算的情况下创建的,但是当FPGA用于NN处理时,如果可以使用整数算法来表示神经网络,则将是有益的。所公开的技术的示例包括块浮点(BFP)的硬件实现方式,包括在NN、FPGA和其他硬件环境中使用BFP。

计算机系统中的典型浮点表示由三部分组成:符号(s)、指数(e)和尾数(m)。符号表示数字是正数还是负数。指数和尾数在科学记数法中使用:

在尾数的精度限制内,可以表示任何数字。由于指数以2的幂对尾数进行缩放,就像指数以科学记数法中的10的幂进行缩放一样,因此可以表示非常大的数字的大小。表示的精度由尾数的精度决定。典型的浮点表示使用宽度为10(float16)、24(float32)或53(float64)比特的尾数。大小大于2

对于块浮点格式,一组两个或更多个数字使用单个共享指数,每个数字仍然具有其自己的符号和尾数。在一些示例中,共享指数被选择为原始浮点值的最大指数。出于本公开的目的,术语块浮点(BFP)表示一种数字系统,其中单个指数在两个或更多个值之间共享,每个值由符号和尾数对表示(无论是否存在显式符号比特,或者尾数本身是否有符号)。在一些示例中,矩阵或向量的一个或多个行或列的所有值、或者矩阵或向量的所有值可以共享共同指数。在其他示例中,BFP表示可以是无符号的。在一些示例中,矩阵或向量BFP表示中的一些但不是全部元素可以包括与用符号、尾数和指数表示的数字混合的表示为整数、浮点数、定点数、符号或其他数据格式的数字。在一些示例中,矩阵或向量BFP表示中的一些或所有元素可以包括具有两个或更多个部分的复数元素,例如:具有虚部的复数(a+bi,其中

BFP格式可以用于以在某些方面类似于普通浮点的方式来权衡精度和存储要求。首先,一组数字可以共享相同指数,而不是为每个浮点数存储指数。为了在保持高精度的同时共享指数,数字应当具有接近相同的大小,因为大小的差异在尾数中表示。如果大小的差异太大,则大值的尾数将上溢,或者小值的尾数可以为零(“下溢”)。根据特定应用,一定量的上溢和/或下溢可以是可以接受的。

尾数的大小可以被调节以适合特定应用。这可以会影响所表示数字的精度,但通过减小表示大小来实现潜在增益。例如,普通单精度浮点的大小为四个字节,但对于所公开的技术的某些实现,仅使用两个字节来表示每个值的符号和尾数。在一些实现中,每个值的符号和尾数可以用一个字节或更少字节来表示。

在所公开的技术的某些示例中,上面表达的表示用于从该表示中导出原始数字,但是对于一组数字仅存储单个指数,其中每个数字由带符号尾数表示。每个带符号尾数可以用两个字节或更少字节表示,因此与四字节浮点相比,存储器存储节省约2倍。此外,加载和存储这些值的存储器带宽要求也约为普通浮点的一半。

在很多人工智能操作中使用神经网络操作。通常,在实现神经网络时执行的大部分处理操作是执行矩阵×矩阵或矩阵×向量乘法或卷积运算。这样的操作是计算和存储器带宽密集型的,其中矩阵的大小可以是例如1000×1000个元素(例如,1000×1000个数字,每个数字包括符号、尾数和指数)或更大,并且使用很多矩阵。如本文中讨论的,BFP技术可以应用于这样的操作,以减少给定系统中的计算需求以及存储器带宽,无论该系统是FPGA、CPU还是其他硬件平台。如本文中使用的,本文中术语“元素”的使用是指这种矩阵或向量的成员。

如本文中使用的,术语“张量”是指可以用于表示NN的特性的多维数组并且包括一维向量以及二维、三维、四维或更大维矩阵。如本公开中使用的,除非特别说明,否则张量不需要任何其他数学属性。

如本文中使用的,术语“普通精度浮点”是指具有尾数、指数和可选的符号并且由本机或虚拟CPU本机支持的浮点格式。普通精度浮点格式的示例包括但不限于IEEE 754标准格式(诸如16比特、32比特、64比特)或处理器支持的其他处理器(诸如Intel AVX、AVX2、IA32和x86_64 80比特浮点格式)。

给定数字可以使用不同精度(例如,混合精度)格式来表示。例如,一个数字可以用较高精度的格式(例如,float32)和较低精度的格式(例如,float16)表示。降低数字的精度可以包括减少用于表示数字的尾数或指数的比特数。此外,降低数字的精度可以包括缩小可以用于表示数字指数的值范围,诸如当多个数字共享共同指数时。类似地,增加数字的精度可以包括增加用于表示数字的尾数或指数的比特数。此外,增加数字的精度可以包括增加可以用于表示数字的指数的值的范围,诸如当数字与共享共同指数的一组数字分开时。如本文中使用的,将数字从较高精度格式转换为较低精度格式可以称为向下转换或量化该数字。将数字从较低精度格式转换为较高精度格式可以称为向上转换或去量化该数字。

如本文中使用的,术语“量化精度浮点”是指其中张量的两个或更多个值已经被修改,以具有比在以普通精度浮点表示值时更低的精度的浮点格式。具体地,量化精度浮点表示的很多示例包括块浮点格式,其中参考共同指数表示张量的两个或更多个值。量化精度浮点数可以通过为张量的两个、更多个或所有元素选择共同指数并且移位个体元素的尾数以匹配共享的共同指数来生成。在一些示例中,张量内的元素组可以在例如每一行、每一列、每块或其他基础上共享共同指数。

在所公开的技术的一个示例中,神经网络加速器被配置为使用混合精度数据格式加速多层神经网络的给定层。例如,混合精度数据格式可以包括普通精度浮点格式和量化精度浮点格式。给定层的输入张量可以从普通精度浮点格式转换为量化精度浮点格式。可以使用转换后的输入张量执行张量运算。张量运算的结果可以从块浮点格式转换为普通精度浮点格式。经转换的结果可以用于生成神经网络的该层的输出张量,其中输出张量是以普通精度浮点格式。以这种方式,与仅使用普通精度浮点格式的类似加速器相比,神经网络加速器可以变得更小且更高效。更小且更高效的加速器可以具有更高的计算性能和/或更高的能源效率。此外,与仅使用量化精度浮点格式的加速器相比,神经网络加速器可以具有更高的准确性。通过提高加速器的准确性,可以减少训练的收敛时间并且加速器在对神经网络的输入进行分类时可以更准确。

使用混合精度浮点训练神经网络的示例架构

图1是概述可以实现所公开的技术的某些示例的示例性的启用量化的系统110的框图100。如图1所示,启用量化的系统110可以包括多个硬件资源,包括通用处理器120和专用处理器,诸如图形处理单元122和神经网络加速器180。处理器耦合到存储器125和存储装置127,存储器125和存储装置127可以包括易失性或非易失性存储器设备。处理器120和122执行存储在存储器或存储装置中的指令,以提供神经网络模块130。神经网络模块130包括允许该系统被编程以实现各种类型的神经网络的软件接口。例如,可以提供允许应用定义神经网络的软件功能,包括权重、偏置、激活函数、节点值和神经网络的各层之间的互连件。此外,软件功能可以用于定义循环神经网络的状态元素。神经网络模块130还可以提供允许训练和重新训练利用该模块实现的神经网络的实用程序。表示神经网络模块的值存储在存储器或存储装置中,并且通过由处理器之一执行的指令对其进行操作。存储在存储器或存储装置中的值可以使用普通精度浮点和/或量化浮点值来表示。

在一些示例中,向程序员提供专有或开源库或框架来实现神经网络创建、训练和评估。这样的库的示例包括TensorFlow、Microsoft认知工具包(CNTK)、Caffe、Theano和Keras。在一些示例中,诸如集成开发环境等编程工具为程序员和用户定义、编译和评估NN提供支持。

神经网络加速器180可以实现为定制或专用集成电路(例如,包括片上系统(SoC)集成电路)、现场可编程门阵列(FPGA)或其他可重新配置逻辑,或者实现为由物理通用处理器托管的软处理器虚拟机。神经网络加速器180可以包括张量处理单元182、可重新配置逻辑器件184和/或一个或多个神经处理核心(诸如子图加速器186)。子图加速器186可以用硬件、软件或硬件和软件的组合来配置。作为一个示例,子图加速器186可以使用在张量处理单元182上可执行的指令来配置和/或执行。作为另一示例,子图加速器186可以通过对可重新配置逻辑块184进行编程来配置。作为另一示例,子图加速器186可以使用神经网络加速器180的硬连线逻辑门来配置186。

子图加速器186可以被编程为执行子图或神经网络的个体节点。例如,子图加速器186可以被编程为执行包括NN的一层的子图。子图加速器186可以访问用于存储权重、偏置、输入值、输出值等的本地存储器。子图加速器186可以具有很多输入,其中每个输入可以由不同权重值加权。例如,子图加速器186可以产生输入张量和子图加速器186的编程输入权重的点积。在一些示例中,点积可以在它被用作激活函数的输入之前以偏置值调节。例如,子图加速器186的输出可以存储在本地存储器中,其中可以访问输出值并且将其发送给不同NN处理器核心和/或神经网络模块130或存储器125。

神经网络加速器180可以包括经由互连件(未示出)彼此连接的多个110子图加速器186。互连件可以在个体子图加速器186、存储器接口(未示出)和输入/输出(I/O)接口(未示出)之间承载数据和控制信号。互连件可以使用电、光、磁或其他合适的通信技术来传输和接收信号,并且可以取决于特定期望配置提供根据多个不同拓扑而布置的通信连接。例如,互连件可以具有交叉开关、总线、点对点总线或其他合适的拓扑。在一些示例中,多个子图加速器186中的任何一个子图加速器可以连接到任何其他核心,而在其他示例中,一些核心仅连接到其他核心的子集。例如,每个核心只能连接到最近的4、8或10个相邻核心。互连件可以用于向子图加速器186传输输入和/或从子图加速器186输出数据,以及向子图加速器186传输控制信号和其他信息信号以及从子图加速器186传输控制信号和其他信息信号。例如,每个子图加速器186可以接收和传输指示当前由相应子图加速器186中的每个执行的操作的执行状态的信号量。此外,矩阵和向量值可以经由互连件在子图加速器186之间共享。在一些示例中,互连件被实现为连接子图加速器186和存储器系统的线,而在其他示例中,核心互连件可以包括用于在(一个或多个)互连件线上多路复用数据信号的电路系统、开关和/或路由组件,包括有源信号驱动器和中继器、或其他合适的电路系统。在所公开的技术的一些示例中,在神经网络加速器180内和向/从神经网络加速器180传输的信号不限于全摆幅电数字信号,而是神经网络加速器180可以被配置为包括差分信号、脉冲信号、或用于传输数据和控制信号的其他合适的信号。

在一些示例中,启用量化的系统110可以包括仿真神经网络加速器180的功能的可选的量化仿真器。神经网络加速器180提供可以用于将神经网络模块130中以全精度浮点格式表示的数据转换为量化格式值的功能。神经网络加速器180还可以使用量化格式值来执行操作。这样的功能将在下面更详细地讨论。

神经网络模块130可以用于使用工具流来指定、训练和评估神经网络模型,该工具流包括与硬件无关的建模框架131(也称为本机框架或机器学习执行引擎)、神经网络编译器132和神经网络运行时环境133。存储器包括用于工具流的计算机可执行指令,其包括建模框架131、神经网络编译器132和神经网络运行时环境133。工具流可以用于生成神经网络数据200,神经网络数据200表示神经网络模型的全部或一部分,诸如以下关于图2讨论的神经网络模型。应当注意,虽然工具流被描述为具有三个单独的工具(131、132和133),但在各种示例中,工具流可以具有更少或更多的工具。例如,不同工具(131、132和133)的功能可以组合到单个建模和执行环境中。

神经网络数据200可以存储在存储器125中。神经网络数据200可以以一种或多种格式表示。例如,与给定神经网络模型相对应的神经网络数据200可以具有与工具流的每个相应工具相关联的不同格式。通常,神经网络数据200可以包括节点、边、分组、权重、偏置、激活函数和/或张量值的描述。作为具体示例,神经网络数据200可以包括用于表示神经网络模型的源代码、可执行代码、元数据、配置数据、数据结构和/或文件。

建模框架131可以用于定义和使用神经网络模型。作为一个示例,建模框架131可以包括可以用于指定神经网络模型的一个或多个方面的预定义API和/或编程原语。预定义API可以包括较低级别的API(例如,激活函数、成本或误差函数、节点、边和张量)和较高级别的API(例如,层、卷积神经网络、循环神经网络、线性分类器等)两者。“源代码”可以用作建模框架131的输入以定义给定神经网络模型的图的拓扑。特别地,可以在源代码内实例化和互连化建模框架131的API以指定复杂的神经网络模型。数据科学家可以通过使用不同API、不同数目的API以及以不同方式互连API来创建不同神经网络模型。

除了源代码,存储器125还可以存储训练数据。训练数据包括用于应用于神经网络模型200的一组输入数据和针对输入数据的每个相应数据集的来自神经网络模型的期望输出。建模框架131可以用于利用训练数据训练神经网络模型。训练的输出是与神经网络模型的每个节点相关联的权重和偏置。在训练神经网络模型之后,可以使用建模框架131对应用于已训练神经网络模型的新数据进行分类。具体地,已训练神经网络模型使用训练得到的权重和偏置来对未用于训练神经网络模型的数据执行分类和识别任务。建模框架131可以使用CPU 120和专用处理器(例如,GPU 122和/或神经网络加速器180),与仅使用CPU 120相比以提高的性能执行神经网络模型。在一些示例中,性能可以潜在地实现某些分类任务的实时性能。

编译器132分析为神经网络模型而提供的源代码和数据(例如,用于训练模型的示例),并且将模型转换为可以在神经网络加速器180上加速的格式,这将在下面进一步详细描述。具体地,编译器132将源代码转换为可执行代码、元数据、配置数据和/或数据结构,以将神经网络模型和存储器表示为神经网络数据200。在一些示例中,编译器132可以将神经网络模型划分为使用CPU 120和/或GPU 122的部分(例如,神经网络200)和可以在神经网络加速器180上执行的其他部分(例如,神经网络子图)。编译器132可以生成可执行代码(例如,运行时模块),以执行分配给CPU 120的子图并且与分配给加速器180的子图通信。编译器132可以为加速器180生成配置数据,该配置数据用于配置加速器资源以评估分配给可选加速器180的子图。编译器132可以创建数据结构,以用于存储由神经网络模型在执行和/或训练期间生成的值,并且用于在CPU 120与加速器180之间的通信。编译器132可以生成元数据,该元数据可以用于在运行时期间标识子图、边分组、训练数据和关于神经网络模型的各种其他信息。例如,元数据可以包括用于在神经网络模型的不同子图之间进行接口的信息。

运行时环境133提供可执行环境或解释器,该可执行环境或解释器可以用于在训练模式期间训练神经网络模型,并且可以用于在训练、推理或分类模式下评估神经网络模型。在推理模式期间,可以将输入数据应用于神经网络模型输入,并且可以根据神经网络模型的训练对输入数据进行分类。输入数据可以是存档数据或实时数据。

运行时环境133可以包括部署工具,部署工具在部署模式期间可以用于将神经网络的全部或部分部署或安装到神经网络加速器180。运行时环境133还可以包括调度器,调度器管理不同运行时模块的执行以及在运行时模块与神经网络加速器180之间的通信。因此,运行时环境133可以用于控制在神经网络模块130上建模的节点与神经网络加速器180之间的数据流。

在一个示例中,神经网络加速器180从神经网络模块130接收和返回普通精度值150。如图1所示,子图加速器186可以使用量化浮点来执行其大部分操作,并且在子图加速器186与神经网络模块130之间的接口可以使用全精度值来在模块之间通信信息。普通精度值可以以16比特、32比特、64比特或其他合适的浮点格式来表示。例如,可以接收表示神经网络的一部分值,包括边权重、激活值或其他合适的量化参数。普通精度值150被提供给普通精度浮点到量化浮点转换器152,转换器152将普通精度值转换为量化值。然后,可以对量化值执行量化浮点操作154。然后,可以使用量化浮点到普通浮点转换器将量化值转换回普通浮点格式,该转换器传输普通精度浮点值。作为具体示例,子图加速器186可以用于加速神经网络的给定层,并且向量向量、矩阵向量、矩阵矩阵和卷积运算可以使用量化浮点运算来执行并且计算密集度较小的运算(诸如添加偏置值或计算激活函数)可以使用普通浮点运算来执行。

由转换器152和156执行的在普通浮点与量化浮点之间的转换通常是对被表示为向量或多维矩阵的数字集执行的。在一些示例中,可以基于普通精度格式来执行附加的普通精度操作158(包括在特定神经网络实现中可能需要的操作),包括向神经网络的一个或多个节点添加偏置,向从量化浮点格式转换回的普通精度值应用双曲正切函数或其他这样的S型函数(sigmoid函数)、或整流函数(例如,ReLU操作)。

在一些示例中,量化值仅被使用并且存储在神经网络加速器180的逻辑门和内部存储器中,并且存储器125和存储装置127仅存储普通浮点值。例如,神经网络加速器180可以对从神经网络模型130接收的神经网络模型的输入、权重和激活进行量化,并且在将值传递回神经网络模型130之前,可以对在神经网络加速器180上执行的操作的结果进行去量化。可以使用存储器125、存储装置127或输入/输出接口(未示出)来在神经网络模型130与神经网络加速器180之间传递值。在其他示例中,仿真器提供量化的完整仿真,包括仅存储共享指数的一个副本以及以减少的尾数宽度进行操作。在以普通浮点执行基础操作的版本中,某些结果可以有所不同。例如,完整仿真版本可以检查有限的量化比特宽(例如,3、4或5比特宽尾数)的下溢或上溢情况。

DNN的大部分计算成本是向量-向量、矩阵-向量和矩阵-矩阵乘法和/或卷积。这些操作在输入大小上是二次的,而诸如偏置添加和激活函数等操作在输入大小上是线性的。因此,在一些示例中,量化仅应用于矩阵向量乘法运算,这在神经网络加速器180上实现。在这样的示例中,所有其他操作均以普通精度格式进行,诸如float16。因此,从用户或程序员的角度来看,启用量化的系统110从/向神经网络模块130接受和输出普通精度float16值并且输出float16格式值。向、以及来自块浮点格式的所有转换都可以对程序员或用户隐藏。在一些示例中,程序员或用户可以为量化操作指定某些参数。在其他示例中,量化操作可以利用块浮点格式来降低计算复杂度,如下面关于图3所讨论的。

神经网络加速器180用于加速神经网络图或子图的评估和/或训练,通常速度增加并且等待时间减少,这在仅使用CPU 120和/或GPU122评估子图时不会实现。在所示示例中,加速器包括张量处理单元(TPU)182、可重新配置逻辑器件184(例如,被包含在一个或多个FPGA或可编程电路结构中)和/或子图加速器186,但是可以使用任何合适的硬件加速器来模拟神经网络。加速器180可以包括提供软CPU的配置逻辑。软CPU监督加速器180上的加速图或子图的操作,并且可以管理与神经网络模块130的通信。软CPU还可以用于配置逻辑并且控制加速器上来自RAM的数据的加载和存储,例如在FPGA中的块RAM中。

在一些示例中,神经网络加速器180的参数可以是可编程的。神经网络加速器180可以用于对神经网络模型200的全部或部分的训练、推理或分类进行原型设计。例如,可以基于通过在神经网络加速器180内对网络进行原型设计而获取的准确性或性能结果来选择量化参数。在选择了一组期望量化参数之后,量化模型可以被编程到加速器180中以执行其他操作。

编译器132和运行时133提供神经网络模块130与神经网络加速器180之间的快速接口。实际上,神经网络模型的用户可能不知道模型的一部分正在所提供的加速器上被加速。例如,节点值通常通过将张量值写入包括标识符的数据结构来在模型中传播。运行时133将子图标识符与加速器相关联,并且向加速器提供用于转换消息的逻辑,以将权重、偏置和/或张量的值透明地写入神经网络加速器180,而无需程序干预。类似地,由神经网络加速器180输出的值可以与消息一起被透明地发送回神经网络模块130,该消息包括服务器处的接收节点的标识符和有效载荷,有效载荷包括发送回整个神经网络模型的诸如权重、偏置和/或张量等值。

图2示出了可以用于使用所公开的BFP实现方式来执行增强图像处理的深度神经网络(DNN)200的简化拓扑。一个或多个处理层可以使用所公开的用于量化和BFP矩阵/向量运算的技术来实现,包括在上述启用量化的系统110中使用多个神经网络子图加速器186中的一个或多个神经网络子图加速器。应当注意,本文中公开的神经网络实现的应用不限于DNN,而是还可以与其他类型的神经网络一起使用,诸如卷积神经网络(CNN)(包括具有长短期记忆(LSTM)或门控循环单元(GRU)的实现)或可以适于使用本文中公开的BFP方法和装置的其他合适的人工神经网络。

DNN 200可以以至少两种不同的模式操作。最初,DNN 200可以在训练模式下被训练,并且然后在推理模式下用作分类器。在训练模式期间,可以将一组训练数据应用于DNN200的输入,并且可以调节DNN 200的各种参数,以便在训练完成时,可以将DNN 200用作分类器。训练包括执行训练输入数据的前向传播,计算损失(例如,确定DNN的输出与DNN的预期输出之间的差异),以及通过DNN执行反向传播以调节DNN 200的参数(例如,权重和偏置)。当DNN 200的架构适合对训练数据进行分类时,DNN 200的参数将收敛并且训练可以完成。在训练之后,DNN 200可以用于推理模式。具体地,训练或非训练数据可以应用于DNN200的输入并且通过DNN 200前向传播,从而输入数据可以由DNN 200分类。

如图2所示,第一节点集合210(包括节点215和216)形成输入层。集合210中的每个节点连接到由第二节点集合220(包括节点225和226)形成的第一隐藏层中的每个节点。第二隐藏层由包括节点235的第三节点集合230形成。输出层由第四节点集合240(包括节点245)形成。在示例200中,给定层的节点与其(一个或多个)相邻层的节点完全互连。换言之,一层可以包括与该层的其他节点具有共同输入和/或向该层的其他节点的共同目的地提供输出的节点。在其他示例中,一层可以包括与该层的其他节点具有共同输入的子集和/或向该层的其他节点的共同目的地的子集提供输出的节点。

在前向传播期间,节点中的每个节点通过将权重应用于从前一节点生成的每个输入并且收集权重以产生输出值来产生输出值。在一些示例中,每个个体节点可以应用激活函数(σ)和/或偏置(b)。通常,适当编程的处理器或FPGA可以被配置为实现所描绘的神经网络200中的节点。在一些示例神经网络中,隐藏组合节点n的输出函数f(n)可以产生在数学上如下表达的输出:

其中w

给定神经网络可以包括数千个个体节点,因此以普通精度浮点执行节点的所有计算在计算上可能是昂贵的。计算成本较高的解决方案的实现方式可以包括比计算成本较低的解决方案的实现方式更大并且消耗更多能量的硬件。然而,使用量化浮点或混合精度(使用普通精度浮点和量化浮点)执行操作可能会降低神经网络的计算复杂度。仅使用量化浮点的简单实现方式可以显著降低计算复杂度,但由于量化引入的错误,该实现方式可能在训练和/或正确分类输入数据期间难以收敛。然而,混合精度实现方式可以潜在地提高某些计算的准确性,同时还提供降低与量化浮点相关联的复杂性的好处。

DNN 200的混合精度实现方式可以包括以普通精度浮点和量化浮点两者执行操作的节点。作为一个具体示例,隐藏组合节点n的输出函数f(n)可以产生在数学上如下表达的输出:

其中w

可以通过调节输出函数f(n)的组成值来训练和重新训练神经网络。例如,通过调节节点的权重w

其中w和b表示所有权重和偏置,n是训练输入的数目,a是针对训练输入x的输入向量的来自网络的输出值的向量。通过调节网络权重和偏置,可以使用各种搜索技术(例如,随机梯度下降)将成本函数C驱动到目标值(例如,为零(0))。当成本函数C被驱动到目标值时,神经网络被称为收敛。与输出函数f(n)类似,成本函数可以使用混合精度计算机算法来实现。例如,向量运算可以使用量化浮点值和运算来执行,并且非向量运算可以使用普通精度浮点值来执行。

这样的神经网络BFP实现的合适应用的示例包括但不限于:执行图像识别、执行语音识别、对图像分类、将语音转换为文本和/或其他语言、面部或其他生物识别、自然语言处理、自动语言转换、搜索引擎中的查询处理、自动内容选择、分析电子邮件和其他电子文档、关系管理、生物医学信息学、标识候选生物分子、提供建议或其他分类和人工智能任务。

网络加速器(诸如图1中的网络加速器180)可以用于加速DNN200的计算。作为一个示例,DNN 200可以被划分为可以个体加速的不同子图。作为具体示例,层210、220、230和240中的每个层可以是被加速的子图。层的计算成本较高的计算可以使用量化浮点来执行,并且层的计算成本较低的计算可以使用普通精度浮点来执行。可以使用普通精度浮点将值从一层传递到另一层。通过为一层内的所有节点加速一组计算,可以重用某些计算,并且与加速个体节点相比,可以减少该层执行的计算。

在一些示例中,每个卷积层中的一组并行乘法累加(MAC)单元可以用于加速计算。同样,并行乘法器单元可以用于完全连接和密集矩阵乘法阶段。也可以使用一组并行分类器。这种并行化方法具有以增加控制复杂性为代价进一步加速计算的潜力。

受益于本公开的本领域普通技术人员将容易理解,神经网络实现的应用可以用于使用神经网络的不同方面,无论是单独的还是与其他神经网络组合或子组合使用。例如,所公开的实现方式可以用于经由梯度下降和/或神经网络的反向传播操作来实现神经网络训练。此外,所公开的实现方式可以用于评估神经网络。

图3是示出如可以在所公开的技术的某些示例中使用的将普通浮点格式转换为量化块浮点格式的示例的图300。例如,表示为普通浮点数(例如,以32比特或16比特浮点格式)的神经网络的输入张量可以转换为图示的块浮点格式。

如图所示,很多普通浮点格式数310被表示为使得每个数(例如,数315或数316)包括符号、指数和尾数。例如,对于IEEE 754半精度浮点格式,符号用1比特表示,指数用5比特表示,尾数用10比特表示。当神经网络模型200中的浮点格式数310被转换为一组量化精度块浮点格式数时,有一个指数值被所示集合的所有数共享。因此,如图所示,该组块浮点数320由单个指数值330表示,而该组数字中的每个包括符号和尾数。然而,由于所示的该组数字具有浮点格式的不同指数值,所以每个数字的相应尾数可以被移位,使得相同或近似的数以量化格式表示(例如,移位尾数345和346)。

进一步地,如图3所示,使用块浮点格式可以减少某些常见操作所需要的计算资源。在所示示例中,两个浮点向量的点积以形式浮点格式(350)和块浮点格式(360)示出。对于以普通精度浮点格式运算350表示的数字,需要进行浮点加法来执行点积运算。在浮点向量的点积中,求和是以浮点执行的,这可能需要移位以将值与不同指数对准。另一方面,对于块浮点点积运算360,可以使用整数算法来计算乘积以组合所示的尾数元素。换言之,由于指数部分可以以块浮点表示被考虑在内,所以尾数的乘法和加法可以完全用定点或整数表示来进行。因此,可以使用共享指数保持数字集的较大动态范围,同时通过使用更多整数算法而不是浮点算法来降低计算成本。在一些示例中,由量化仿真器140执行的操作可以被优化以利用块浮点格式。

在一些示例中,共享指数330被选择为神经网络模型200中的原始普通精度数当中的最大指数。在其他示例中,可以以不同方式选择共享指数,例如,通过选择作为普通浮点指数的平均值或中值的指数,或者通过选择指数以在尾数中存储的值的数字被转换为量化数字格式时最大化尾数中存储的值的动态范围。应当注意,如果共享指数与值的原始浮点指数不同,则量化尾数的某些比特可能会丢失。发生这种情况是因为尾数被移位以对应于新的共享指数。

关于块浮点张量中的哪些值将共享指数,存在若干可能选择。最简单的选择是让整个矩阵或向量共享指数。但是,在更精细的粒度上共享指数可以减少错误,因为它增加了BFP数字使用更接近其原始普通浮点格式指数的共享指数的可能性。因此,可以减少由于丢弃尾数比特(当移位尾数以对应于共享指数时)而导致的精度损失。

例如,考虑将行向量x乘以矩阵W:y=xW。如果W的每一列共享指数,则每个点积xW

图4和图5示出了可以用于神经网络计算的替代块浮点格式。在神经网络的上下文中,核心操作是执行点积。例如,点积是矩阵乘法和卷积的核心计算。矩阵乘法涉及矩阵的行/列与输入向量的点积。卷积涉及滤波器与输入窗口的点积。在量化浮点的上下文中,被选择以共享指数的该组值可以对用于计算点积的计算机算术逻辑的复杂性产生影响。共享指数的值可以称为边界框内的值。边界框的形状可以影响量化误差和计算成本。虽然聚类相似的幅度值以创建边界框可以减少量化误差,但跟踪任意边界框形状的缩放因子可能很昂贵。相反,矩阵和过滤器可以划分为边界框,该边界框对于由神经网络执行的操作可能更有效。具体地,边界框的适当选择可以减少用于实现神经网络的操作的计算机算术电路的复杂性。图4示出了可能非常适合矩阵的块浮点格式,图5示出了非常适合卷积滤波器的块浮点格式。

图4是示出如可以在所公开的技术的某些示例中使用的四种备选块浮点格式的图400。如图所示,第一格式410表示共享单个指数425的整个值数组420。换言之,整个值数组420被封装在单个边界框内。

在第二格式430中,在每一列的基础上共享共同指数。换言之,矩阵的列是值的边界框。因此,在该具体示例中,存储在矩阵的偶数列431中的块浮点值各自共享第一单个指数432。存储在奇数列435中的块浮点值各自共享第二单个指数437。在其他示例中,数组的每一列可以与不同共享指数相关联。对于备选格式的11列图块,可以有11个对应共享指数,每一列一个共享指数。在其他示例中,数组的每一行可以与不同共享指数相关联,或者奇数行和偶数行可以与共享共同指数相关联。

示出了第三格式450,其中数组中的各组元素共享共同指数。例如,如果15×15值矩阵根据第三格式450共享指数,则第一组5×5元素组455和456共享单个共享指数458。类似地,在数组460和461中的第二5×5元素组可以各自共享第二单个指数468。在其他示例中,每个图块可以与其相应共享指数相关联。在示例格式450中,15×15矩阵可以有九个共享指数。

示出了第四格式470,其中基于图块加每一列来共享两个共享指数。因此,包括数字480、481和485的第一组数字全部都共享单个共同指数488。类似地,包括组490和491的第二组数字各自共享不同的第二单个指数495。在备选示例中,所示的每个组可以有其自己的共享指数。

在一些示例中,可以通过减少尾数宽度来进一步降低矩阵向量乘法的计算成本。可以仅用数个比特尾数来表示具有共享共同指数的较大值范围,例如,在具有4比特尾数和5比特指数的表示中,可以表示在[2

图5是示出如可以在所公开的技术的某些示例中使用的三种备选块浮点格式的图500。这些格式可以对二维卷积有用,但这些格式也可以被一般化到更高维的卷积。如图所示,第一格式510表示共享单个指数514的值的整个卷积滤波器512。值的不同卷积滤波器516可以共享单个指数518。因此,格式510示出了整个卷积滤波器可以是值的边界框。

在第二格式520中,每个空间像素可以是边界框,使得沿着通道维度在每个空间像素的基础上共享共同指数。如图所示,空间像素值522共享单个指数524,并且空间像素值526共享单个指数528。例如,对于具有维度[Y,y,c

在第三格式530中,每个空间像素可以沿着通道维度被细分,使得边界框包括空间像素的细分。如图所示,细分空间像素值532共享单个指数534并且细分空间像素值536共享单个指数538。对于较小c

图6是描绘如可以在所公开的技术的某些示例中实现的使用量化模型来训练神经网络的方法600的流程图。例如,训练神经网络可以包括迭代通过一组训练数据,其中方法600用于在训练数据的给定迭代期间更新神经网络的参数。作为一个示例,方法600可以由启用量化的系统执行,诸如图1的启用量化的系统110。

在过程框610处,可以初始化神经网络的参数,诸如权重和偏置。作为一个示例,权重和偏置可以被初始化为随机普通精度浮点值。作为另一示例,权重和偏置可以被初始化为从早期训练集计算的普通精度浮点值。初始参数可以存储在启用量化的系统的存储器或存储装置中。在一个示例中,参数可以被存储为量化浮点值,这可以减少用于存储初始参数的存储量。

在过程框620处,神经网络的输入值可以向前传播通过神经网络。神经网络的给定层的输入值可以是神经网络另一层的输出。这些值可以使用普通精度浮点在层之间从一层的输出传递到下一层的输入。第i层的输出函数可以包括在数学上如下描述的项:

y

其中y

在过程框630处,可以计算神经网络的损失。例如,可以将神经网络的输出y与神经网络的预期输出

在过程框640处,神经网络的损失可以反向传播通过神经网络。在反向传播期间,可以计算输出误差项

其中

权重误差项

其中

在过程框650处,可以更新每一层的参数。例如,可以通过基于训练的迭代计算新的权重来更新每一层的权重。作为一个示例,权重更新函数可以在数学上描述为:

其中

图7是描绘混合精度浮点环境和在普通精度浮点域与量化浮点域之间的划分的示例的框图700。如上所述,计算成本较高的运算(诸如向量-向量、向量矩阵、矩阵-矩阵和卷积运算)可以由量化层710在量化浮点域中执行。计算成本较低的运算(诸如标量加法和标量乘法)可以在普通精度浮点域中在量化层710外部执行。关于神经网络,神经网络可以被划分成层(诸如层710)。一层内的大部分计算工作可以在量化浮点域中执行,并且该层的计算成本较低的运算(诸如添加偏置值或计算激活函数)可以在普通精度浮点域中执行。在各层之间接口的值可以在普通精度浮点域中从一层传递到另一层。通过专门为给定层量化输入,量化可以以该层的操作为目标使得该层的操作更加高效。具体地,可以选择量化浮点格式的边界框以降低计算机算术电路的复杂性,从而使计算机逻辑潜在地更快和/或更节能。

作为一个示例,给定层的输出值y

在反向传播流程730中,后一层的输出误差项可以通过量化器732从普通精度浮点域通信到量化浮点域。来自给定层的输出误差项可以通过去量化器734从量化浮点域通信到普通精度浮点域。给定层的权重可以通过量化器742从普通精度浮点域通信到量化浮点域。来自给定层的权重误差项可以通过去量化器754从量化浮点域通信到普通精度浮点域。

用于使用混合精度浮点来训练神经网络的示例方法

图8是描绘使用混合精度数据格式训练神经网络加速器的示例方法800的流程图。混合精度数据格式可以包括普通精度浮点格式和量化精度浮点格式。作为一个示例,方法800可以由启用量化的系统的神经网络加速器执行,诸如图1的启用量化的系统110的神经网络加速器180。

在过程框810处,可以接收多层神经网络的一层的输入张量。该层的输入张量可以是神经网络前向传播或反向传播模式期间的输入。例如,输入张量可以是来自该层的输入边的输入值(例如,x

在过程框820处,可以将该层的输入张量从普通精度浮点格式转换为量化精度浮点格式。从普通精度浮点格式转换为量化精度浮点格式可以包括选择围绕一组普通精度浮点值的边界框,确定共享普通精度浮点值的共享指数,并且调节普通精度浮点值的尾数值的比特宽(诸如通过减少量化浮点值中尾数的比特数并且移比特尾数值以考虑共享指数)。例如,量化精度浮点格式可以是块浮点格式,其将多个值组合在一起,使得多个尾数值可以共享共同指数。在边界框内被分组在一起并且共享块浮点格式的指数的值可以基于输入张量的维度和/或要在该层内执行的操作来选择。例如,边界框可以是行、列、行或列的一部分、二维形状或三维形状。用于量化的边界框在前向传播期间可能与在反向传播期间不同。

作为具体示例,该层可以接收一对输入张量A和B,该对输入张量是要在该层内相乘的二维矩阵。换言之,该层可以执行矩阵乘法AB。执行矩阵乘法AB包括取A的各行与B的各列的点积。可以选择边界框以包括A的各行(或A的至少部分行),并且可以围绕B的各列(或B的至少部分行)选择边界框。因此,量化输入张量A可以包括对具有共享指数的一行的尾数值进行分组,并且量化输入张量B可以包括对具有共享指数的一列的尾数值进行分组。对于三维卷积滤波器,量化输入张量可以包括沿通道维度对具有空间像素的尾数值的共享指数进行分组。

在过程框830处,可以使用转换后的输入张量的量化精度浮点格式作为输入来执行张量运算。例如,张量运算可以是向量-向量、向量-矩阵、矩阵-矩阵或卷积运算。例如,张量运算可以是加法、乘法、点积、卷积、或组合张量元素以产生结果的其他运算。张量运算的输出结果可以是标量值或张量值。

在过程框840处,可以将张量运算的结果从量化精度浮点格式转换为普通精度浮点格式。从量化精度浮点格式转换为普通精度浮点格式可以包括为普通精度浮点值生成指数值并且调节普通精度浮点值的尾数值(诸如增加尾数值的比特数和/或移位尾数值以考虑所生成的指数)。

在可选的过程框850处,可以使用经转换的、普通精度浮点格式的结果来执行操作。例如,可以使用经转换的、普通精度浮点格式的结果来计算标量相加(诸如添加偏置值)或激活函数。

在过程框860处,可以使用经转换的、普通精度浮点格式的结果来更新神经网络的该层的操作参数,其中该参数以普通精度浮点格式存储。例如,操作参数可以是该层的权重或偏置值。通过更新该层的操作参数,对于给定输入刺激,神经网络的行为将不同于未经训练的神经网络。例如,通过训练神经网络并且更新操作参数,神经网络可以学习将输入数据(诸如图像数据、音频数据或其他感官数据)分类成各类别。

图9是描绘使用混合精度数据格式操作神经网络加速器的示例方法900的流程图。混合精度数据格式可以包括普通精度浮点格式和块浮点格式。作为一个示例,方法900可以由启用量化的系统执行,诸如图1的启用量化的系统110的神经网络加速器180。

在过程框910处,可以将硬件加速器配置为加速多层神经网络的一层。硬件加速器可以包括张量处理单元(TPU)、软处理器核心、可编程逻辑(例如,可编程查找表(LUT)和/或块RAM)和/或用于加速神经元和/或神经元层计算的专用电路。配置硬件加速器可以包括为TPU、软处理器核心或其他专用处理器加载指令;和/或将配置数据加载到可编程逻辑资源上使得可编程逻辑执行加速神经网络操作的任务。例如,该层可以是卷积层、全连接层、部分连接层、长短期记忆(LSTM)网络层或循环神经网络(RNN)层。

在过程框920处,可以将该层的输入张量从普通精度浮点格式转换为块浮点格式。该层的输入张量可以是神经网络的前向传播或反向传播模式期间的输入。例如,在前向传播期间,输入张量可以是来自该层的输入边的输入值或该层的操作参数,诸如权重或偏置值。在反向传播期间,输入张量可以是从相邻层反向传播的输出误差项或该层的操作参数。输入张量可以是从神经网络加速器的输入/输出接口、片上存储器、片外存储器或其他存储位置接收的。输入张量可以包括多个普通精度浮点值,其中每个值包括符号、尾数值和指数值。从普通精度浮点格式转换为量化精度浮点格式可以包括选择围绕一组普通精度浮点值的边界框,确定共享普通精度浮点值的共享指数,以及调节普通精度浮点值的尾数值的比特宽(诸如通过减少量化浮点值中尾数的比特数并且移位尾数值以考虑共享指数)。例如,量化精度浮点格式可以是将多个值组合在一起使得多个尾数值可以共享共同指数的块浮点格式。被分组在一起并且共享块浮点格式的指数的值可以基于输入张量的维度和/或要在该层内执行的操作来选择。

在过程框930处,可以使用转换后的输入张量的块浮点格式来执行张量运算。例如,张量运算可以是向量-向量、向量-矩阵、矩阵-矩阵或卷积运算。例如,张量运算可以是加法、乘法、点积、卷积或组合张量元素以产生结果的其他运算。张量运算的输出结果可以是标量值或张量值。

在过程框940处,可以将张量运算的结果从块浮点格式转换为普通精度浮点格式。例如,结果可以是该层的节点的中间值、该层的节点的输出值、或操作参数,诸如该层的权重或偏置值。从量化精度浮点格式转换为普通精度浮点格式可以包括为普通精度浮点值生成指数值并且调节普通精度浮点值的尾数值(诸如增加尾数值的比特数和/或移位尾数值以考虑所生成的指数)。

在可选的过程框950处,可以使用经转换的、普通精度浮点格式的结果来执行操作。例如,可以使用经转换的、普通精度浮点格式的结果来计算标量相加(诸如添加偏置值)或激活函数。

在过程框960处,可以使用经转换的、普通精度浮点格式的结果来生成神经网络的该层的输出张量,其中输出张量是以普通精度浮点格式。在神经网络的各层之间传输的值可以以普通精度浮点格式传递,这可以提高神经网络的准确性,从而在训练期间实现更快的收敛和实现更准确的推理。通过更新神经网络的各层的输出张量,神经网络可以潜在地将输入数据(诸如图像数据、音频数据或其他感官数据)分类成各类。

所公开的技术的附加示例

本文中根据以上讨论的示例讨论了所公开的主题的附加示例。

在所公开的技术的一个示例中,一种计算系统包括存储神经网络的给定层的操作参数的计算机可读存储器。计算系统还包括与计算机可读存储器通信的硬件加速器。硬件加速器被配置为接收多层神经网络的给定层的输入张量。输入张量从普通精度浮点格式转换为量化精度浮点格式。使用转换为量化精度浮点格式的输入张量执行张量运算。张量运算的结果从量化精度浮点格式转换为普通精度浮点格式。经转换的、以普通精度浮点格式的结果用于更新存储在计算机可读存储器中的操作参数,其中该参数以普通精度浮点格式存储。使用经转换的、普通精度浮点格式的结果来更新操作参数可以包括执行标量运算,该标量运算使用经转换的、普通精度浮点格式的结果来生成操作参数。

量化精度浮点格式可以是具有共享共同指数的多个尾数值的块浮点格式。例如,输入张量可以是二维矩阵,并且块浮点格式可以使给定行内的多个尾数值共享共同指数,并且不同行中的尾数值具有相应不同指数。输入张量可以是卷积滤波器,并且块浮点格式可以使空间像素内的多个尾数值共享共同指数。

张量运算可以是矩阵-矩阵乘法。张量运算可以是点积计算。张量运算可以是卷积。张量运算可以是向量-向量或向量-矩阵运算。张量运算可以在神经网络的前向传播模式或反向传播模式期间执行。例如,在反向传播模式期间,输入张量可以是来自与给定层相邻(例如,在给定层之后)的一层的输出误差项或给定层的权重。作为另一示例,在前向传播模式期间,输入张量可以是来自与给定层相邻(例如,在给定层之前)的一层的输出项或给定层的权重。

在一个示例中,一种用于神经网络加速器的方法包括将神经网络加速器配置为加速多层神经网络的给定层。将给定层的输入张量从普通精度浮点格式转换为块浮点格式。使用转换为块浮点格式的输入张量执行张量运算。将张量运算的结果从块浮点格式转换为普通精度浮点格式。使用经转换的、普通精度浮点格式的结果来生成神经网络的该层的输出张量,其中输出张量是以普通精度浮点格式。

将神经网络加速器配置为加速多层神经网络的给定层可以包括将配置数据加载到可编程硬件上使得可编程硬件执行多层神经网络的给定层的操作。将神经网络加速器配置为加速多层神经网络的给定层可以包括对张量处理单元进行编程。将神经网络加速器配置为加速多层神经网络的给定层可以包括初始化多层神经网络的给定层的输入边的权重。

将给定层的输入张量从普通精度浮点格式转换为块浮点格式可以包括为输入张量的多个元素选择边界框。边界框可以基于所执行的张量运算来选择。所执行的张量运算可以是矩阵-矩阵乘法,并且所选择的边界框可以是输入张量矩阵的列。所执行的张量运算可以是矩阵-矩阵乘法,所选择的边界框可以是输入张量的矩阵的一行。将给定层的输入张量从普通精度浮点格式转换为块浮点格式可以包括:为输入张量的多个元素选择边界框;为输入张量的边界框内的所选择的多个元素标识共享指数;缩放输入张量的元素的尾数值,使得缩放后的尾数的整数部分具有用于块浮点格式的所选择的比特数;从尾数的缩放后的整数部分中去除分数位;并且舍入尾数以产生块浮点值。

在一个示例中,一种或多种计算机可读介质存储计算机可执行指令,该指令在由神经网络加速器执行时引起神经网络加速器执行操作。该操作包括将多层神经网络的给定层的输入张量从普通精度浮点格式转换为块浮点格式。该操作包括使用神经网络的给定层的操作参数和转换为块浮点格式的输入张量来执行张量运算。例如,张量运算可以是卷积或矩阵-矩阵乘法。作为另一示例,张量运算可以在神经网络的反向传播模式或前向传播模式期间执行。该操作包括将张量运算的结果从块浮点格式转换为普通精度浮点格式。该操作包括使用经转换的、普通精度浮点格式的结果来更新存储在一种或多种计算机可读介质中的操作参数。

输入张量可以是二维矩阵。将输入张量从普通精度浮点格式转换为块浮点格式可以包括选择二维矩阵的列内的多个元素以共享块浮点格式的共同指数。将输入张量从普通精度浮点格式转换为块浮点格式可以包括选择二维矩阵的一行内的多个元素以共享块浮点格式的共同指数。

示例计算环境

图10示出了可以在其中实现所描述的实施例、技术和科技(包括支持多语言回放框架)的合适的计算环境1000的一般化示例。

计算环境1000不旨在对技术的使用范围或功能提出任何限制,因为该技术可以在不同的通用或专用计算环境中实现。例如,所公开的技术可以用其他计算机系统配置来实现,包括手持设备、多处理器系统、可编程消费电子器件、网络PC、小型计算机、大型计算机等。所公开的技术还可以在分布式计算环境中实现,其中任务由通过通信网络链接的远程处理设备执行。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中。

参考图10,计算环境1000包括至少一个处理单元1010、和存储器1020。在图10中,这个最基本的配置1030被包括在虚线内。处理单元1010执行计算机可执行指令,并且可以是真实或虚拟处理器。在多处理系统中,多个处理单元执行计算机可执行指令以增加处理能力,因此,多个处理器可以同时运行。存储器1020可以是易失性存储器(例如,寄存器、高速缓存、RAM)、非易失性存储器(例如,ROM、EEPROM、闪存等)、或两者的某种组合。存储器1020存储可以例如实现本文中描述的技术的软件1080、图像和视频。计算环境可以具有附加特征。例如,计算环境1000包括存储装置1040、一个或多个输入设备1050、一个或多个输出设备1060、以及一个或多个通信连接1070。互连件机制(未示出)(诸如总线、控制器或网络)互连件计算环境1000的组件。通常,操作系统软件(未示出)为在计算环境1000中执行的其他软件提供操作环境,并且协调计算环境1000的组件的活动。

存储装置1040可以是可移动的或不可移动的,并且包括磁盘、磁带或盒式磁带、CD-ROM、CD-RW、DVD、或者可以用于存储信息并且可以在计算环境1000内被访问的任何其他介质。存储装置1040存储可以用于实现本文中描述的技术的软件1080的指令、插件数据和消息。

(一个或多个)输入设备1050可以是向计算环境1000提供输入的触摸输入设备,诸如键盘、小键盘、鼠标、触摸屏显示器、笔或轨迹球、语音输入设备、扫描设备或其他设备。对于音频,(一个或多个)输入设备1050可以是接受模拟或数字形式的音频输入的声卡或类似设备,或者是向计算环境1000提供音频样本的CD-ROM读取器。(一个或多个)输出设备1060可以是显示器、打印机、扬声器、CD刻录机、或提供来自计算环境1000的输出的另一设备。

(一个或多个)通信连接1070使得能够通过通信介质(例如,连接网络)与另一计算实体通信。通信介质以调制数据信号通信诸如计算机可执行指令、压缩图形信息、视频或其他数据等信息。(一个或多个)通信连接1070不限于有线连接(例如,兆位或千兆以太网、Infiniband、光纤通道或光纤通道连接),还包括无线技术(例如,经由Bluetooth、WiFi(IEEE 802.11a/b/n)、WiMax、蜂窝、卫星、激光、红外线的RF连接)以及用于为所公开的代理、网桥和代理数据消费者提供提供网络连接的其他合适的通信连接。在虚拟主机环境中,(一个或多个)通信连接可以是由虚拟主机提供的虚拟化网络连接。

所公开方法的一些实施例可以使用在计算云1090中实现所公开的技术的全部或一部分的计算机可执行指令来执行。例如,所公开的方法可以在位于计算环境1030中的处理单元1010上执行,或者所公开的方法可以在位于计算云1090中的服务器上执行。

计算机可读介质是可以在计算环境1000内访问的任何可用介质。作为示例而非限制,利用计算环境1000,计算机可读介质包括存储器1020和/或存储装置1040。如应当容易理解的,术语计算机可读存储介质包括用于数据存储的介质,诸如存储器1020和存储装置1040,而不包括诸如调制数据信号等传输介质。

鉴于可以应用所公开的主题的原理的很多可能的实施例,应当认识到,所示的实施例仅是优选示例,而不应当被视为将权利要求的范围限制为这些优选的示例。相反,所要求保护的主题的范围由所附权利要求限定。因此,我们要求将落入这些权利要求范围内的所有内容作为我们的发明。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号