存储高效的神经网络

阅读:651发布:2020-05-08

专利汇可以提供存储高效的神经网络专利检索,专利查询,专利分析的服务。并且本 发明 公开了存储高效的神经网络。具体地,方法的一个 实施例 包括使用权重在神经网络中执行一个或更多个激活函数,所述权重已经从浮点值被量化为使用比所述浮点值更少的比特表示的值。该方法还包括在使用 训练数据 使用神经网络的第一数量的前向-反向传递更新浮点值之后,执行权重的从浮点值到使用比该浮点值更少的比特表示的值的第一量化。该方法还包括在权重的第一量化之后,在使用神经网络的第二数量的前向-反向传递更新浮点值之后,执行权重的从浮点值到使用比该浮点值更少的比特表示的值的第二量化。,下面是存储高效的神经网络专利的具体信息内容。

1.一种处理器,包括:
一个或更多个算术逻辑单元(ALU),用于使用已经从第一浮点值表示转换为第二浮点值表示的权重在神经网络中执行一个或更多个激活函数,所述第二浮点值表示比所述第一浮点值表示具有更少的比特。
2.如权利要求1所述的处理器,其中所述一个或更多个ALU还通过将所述权重应用于激活输入,来在所述神经网络中执行一个或更多个激活函数,所述激活输入已经从所述第一浮点值表示转换为所述第二浮点值表示。
3.如权利要求1所述的处理器,其中所述权重通过以下方式转换:
在使用训练所述神经网络的第一数量的前向-反向传递来更新所述权重之后,执行所述权重的从所述第一浮点值表示到所述第二浮点值表示的第一量化;以及在所述权重的所述第一量化之后,在使用训练所述神经网络的第二数量的前向-反向传递来更新所述权重之后,执行所述权重的从所述第一浮点值表示到所述第二浮点值表示的第二量化。
4.如权利要求3所述的处理器,其中基于与训练所述神经网络相关联的偏移超参数来确定所述前向-反向传递的第一数量。
5.如权利要求3所述的处理器,其中基于与训练所述神经网络相关联的频率超参数来确定所述前向-反向传递的第二数量。
6.如权利要求1所述的处理器,其中所述权重通过以下方式转换:
冻结所述神经网络的第一一个或更多个层中的所述权重的第一部分;以及修改所述神经网络的第二一个或更多个层中的所述权重的第二部分。
7.如权利要求6所述的处理器,其中在修改所述第二一个或更多个层中的所述权重的所述第二部分之前,量化所述第一一个或更多个层的输出。
8.如权利要求6所述的处理器,其中所述权重通过以下方式转换:
在修改所述权重的所述第二部分之后,冻结所述神经网络的第二一个或更多个层中的所述权重的所述第二部分;以及
修改所述第二一个或更多个层之后的所述神经网络的第三一个或更多个层中的所述权重的第三部分。
9.如权利要求6所述的处理器,其中修改所述权重的所述第二部分包括:
至少基于所述第一一个或更多个层的输出来更新所述权重的所述第二部分中的浮点值;以及
将所述权重的所述第二部分从所述第一浮点值表示转换为所述第二浮点值表示。
10.一种方法,包括:
训练一个或更多个神经网络,其中训练所述一个或更多个神经网络包括:将权重参数从第一浮点值表示转换为第二浮点值表示,所述第二浮点值表示比所述第一浮点值表示具有更少的比特。
11.如权利要求10所述的方法,其中转换所述权重参数包括:
在使用训练所述一个或更多个神经网络的第一数量的前向-反向传递来更新所述权重参数之后,执行所述权重参数的从所述第一浮点值表示到所述第二浮点值表示的第一量化;以及
在所述权重参数的所述第一量化之后,在使用训练所述一个或更多个神经网络的第二数量的前向-反向传递来更新所述权重参数之后,执行所述权重参数的从所述第一浮点值表示到所述第二浮点值表示的第二量化。
12.如权利要求11所述的方法,还包括:
基于与训练所述一个或更多个神经网络相关联的偏移超参数来确定所述前向-反向传递的第一数量。
13.如权利要求11所述的方法,还包括:
基于与训练所述一个或更多个神经网络相关联的频率超参数来确定所述前向-反向传递的第二数量。
14.如权利要求10所述的方法,其中转换所述权重参数包括:
冻结所述一个或更多个神经网络的第一一个或更多个层中的所述权重参数的第一部分;以及
修改所述第一一个或更多个层之后的所述一个或更多个神经网络的第二一个或更多个层中的所述权重参数的第二部分。
15.如权利要求14所述的方法,还包括:在修改所述第二一个或更多个层中的所述权重参数的所述第二部分之前,量化所述第一一个或更多个层的输出。
16.如权利要求14所述的方法,还包括:
在修改所述权重参数的所述第二部分之后,冻结所述一个或更多个神经网络的所述第二一个或更多个层中的所述权重参数的所述第二部分;以及
修改所述第二一个或更多个层之后的所述一个或更多个神经网络的第三一个或更多个层中的所述权重参数的第三部分。
17.如权利要求14所述的方法,其中修改所述权重参数的所述第二部分包括:
至少基于所述第一一个或更多个层的输出来更新所述权重参数的所述第二部分中的浮点值;以及
将所述权重参数的所述第二部分从所述第一浮点值表示转换为所述第二浮点值表示。
18.如权利要求14所述的方法,其中所述神经网络的所述第一一个或更多个层包括卷积层、批归一化层和激活层。
19.如权利要求10所述的方法,其中所述权重参数与所述神经网络中的全连接层相关联。
20.一种系统,包括:
一个或更多个计算机,包括一个或更多个处理器,用于训练一个或更多个神经网络,其中训练所述一个或更多个神经网络包括:将权重参数从第一浮点值表示转换为第二浮点值表示,所述第二浮点值表示比所述第一浮点值表示具有更少的比特。
21.如权利要求20所述的系统,其中转换所述权重参数包括:
在使用训练所述一个或更多个神经网络的第一数量的前向-反向传递来更新所述权重参数之后,执行所述权重参数的从所述第一浮点值表示到所述第二浮点值表示的第一量化;以及
在所述权重参数的所述第一量化之后,在使用训练所述一个或更多个神经网络的第二数量的前向-反向传递来更新所述权重参数之后,执行所述权重参数的从所述第一浮点值表示到所述第二浮点值表示的第二量化。
22.如权利要求21所述的系统,其中所述前向-反向传递的第一数量基于与训练所述一个或更多个神经网络相关联的偏移超参数。
23.如权利要求21所述的系统,其中所述前向-反向传递的第二数量基于与训练所述一个或更多个神经网络相关联的频率超参数。
24.一种机器可读介质,其上存储有指令集,如果由一个或更多个处理器执行所述指令集,则使得所述一个或更多个处理器至少:
训练一个或更多个神经网络,其中训练所述一个或更多个神经网络包括:将权重参数从第一浮点值表示转换为第二浮点值表示,所述第二浮点值表示比所述第一浮点值表示具有更少的比特。
25.如权利要求24所述的机器可读介质,其中转换所述权重参数包括:
在使用训练所述一个或更多个神经网络的第一数量的前向-反向传递来更新所述权重参数之后,执行所述权重参数的从所述第一浮点值表示到所述第二浮点值表示的第一量化;以及
在所述权重参数的所述第一量化之后,在使用训练所述一个或更多个神经网络的第二数量的前向-反向传递来更新所述权重参数之后,执行所述权重参数的从所述第一浮点值表示到所述第二浮点值表示的第二量化。
26.如权利要求25所述的机器可读介质,其中所述前向-反向传递的第一数量基于与训练所述一个或更多个神经网络相关联的偏移超参数。
27.如权利要求25所述的机器可读介质,其中所述前向-反向传递的第二数量基于与训练所述一个或更多个神经网络相关联的频率超参数。

说明书全文

存储高效的神经网络

[0001] 相关申请的交叉引用
[0002] 本申请要求2018年9月12日提交的序列号为62/730,508、标题为“训练量化的深度神经网络(Training Quantized Deep Neural Networks)”的美国临时专利申请的优先权权益。该相关申请的主题在此通过引入并入本文。

背景技术

[0003] 神经网络具有计算密集的层,例如卷积层和/或全连接层。这种神经网络通常使用全精度算法进行训练和部署。全精度算法计算复杂并且具有显着的内存占用,使得神经网络的执行时间和内存密集。附图说明
[0004] 因此,可以详细地理解各个实施例的上述特征的方式,可以通过参考各个实施例来获得上面简要概述的发明构思的更具体的描述,其中一些实施例在附图中被示出。然而,应当注意,附图仅示出了本发明构思的典型实施例,因此不应被视为以任何方式限制范围,并且存在其他同样有效的实施例。
[0005] 图1A示出了被配置为实现各个实施例的一个或更多个方面的系统。
[0006] 图1B示出了用于执行与一个或更多个实施例相关联的推理和/或训练操作的推理和/或训练逻辑。
[0007] 图1C示出了根据其他各个实施例的推理和/或训练逻辑。
[0008] 图2是根据各个实施例的图1的训练引擎和推理引擎的更详细的图示。
[0009] 图3是根据各个实施例的用于量化神经网络中的权重的方法步骤的流程图
[0010] 图4是根据各个实施例的用于量化神经网络中的激活的方法步骤的流程图。
[0011] 图5是示出被配置为实现各个实施例的一个或更多个方面的计算机系统框图
[0012] 图6是根据各个实施例的包括在图5的并行处理子系统中的并行处理单元(PPU)的框图。
[0013] 图7是根据各个实施例的包括在图6的并行处理单元(PPU)中的通用处理集群(GPC)的框图。

具体实施方式

[0014] 在以下描述中,阐述了许多具体细节以提供对各个实施例的更透彻的理解。然而,对于本领域技术人员显而易见的是,可以在没有这些具体细节中的一个或更多个的情况下实践本发明构思。
[0015] 系统总览
[0016] 图1A示出了被配置为实现各个实施例的一个或更多个方面的计算设备100。在一个实施例中,计算设备100可以是台式计算机、膝上型计算机、智能电话、个人数字助理(PDA)、平板计算机或被配置为接收输入、过程数据和可选地显示图像的任何其他类型的计算设备,并且适于实践一个或更多个实施例。注意,这里描述的计算设备是说明性的,并且任何其他技术上可行的配置都落入本公开的范围内。
[0017] 在一个实施例中,计算设备100包括但不限于:连接一个或更多个处理单元102的互连(总线)112、耦合到一个或更多个输入/输出(I/O)设备108的输入/输出(I/O)设备接口104、内存116、存储器114和网络接口106。一个或更多个处理单元102可以是被实现为以下项的任何合适的处理器:中央处理单元(CPU)、图形处理单元(GPU)、专用集成电路(ASIC)、现场可编程阵列(FPGA)、人工智能(AI)加速器、任何其他类型的处理单元,或不同处理单元的组合,例如配置为与GPU结合操作的CPU。在一个实施例中,一个或更多个处理单元102可以是能够处理数据和/或执行软件应用程序的任何技术上可行的硬件单元。在一个实施例中,计算设备100中示出的计算元件可以对应于物理计算系统(例如,数据中心中的系统),或者可以是在计算内执行的虚拟计算实例。在一个实施例中,一个或更多个处理单元102配置有逻辑122。下面结合图1B和/或图1C提供关于逻辑122的各个实施例的细节。
[0018] 在一个实施例中,I/O设备108包括能够提供输入的设备,例如键盘鼠标、触敏屏等,以及能够提供输出的设备,例如显示设备。另外,I/O设备108可以包括能够既接收输入又提供输出的设备,例如触摸屏、通用串行总线(USB)端口等。I/O设备108可以被配置为从计算设备100的终端用户(例如,设计者)接收各种类型的输入,并且向计算设备100的终端用户提供各种类型的输出,诸如显示数字图像或数字视频或文本。在一些实施例中,I/O设备108中的一个或更多个被配置为将计算设备100耦合到网络110。
[0019] 在一个实施例中,网络110是任何技术上可行类型的通信网络,其允许在计算设备100与外部实体或设备(例如web服务器或另一联网计算设备)之间交换数据。例如,网络110可以包括广域网(WAN)、局域网(LAN)、无线(WiFi)网络和/或因特网等。
[0020] 在一个实施例中,存储器114包括用于应用程序和数据的非易失性存储器,并且可以包括固定的或可移除的磁盘驱动器、闪存设备和CD-ROM、DVD-ROM、蓝光、HD-DVD或其他磁、光或固态存储设备。训练引擎201和推理引擎221可以存储在存储器114中,并在执行时加载到内存116中。
[0021] 在一个实施例中,内存116包括随机存取存储器(RAM)模、闪存单元或任何其他类型的内存单元或其组合。一个或更多个处理单元102、I/O设备接口104和网络接口106被配置为从内存116读取数据和向内存116写入数据。内存116包括可由一个或更多个处理器102执行的各种软件程序和与所述软件程序相关联的应用程序数据。
[0022] 图1B示出了用于执行与一个或更多个实施例相关联的推理和/或训练操作的推理和/或训练逻辑122。
[0023] 在一个实施例中,推理和/或训练逻辑122可以包括但不限于数据存储器101,用于存储对应于神经网络的神经元或层的前向和/或输出权重和/或输入/输出数据,所述神经网络被训练和/或被使用以用于一个或更多个实施例的方面的推理。在一个实施例中,数据存储器101存储神经网络的每个层的权重参数和/或输入/输出数据,所述神经网络在使用一个或更多个实施例的方面进行训练和/或推理期间在输入/输出数据和/或权重参数的前向传播期间结合一个或更多个实施例进行训练或使用。在一个实施例中,数据存储器101的任何部分可以包括在其他片上或片外数据存储器中,包括处理器的L1、L2或L3高速缓存或系统内存。在一个实施例中,数据存储器101的任何部分可以在一个或更多个处理器或其他硬件逻辑设备或电路的内部或外部。在一个实施例中,数据存储器101可以是高速缓存存储器、动态随机可寻址存储器(DRAM)、静态随机可寻址存储器(SRAM)、非易失性存储器(例如,闪存)或其他存储器。在一个实施例中,对数据存储器101是在处理器的内部还是外部(例如,或者由DRAM、SRAM、闪存或一些其他存储类型组成)的选择可以取决于片上对片外的可用存储,正在执行的训练和/或推理函数的延迟要求,用于神经网络的推理和/或训练的数据的批大小,或这些因素的某种组合。
[0024] 在一个实施例中,推理和/或训练逻辑122可包括但不限于数据存储器105,用于存储对应于神经网络的神经元或层的反向和/或输出权重和/或输入/输出数据,所述神经网络被训练和/或被使用以用于一个或更多个实施例的方面的推理。在一个实施例中,数据存储器105存储神经网络的每个层的权重参数和/或输入/输出数据,所述神经网络在使用一个或更多个实施例的方面进行训练和/或推理期间在输入/输出数据和/或权重参数的反向传播期间结合一个或更多个实施例进行训练或使用。在一个实施例中,数据存储器105的任何部分可以包括在其他片上或片外数据存储器中,包括处理器的L1、L2或L3高速缓存或系统存储器。在一个实施例中,数据存储器105的任何部分可以在一个或更多个处理器或其他硬件逻辑设备或电路的内部或外部。在一个实施例中,数据存储器105可以是高速缓存存储器、DRAM、SRAM、非易失性存储器(例如,闪存)或其他存储器。在一个实施例中,对数据存储器105是在处理器的内部还是外部(例如,或者由DRAM、SRAM、闪存或一些其他存储类型组成)的选择可以取决于片上对片外的可用存储,正在执行的训练和/或推理函数的延迟要求,用于神经网络的推理和/或训练的数据的批大小,或这些因素的某种组合。
[0025] 在一个实施例中,数据存储器101和数据存储器105可以是单独的存储结构。在一个实施例中,数据存储器101和数据存储器105可以是相同的存储结构。在一个实施例中,数据存储器101和数据存储器105可以是部分相同的存储结构和部分分离的存储结构。在一个实施例中,数据存储器101和数据存储器105的任何部分可以包括在其他片上或片外数据存储器中,包括处理器的L1、L2或L3高速缓存或系统存储器。
[0026] 在一个实施例中,推理和/或训练逻辑122可以包括但不限于一个或更多个算术逻辑单元(ALU)109,用于执行由训练和/或推理代码指示的逻辑和/或数学运算,其结果可以导致存储在激活存储器120中的激活(例如,来自神经网络内的层或神经元的输出值),其是存储在数据存储器101和/或数据存储器105中的输入/输出和/或权重参数数据的函数。在一个实施例中,响应于执行指令或其他代码,根据ALU 109执行的线性代数数学生成存储在激活存储器120中的激活,其中存储在数据存储器105和/或数据存储器101中的权重值与其他值(诸如偏差值、梯度信息、动量值或其他参数或超参数)一起用作操作数,其中任何一个或全部的其他值可存储在数据存储器105或数据存储器101或片上或片外的另一存储器中。在一个实施例中,ALU 109被包括在一个或更多个处理器或其他硬件逻辑设备或电路内,而在另一个实施例中,ALU 109可以在处理器或使用它们的其他硬件逻辑设备或电路(例如,协处理器)的外部。在一个实施例中,ALU 109可以包括在处理器的执行单元内,或者在处理器的执行单元可访问的ALU库内,或在相同的处理器内,或分布在不同类型的不同处理器(例如,中央处理单元、图形处理单元、固定函数单元等)之间。在一个实施例中,数据存储器
101、数据存储器105和激活存储器120可以在相同的处理器或其他硬件逻辑设备或电路上,而在另一个实施例中,它们可以在不同的处理器或其他硬件逻辑设备或电路,或相同和不同的处理器或其他硬件逻辑设备或电路的某种组合中。在一个实施例中,激活存储器120的任何部分可以包括在其他片上或片外数据存储器中,包括处理器的L1、L2或L3高速缓存或系统存储器。此外,推理和/或训练代码可以与处理器或其他硬件逻辑或电路可访问的其他代码一起存储,并使用处理器的提取、解码、调度、执行、引退(retirement)和/或其他逻辑电路来提取和/或处理。
[0027] 在一个实施例中,激活存储器120可以是高速缓存存储器、DRAM、SRAM、非易失性存储器(例如,闪存)或其他存储器。在一个实施例中,激活存储器120可以完全或部分地在一个或更多个处理器或其他逻辑电路内或其外部。在一个实施例中,对激活存储器120是在处理器的内部还是外部(例如,或者由DRAM、SRAM、闪存或一些其他存储类型组成)的选择可以取决于片上对片外的可用存储,正在执行的训练和/或推理函数的延迟要求,用于神经网络的推理和/或训练的数据的批大小,或这些因素的某种组合。在一个实施例中,图1B中所示的推理和/或训练逻辑122可以与专用集成电路(ASIC)结合使用,例如来自谷歌的处理单元或来自因特尔公司的 (例如,Lake Crest)处理器。在一个实施例中,图1B中所示的推理和/或训练逻辑122可以与中央处理单元(CPU)硬件、图形处理单元(GPU)硬件或其他硬件(例如现场可编程门阵列(FPGA))结合使用。
[0028] 图1C示出了根据其他各个实施例的推理和/或训练逻辑122。在一个实施例中,推理和/或训练逻辑122可以包括但不限于硬件逻辑,其中计算资源专用地或以其他方式排他地结合权重值或与神经网络内的一个或更多个神经元层对应的其他信息结合使用。在一个实施例中,图1C中所示的推理和/或训练逻辑122可以与专用集成电路(ASIC)结合使用,例如来自谷歌的 处理单元或来自因特尔公司的 (例如,Lake Crest)处理器。在一个实施例中,图1C中所示的推理和/或训练逻辑122可以与中央处理单元(CPU)硬件、图形处理单元(GPU)硬件或其他硬件(诸如现场可编程门阵列(FPGA))结合使用。在一个实施例中,推理和/或训练逻辑122包括但不限于数据存储器101和数据存储器
105,其可用于存储权重值和/或其他信息,包括偏差值、梯度信息、动量值和/或其他参数或超参数信息。在图1C所示的一个实施例中,数据存储器101和数据存储器105中的每一个分别与专用计算资源相关联,例如计算硬件103和计算硬件107。在一个实施例中,计算硬件
103和计算硬件107中的每一个包括分别仅对存储在数据存储器101和数据存储器105中的信息执行数学函数(例如线性代数函数)的一个或更多个ALU,其结果存储在激活存储器120中。
[0029] 在一个实施例中,数据存储器101和105以及相应的计算硬件103和107中的每一个分别对应于神经网络的不同层,使得从数据存储器101和计算硬件103的一个“存储/计算对101/103”产生的激活被作为输入提供至数据存储器105和计算硬件107的下一个“存储/计算对105/107”,以便镜像(mirror)神经网络的概念组织。在一个实施例中,存储/计算对
101/103和105/107中的每一个可以对应于一个以上的神经网络层。在一个实施例中,在存储计算对101/103和105/107之后或与其并行的附加存储/计算对(未示出)可以包括在推理和/或训练逻辑122中。
[0030] 存储高效的神经网络
[0031] 图2是根据各个实施例的训练引擎201和推理引擎221的图示。在各个实施例中,训练引擎201、推理引擎221和/或其部分可以结合逻辑122在一个或更多个处理单元102内执行。
[0032] 在一个实施例中,训练引擎201包括使用量化的参数生成机器学习模型的功能。例如,训练引擎201可以周期性地将神经网络中的权重从浮点值量化为使用比量化之前更少的比特表示的值。在一个实施例中,量化的权重是在用于在神经网络的训练期间更新权重的某全部数量的前向-反向传递之后,并且在执行任何接下来的前向-反向传递以进一步训练神经网络之前生成的。在一个实施例中,训练引擎201还可以以连续的方式量化神经网络的各个激活层,从最靠近神经网络的输入层的层开始,并继续直到到达最接近神经网络的输出层的层。当量化神经网络的给定激活层时,用于计算激活层的输入的先前层中的权重被冻结,并且神经网络的后续层中的权重基于激活层的量化的输出被微调(在本文中也称为“调整”或“修改”)。
[0033] 在一个实施例中,推理引擎221使用机器学习模型中的量化的参数和/或中间值来执行由训练引擎201产生的机器学习模型。例如,推理引擎221可以使用固定精度算术来将神经网络的每个层中的量化的权重与来自神经网络的前一层的量化的激活输出相组合,直到神经网络产生一个或更多个输出。
[0034] 在所示的实施例中,训练引擎201使用具有权重量化214和激活量化218的多个前向-反向传递214来训练神经网络202。神经网络202可以是利用人工神经元和/或感知器的任何技术上可行形式的机器学习模型。例如,神经网络202可以包括一个或更多个循环神经网络(RNN)、卷积神经网络(CNN)、深度神经网络(DNN)、深度卷积网络(DCN)、深度信念网络(DBN)、受限玻尔兹曼机(RBM)、长期短期记忆(LSTM)单元、门控递归单元(GRU)、生成式对抗网络(GAN)、自组织映射(SOM)和/或其他类型的人工神经网络或人工神经网络的组件。在另一示例中,神经网络202可以包括执行集群、主成分分析(PCA)、潜在语义分析(LSA)、Word2vec和/或另一种监督学习技术的功能。在第三示例中,神经网络202可以实现回归模型、支持向量机决策树随机森林、梯度提升树、朴素贝叶斯分类器、贝叶斯网络、分层模型和/或模型集成的功能。
[0035] 在一个实施例中,神经网络202中的神经元被聚合到多个层204-206。例如,层204-206可以包括输入层、输出层以及输入层和输出层之间的一个或更多个隐藏层。在另一个示例中,层204-206可以包括一个或更多个卷积层、批归一化层、激活层、池化层、全连接层、递归层、损失层、ReLu层和/或其他类型的神经网络层。
[0036] 在一些实施例中,训练引擎201通过使用若干轮(round)前向-反向传递214来训练神经网络202,以更新神经网络202的层204-206中的权重。在一些实施例中,每个前向-反向传递包括前向传播步骤,之后是反向传播步骤。前向传播步骤通过神经网络202的连续层204-206将一”批”输入传播到神经网络202,直到神经网络202生成一批相应的输出。反向传播步骤通过神经网络202向后进行,从输出层开始并继续,直到到达第一层。在每一层,反向传播步骤计算损失函数的梯度(导数),其测量该批输出与相对于该层中每个权重的相应的所需输出之间的差。然后,反向传播步骤在梯度的负方向上更新层中的权重,以减少神经网络202的误差。
[0037] 在一个或更多个实施例中,训练引擎201在神经网络202的训练期间执行权重量化214和激活量化218。在这些实施例中,权重量化214包括将神经网络202中的一些或所有权重从全精度(例如,浮点)值转换为使用比权重量化214之前更少的比特表示的值,并且激活量化218包括将来自神经网络202的神经元和/或层204-206的一些或所有激活输出从全精度值转换为使用比激活量化218之前更少的比特表示的值。例如,训练引擎201可以将神经网络202的权重和/或激活输出中的浮点值“桶化(bucketize)”成表示浮点值的不同范围的某数量的桶(bin),其中基于相应量化值的比特宽度确定桶的数量。在另一示例中,训练引擎201可以使用剪切、舍入、向量量化、概率量化和/或其他类型的量化技术来执行权重量化
214和/或激活量化218。
[0038] 在一些实施例中,训练引擎201通过在已经使用某全部数量的前向-反向传递212来更新神经网络202的层204-206中的全精度权重之后执行权重量化214来维持神经网络202的训练期间的损失函数的可微分性。在这些实施例中,偏移超参数208延迟权重量化
214,直到权重已经在某个初始数量的前向-反向传递212上被更新,并且频率超参数210指定在延迟之后要执行的权重量化214的频率。可以选择偏移超参数208以防止权重量化214在训练过程开始时干扰对神经网络202权重的大的初始变化,并且可以选择频率超参数210以允许权重的后续增量变化在权重被量化之前累积。
[0039] 例如,偏移超参数208可以指定表示在执行权重量化214之前要执行的前向-反向传递212的初始数量的数值“训练步骤索引”,并且频率超参数210可以指定表示在每个权重量化214之间执行的连续的前向-反向传递212的数量的数值频率。因此,如果将偏移超参数208设置为值200并且将频率超参数210设置为值25,则训练引擎201可以在神经网络202的前200次前向-反向传递212之后执行第一权重量化214,并且在神经网络202的每25次前向-反向传递212之后执行后续权重量化214。
[0040] 在一个或更多个实施例中,训练引擎201在已经训练神经网络202之后执行激活量化218,直到找到损失函数中的局部最小值和/或损失函数收敛的梯度,并且神经网络202中的权重已被量化。例如,训练引擎201可在使用若干前向-反向传递212、偏移超参数208和/或频率超参数210对神经网络202的权重进行完全训练和量化之后执行激活量化。在另一个示例中,训练引擎201可以在训练神经网络202并且使用另一种技术量化神经网络202中的权重之后执行激活量化218。
[0041] 在一些实施例中,训练引擎201以连续的方式对神经网络202中的各个层204-206的激活输出执行激活量化218,从更接近神经网络202的输入的层204开始并且进行到更接近神经网络202的输出的层206。例如,训练引擎201可以执行激活量化218的多个阶段,每个阶段影响在神经网络202中生成激活输出的一个或更多个层204-206(例如,全连接层、卷积层和批归一化层等)。
[0042] 在一个或更多个实施例中,激活量化218的每个阶段伴随有微调过程,该微调过程涉及在量化激活输出之前在层204中使用冻结权重216以及在量化激活输出之后在层206中使用权重更新220。例如,训练引擎201可以冻结一个或更多个卷积块中的量化权重,其中每个卷积块包含卷积层,然后是批归一化层。训练引擎201还可以将激活量化层添加到每个冻结的卷积块的末尾,以量化由一个或更多个卷积块生成的激活输出。训练引擎201可以进一步执行附加的前向-反向传递212,其基于神经网络202从一组输入产生的输出和与该输入相关联的预期输出之间的差,在冻结的卷积块之后更新附加卷积块和/或其他层204-206中的权重。
[0043] 在已经更新了最近激活量化218之后的层中的权重以调整神经网络202相对于量化激活输出的性能之后,训练引擎201可以用神经网络202中随后的卷积块和/或层206重复该过程,直到到达神经网络202的输出层和/或另一层为止。因为训练引擎201在前向方向上量化神经网络202中的激活输出,并且仅对量化激活输出之后的层执行权重更新220,训练引擎201在激活量化218和神经网络202的相应微调期间保持损失函数的可微分性。
[0044] 在一个或更多个实施例中,训练引擎201在微调过程期间执行附加的权重量化214,其在神经网络202中的最新激活量化218之后执行层206的全精度权重更新220。例如,训练引擎201可以在一轮或更多轮前向-反向传递212被用于在层中执行浮点权重更新220之后,将权重量化214应用到激活量化218之后的层206。
[0045] 在一些实施例中,训练引擎201根据偏移超参数210的值在最新激活量化218之后的层206中延迟权重量化214,偏移超参数210指定在相应权重被量化之前要执行的全精度权重更新220的前向-反向传递212的初始数量。训练引擎201还可以,或者替代地,根据频率超参数210的值,在最新激活量化218之后的层206中周期性地执行权重量化214,频率超参数210指定在连续轮的权重量化214之间要执行的全精度权重更新220的前向-反向传递212的某连续数量。在这些实施例中,偏移超参数208和频率超参数210的值可以与用于上述神经网络202中所有权重的权重量化214的偏移超参数208和频率超参数210的相应值相同或不同。
[0046] 在一些实施例中,训练引擎201省略用于神经网络202的某些层的权重量化214和/或激活量化218。例如,训练引擎201可以生成与神经网络202的输出层和/或使用全精度算术的一个或更多个层204-206相关联的权重和/或激活输出的浮点表示。
[0047] 在一些实施例中,推理引擎221使用固定精度算术258来执行运算260,其允许神经网络202使用量化权重和/或激活输出来执行推理262。例如,推理引擎221可以执行卷积、矩阵乘法和/或其他运算260,其使用神经网络202中的量化权重和/或激活输出而不是需要显著更多计算和/或存储资源的浮点权重和/或激活输出来生成神经网络202中的层204-206的输出。结果,使用神经网络202的量化版本执行的推理262可以比使用神经网络202的非量化版本更快和/或更有效。
[0048] 图3是根据各个实施例的用于量化神经网络中的权重的方法步骤的流程图。尽管结合图1和图2的系统描述了方法步骤,但是本领域技术人员将理解,配置成以任何顺序执行方法步骤的任何系统都落入本公开的范围内。
[0049] 如图所示,训练引擎201基于偏移超参数来确定302用于训练神经网络的前向-反向传递的第一数量,并且基于频率超参数确定302用于训练神经网络的前向-反向传递的第二数量。例如,训练引擎201可以获得前向-反向传递的第一数量作为数值“训练步骤索引”,其表示在量化神经网络中的权重之前要执行的前向传播和反向传播的初始数量。在另一示例中,训练引擎201可以获得前向-反向传递的第二数量作为数值频率,该数值频率表示在权重量化开始之后要在每个权重量化之间执行的连续前向-反向传递的数量。
[0050] 接下来,训练引擎201执行304权重的第一量化,该第一量化为从浮点值到使用比用第一数量的前向-反向传递更新浮点值之后的浮点值更少的比特表示的值。例如,训练引擎201可以延迟权重的初始量化,直到权重的全精度版本已经在第一数量的前向-反向传递上被更新。然后,训练引擎201可以通过将全精度值转换为表示全精度值的桶化范围的值来量化权重。
[0051] 在之前的权重量化之后,训练引擎201重复执行306权重的附加量化,直到神经网络的训练完成308,该附加量化为从浮点值到使用比用第二数量的前向-反向传递更新浮点值之后的浮点值更少的比特表示的值。例如,训练引擎201可以在权重的每次量化之后的前向-反向传递期间执行权重的全精度更新。训练引擎201还可以根据频率超参数(例如,在最近的权重量化之后已经执行了第二数量的前向-反向传递之后)周期性地量化权重,直到达到收敛。
[0052] 图4是根据各个实施例的用于量化神经网络中的激活的方法步骤的流程图。尽管结合图1和图2的系统描述了方法步骤,但是本领域技术人员将理解,配置成以任何顺序执行方法步骤的任何系统都落入本公开的范围内。
[0053] 如图所示,训练引擎201生成402神经网络的第一一个或更多个层的第一一个或更多个量化激活输出。例如,训练引擎201可以将激活量化层添加到生成激活输出的第一一个或更多个层中的每个层和/或卷积块。激活量化层可以将来自前一层的浮点激活输出转换为使用比浮点激活输出更少的比特表示的值。
[0054] 接下来,训练引擎201冻结404第一一个或更多个层中的权重。例如,训练引擎201可以冻结已经使用关于图3描述的方法步骤量化的第一一个或更多个层中的权重。
[0055] 然后,训练引擎201至少基于第一一个或更多个量化激活输出,来微调406第一一个或更多个层之后的神经网络的第二一个或更多个层中的权重。例如,训练引擎201可以使用第一一个或更多个量化激活输出和训练数据在神经网络的第一数量的前向-反向传递期间更新冻结层之后的层中的浮点权重。训练引擎201可以基于与在神经网络的训练期间量化权重相关联的偏移超参数,来确定前向-反向传递的第一数量;在已经执行了第一数量的前向-反向传递之后,训练引擎201可以执行权重的第一量化,该第一量化为从浮点值到使用比浮点值更少的比特表示的值。在权重被量化之后,训练引擎201可以在神经网络的第二数量的前向-反向传递期间对权重执行浮点更新。训练引擎201可以基于与在神经网络的训练期间量化权重相关联的频率超参数,来确定前向-反向传递的第二数量;在已经执行了第二数量的前向-反向传递之后,训练引擎201可以执行权重的第二量化,该第二量化为从浮点值到使用比浮点值更少的比特表示的值。
[0056] 训练引擎201可以继续生成神经网络的某些层的量化激活输出、冻结层中的权重,以及微调神经网络的后续层中的权重,直到神经网络中的激活量化完成408为止。例如,训练引擎201可以在多个阶段中执行量化激活,从神经网络的输入层附近的层开始并且继续,直到到达神经网络的输出层。在每个阶段,训练引擎201可以在来自前一阶段的量化激活输出之后量化一个或更多个激活输出,并且冻结用于生成量化激活输出的层中的权重。然后,训练引擎201可以更新神经网络的剩余层中的浮点权重和/或在剩余层的某全部数量的前向-反向传递之后量化经更新的权重,直到响应于最近量化的激活输出已经调整剩余层。
[0057] 示例性硬件架构
[0058] 图5是配置为实现各个实施例的一个或更多个方面的计算机系统500的框图。在一些实施例中,计算机系统500是在数据中心或云计算环境中运行的服务器机,其通过网络提供可扩展的计算资源作为服务。在一些实施例中,计算机系统500实现图1的计算设备100的功能。
[0059] 在各个实施例中,计算机系统500包括但不限于中央处理单元(CPU)502和通过内存桥505和通信路径513耦合到并行处理子系统512的系统存储器504。内存桥505经由通信路径506进一步耦合到I/O(输入/输出)桥507,而I/O桥507又耦合到交换机516。
[0060] 在一个实施例中,I/O桥507被配置为从可选输入设备508(如键盘或鼠标)接收用户输入信息,并经由通信路径506和内存桥505将输入信息转发到CPU 502进行处理。在一些实施例中,计算机系统500可以是云计算环境中的服务器机。在此类实施例中,计算机系统500可没有输入设备508。而是,计算机系统500可以通过接收在网络上发送的和经由网络适配器518接收的消息形式的命令来接收等效的输入信息。在一个实施例中,交换机516被配置为在I/O桥507与计算机系统500的其他组件(如网络适配器518和各种插入卡520和521)之间提供连接。
[0061] 在一个实施例中,I/O桥507耦合到系统盘514,该系统盘514可以配置为存储用于由CPU 502和并行处理子系统512使用的内容、应用程序和数据。在一个实施例中,系统盘514为应用程序和数据提供非易失性存储,并可包括固定的或可移除的硬盘驱动器、闪存设备和CD-ROM(压缩盘只读存储器)、DVD-ROM(数字通用盘-ROM)、蓝光光碟、HD-DVD(高清DVD)或其他磁、光或固态存储设备。在各个实施例中,诸如通用串行总线或其他端口连接、压缩盘驱动器、数字多功能盘驱动器、胶片记录设备等之类的其他组件也可以连接到I/O桥507。
[0062] 在各个实施例中,内存桥505可以是北桥芯片,I/O桥507可以是南桥芯片。此外,通信路径506和513以及计算机系统500内的其他通信路径可以使用任何技术上合适的协议实现,包括但不限于AGP(加速图形端口)、超传输或任何本领域已知的其他总线或点对点通信协议。
[0063] 在一些实施例中,并行处理子系统512包括图形子系统,该图形子系统将像素传送给可选的显示设备510,该显示设备510可以是任何常规的阴极射线管、液晶显示器、发光二极管显示器或类似设备。在这种实施例中,并行处理子系统512包含针对图形和视频处理优化的电路,包括例如,视频输出电路。如下面结合图6和图7更详细描述的,这种电路可以跨包含在并行处理子系统512中的一个或更多个并行处理单元(PPU,也称为并行处理器)包含。
[0064] 在其他实施例中,并行处理子系统512包含针对通用和/或计算处理优化的电路。同样,这种电路可以跨并行处理子系统512中包含的一个或更多个PPU包含,这些PPU被配置为执行这种通用和/或计算操作。在其他实施例中,可以将并行处理子系统512中包含的一个或更多个PPU配置为执行图形处理、通用处理和计算处理操作。系统存储器504包括配置为管理并行处理子系统512中的一个或更多个PPU的处理操作的至少一个设备驱动程序。
[0065] 在各个实施例中,并行处理子系统512可以与图5的一个或更多个其他元件集成,以形成单个系统。例如,并行处理子系统512可以与CPU 502和单个芯片上的其他连接电路集成,以形成片上系统(SoC)。
[0066] 在一个实施例中,CPU 502是计算机系统500的主处理器,控制和协调其他系统组件的操作。在一个实施例中,CPU 502发出控制PPU的操作的命令。在一些实施例中,通信路径513是PCI Express链路,在其中,专用通道如本领域已知的被分配给每个PPU。还可以使用其他通信路径。PPU有利地实现了高度并行的处理体系架构。PPU可以具有任意数量的本地并行处理存储器(PP存储器)。
[0067] 应理解,本文示出的系统是说明性的,并且变化和修改是可能的。连接拓扑(包括桥的数量和布置、CPU 502的数量和并行处理子系统512的数量)可以根据需要进行修改。例如,在一些实施例中,系统存储器504可以直接连接到CPU 502,而不是通过内存桥505连接,其他设备将经由内存桥505和CPU 502与系统存储器504进行通信。在其他实施例中,并行处理子系统512可以连接到I/O桥507或直接连接到CPU 502,而不是连接到内存桥505。在其他实施例中,I/O桥507和内存桥505可以集成到单个芯片中,而不是作为一个或更多个分立器件存在。最后,在某些实施例中,图5所示的一个或更多个部件可以不存在。例如,可以去除交换机516,网络适配器518和插入卡520、521可直接连接到I/O桥507。
[0068] 图6是根据各个实施例的、图5的并行处理子系统512中包括的并行处理单元(PPU)602的框图。如上文所述,尽管图6描述了一个PPU 602,但并行处理子系统512可以包括任意数量的PPU 602。如图所示,PPU 602耦合到本地并行处理(PP)存储器604。PPU 602和PP存储器604可使用一个或更多个集成电路器件实现,例如可编程处理器、应用特定的集成电路(ASIC)或存储器设备,或者以任何其他技术上可行的方式实现。
[0069] 在一些实施例中,PPU 602包括图形处理单元(GPU),GPU可以被配置为实现图形渲染管线,以基于CPU 502和/或系统存储器504提供的图形数据执行与生成像素数据相关的各种操作。在处理图形数据时,PP存储器604可以用作图形存储器,其存储一个或更多个常规缓冲区,如果需要,还可以存储一个或更多个其他渲染目标。此外,PP存储器604可用于存储和更新像素数据,并将最终的像素数据或显示帧传送到可选的显示设备510进行显示。在一些实施例中,还可以将PPU 602配置用于通用处理和计算操作。在某些实施例中,计算机系统500可以是云计算环境中的服务器机。在这些实施例中,计算机系统500可以没有显示设备510。相反,计算机系统500可以通过经由网络适配器518在网络上以消息的形式发送命令,来生成等效的输出信息。
[0070] 在一些实施例中,CPU 502是计算机系统500的主处理器,控制和协调其他系统组件的操作。在一个实施例中,CPU 502发出控制PPU 602的操作的命令。在一些实施例中,CPU 502将PPU 602的命令流写入可位于系统存储器504、PP存储器604或CPU 502和PPU 602两者可访问的另一个存储位置中的数据结构(图5或图6中未明确示出)。指向数据结构的指针被写入命令队列(本文也称为推送缓冲区),以启动数据结构中命令流的处理。在一个实施例中,PPU 602从命令队列中读取命令流,然后相对于CPU 502的操作异步地执行命令。在生成多个推送缓冲区的实施例中,可以由应用程序经由设备驱动程序为每个推送缓冲区指定执行优先级,以控制不同推送缓冲区的调度。
[0071] 在一个实施例中,PPU 602包括I/O(输入/输出)单元605,该I/O单元经由通信路径513和内存桥505与计算机系统500的其余部分进行通信。在一个实施例中,I/O单元605生成数据包(或其他信号),用于在通信路径513上发送,并且还接收来自通信路径513的所有传入数据包(或其他信号),将传入的数据包定向到PPU 602的适当组件。例如,与处理任务相关的命令可以被定向到主机接口606,而与存储器操作相关的命令(例如,从PP存储器604读取或写入PP存储器604)可以定向到交叉开关单元610。在一个实施例中,主机接口606读取每个命令队列,并将存储在命令队列中的命令流发送到前端612。
[0072] 如上结合图5所述,PPU 602与计算机系统500的其余部分的连接可以是不同的。在一些实施例中,并行处理子系统512(其包括至少一个PPU602)被实现为可插入计算机系统500的扩展槽的插入卡。在其他实施例中,PPU 602可以集成在具有总线桥的单个芯片上,如内存桥505或I/O桥507。同样,在其他实施例中,PPU 602的部分或全部元件可以与CPU 502一起包括在单个集成电路或芯片系统(SoC)中。
[0073] 在一个实施例中,前端612将从主机接口606接收的处理任务发送到任务/工作单元607内的工作分配单元(未示出)。在一个实施例中,工作分配单元接收指向处理任务的指针,这些任务被编码为任务元数据(TMD)并存储在存储器中。指向TMD的指针被包括在命令流中,该命令流被存储为命令队列并由前端单元612从主机接口606接收。可编码为TMD的处理任务包括与要处理的数据相关联的索引以及定义如何处理数据的状态参数和命令。例如,状态参数和命令可以定义要对数据执行的程序。还例如,TMD可以指定一组协作线程阵列(CTA)的数量和配置。通常,每个TMD对应于一个任务。任务/工作单元607从前端612接收任务,并确保在每个TMD指定的处理任务启动之前将GPC 608配置为有效状态。还可以为用于调度处理任务执行的每个TMD指定优先级。处理任务也可以从处理集群阵列630接收。可选地,TMD可以包括参数,该参数控制是否将TMD添加到处理任务列表的头部或尾部(或添加到指向处理任务的指针列表),从而提供对执行优先级的另一层控制。
[0074] 在一个实施例中,PPU 602基于处理集群阵列630实现高度并行处理体系架构,该阵列包括一组C个通用处理集群(GPC)608,其中C≥1。每个GPC 608能够同时执行大量(例如数百或数千个)线程,其中每个线程都是程序的实例。在各个应用中,可以分配不同的GPC 608来处理不同类型的程序或执行不同类型的计算。GPC 608的分配可根据每种类型的程序或计算产生的工作负载而变化。
[0075] 在一个实施例中,存储器接口614包括一组D个分区单元615,其中D≥1。每个分区单元615耦合到驻留在PP存储器604中的一个或更多个动态随机访问存储器(DRAM)620。在一些实施例中,分区单元615的数量等于DRAM 620的数量,并且每个分区单元615耦合到不同的DRAM620。在其他实施例中,分区单元615的数量可以与DRAM 620的数量不同。本领域普通技术人员将理解,DRAM 620可更换为任何其他技术上合适的存储设备。在操作中,各种渲染目标(如纹理贴图和帧缓冲区)可以存储在DRAM 620上,允许分区单元615并行写入每个渲染目标的部分,从而有效地使用PP存储器604的可用带宽。
[0076] 在一个实施例中,给定的GPC 608可以处理要写入PP存储器604内的任何DRAM 620的数据。在一个实施例中,交叉开关单元610被配置为将每个GPC 608的输出路由到任何分区单元615的输入或任何其他GPC608以进一步处理。GPC 608经由交叉开关单元610与存储器接口614通信,以从各个DRAM 620读取或写入各个DRAM 620。在一些实施例中,交叉开关单元610与I/O单元605连接,还经由存储器接口614连接到PP存储器604,从而使不同GPC 608中的处理核心能够与系统存储器504或非PPU602本地的其他存储器通信。在图6的实施例中,交叉开关单元610与I/O单元605直接连接。在各个实施例中,交叉开关单元610可以使用虚拟信道以分隔GPC 608和分区单元615之间的业务流。
[0077] 在一个实施例中,可以对GPC 608进行编程以执行与各种应用程序相关的处理任务,包括但不限于线性和非线性数据变换、视频和/或音频数据的过滤、建模操作(例如,应用物理定律以确定对象的位置、速度和其他属性)、图像渲染操作(例如,曲面细分着色器顶点色色器、几何着色器和/或像素/片段着色器程序)、一般计算操作等。在操作中,PPU 602被配置为将数据从系统存储器504和/或PP存储器604传输到一个或更多个片上存储器单元,处理数据,以及将结果数据写回系统存储器504和/或PP存储器604。然后,其他系统组件(包括CPU 502,并行处理子系统512中的另一PPU 602,或计算机系统500中的另一并行处理子系统512)可以访问结果数据。
[0078] 在一个实施例中,并行处理子系统512中可包括任意数量的PPU 602。例如,单个插入卡上可提供多个PPU 602,或者多个插入卡可以连接到通信路径513,或者一个或更多个PPU 602可以集成到桥芯片中。多PPU系统中的PPU 602可彼此相同或不同。例如,不同的PPU 602可具有不同数量的处理核心和/或不同数量的PP存储器604。在存在多个PPU 602的实现中,这些PPU可以并行操作以比采用单个PPU 602可能的吞吐量更高的吞吐量处理数据。包含一个或更多个PPU 602的系统可以各种配置和外形因素实现,包括但不限于台式机、笔记本电脑、手持式个人计算机或其他手持设备、服务器、工作站、游戏机嵌入式系统等。
[0079] 图7是根据各个实施例的、图6的并行处理单元(PPU)602中包括的通用处理集群(GPC)的框图。如图所示,GPC 608包括但不限于管线管理器705、一个或更多个纹理单元715、预光栅操作单元725、工作分配交叉开关730和L1.5高速缓存735。
[0080] 在一个实施例中,GPC 608可配置为并行执行大量线程,以执行图形处理、一般处理和/或计算操作。如本文所使用的,“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,使用单指令、多数据(SIMD)指令发出技术来支持大量线程的并行执行,而无需提供多个独立的指令单元。在其他实施例中,使用配置为向GPC 608中的一组处理引擎发出指令的公共指令单元,使用单指令、多线程(SIMT)技术来支持大量通常同步的线程的并行执行。与所有处理引擎通常执行相同指令的SIMD执行机制不同,SIMT执行允许不同的线程通过给定的程序更容易地遵循不同的执行路径。本领域普通技术人员可以理解,SIMD处理机制表示SIMT处理机制的功能子集。
[0081] 在一个实施例中,GPC 608的操作经由管线管理器705控制,该管线管理器705将从任务/工作单元607中的工作分配单元(未示出)接收到的处理任务分配到一个或更多个流式多处理器(SM)710。管线管理器705也可以配置为通过指定SM 710输出的经处理数据的目的地来控制工作分配交叉开关730。
[0082] 在各个实施例中,GPC 608包括一组M个SM 710,其中M≥1。此外,每个SM 710包括一组功能执行单元(未示出),如执行单元和加载-存储单元。特定于任何功能执行单元的处理操作可以进行管线化,这使得能够在以前的指令完成执行之前发出新的指令以供执行。可以提供给定SM 710中的功能执行单元的任意组合。在各个实施例中,功能执行单元可配置为支持各种不同的操作,包括整数和浮点算术(例如,加法和乘法)、比较运算、布尔运算(AND、OR、XOR)、位移位、以及计算各种代数函数(例如,平面插值和三函数、指数函数和对数函数等)。有利的是,可以配置相同的功能执行单元来执行不同的操作。
[0083] 在各个实施例中,每个SM 710包括多个处理核心。在一个实施例中,SM 710包括大量(例如128个等)的不同处理核心。每个核心可以包括完全管线化、单精度、双精度和/或包括浮点算术逻辑单元和整数算术逻辑单元的混合精度处理单元。在一个实施例中,浮点算术逻辑单元实现浮点算术的IEEE 754-2008标准。在一个实施例中,核心包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心。
[0084] 在一个实施例中,张量核心被配置为执行矩阵运算,在一个实施例中,一个或更多个张量核心包含在核心中。特别是,张量核心被配置为执行深度学习矩阵算术,例如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核心对4×4矩阵运算,并执行矩阵乘法和累加运算D=A×B+C,其中A、B、C和D为4×4矩阵。
[0085] 在一个实施例中,矩阵乘法输入A和B为16位浮点矩阵,而累加矩阵C和D可以是16位浮点矩阵或32位浮点矩阵。张量核心采用32位浮点累加对16位浮点输入数据进行运算。16位浮点乘法需要64次运算,得到全精度积,然后用32位浮点加法与其他中间积相加以得到4×4×4矩阵乘法。实际上,张量核心用于执行由这些较小元素构建的更大的二维或更高维矩阵运算。API(如CUDA 9C++API)公开专用矩阵负载、矩阵乘法和累加以及矩阵存储操作,以有效地使用来自CUDA-C++程序的张量核心。在CUDA级别,线程束级接口假定16×16大小的矩阵,其跨越线程束的所有32个线程。
[0086] 神经网络严重依赖于矩阵数学运算,复杂的多层网络需要大量的浮点性能和带宽,以提高效率和速度。在各个实施例中,采用数千个针对矩阵数学运算优化的处理核心,并向数十至数百个TFLOPS提供性能,SM 710提供了计算平台,其能够提供基于深度神经网络的人工智能和机器学习应用程序所需的性能。
[0087] 在各个实施例中,每个SM 710还可以包括多个执行特殊功能(例如,属性评估、倒数平方根等)的特殊功能单元(SFU)。在一个实施例中,SFU可以包括被配置为遍历分层树数据结构的树遍历单元。在一个实施例中,SFU可以包括配置为执行纹理映射过滤操作的纹理单元。纹理单元被配置成从存储器加载纹理映射(例如,二维纹理像素阵列),并对纹理映射进行采样,以产生经采样的纹理值,用于在SM执行的着色程序中使用。在各个实施例中,每个SM 710还包括多个加载/存储单元(LSU),它们在共享存储器/L1高速缓存和SM 710内部的寄存器文件之间实现加载和存储操作。
[0088] 在一个实施例中,每个SM 710被配置为处理一个或更多个线程组。如本文所用,“线程组”或“线程束(warp)”是指一组线程,其对不同的输入数据同时执行同一程序,其中组中的一个线程被分配给SM 710中的不同执行单元。线程组包括的线程可少于SM 710中的执行单元的数量,在这种情况下,当正在处理该线程组时,某些执行在周期内可能处于空闲状态。线程组还可包括比SM 710中执行单元的数量更多的线程,在这种情况下,处理可能发生在连续的时钟周期中。由于每个SM 710可以同时支持多达G个线程组,因此多达G*M个线程组可以在任何给定时间在GPC 608中执行。
[0089] 此外,在一个实施例中,在SM 710中可以有多个相关线程组同时处于活动状态(处于不同的执行阶段)。此线程组的集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m*k,其中k是线程组中同时执行的线程的数量,其通常是SM 710中执行单元的数目的整数倍,m是SM 710中同时活动的线程组的数量。在一些实施例中,单个SM 710可以同时支持多个CTA,其中这些CTA的粒度为工作分配给SM 710的粒度。
[0090] 在一个实施例中,每个SM 710包含一级(L1)高速缓存,或使用SM710外部的相应L1高速缓存中的空间来支持执行单元执行的加载和存储操作等。每个SM 710还可以访问在PPU 602中所有GPC 608之间共享的二级(L2)高速缓存(未示出)。L2高速缓存可用于在线程之间传输数据。最后,SM 710还可以访问芯片外“全局”存储器,其可包括PP存储器604和/或系统存储器504。需要理解的是,PPU 602外部的任何存储器都可以用作全局存储器。此外,如图7所示,1.5级(L1.5)高速缓存735可以包括在GPC 608中,并配置为接收和保存SM 710通过存储器接口614从存储器请求的数据。此类数据可以包括但不限于指令、统一数据和常数数据。在GPC 608中具有多个SM 710的实施例中,SM 710可以有益地共享在L1.5高速缓存735中缓存的通用指令和数据。
[0091] 在一个实施例中,每个GPC 608可以具有关联的存储器管理单元(MMU)720,MMU 720被配置为将虚拟地址映射到物理地址。在各个实施例中,MMU 720可以驻留在GPC 608或存储器接口614内。MMU 720包括一组页表条目(PTE),其用于将虚拟地址映射到图块(tile)或存储器页的物理地址以及可选的缓存行索引。MMU 720可包括地址转换后备缓冲区(TLB)或可驻留在SM 710、一个或更多个L1高速缓存或GPC 608内的高速缓存。
[0092] 在一个实施例中,在图形和计算应用中,可以配置GPC 608以使每个SM 710耦合到纹理单元715,以执行纹理映射操作,例如确定纹理采样位置、读取纹理数据和过滤纹理数据。
[0093] 在一个实施例中,每个SM 710将经处理的任务发送到工作分配交叉开关730,以便将经处理的任务提供给另一个GPC 608以进行进一步处理,或将经处理的任务通过交叉开关单元610存储在L2高速缓存(未示出)、并行处理存储器604或系统存储器504中。此外,预光栅操作(preROP)单元725被配置为从SM 710接收数据,将数据导向到分区单元615内的一个或更多个光栅操作(ROP)单元,执行颜色混合优化、组织像素颜色数据,并执行地址转换。
[0094] 应理解,本文描述的体系架构是说明性的,并且可以进行更改和修改。除此之外,GPC 608中可包含任意数量的处理单元,如SM 710、纹理单元715或preROP单元725。此外,如结合图6所述,PPU 602可以包括任意数量的GPC 608,这些GPC 608被配置为在功能上彼此相似,因此执行行为不依赖于哪些GPC 608接收特定处理任务。此外,每个GPC 608独立于PPU 602中的其他GPC 608操作,以执行一个或更多个应用程序的任务。
[0095] 总之,所公开的实施例在神经网络和/或另一种类型的机器学习模型中执行权重和/或激活层的基于训练的量化。权重在前向-反向传递之后被量化,其基于神经网络的损失函数的导数更新权重的全精度表示。此外,可以基于延迟量化的偏移超参数来执行这种权重量化,直到已经执行了一定数量的训练步骤和/或指定在延迟之后执行量化的频率的频率参数。激活层在一个或更多个阶段中量化,从最接近神经网络的输入层的层开始并继续,直到到达接近神经网络的输出层的层。当量化神经网络的给定激活层时,用于计算激活层的输入的权重被冻结,并且基于激活层的量化输出微调神经网络的后续层中的权重。
[0096] 所公开的技术的一个技术优点是在使用可微分的损失函数执行反向传播之后执行神经网络中的全精度权重的量化,这可以提高神经网络的准确度。另一个技术优点涉及神经网络中的激活层的量化与权重的量化分开,并且基于量化的激活层对神经网络的后续层中的权重进行额外的微调,这在使用量化值进行后续推理期间可以进一步提高神经网络的准确性。因此,所公开的技术在计算机系统、应用和/或技术中提供技术改进,用于在神经网络或其他类型的机器学习模型的训练和/或执行期间减少计算和存储开销和/或改善性能。
[0097] 1.在一些实施例中,一种处理器包括:一个或更多个算术逻辑单元(ALU),用于使用已经从第一浮点值表示转换为第二浮点值表示的权重在神经网络中执行一个或更多个激活函数,所述第二浮点值表示比所述第一浮点值表示具有更少的比特。
[0098] 2.如条款1所述的处理器,其中,所述一个或更多个ALU还通过将已经从所述第一浮点值表示转换为所述第二浮点值表示的所述权重应用于激活输入,来在所述神经网络中执行一个或更多个激活函数。
[0099] 3.如条款1-2所述的处理器,其中,所述权重通过以下方式转换:在使用训练所述神经网络的第一数量的前向-反向传递来更新所述权重之后,执行所述权重的从所述第一浮点值表示到所述第二浮点值表示的第一量化;以及在所述权重的所述第一量化之后,在使用训练所述神经网络的第二数量的前向-反向传递来更新所述权重之后,执行所述权重的从所述第一浮点值表示到所述第二浮点值表示的第二量化。
[0100] 4.如条款1-3所述的处理器,其中,基于与训练所述神经网络相关联的偏移超参数来确定所述前向-反向传递的第一数量。
[0101] 5.如条款1-4所述的处理器,其中,基于与训练所述神经网络相关联的频率超参数来确定所述前向-反向传递的第二数量。
[0102] 6.如条款1-5所述的处理器,其中,所述权重通过以下方式转换:冻结所述神经网络的第一一个或更多个层中的所述权重的第一部分;以及修改所述神经网络的第二一个或更多个层中的所述权重的第二部分。
[0103] 7.如条款1-6所述的处理器,其中,在修改所述第二一个或更多个层中的所述权重的所述第二部分之前,量化所述第一一个或更多个层的输出。
[0104] 8.如条款1-7所述的处理器,其中,所述权重通过以下方式转换:在修改所述权重的所述第二部分之后,冻结所述神经网络的第二一个或更多个层中的所述权重的所述第二部分;以及修改所述第二一个或更多个层之后的所述神经网络的第三一个或更多个层中的所述权重的第三部分。
[0105] 9.如条款1-8所述的处理器,其中,修改所述权重的所述第二部分包括:至少基于所述第一一个或更多个层的输出来更新所述权重的所述第二部分中的浮点值;以及将所述权重的所述第二部分从所述第一浮点值表示转换为所述第二浮点值表示。
[0106] 10.在一些实施例中,一种方法包括:训练一个或更多个神经网络,其中训练所述一个或更多个神经网络包括:将权重参数从第一浮点值表示转换为第二浮点值表示,所述第二浮点值表示比所述第一浮点值表示具有更少的比特。
[0107] 11.如条款10所述的方法,其中,转换所述权重参数包括:在使用训练所述一个或更多个神经网络的第一数量的前向-反向传递来更新所述权重参数之后,执行所述权重参数的从所述第一浮点值表示到所述第二浮点值表示的第一量化;以及在所述权重参数的所述第一量化之后,在使用训练所述一个或更多个神经网络的第二数量的前向-反向传递来更新所述权重参数之后,执行所述权重参数的从所述第一浮点值表示到所述第二浮点值表示的第二量化。
[0108] 12.如条款10-11所述的方法,还包括:基于与训练所述一个或更多个神经网络相关联的偏移超参数来确定所述前向-反向传递的第一数量。
[0109] 13.如条款10-12所述的方法,还包括:基于与训练所述一个或更多个神经网络相关联的频率超参数来确定所述前向-反向传递的第二数量。
[0110] 14.如条款10-13所述的方法,其中,转换所述权重参数包括:冻结所述一个或更多个神经网络的第一一个或更多个层中的所述权重参数的第一部分;以及修改所述第一一个或更多个层之后的所述一个或更多个神经网络的第二一个或更多个层中的所述权重参数的第二部分。
[0111] 15.如条款10-14所述的方法,还包括:在修改所述第二一个或更多个层中的所述权重参数的所述第二部分之前,量化所述第一一个或更多个层的输出。
[0112] 16.如条款10-15所述的方法,还包括:在修改所述权重参数的所述第二部分之后,冻结所述一个或更多个神经网络的所述第二一个或更多个层中的所述权重参数的所述第二部分;以及修改所述第二一个或更多个层之后的所述一个或更多个神经网络的第三一个或更多个层中的所述权重参数的第三部分。
[0113] 17.如条款10-16所述的方法,其中,修改所述权重参数的所述第二部分包括:至少基于所述第一一个或更多个层的输出来更新所述权重参数的所述第二部分中的浮点值;以及将所述权重参数的所述第二部分从所述第一浮点值表示转换为所述第二浮点值表示。
[0114] 18.如条款10-17所述的方法,其中,所述神经网络的所述第一一个或更多个层包括卷积层、批归一化层和激活层。
[0115] 19.如条款10-18所述的方法,其中,所述权重参数与所述神经网络中的全连接层相关联。
[0116] 20.在一些实施例中,一种系统包括:一个或更多个计算机,包括一个或更多个处理器,用于训练一个或更多个神经网络,其中训练所述一个或更多个神经网络包括:将权重参数从第一浮点值表示转换为第二浮点值表示,所述第二浮点值表示比所述第一浮点值表示具有更少的比特。
[0117] 21.如条款20所述的系统,其中,转换所述权重参数包括:在使用训练所述一个或更多个神经网络的第一数量的前向-反向传递来更新所述权重参数之后,执行所述权重参数的从所述第一浮点值表示到所述第二浮点值表示的第一量化;以及在所述权重参数的所述第一量化之后,在使用训练所述一个或更多个神经网络的第二数量的前向-反向传递来更新所述权重参数之后,执行所述权重参数的从所述第一浮点值表示到所述第二浮点值表示的第二量化。
[0118] 22.如条款20-21所述的系统,其中,所述前向-反向传递的第一数量基于与训练所述一个或更多个神经网络相关联的偏移超参数。
[0119] 23.如条款20-22所述的系统,其中,所述前向-反向传递的第二数量基于与训练所述一个或更多个神经网络相关联的频率超参数。
[0120] 24.在一些实施例中,一种机器可读介质具有存储在其上的指令集,如果由一个或更多个处理器执行所述指令集,则使得所述一个或更多个处理器至少:训练一个或更多个神经网络,其中训练所述一个或更多个神经网络包括:将权重参数从第一浮点值表示转换为第二浮点值表示,所述第二浮点值表示比所述第一浮点值表示具有更少的比特。
[0121] 25.如条款24所述的机器可读介质,其中转换所述权重参数包括:在使用训练所述一个或更多个神经网络的第一数量的前向-反向传递来更新所述权重参数之后,执行所述权重参数的从所述第一浮点值表示到所述第二浮点值表示的第一量化;以及在所述权重参数的所述第一量化之后,在使用训练所述一个或更多个神经网络的第二数量的前向-反向传递来更新所述权重参数之后,执行所述权重参数的从所述第一浮点值表示到所述第二浮点值表示的第二量化。
[0122] 26.如条款24-25所述的机器可读介质,其中,所述前向-反向传递的第一数量基于与训练所述一个或更多个神经网络相关联的偏移超参数。
[0123] 27.如条款24-26所述的机器可读介质,其中,所述前向-反向传递的第二数量基于与训练所述一个或更多个神经网络相关联的频率超参数。
[0124] 在本申请中以任何方式描述的任何权利要求和/或任何元素中记载的任何权利要求要素的组合均落入本公开和保护的所考虑的范围。
[0125] 各个实施例的描述已出于说明目的进行了呈现,但并不意图穷尽列举,或限于所公开的实施例。不偏离所述实施例的范围和精神的情况下,对于本领技术人员来讲,许多修改和变化将是显而易见的。
[0126] 本实施例的方面可体现为系统、方法或计算机程序产品。因此,本公开的各个方面可采取完全硬件实施例、完全软件实施例(包括固件、常驻软件、微代码等)或软件和硬件结合的实施例(这里通常称为“模块”、“系统”)的形式。此外,本公开的方面可采取一种或更多种计算机可读介质中体现的计算机程序产品的形式,其中计算机可读介质具有体现在其上的计算机可读程序代码。
[0127] 可以使用一种或更多种计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。例如,计算机可读存储介质包括但不限于电子、磁、光、电磁、红外或半导体系统、装置或设备,或上述任何适当的组合。计算机可读存储介质的更具体的示例(非穷尽列举)包括以下:具有一根或更多根电线的电气连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存)、光纤、便携式光盘只读存储器(CD-ROM)、光存储设备、磁存储设备或上述任何合适的组合。在本文档的上下文中,计算机可读存储介质可以是任何有形介质,其可以包含或存储程序以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合使用。
[0128] 以上根据本公开的实施例参照方法、装置(系统)和计算机程序产品的流程图说明和/或框图描述了本公开的方面。应理解,流程图说明和/或框图的每个框,以及流程图说明和/或框图中框的组合,都可以通过计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理设备的处理器以产生机器。当通过计算机或其他可编程数据处理设备的处理器执行指令时,可实现流程图和/或框图的一个或更多个框中指定的功能/动作。此类处理器可以是但不限于通用处理器、专用处理器、特定于应用程序的处理器或现场可编程门阵列。
[0129] 图中的流程图和框图示出了根据本公开的各个实施例的、系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这方面,流程图或框图中的每个框可以表示模块、段或代码的部分,其包括用于实现指定逻辑函数的一个或更多个可执行指令。还应指出,在一些替代实施例中,框中注明的功能可能按图中注明的顺序发生。例如,连续示出的两个框实际上可以大致同时执行,或者这些框有时可以相反的顺序执行,具体取决于所涉及的功能。还应注意,框图和/或流程图说明中的每个框,以及框图和/或流程图说明中框的组合,可以由执行指定功能或动作或专用硬件和计算机指令的组合的基于专用的硬件的系统来实现。
[0130] 虽然前述内容是针对本公开的实施例的,但本公开的其他和进一步实施例可以在不偏离其基本范围的情况下设计,其范围由权利要求来确定。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈