用于神经网络部署和执行的有效优化的制作方法

文档序号:31697126发布日期:2022-10-01 06:00阅读:109来源:国知局
用于神经网络部署和执行的有效优化的制作方法
用于神经网络部署和执行的有效优化
1.相关申请
2.本技术要求于2021年3月12日提交的美国临时申请第63/160,072号的权益,其全部内容通过引用并入本文。
技术领域
3.本公开内容涉及提供对机器学习模型的有效计算支持;更具体地,涉及优化存储器和计算资源的使用,以在具有特定硬件配置的装置上有效部署机器学习模型。


背景技术:

4.边缘计算是基于云或基于服务器的计算环境中的一种类型的分布式计算,其中至少一部分数据处理在更靠近环境的外围处发生,在环境的外围处发生数据的收集或消耗。边缘装置可以是具有相对适中的处理能力和存储能力的计算装置,并且可以访问本地数据(例如,经由连接的传感装置、物联网或iot网络)和云服务。边缘装置在某些情况下可以使用其自己的处理器和存储器资源来处理本地数据,而不是将本地数据作为输入上载至云服务中并且然后从云服务接收处理输出。虽然云服务能够比边缘装置更快地处理本地数据,但是网络带宽的限制可能抵消云处理增益。本地处理可以具有另外的优点,例如实时地响应变化的状况、减少云服务的计算负载、降低网络流量、消除敏感数据暴露于对抗性攻击等。


技术实现要素:

5.一种用于部署机器学习模型mlm的方法,所述方法包括:获得预训练的mlm的配置设置,其中,所述mlm的所述配置设置包括:表征与所述mlm相关联的数据流的信息,以及与所述mlm相关联的计算操作的参数;获得目标计算装置的硬件配置;以及鉴于所述mlm的所述配置设置和所述目标计算装置的所述硬件配置,编译被配置成在所述目标计算装置上执行所述mlm的执行包,其中,编译所述执行包包括:识别所述目标计算装置的处理器的向量化指令的格式;以及鉴于所识别的所述向量化指令的格式,生成在所述目标计算装置上实施所述mlm的源代码。
6.一种用于部署机器学习模型mlm的方法,所述方法包括:在边缘计算装置ecd上使用鉴于所述ecd的硬件配置而生成的执行包来实例化mlm,其中,所述硬件配置包括以下中的至少一个:所述ecd的处理器的特征,或所述ecd的第一存储器装置的特征;以及使用实例化的mlm处理推理数据以获得推理输出,其中,处理所述推理数据包括:将所述mlm的第一部分从所述ecd的第二存储器装置加载至所述ecd的所述第一存储器装置,所述第一部分包括所述mlm的第一多个参数,使用所述mlm的所述第一多个参数来执行所述mlm的第一多个操作,以及将所述mlm的第二部分加载至所述ecd的所述第一存储器装置,所述第二部分包括所述mlm的第二多个参数,其中,加载所述mlm的所述第二部分包括在所述ecd的所述第二存储器装置中利用所述mlm的所述第二多个参数的子集替换至少所述mlm的所述第一多个参
数的子集。
7.一种系统,包括:存储器子系统;以及通信地耦接至所述存储器子系统的处理装置,所述处理装置被配置成:获得预训练的mlm的配置设置,其中,所述mlm的所述配置设置包括:表征与所述mlm相关联的数据流的信息,以及与所述mlm相关联的计算操作的参数;获得目标计算装置的硬件配置;以及鉴于所述mlm的所述配置设置和所述目标计算装置的所述硬件配置,编译被配置成在所述目标计算装置上执行所述mlm的执行包,其中,为了编译所述执行包,所述处理装置被配置成:识别所述目标计算装置的处理器的向量化指令的格式;以及鉴于所识别的所述向量化指令的格式,生成在所述目标计算装置上实施所述mlm的源代码。
附图说明
8.图1a是根据本公开内容的一些实现方式的支持在特定于目标的平台上分析、优化和部署一个或更多个机器学习模型的计算环境的示例架构的框图。
9.图1b示出了根据本公开内容的一些实现方式的图1a的示例架构的优化引擎和编译器的操作。
10.图2是根据本公开内容的一些实现方式的用于在特定于目标的平台上优化执行机器学习模型的内核缩减的示意图。
11.图3a是根据本公开内容的一些实现方式的用于本地机器学习操作的优化执行的示例存储器利用的示意图。
12.图3b是根据本公开内容的一些实现方式的用于机器学习操作的优化执行的示例中间输出暂存器(scratch memory)利用的示意图。
13.图3c是根据本公开内容的一些实现方式的用于机器学习操作的优化执行的另一示例中间输出暂存器利用的示意图。
14.图4a是根据本公开内容的一些实现方式的机器学习操作的示例因式分解的示意图。
15.图4b是根据本公开内容的一些实现方式的神经网络层的操作的示例因式分解的示意图。
16.图4c是根据本公开内容的一些实现方式的神经网络层的操作的示例多阶段因式分解的示意图。
17.图5是根据本公开内容的一些实现方式的在边缘计算装置上执行的机器学习计算的示例量化的示意图。
18.图6是根据本公开内容的一些实现方式的在特定于目标的平台上部署一个或更多个机器学习模型的示例方法的流程图。
19.图7是根据本公开内容的一些实现方式的在特定于目标的平台上执行一个或更多个机器学习模型的示例方法的流程图。
20.图8是根据本公开内容的一些实现方式的在执行一个或更多个机器学习模型期间优化存储器使用的示例方法的流程图。
21.图9是根据本公开内容的一些实现方式的在执行一个或更多个机器学习模型期间优化存储器使用的另一示例方法的流程图。
22.图10是根据本公开内容的一些实现方式的对由一个或更多个机器学习模型处理的数据执行运行时量化的示例方法的流程图。
具体实施方式
23.现代网络可以将具有非常多样的处理能力的计算装置连接在一起。例如,技术(例如,制造)生产线可以包括连接至局域网(lan)和/或个人区域网(pan)的数百(或更多)无线传感器。传感器组可以由本地(边缘)处理装置例如微控制器单元(mcu)服务。多个mcu可以连接至本地处理装置例如工作站,该本地处理装置转而可以与企业数据中心和/或由超级计算设施支持的云服务进行通信。在一些情况下,该处理层级中的一个或更多个处理装置可以执行机器学习算法,例如作为环境监测、输入材料的质量控制、产品产量质量控制等的一部分。机器学习模型(mlm)可以在一种类型的计算装置(例如,高功率计算机)上被开发和训练,但被部署在不同类型的计算装置(例如,低功率mcu)上。
24.边缘装置可以具有用于存储经训练的mlm的有限数量的存储器和用于执行存储的mlm的有限速度的处理器。经训练的mlm例如神经网络(nn)可以具有按层布置的大量神经元,每个神经元与一组权重和偏差相关联。nn的权重和偏差可以与输入数据、中间数据(各神经元层的输出)、输出数据等一起存储在存储器中。边缘装置的处理器能够每单位时间执行有限数目的线程和操作。结果是,当在边缘装置上执行时,在高端处理装置上执行经训练的nn可能是次优的。
25.本公开内容的各方面和实现方式通过实现便于在具有特定计算资源的处理装置(包括但不限于边缘装置)上部署机器学习模型的系统和方法来解决现有技术的这些和其他限制。为了简洁起见,部署平台在本文中通常被称为边缘装置,但是应当理解,本文所公开的各种实现方式和优化技术可以在具有大量处理资源和存储器资源的计算机(包括服务器计算装置、云计算装置等)上使用。所公开的实现方式使得能够在特定于装置的目标平台上部署mlm。所公开的实现方式包括优化引擎(oe),该优化引擎分析将被部署的nn的架构(在本文中被称为nn图),确定将使用特定于装置的计算资源执行nn的优化方式,并编译用于在目标平台上部署nn的可执行文件。在一些实现方式中,oe可以鉴于本文描述的各种较低级别优化来编译可执行文件。
26.在一个实例中,较低级别优化可以包括计算周期的优化。例如,oe可以识别特定于平台的指令集架构(instructure set architecture,isa),该指令集架构可以包括由边缘装置的处理器(例如,mcu)支持的向量化指令(vi),并且oe可以修改各种nn内核(过滤器)以具有与vi的大小对应的大小。例如,如果第一内核具有小于vi的大小的大小,则可以(例如,利用零)填充第一内核以利用边缘装置的isa。类似地,如果第二内核具有超过vi的大小的大小,则第二内核可以在两个(或更多个)vi之间被划分,根据需要将填充添加到所划分的内核中的一个(或更多个)内核中,以使第二内核适配整数个vi。在一些情况下,例如,如果最后划分的内核仅具有几个操作,则如果执行对最后划分的内核的填充将比计算未填充的内核花费更多的周期,则oe可以不执行对最后划分的内核的填充。计算周期的优化还可以包括减小内核的大小,其中内核对数目减少的输入值的输入进行操作。例如,为了更快的计算,可以将在nn图的边界附近操作的内核变换成部分内核。
27.在另一实例中,较低级别优化可以包括存储器使用的优化。例如,存储器的一部分
可以被分配用于存储nn层的中间输出,并且可以进一步被分裂成第一部分和第二部分。第一部分可以存储nn的第一层、第三层和其他奇数层的中间输出。第二部分可以存储nn的第二层、第四层和其他偶数层的中间输出。随着处理移动至不同奇偶性的层(例如,从奇数移动到偶数并返回奇数),中间输出被存储在相应的(第一或第二)部分中,而另一部分(第二或第一)被用作输入数据。作为另一示例,可以使用足够大以存储两个连续的nn层的中间输出的单个存储器部分,其中该部分的不同区域存储两个nn层的输出并且在不再需要较早轮次的输出时利用来自后续层的数据进行重写。作为另一示例,实现本地处理的层(例如,池化层、卷积层)的输出可以被存储在存储器部分中,一旦相关区域设置(locale)中的输入元素已经被处理,就重写所述存储器部分。
28.在另一实例中,太大而不适配可用的高速缓冲存储器的nn可以被划分成多个较小的区域,其中特定区域的nn参数(例如,权重、偏差、激活函数)被加载至高速缓冲存储器中以用于区域处理,一旦不再需要当前区域的特定nn参数,就利用下一区域的nn参数进行替换(例如,在连续的基础上)。
29.在另一实例中,可以在实时推理处理期间在边缘装置上执行优化操作中的一些优化操作。例如,可以动态地实现输入数据和nn参数的量化(例如,重新缩放为整数值)以进行有效处理,例如,响应于针对输入数据的统计信息的实时收集。在本文中公开了各种其他优化技术和以上技术的变型。
30.图1a是根据本公开内容的一些实现方式的支持在特定于目标的平台上分析、优化和部署一个或更多个机器学习模型的计算环境100的示例架构的框图。如图1a中所示,计算环境100可以包括主机计算装置102。主机计算装置102被描绘为单个块,但是应当理解,主机计算装置102的任何部件可以在任何数目的计算装置上和/或在云上实现(或在其之间共享)。主机计算装置102可以是台式计算机、膝上型计算机、智能电话、平板计算机、服务器、访问远程服务器的计算装置、利用虚拟化计算环境的计算装置、游戏控制台、可穿戴计算机、智能tv等。主机计算装置102的用户可以本地或远程(例如,通过网络)访问主机计算装置102。主机计算装置102可以具有(图1a中未示出)任何数目的中央处理单元(cpu)和图形处理单元(gpu)(包括虚拟cpu和/或虚拟gpu),或能够执行本文中描述的技术的任何其他合适的处理装置。主机计算装置102还可以具有(图1a中未示出)任何数目的存储器装置、网络控制器、外围装置等。外围装置可以包括各种感测装置、照相机、摄像机、麦克风、扫描仪或用于数据摄取的任何其他装置。计算环境100还可以包括例如经由网络140或直接连接141交互式地耦接至主机计算装置102的边缘计算装置130。边缘计算装置130可以实现可以由主机计算装置102优化的一个或更多个mlm。
31.在一些实现方式中,主机计算装置102可以包括用于有效mlm优化和部署的多个引擎和部件。主机计算装置102与边缘计算装置130的交互可以通过优化应用编程接口(api)104来促进,该优化应用编程接口(api)104可以促进与边缘计算装置130相关联的边缘装置度量106的收集。所收集的边缘装置度量106可以包括表征边缘计算装置130的计算资源的各种数据,例如cpu 132的数目和类型、cpu时钟速率、每个cpu 132的硬件线程的数目、可以由cpu 132的各种硬件线程处理的数据操作数的大小、可用存储器134的大小、高速缓存(高速存储器)136等。在一些实现方式中,边缘计算装置130的处理资源和存储器资源可以被分布在经由本地网络(未示出)连接的两个或更多个单独的装置之间。在这种情况下,边缘装
置度量106还可以包括本地网络的网络带宽、吞吐量、时延、丢包率等。
32.优化引擎(oe)110可以包括图形解码器112、周期优化器114、存储器优化器118和内核优化器116。oe 110可以访问边缘装置度量106和一个或更多个经训练的mlm 108。如下面更详细地描述的,可以由编译器120使用oe 110的输出来编译可执行代码和库122,以用于mlm 108的特定于目标的执行。oe还可以生成边缘装置配置文件124。图1b示出了根据本公开内容的一些实现方式的图1a的示例架构100的oe 110和编译器120的操作101。如图1b中描绘的,在评估模型108-1以用于在边缘计算装置130上部署时,图形解码器112可以访问模型108-1(例如,经训练的mlm 108中的一个经训练的mlm 108)的架构和参数。例如,图形解码器112可以确定模型108-1的神经层的数目和神经元(计算节点)的数目、针对每个节点的输入/输出神经连接(边缘)的数目、与每个边缘相关联的权重、与每个节点相关联的偏差和激活函数等。应当将层理解为可以并行执行的任何操作集。例如,由各神经元对一组输入数据(例如,在多个神经元之间划分)执行的操作可以表示一个层,对该层的输出执行的操作可以表示另一个层等。神经元可以表示采用两个或更多个输入数并产生输出数(例如,经由权重乘法、偏差加法、激活函数的应用等)的任何计算集。
33.图形信息可以以任何合适的形式例如作为一个或更多个表、一个或更多个图形、值阵列等或其任何组合递送至图形解码器112。在一些实现方式中,nn图形信息可以包括nn参数的矩阵该矩阵具有矩阵元素m
jk
。矩阵的维数可以是n
×
n,其中n是网络中节点的总数目。非零非对角矩阵元素m
jk
可以指示从节点j指向节点k的神经连接的权重。相应地,转置nn矩阵元素m
kj
可以指示从节点k到节点j的反向连接的权重。因此,前馈神经网络可以具有至少n(n-1)/2个零矩阵元素。对角矩阵元素m
jj
可以指示与节点j相关联的偏差值bj。例如,图1b中描绘的5节点神经网络可以利用以下矩阵来描述:
[0034][0035]
其中,第j列的非对角元素表示指向第j个节点的边的权重,并且第j行的非对角元素列出离开相应节点的边的权重。在一些实现方式中,可以使用矩阵的稀疏表示,在该稀疏表示中仅列出非零权重和偏差。此外,nn图形信息可以包括每个模式的激活函数的列表,并且如果适用,则还包括激活函数的参数。
[0036]
基于nn参数的矩阵图形解码器112可以评估要由模型108-1执行以处理推理数据的计算周期的数目,并且估计通过模型108-1的数据流。例如,如果节点j的中间输出是oj,则第k个节点可以执行操作以产生等于ok=∑j≠koj
·
mjk+bk的中间输出。基于模型108-1的拓扑(例如,如由nn参数的矩阵所表示的),图形解码112可以识别处理每层神经元连接可能需要的计算周期的数目。图形解码112还可以识别处理所有中间神经元输出所需的存储器操作(读和写操作)的数目以及用于存储信息的存储器地址的类型(例如,浮点、整数、单精度、双精度等)。
[0037]
图形解码112还可以例如基于nn参数的矩阵或任何其他合适的nn图形信息来确定模型108-1的操作中的至少一些操作要使用一个或更多个内核(过滤器)来执行。更具体地,内核可以是被重复地应用于(例如,以滑动方式)神经元层的多个输出(或输入数据)的(较大矩阵的)权重的固定大小的子矩阵多个内核可以用于收集由各个神经元层输出的上下文信息。例如,用于对象识别的mlm可以处理多个输入像素,每个像素与一个(例如,黑/白)强度值和/或多个(例如,红/绿/蓝)颜色强度值相关联。第一神经元层可以应用3
×
3内核(或5
×
5内核,或任何其他适用的内核)来计算输入像素值的加权卷积并收集针对输入像素值的特定区域设置的上下文信息。在一些实现方式中,可以在给定的神经元层内应用多个内核,其中具有不同大小的一个或更多个内核针对输入数据的不同区域设置计算卷积。例如,可以将具有4
×
4像素的大小的第一内核和具有8
×
8像素的大小的第二内核应用于强度像素值。可以类似地将附加内核(例如,16
×
16像素内核)应用于颜色像素值等。后续(例如,第二、第三等)神经元层可以具有对先前神经元层的输出(本文中称为中间输出)进行操作的附加内核。尽管一些内核可以保留中间输出的维数,但是其他内核可以减小(或增加)中间输出的维数。例如,k
×
l维的最大(或平均)池化内核可以确定由前一层输出的k
×
l个值的区域设置中的最大(或平均)值。图形解码器112可以识别所有这样的内核并评估执行模型108-1的实例(例如,处理一组推理数据)所需的计算资源的数目(处理器周期、存储器大小和存储器操作的数目)。
[0038]
如图1b中所示,图形解码112的输出可以由周期优化器114使用,该周期优化器114可以识别边缘计算装置130的处理器或微控制器(加速器、协处理器等)能够执行的硬件指令的格式。例如,周期优化器114可以识别cpu 132能够执行在其上实现的例如作为指令集架构(isa)的一部分的向量化指令(vi)。由cpu 132识别的vi或任何其他合适的硬件指令可以实现对模型108-1的操作的快速并行处理,例如simd(单指令多数据)处理。此外,与施加由使用模型108-1的应用确定的数据格式(例如,8位字符、16位整数、32位单精度、64位双精度等)的常规编译器不同,周期优化器114可以强制使数据格式与由cpu 132识别的vi(或任何其他合适的硬件指令)的格式对准。
[0039]
更具体地,使用周期优化器114,编译器120可以生成用于在边缘计算装置130上执行模型108-1的代码122-1,并且还可以生成一个或更多个库文件122-2,其中代码122-1和库文件122-2中的存储器使用与cpu132的isa对准。例如,在cpu 132上实现并行处理的硬件指令可以对32位输入(操作数)进行操作。因此,代码122-1可以分配由cpu 132的硬件指令使用的输入数据起始存储器地址。例如,如果输入数据是8位字符格式,则代码122-1可以被配置成将数据起始地址分配成由cpu 132的vi识别的32位地址。
[0040]
在一些实现方式中,周期优化器114可以使编译器120改变输入数据中的一些或全部输入数据的格式。例如,输入数据可以是chw格式(例如,颜色、高度、宽度),而cpu 132的硬件指令可以更有效地处理经修改的hwc(高度、宽度、颜色)格式的数据。
[0041]
类似地,使用内核优化器116,编译器120可以优化模型108-1的执行,模型108-1被训练成使用具有可以不与cpu 132的硬件线程的数目对准的维数的内核。例如,cpu 132(或图1a中未示出的任何其他合适的处理单元,例如图形处理单元或gpu)的硬件指令可以允许并行地执行十六次乘法。由模型108-1部署的第一内核可以是4
×
3内核。因此,第一内核执行可以涉及计算12次乘法,所述12次乘法涉及输入数据(或先前神经元层的中间输出)的部
分和第一内核的12个权重。为了使内核维数与cpu 132并行处理的维数对准,代码122-1可以包括填充操作以将4
×
3内核变换成4
×
4内核,例如通过将具有零权重的另一列添加至内核来将4
×
3内核变换成4
×
4内核。作为另一示例,由模型108-1部署的第二内核可以是具有24次乘法的6
×
4内核。为了与cpu 132硬件指令对准,可以将内核填充至8
×
4大小(例如,通过添加两行零权重)并且经由两个连续硬件指令实现内核的一个应用,每个硬件指令执行16次并行乘法。
[0042]
在一些情况下,代替将内核填充至更高维数,编译器120可以使用内核优化器116来减小一些内核(例如,在模型108的边缘附近应用的内核的实例)的维数,如下面结合图2更详细地描述的。
[0043]
使用存储器优化器118,编译器120可以在边缘计算装置130上执行模型108-1期间优化存储器利用,如下面结合图3a至图3c以及图4a至图4c更详细地描述的。存储器优化可以包括(但不限于):分配大小足以存储一个或两个连续神经元层的输出的存储器缓冲区;一旦存储在存储器部分中的值已经被处理就重新使用所述存储器部分;将nn划分成多个较小的区域,其中相关联的nn参数被顺序地加载至高速缓存136中等。
[0044]
如图1b中所描绘的,编译器120的输出可以包括代码122-1、库122-2。在一些实现方式中,库122-2可以是不特定于平台的例程和数据的集合。由oe 110生成的配置文件124可以包括特定于边缘计算装置130的设置和模板。配置文件124可以确定如何在边缘计算装置130上实现代码122-1的执行。返回参照图1a,代码122-1、库122-2和配置文件124可以被传递至边缘计算装置130以由推理引擎150执行。在一些实现方式中,可以经由优化api 104使配置文件124对用户(例如,开发者)可用。优化api 104可以以用户可访问的格式表示经编译的模型108的配置。在一些情况下,优化api 104可以指示模型108-1在边缘计算装置130上的执行可能是次优的。然后,用户可以改变模型108-1的架构和/或启动模型108-1的重新训练。例如,优化api 104可以向用户指示具有特定数目的隐藏层的nn将不能实时地执行对象识别。作为响应,用户(开发者)可以减少隐藏层的数目(和/或各层中的神经元的数目)并以新配置重新训练模型108-1。
[0045]
模型108的训练(和重新训练)可以由训练服务器162执行。在一些实现方式中,训练服务器162可以是主机计算装置102的一部分。在其他实现方式中,训练服务器162可以直接或经由网络140通信地耦接至主机计算装置102。训练服务器162可以是(和/或包括)机架式服务器、路由器计算机、个人计算机、膝上型计算机、平板计算机、台式计算机、媒体中心或其任何组合。训练服务器162可以包括训练引擎160。在训练(或重新训练)期间,训练引擎160可以生成并配置一个或更多个mlm 108。mlm 108可以包括回归算法、决策树、支持向量机、k均值聚类模型、神经网络或任何其他机器学习算法。神经网络mlm可以包括卷积、递归、全连接、长短期记忆模型、hopfield、玻尔兹曼(boltzmann)神经网络或任何其他类型的神经网络。生成mlm可以包括设置mlm类型(例如,神经网络)、架构、神经元层的数目、层之间的连接的类型(例如,全连接、卷积、去卷积等)、每个层内节点的数目、在网络的各个层/节点中使用的激活函数的类型、在网络的训练中使用的损失函数的类型等。生成mlm 108可以包括(例如,随机地)设置网络的各个节点的初始参数(权重、偏差)。所生成的mlm可以由训练引擎160使用训练数据来训练,该训练数据可以包括训练输入165和对应的目标输出167。可以通过映射数据166识别训练输入165与正确的目标输出167的关联。在mlm 108的训练期
间,训练引擎160可以基于期望的目标输出167识别训练输入165中的模式,并且训练相应的mlm以执行期望的任务。然后,可以使用先前未被mlm 108看到的附加训练(验证)输入/目标输出关联来验证经训练的mlm 108。
[0046]
经训练的(和经重新训练的)mlm 108可以存储在经训练的模型储存库142中,主机计算装置102和边缘计算装置130可以访问该经训练的模型储存库142。在一些实现方式中,在(例如,通过主机计算装置102)针对边缘计算装置130执行模型108的优化和编译之后,对应的代码122-1、库122-2和配置文件124可以被存储在经训练的模型储存库中,并且在运行一个或多个mlm 108时或在运行一个或多个mlm 108之前由边缘计算装置130访问(例如,下载)对应的代码122-1、库122-2和配置文件124。经训练的模型参数(权重和偏差)可以被转换或变换成另一数据格式(例如,量化的定点格式),并且可以被存储在边缘计算装置130内。经训练的模型储存库142可以是能够存储经训练的mlm 108的永久存储装置。经训练的模型储存库142可以由一个或更多个存储装置(例如,主存储器、基于磁或光存储的盘、磁带或硬盘驱动器、nas、san等)托管。虽然被描绘为与训练服务器162分离,但是在一些实现方式中,经训练的模型储存库142可以是训练服务器162的一部分。在一些实现方式中,经训练的模型储存库142可以是网络附接的文件服务器,而在其他实现方式中,经训练的模型储存库142可以是可以由服务器机器或训练服务器162可经由网络140访问的一个或更多个不同的机器托管的一些其他类型的永久存储装置,例如面向对象的数据库、关系数据库等。
[0047]
在示例部署场景中,mlm 108中的一个或更多个(例如,模型108-1)可以在训练服务器162上进行训练并被提供给主机计算装置102,以进行针对特定于目标的平台例如针对边缘计算装置130的优化和编译。经训练的模型参数、代码122-1、库122-2和配置文件124然后可以被提供给边缘计算装置130。边缘计算装置130上的推理引擎150可以访问配置文件124并使用配置文件124中的配置设置来配置代码122-1的执行。配置设置可以指定将在模型108的执行中使用的存储器地址的大小、将由cpu132处理的数据操作数的大小、内核修改(例如,填充和/或缩减)、存储器存储和读取操作的处理、以及根据本公开内容操作的各种其他优化。可以由在边缘计算装置130上操作的运行时oe 138执行优化中的一些优化,例如运行时数据优化(量化)和内核修改。可以由推理引擎150使用经部署和优化的模型108-1来处理特定于应用的(推理)数据152并产生推理输出154。推理输出154可以包括模型108的任何分类输出,例如对象识别输出、对象类型分类输出、声音识别输出、语音识别输出、技术控制输出、安全输出、数据处理输出或任何其他适用的输出。
[0048]
现在将在下面关于图2至图4c详细描述可以用于部署和执行模型108-1的各种优化。虽然为了具体起见,可以将优化描述为在边缘计算装置130上执行,但是相同或类似的技术也可以用于优化在任何其他计算装置(包括工作站、服务器、云计算机和任何其他计算装置)上的mlm部署。
[0049]
图2是根据本公开内容的一些实现方式的用于在特定于目标的平台上优化执行机器学习模型的内核缩减200的示意图。经由数据网格202示意性地描绘了输入到nn模型的层的输入数据,网格的每个单元表示数据的元素。虽然为了具体起见示出了矩形网格,但是可以类似地处理输入数据的任何其他网格。输入数据可以指输入至mlm模型中的数据152的一部分或先前神经元层的中间输出的任何部分。可以利用内核204处理数据网格202,该内核204可以由元素k
jk
的矩阵表示。所示出的是3
×
3矩阵,但是可以使用任何其他维数的矩阵,
这取决于特定神经元层的具体设置。在内核204被应用于数据网格202的区域设置时,内核元素k
jk
被应用于(例如,乘以)数据网格202的相应元素并被加在一起,并且总和被用于产生(经受添加偏差和应用激活函数)神经元层的输出的元素。在一些情况下,例如,在层输出的维数与层输入的维数相同的情况下,内核204可以被应用在大小小于内核204的大小的网格202的区域设置处,例如,被应用在数据网格202的边界附近的点处。将内核204应用于边缘网格元素206的邻域的常规方式是通过将输入数据扩展到数据网格202之外并且然后将内核204应用于经扩展的网格来修改(例如,通过用零填充)输入数据。这样的填充增加了需要被执行以应用内核204的乘法的数目,并且进一步增加了存储数据网格202所需的存储器的量。
[0050]
在本公开内容的一些实现方式中,针对输入数据网格(或任何中间数据网格)的边界(例如,边缘或角落)附近的内核应用的示例执行内核缩减。更具体地,在内核204应用于网格202的主体中例如应用于网格元素208的邻域——在其处内核204不会跨越网格202的任何边界——时,可以使用完整的(未修改的)内核210。在内核204跨越边界时,可以减小内核的大小以避免需要存储填充数据并消除对应的乘法操作。例如,当在边缘元素212的邻域附近应用内核204时,可以将最右列被消除的部分(边缘)内核214应用于边缘元素212的相应区域设置。类似地,当在角落元素216附近应用内核204时,可以将最右列和最上行被消除的部分(角落)内核218应用于角落元素216的相应区域设置。这样的内核修改减少了用于处理数据网格202的计算周期的数目和存储数据网格202所需的存储器寄存器(例如,高速缓存或内部sram)的大小。可以将所描述的技术应用于任意拓扑(例如,除了矩形之外)的网格以及任意大小和类型的内核,例如应用于卷积内核、去卷积内核、池化内核等。在一些实现方式中,可以通过内核优化器116和编译器120将内核缩减合并至代码122-1中。在一些实现方式中,内核缩减可以由运行时oe 138执行,该运行时oe 138跟踪向其应用内核的数据区域设置的大小并选择该内核的对应部分以应用于数据。在一些实现方式中,可以首先使用数目减少的处理操作将所有缩减的(例如,边缘和/或角落)内核作为批次来应用,随后将完整的内核应用于输入数据网格的其余部分。
[0051]
图3a是根据本公开内容的一些实现方式的用于本地机器学习操作的优化执行的示例存储器利用300的示意图。卷积层和池化层的操作通常涉及本质上是本地的内核乘法。例如,在应用3
×
3卷积内核时,输入数据网格的左上元素可以影响顶行的前两个输出元素和第二行的前两个输出,但不影响其他输出元素。在nn处理期间存储数据的常规方式是通过向输入至nn层中的数据分配一个存储器缓冲区分并向nn层的输出分配单独的缓冲区。如图3a中所示,就地数据存储避免了对第二缓冲区的需要,并且一旦输入元素不再用于其他操作,就重写存储器地址。例如,图3a中描绘的是使用2
×
2池化内核执行的示例最大池化操作。示出了输入数据网格的区域302。n
×
m输入数据网格的处理结果可以是n/2
×
m/2大小的输出数据网格。输入数据网格可以以行方式存储在缓冲区304中。在由处理器处理了输入数据网格的左上2
×
2区域并且确定了最大值6时,后续操作不再需要左上部分的元素1、5、6和2。因此,处理器可以利用第一存储器地址中的新值6重写输入元素中的一个输入元素(例如,第一元素),同时将剩余的存储器地址(当前存储值5、6和2)标记为可用于接受新数据(例如,通过针对相应地址中的每个地址设置“空闲”属性)或当前池化操作的输出(例如,以顺序方式)。该处理可以针对数据网格中的剩余部分继续,直到缓冲区304存储了输出数据
网格的(n/2)
×
(m/2)个元素。结果,输入数据元素和输出数据元素二者都被存储在相同的缓冲区中,并且nn执行的内存占用(memory footprint)显著减少。虽然在图3a中示出了最大池化操作,但是相同或类似的技术可以用在平均池化操作、卷积操作或给定的输入元素影响有限数目的输出元素而不是所有输出元素(类似于全连接层的情况)的任何其他操作中。
[0052]
图3b是根据本公开内容的一些实现方式的用于机器学习操作的优化执行的示例中间输出暂存器利用310的示意图。在不同的存储器部件或分区(例如,缓冲区)用于存储各神经元层的输出的nn中,可以通过为交替的神经元层分配单独的缓冲区来最小化缓冲区的数目。例如,可以分配第一缓冲区311来保存输入到奇数神经元层(例如,层313和315)的输入(或奇数神经元层的输出),并且可以分配第二缓冲区312来保存输入到偶数神经元层(例如,层314和316)的输入(或偶数神经元层的输出)。缓冲区不需要具有相同的大小。在一些实现方式中,第一缓冲区311的大小可以对应于奇数神经元层的最大大小,并且第二缓冲区312的大小可以对应于偶数神经元层的最大大小。在神经元层例如层315不仅可以接受来自前一层314的输入而且还可以接受来自更早的层例如层313的输入的一些实现方式中,可以使用多于两个缓冲区;例如,可以使用第三缓冲区来保存由其他下游层使用的输出。类似地,一旦存储在第三缓冲区中的元素不再被用作输入到剩余节点操作的输入,就可以重写第三缓冲区。
[0053]
图3c是根据本公开内容的一些实现方式的用于机器学习操作的优化执行的另一示例中间输出暂存器利用320的示意图。如图3c中所示,在一些情况下,单个存储器缓冲区321可以用于存储两个连续神经元层的输出。例如,层331的输出可以存储在缓冲区321中,如由层331的神经元和缓冲区321的相应地址(正方形)两者的实线阴影所指示的。在层332的操作期间,输出数据可以被存储在缓冲区321的未被由层331输出的数据占用的白色部分中。(虚线阴影指示层332的神经元及其存储在缓冲区321中的输出。)结果是,层331的输出是可用的,直到层332的所有操作完成。在层333的操作期间,不再需要层331的输出数据,并且可以利用层333的输出数据重写层331的输出数据(由方格阴影所指示)。如果层332的输出大于层331的输出,则缓冲区321的一些附加地址可以用于存储层332的输出(如利用占用先前可用(白色)地址之一的方格式正方形示意性地描绘的)。结果是,层332的输出是可用的,直到层333的所有操作完成。类似地,附加层(例如,层334)的操作可以利用在用于存储更早的输出数据的缓冲区321的一部分上写入的新数据来执行(例如,由白色节点和白色正方形指示的层334的输出对层332的输出进行重写)。在一些实现方式中,缓冲区321的大小可以被选择为足够大以存储与其他连续层对相比具有组合的最大输出的两个连续层的输出。例如,如图3c中所描绘的,层333和层334具有最大组合输出,也等于缓冲区321的大小。
[0054]
图4a是根据本公开内容的一些实现方式的机器学习操作的示例因式分解400的示意图。在一些情况下,模型108和/或输入到模型108的输入数据可能太大而无法适配边缘计算装置130的高速缓存136(或任何其他内部存储器)。在这种情况下执行mlm操作的常规方法是在执行使用网络参数和/或输入数据的计算之前将这样的网络参数(例如,权重和偏差)和/或输入数据从存储器134加载至高速缓存136。然后在下一次迭代中重写参数和/或输入数据,直到所有操作完成。由于相同的数据可以用在多次计算中,因此多次将相同的参数和/或输入数据加载至高速缓存136中并不罕见。如图4a中示意性地描绘的,在本公开内
容的一些实现方式中,mlm可以被因式分解成两个或更多个分区,所述两个或更多个分区具有使得每个分区的网络参数和/或输入数据可以适配高速缓存136的大小。
[0055]
例如,输入到神经元层(例如,第一神经元层或任何隐藏神经元层)的输入被描绘为输入数据网格402,每个单元表示数据的元素。虽然为了具体起见示出了矩形网格,但是可以类似地处理输入数据的任何其他网格。下一神经元层的神经元404从数据网格402获取多个值(如利用三个输入实线箭头所描绘的),应用权重w
ij
、偏差b、激活函数(未描绘),并生成在输出数据网格406内由输出箭头指示的值。在本公开内容的一些实现方式中,mlm的神经元操作被因式分解成两个或更多个分区a、b、c等。例如,网络参数可能能够适配高速缓冲存储器,但是输入数据可能太大而不能被一次加载。在这种情况下,可以将输入数据因式分解成可以被加载至高速缓冲存储器中的较小部分。分区a可以包括使用输入数据a410来计算输出数据a411(例如,输出数据网格406的第一部分)的操作,并且分区b(c等)可以包括使用输入数据b 420来计算输出数据b 421(输出数据c 431等)的操作。在已经将输入数据a410加载至高速缓存136并且已经计算了输出数据a411之后,可以将输入数据b 420(以及类似地,输入到后续分区中的输入数据)加载至高速缓存136中并且可以计算输出数据b 421。在一些实现方式中,神经元404(以及未明确示出的其他神经元)的网络参数可以类似地被划分成部分并且与对应分区的输入一起被加载至高速缓存136中。
[0056]
在一些实现方式中,输入数据a410和输入数据b 420可以具有部分交叠(例如,在卷积神经元层的情况下)或甚至完全交叠(例如,在全连接神经元层的情况下)。在一些情况下,全连接层可以被因式分解成不交叠的分区。在这种情况下,在加载输入数据的新部分时,输入数据的交叠区段(被描绘为由输入数据a410和输入数据b 420共享的以及由输入数据b 420和输入数据c 430共享的阴影条)可以被保留在高速缓存136中。相应地,可以重写数据的不交叠区段。虽然图4a示出了将单个神经元层分割成适合高速缓存的部分,但是在一些实现方式中,这些部分可以在多个神经元层上延伸。
[0057]
图4b是根据本公开内容的一些实现方式的神经网络层的操作的示例因式分解450的示意图。具体而言,图4b中示出了全连接层的神经元操作,但是应当理解,可以以类似的方式对任何类型的神经元层(例如,卷积神经元层、去卷积神经元层、递归神经元层等)进行因式分解。输入层的n个神经元中的每个神经元可以接收输入值ij(其中,1≤j≤n)。输入层的输出可以包括m个输出值oi(其中,1≤i≤m)。可以通过使用权重w
ij
将输入值(例如,在全连接层的情况下,输入值中的一些输入值或所有输入值)加在一起作为加权和并且还添加可能的偏差值bi来获得每个输出值oi:
[0058][0059]
在一些实现方式中,值oi是中间值,激活函数被应用于该中间值以获得最终输出值。为了执行所有这样的计算并确定m个输出值,处理装置可能必须加载n
×
m个权重、m个偏差和n个输入值。即使对于适中大小的神经网络,n也可以是数千(或更多),并且m可以是数百(或更多)。一次将所有n
×
m+m+n个值从系统存储器加载至高速缓存(例如,缓冲区)可能会超过高速缓存的容量。图4b描绘了在缓冲区能够存储至少n个值的情况下数据加载和处理的有效因式分解。输入缓冲区452可以存储在直接存储器访问(dma)操作的周期1期间从
系统存储器460加载的所有n个输入值{ij}。类似地,在周期1期间,可以将n个权重值{w
1j
}(其确定第一输出值o1)从系统存储器460加载至权重缓冲区454。此外,在周期1期间,可以将m个缓冲区值{bi}从系统存储器460加载至输出缓冲区456,该输出缓冲区456将最终存储输出值{oi}。
[0060]
在执行上述加载操作之后,计算逻辑(例如,算术逻辑单元或alu)458可以执行周期1的计算:
[0061][0062]
随后可以利用所计算的输出值o1替换(不再需要的)值b1。(计算还可以包括向o1应用激活函数。)在一些实现方式中,系统可以具有至少两个权重缓冲区454。在正在执行周期1的计算并且正在从权重缓冲区454中的一个权重缓冲区(例如,权重缓冲区454-a)检索权重{w
1j
}时,可以将下一组权重{w
2j
}从系统存储器加载至另一权重缓冲区454(例如,权重缓冲区454-b)中。类似地,在任意周期i期间,将n个权重{w
ij
}加载至当前未用于向计算逻辑458提供数据的权重缓冲区中。例如,权重缓冲区454-a可以在奇数周期期间接收权重,而权重缓冲区454-b向计算逻辑458提供先前接收的权重。类似地,权重缓冲区454-b可以在偶数周期期间接收权重,而权重缓冲区454-a向计算逻辑458提供先前接收的权重。在周期i期间,存储偏差值bi的存储器地址(在输出缓冲区456中)被用作用于oi的累加器,并且在周期i完成之后存储最终输出值oi。在m个周期之后,所有m个值{oi}被存储在输出缓冲区456中。
[0063]
结果是,可能仅需要三个缓冲区(一个输入缓冲区452和两个权重缓冲区454,能够存储总共3n个值)来执行第一层的所有计算。在一些实现方式中,第二输入缓冲区可以用于在当前一组输入值正在被处理时接受下一组输入值{ij}(例如,推理数据的下一部分)。
[0064]
在一些实现方式中,输入缓冲区452和权重缓冲区454可能不能存储n个值(例如,n个输入值{ij}或n个权重值{w
1j
}、{w
2j
}、
……
等)。图4c是根据本公开内容的一些实现方式的神经网络层的操作的示例多阶段因式分解451的示意图。在输入缓冲区452和权重缓冲区454能够存储n/n个值——其中,n=2、4、8或任何其他数——时,如图4c中所描绘的,可以在n个阶段中执行因式分解。更具体地,可以使用以下表示获得每个输出值oi:
[0065][0066]
其中,o
i(k)
是第i个输出oi的第k个部分(δ
1,k
是克罗内克δ(kronecker delta))。第i个输出的部分o
i(k)
使用在图4c中被表示为{ij}
(k)
的输入值的第k个部分来计算,该输入值的第k个部分包括值ij,其中j在区间(k-1)n/n+1≤j≤kn/n内。此外,第i个输出的部分o
i(k)
使用在图4c中被表示为{w
ij
}
(k)
的权重的第k个部分来计算,该权重的第k个部分包括值w
ij
,其中j在区间(k-1)n/n+1≤j≤kn/n内并且i固定。
[0067]
计算可以经由两个循环来执行。外循环执行n个阶段(用索引k枚举),并且内循环执行m个周期,一个周期/每个输出值oi。在周期1期间,将n/n个输入值的部分{ij}
(1)
从系统存储器加载至输入缓冲区452。类似地,将确定第一输出值o1的第一部分的n/n个权重
的部分{w
1j
}
(1)
从系统存储器460加载至权重缓冲区454。此外,在周期1期间,可以将所有m个偏差值{bi}从系统存储器460加载至输出缓冲区456。(在缓冲区值{bi}的数目m超过可以在一个周期内加载的数目的那些实现方式中,偏差值{bi}的加载可以扩展到多个周期上,例如,扩展到周期2、周期3等上)。偏差值{bi}因此充当相应输出值{oi}的种子。计算逻辑458然后可以执行周期1的计算:
[0068][0069]
其中部分替换输出缓冲区456中的值b1。可以类似地执行阶段1的剩余周期2到周期m,其中偏差值bi和权重的第一部分{w
ij
}
(1)
用于计算输出值oi的第一部分
[0070]
在后续阶段期间,输入值的附加部分和权重的对应部分用于计算输出值的附加部分。例如,在阶段k的第一周期(周期(k-1)m+1)期间,将输入值的第k部分{ij}
(k)
加载至输入缓冲区452,并且将权重的第k部分{w
1j
}
(k)
加载至权重缓冲区454中。计算逻辑458然后通过将添加至存储先前计算的和的累加器来计算输出值o1的部分在阶段k的后续周期期间,将权重的其他部分{w
ij
}
(k)
加载至权重缓冲区454,并且计算输出值oi的新的部分在完成所有n个阶段之后,将m个最终值{oi}存储在输出缓冲区456中。
[0071]
如上面关于图4b所描述的,在一些实现方式中,系统可以具有至少两个权重缓冲区454(例如,权重缓冲区454-a和权重缓冲区454-b),并且可以在连续周期期间执行将权重交错加载到权重缓冲区中,例如,在正在从权重缓冲区454-a检索权重{w
ij
}
(k)
时,可以将下一组权重{w
i+1,j
}
(k)
从系统存储器460加载至权重缓冲区454-b中等。作为所描述的操作的结果,三个缓冲区(一个输入缓冲区452和两个权重缓冲区454,能够存储总共3n/n个值)可以足以执行第一层的所有计算。在一些实现方式中,系统可以具有至少两个输入缓冲区452(例如,输入缓冲区452-a和输入缓冲区452-b),并且可以在连续周期期间执行将输入值交错加载到输入缓冲区中。例如,在先前加载至输入缓冲区452-a中的输入值{ij}
(k)
在第k阶段期间正被计算逻辑458使用时,可以将下一组输入值{ij}
(k+1)
从系统存储器460加载至输入缓冲区454-b等。
[0072]
可以类似于结合图4b和/或图4c描述的操作来执行后续(隐藏和输出)层的操作。例如,隐藏层可以是具有m个输入和m个输出的全连接层。假设m小于(或等于)可以存储在一个缓冲区(例如,权重缓冲区和/或输入缓冲区)中的值的数目,可以类似于结合图4b描述的操作来执行该隐藏层的操作。在这样的实现方式中,可以使用单阶段处理,因为可以在周期1期间将输入到隐藏层中的所有输入值{ij}加载至输入缓冲区452,并且可以在周期i期间加载所有权重{w
ij
}(对于给定的i)。因此,可以在周期i期间确定整个输出值oi。在m大于可以存储在一个缓冲区中的值的数目例如大于数目n/n的那些实现方式中,在图4c描述的标记中,可以使用m=mn/n个阶段或m=mn/n1个阶段来执行隐藏层的所有输出值{oj}的处理,其中n1可以不同于n。(如果mn/n1是非整数,则下一个整数确定将在执行隐藏层的所有操作
中使用的阶段的数目。)
[0073]
因为给定神经元层的输出值{oi}也是输入到下一神经元层中的输入值{ij},所以不需要再次加载输入到隐藏层(和/或输入到网络的最终输出层)中的输入值。如结合图3b所描述的,输出缓冲区456(存储先前层的输出值)现在可以被指定为新的输入缓冲区452,而输入缓冲区452可以被指定为新的输出缓冲区456(缓冲区交换操作)。然后,新的输入缓冲区可以被植入下一层的偏差值{bi},并且将新的输入缓冲区用作用于下一层的输出值{oi}的累加器。
[0074]
如本文中所使用的术语“周期”应当被理解为任何处理单元,例如,包括多个获取和执行操作的迭代。因此,“周期”的含义可以是依赖于实现方式的。例如,当在一个计算装置(例如,专门设计的硬件加速器、服务器或工作站)上执行时可能是单个获取和执行操作的周期在不同的计算装置(例如,微控制器单元)上可能进行多个操作。
[0075]
图5是根据本公开内容的一些实现方式的在边缘计算装置上执行的机器学习计算的示例量化500的示意图。通常利用以浮点(fp)格式数字化的训练数据来训练mlm,并且mlm具有类似地用fp数表示的网络参数(权重和偏差)。fp表示允许非常高的精确度,但是可能需要更多的存储器带宽和大量的处理资源来实现快速推理执行。为了减少处理负荷,经训练的mlm可以经历许多修改,例如剔除其贡献的神经元(例如,借助于小的权重和偏差)。经训练的mlm可以进一步经历量化。量化是指经由较低精度的格式来表示流经神经元层的数据和网络参数。量化可以使用校准输入502,校准输入502可以类似于在mlm的训练中使用的训练输入,或者甚至是训练输入的子集(例如,先前未被mlm看到的输入)。
[0076]
特别地,经训练的mlm 504的网络参数和数据可以从fp表示变换(量化)成n位整数表示。例如,输入到经训练的mlm 504中的校准输入502可以包括在-1000与1000之间的fp格式的值ij,例如,一个或多个输入值可以是i1=473.932。输入值可以被量化:从[-1000,1000)fp区间重新缩放成整数值的区间例如[-32,768,32768),例如,使用乘法i1×
32768/1000=15529.804,然后取乘积的整数部分(舍入):15529.804

15530。结果是,可能引入一些误差(例如,在该示例中约为0.27%),然而这可能是用于减小存储器带宽和加速经训练的mlm 504的计算的可接受的折衷。缩放因子s=1000/32768=0.03052(或逆缩放因子s-1
=32.768)可以被存储(例如,以定点格式),以用于数据(例如,神经元操作输出)的后续计算和从整数格式转换回fp格式。在一些实现方式中,缩放因子s可以利用2的幂缩放因子(例如,2-5
)来近似,使得乘以缩放因子可以被实现为位移位(例如,向右移位5位)。权重(和/或偏差)可以使用与用于输入数据的量化的缩放因子不同的缩放因子。不同的层可以类似地使用不同的缩放因子集。
[0077]
第一层的输出可以涉及输入值ij与权重wj的相乘(以及添加偏差)。经训练的mlm 504的第一层的权重可以类似地被量化成相同(或不同)的值区间。第一层的输出可以被存储在累加器缓冲区中,该累加器缓冲区的大小是输入数据的大小(例如,在该示例中为32位)的两倍。第一层的输出还可以被进一步量化,例如,通过重新缩放成不同的值区间或重新缩放成与用于输入值的区间相同的区间[32,768,32,768]来被进一步量化。(在一些情况下,不同的值区间可以用于不同的层。)该处理可以针对层中的每个层(包括隐藏层和输出层)继续,直到获得输出506,该输出506可以是与用于一些或所有中间层输出的值区间相同的值区间,或一些其他值区间。
[0078]
在一些实现方式中,量化可以由校准统计模块508辅助。更具体地,经训练的mlm 504的层的输入值或输出值可以不均匀地分布在值的fp区间或整数区间上。例如,校准统计模块508可以确定校准输入502值的90%(或任何其他目标分数)在i
lower
=150.000与i
upper
=840.000.之间的区间内。校准统计模块508可以基于针对多个校准输入502收集的统计信息来确定边界i
lower
和i
upper
。因此,校准统计模块508可以确定可以丢弃该区间外的输入值,同时减小的区间[150.000,840.000]内的值将被重新缩放至整数区间[-32,768,32,767]上,ij→iq
,例如,使用以下等式被重新缩放至整数区间[-32,768,32,767]上:
[0079]iq
=clip([s-1
·
ij]+z),
[0080]
其中,z可以是恒定的零点值,[.]是舍入(至最接近的整数)函数,并且clip(.)是将参数限幅到整数区间[-32,768,32,767]的函数。整数值iq与浮点值ij之间的关系由逆变换给出,
[0081]
ij=s
·
(i
q-z),
[0082]
低于i
lower
的那些输入值ij可以利用最小整数值例如-32,768表示,并且高于i
upper
的那些输入值ij可以利用最大整数值例如32,767表示。这样的重新缩放可以更有效地利用可用的整数区间来表示i
lower
与i
upper
之间的最重要的值区间。可以针对经训练的mlm 504的输入(输出)值和模型参数(例如,权重和偏差)二者执行所描述的量化变换。由校准统计模块508识别的量化变换可以由量化引擎(qe)510实现。可以针对经训练的mlm504的每个层重复所描述的处理,直到生成其中包括中间层输出的模型参数被量化的经量化的模型540。
[0083]
以上示例旨在是说明性的。在一些实现方式中,qe 510可以执行任何线性变换,该线性变换相当于将值区间[i
lower
,i
upper
]移位和重新缩放至目标整数值区间[-z,z-1]上,其可以作为n位整数值(其中,n=8、16等)被存储在例如输入或输出缓冲区中。在一些实现方式中,可以使用非线性变换。以上描述的操作中的一些操作可以在训练服务器162和/或主机计算装置102上执行。
[0084]
可以将经量化的模型提供给边缘计算装置530(其可以是边缘计算装置130或任何其他装置)。在一些实现方式中,在边缘计算装置530上的推理期间,输入到经量化的模型540的输入可以显著变化。例如,在声音识别应用或语音识别应用中,检测到的声音的强度可能发生相当大的变化,因为一些人可能比其他人说话更安静,并且甚至相同的人可能在一些场合大声地说话而在其他场合安静地说话,或者可能位于距麦克风不同的距离处等。这可能导致输入值的强烈变化。在一些应用中,mlm由第三方预训练,并且用于训练的输入数据不可获得。结果是,mlm的权重和偏差可以被量化和优化,但是没有数据可用于执行mlm的输入和输出(包括中间隐藏层神经元输出)的校准和量化。为了解决这个和其他技术挑战,边缘计算装置530可以对经量化的模型540执行附加的运行时量化。在一些实现方式中,经量化的模型540可以在训练服务器162或主机计算装置102上被预先量化,如上面所描述的,例如,其中权重和偏差被量化而输入数据(以及所有神经元层的输出)在运行时执行期间在边缘计算装置530上被量化。
[0085]
输入数据(例如,一定毫秒数的语音)可以例如以fp格式存储在输入数据缓冲区532中。输入数据缓冲区532中的数据可以由运行时统计模块538分析,例如类似于校准统计模块在训练服务器162上如何操作。在一些实现方式中,运行时统计模块538可以使用检测存储在输入数据缓冲区532中的数据的范围(例如,整数位的数目和/或小数位的数目)的处
理器(微控制器或专门设计的硬件)指令。关于输入数据的各种度量可以由运行时统计模块538分析,并且可以识别用于输入数据的最相关区间[i
lower
,i
upper
]。运行时统计模块538可以向运行时qe 534-1提供所识别的区间的参数,该运行时qe 534-1可以类似于训练服务器162上的qe 510来操作。qe 534-1可以对输入到第一层542中的输入数据实施量化变换。经量化的输入数据可以在被输入至第一层542中之前被存储在经量化的数据缓冲区536中。第一层542的输出可以被存储在输出缓冲区544中,该输出缓冲区544可以是临时缓冲区,一旦输出缓冲区544中的数据被量化(并被移动至缓冲区546),该临时缓冲区就用于任何其他数据存储。输出缓冲区544中的数据可以由运行时统计模块538分析。
[0086]
更具体地,关于存储在输出缓冲区544中的数据的各种度量可以由运行时统计模块538来分析,并且可以识别用于输出数据的目标区间。运行时统计模块538可以向运行时qe 534-2提供所识别的区间的参数。可以经由与qe 534-1的电路分离的电路来实现qe 534-2。在一些实现方式中,qe 534-2可以与qe 534-1共享一些或全部电路。qe 534-2可以对由第一层输出的数据实施量化变换,并且经量化的结果可以被存储在经量化的输入缓冲区546中。然后可以将存储在经量化的输入缓冲区546中的数据馈送至第二层548。可以针对经量化的模型540的剩余层中的任何层继续类似的处理。经量化的模型540的输出可以被存储在输出数据缓冲区550中。
[0087]
在一些实现方式中,区间的大小对于不同的层可以是不同的。例如,输入到第一层542中的输入数据可以被量化成16位整数,输入到第二层548中的输入数据可以被量化成12位整数,输入到第三层中的输入数据可以被量化成10位整数等。除了区间的大小之外,运行时量化可以保持跟踪针对输入数据的缩放因子、权重、偏差、激活函数,针对输入数据的缩放因子、权重、偏差、激活函数对于不同的层可以进一步不同。可以在运行时基于对输入数据和中间数据的统计信息确定缩放因子中的每个缩放因子。在一些实现方式中,如上面所描述的,可以改变和优化数据的位长度(例如,整数或定点)。在一些实现方式中,可以从由边缘计算装置的cpu识别的多个可用格式中选择位长度(例如,32位、16位、8位等)。例如,如果仅8位存储器地址是可用的,则可以针对每个神经网络层操作优化缩放因子。可以针对由边缘计算装置530接收的每个输入数据包、针对由边缘计算装置530接收的每批包等执行所描述的运行时量化操作。
[0088]
可以在边缘计算装置130上执行各种其他优化以用于更有效的运行时推理。在一些实现方式中,神经元层中的一个神经元层可以具有一个或更多个softmax操作。例如,输入到nn的层中的输入可以包括m个值xj(其可以是前一层的m个神经元的输出)。层的输出可以包括使用softmax函数计算的概率wj(例如,分类概率),
[0089][0090]
概率wj可以指示特定推理结果的可能性有多大,例如手写文本包含特定单词或短语的可能性有多大、特定图像包含对人类的描绘的可能性有多大、一组数据指示技术处理中的错误的可能性有多大等。计算softmax函数可能是需要大量处理和存储器资源的高成本操作。例如,计算每个指数可能花费大量的周期,其包括乘法和加法运算、参考查找表等。在例如mlm被部署在边缘计算装置上的一些实现方式中,计算概率wj的层(或分类器)可
以被识别最大值xj的层替换。相应节点j可以对应于输入数据的最可能的分类,例如作为噪声(j=1)、人a的声音(j=2)、人b的声音(j=3)、说出的特定单词或一系列单词等。已经识别了输出层的最大值xj,执行mlm的处理装置可以输出相应的分类j。
[0091]
图6至图9示出了在特定于目标的平台上优化部署mlm以最大化利用可用计算资源的示例方法600-900及其可能变型。方法600-900和/或其各个功能、例程、子例程或操作中的每个功能、例程、子例程或操作可以由一个或更多个处理单元(cpu、gpu、现场可编程门阵列或fpga等)和通信地耦接至主机计算装置102、边缘计算装置130或任何其他合适的处理装置的处理单元的存储器装置来执行。在某些实现方式中,单个处理线程可以执行方法600-900。可替选地,两个或更多个处理线程可以执行方法600-900,每个线程执行方法的一个或更多个单独的功能、例程、子例程或操作。在说明性示例中,实现方法600-900的处理线程可以被同步(例如,使用信号量、临界区和/或其他线程同步机制)。可替选地,实现方法600-900的处理线程可以相对于彼此异步地执行。与图6至图9中所示的顺序相比,可以以不同的顺序来执行方法600-900的各种操作。方法600-900的一些操作可以与其他操作同时执行。一些操作可以是可选的。
[0092]
图6是根据本公开内容的一些实现方式的在特定于目标的平台上部署一个或更多个机器学习模型的示例方法600的流程图。方法600可以用于确保在一个平台上被训练的mlm在不同的平台上被有效地部署和执行。在框610处,方法600可以包括获得预训练的mlm(例如,在主机计算装置102上训练的mlm)的配置设置。mlm的配置设置可以包括表征与mlm相关联的数据流的信息,例如mlm的不同节点(例如,神经元)之间的数据流的映射、mlm的类型(例如,神经网络、决策树等)、mlm的架构(例如,卷积nn、玻尔兹曼状态机等)。配置设置还可以包括与mlm相关联的计算操作的参数。这样的参数可以包括:mlm的各个神经元的权重、偏差和激活函数;由mlm的各个(例如,最终)神经元层使用的分类器等。
[0093]
在框620处,方法600可以继续以下:处理装置获得目标计算装置(例如,边缘计算装置130)的硬件配置。硬件配置可以包括目标计算装置上的处理器的特征,例如cpu/gpu类型、cpu/gpu硬件线程的数目、cpu/gpu时钟速率、cpu/gpu的isa等。硬件配置还可以包括目标计算装置的存储器装置的特征,例如存储器大小、存储器类型、存储器存取速度、存储器地址的大小等。
[0094]
在框630处,方法600可以继续以下:处理装置鉴于mlm的配置设置和目标计算装置的硬件配置来编译被配置成在目标计算装置上执行mlm的执行包。执行包可以包括被配置成在目标计算装置上执行mlm的源代码和链接至源代码并限定源代码的一个或更多个操作的执行的配置文件。
[0095]
如利用图6中的标注部分所描绘的,编译执行可以涉及多个操作。例如,在框632处,处理装置可以识别目标计算装置的处理器的向量化指令的格式。在框634处,处理装置可以识别mlm的一个或更多个内核具有与目标计算装置的处理器的向量化指令的维数不同的维数。在框636处,处理装置可以修改mlm的一个或更多个内核,以将一个或更多个内核中的每个(或一些)内核的维数与向量化指令的维数对准。可以通过填充内核直至向量化指令的维数、通过将内核分裂成两个或更多个内核——每个分裂部分具有向量化指令的维数——或通过其任何组合来执行内核修改。在框638处,处理装置可以鉴于所识别的向量化指令的格式来生成被配置成在目标计算装置上执行mlm的源代码。
[0096]
在可选的(如由虚线框所指示的)框640处,方法600可以包括向用户(例如,开发者)提供执行包的至少一部分,例如配置文件。在一些实现方式中,配置文件可以由用户经由api来访问,该api以图形、公式或任何其他合适的用户可读格式向用户传达mlm将如何在目标计算装置上被执行。在可选的框650处,方法600可以包括从用户接收mlm的经更新的配置设置。在一些实现方式中,可以响应于接收到的经更新的配置设置来重复框630,并且可以编译新的执行包。在框660处,处理装置可以将执行包传送至目标计算装置。
[0097]
图7是根据本公开内容的一些实现方式的在特定于目标的平台上执行一个或更多个机器学习模型的示例方法700的流程图。在一些实现方式中,方法700可以由边缘计算装置(ecd)的处理装置执行以在边缘计算装置上执行mlm。在一些实现方式中,ecd可以包括处理器速度小于2.0dmips/mhz的微控制器单元,例如或类似的处理装置。在一些实现方式中,ecd的处理装置可以是具有浮点支持单元的32位处理器。在框710处,ecd的处理装置可以使用鉴于ecd的硬件配置而编译的执行包来在ecd上实例化mlm。在一些实现方式中,可以如上面结合方法600和图6所描述的来编译执行包。硬件配置可以包括ecd的处理器的特征或ecd的第一存储器装置的特征中的至少一个。例如,第一存储器装置可以是高速缓存(例如,处理器芯片上的高速存储器)。
[0098]
方法700可以继续以下:ecd的处理装置使用实例化的mlm处理推理数据以获得推理输出。在一些实现方式中,处理推理数据可以包括框720至框760的操作。更具体地,在框720处,方法700可以包括将mlm的第一部分从ecd的第二存储器装置(例如,系统存储器,其可以是随机存取存储器等)加载至ecd的第一存储器装置(例如,一个或更多个存储器缓冲区),该第一部分包括mlm的第一多个参数。mlm的参数可以包括权重、偏差、激活函数、分类器等。在一些实现方式中,第二存储器装置可以是通过总线互连连接至处理器的随机存取存储器。在另一实现方式中,第二存储器装置可以位于ecd外部(例如,位于基于网络的存储器上),但是可以通信地耦接至ecd。mlm的第一部分可以包括一个或更多个神经元层的参数或者一个或更多个层的部分,例如,如结合图4a至图4c所描述的。mlm的第一部分可以包括整个神经元层、多于一个神经元层、一个神经元层的一部分或多于一个神经元层的一部分。在框730处,方法700可以继续以下:处理装置使用所加载的mlm的第一多个参数来执行mlm的第一多个操作。
[0099]
在框740处,方法700可以继续以下:将mlm的第二部分加载至ecd的第一存储器装置。第二部分可以包括mlm的第二多个参数。加载mlm的第二部分可以通过在ecd的第二存储器装置中利用mlm的第二多个参数的子集替换至少mlm的第一多个参数的子集来执行。更具体地,mlm的第一多个参数中的一些参数可以被重写,而第一多个参数中的一些参数可以被保留以供后续使用。在一些实现方式中,可以替换所有第一多个参数。在框750处,方法700可以继续以下:处理装置使用mlm的第二多个参数执行mlm的第二多个操作。在框760处,执行方法700的处理装置可以使用mlm的第一多个操作的第一输出和mlm的第二多个操作的第二输出来获得mlm的推理输出。在一些实现方式中,第一输出和/或第二输出可以被用作输入到附加神经操作中的输入(例如,被用作输入到一个或更多个附加神经元层中的输入)。通过替换先前加载的参数中的至少一些参数,可以类似地加载附加神经操作的参数。
[0100]
在一些实现方式中,处理推理数据可以包括将不同的内核应用于推理数据的不同部分或应用于通过推理数据的处理而获得的中间数据的不同部分。例如,第一内核可以被
应用于数据的第一部分,而第二内核可以被应用于数据的第二部分。可以通过将第一内核截断成数据的第二部分的大小来获得第二内核,例如,如结合图2所描述的。例如,数据的第二部分可以邻接数据的边界,使得第一内核的应用将延伸到数据的边界之外。在这种情况下,可以缩减第一内核(例如,通过消除内核的一些元素)以获得其大小适合边界附近的数据的大小的第二内核。取决于数据邻接哪个边界(例如,左侧、顶部等),第二内核可以具有不同的形状(和内核值)。
[0101]
在一些实现方式中,处理推理数据可以包括应用mlm的一个或更多个内核,所述内核具有已经与ecd的处理器的向量化指令的维数对准的维数。更具体地,mlm的第一内核(第二内核等)可以包括填充;可以确定填充的位数以将第一填充的维数与向量化指令的维数对准。在一些实现方式中,可以在执行包的编译期间执行第一(第二等)内核的填充(例如,在主机计算装置上或在训练服务器上或在ecd上执行),而经填充的内核可以在ecd上被应用。
[0102]
图8是根据本公开内容的一些实现方式的在执行一个或更多个机器学习模型期间存储器使用的优化的示例方法800的流程图。在一些实现方式中,方法800可以由边缘计算装置(ecd)的处理装置执行以在该边缘计算装置上部署mlm。在一些实现方式中,ecd可以包括处理器速度小于2.0dmips/mhz的微控制器单元,例如或类似的处理装置。在一些实现方式中,ecd的处理装置可以是具有浮点支持单元的32位处理器。在一些实现方式中,方法800可以由应用mlm的任何计算机(包括台式计算机、服务器计算机、云计算机等)的处理装置执行。在框810处,执行方法800的处理装置可以计算mlm的第一神经元层的第一输出。术语“第一”、“第二”和“第三”应当被理解为标识符并且不预先假定任何严格的顺序。例如,第一层可以是mlm的任何神经元层,包括输入神经元层或mlm的隐藏层中的任何隐藏层。
[0103]
在框820处,方法800可以继续以下:处理装置将第一输出存储在第一多个存储器位置中。第一输出可以包括由第一神经元层的各个神经元输出的多个数字。存储器位置可以指利用存储器地址识别并且能够存储任何整数或浮点数的任何存储器单元。第一多个存储器位置可以在单个存储器部件或分区例如存储器缓冲区或寄存器中。在框830处,执行方法800的处理装置可以计算mlm的第二神经元层的第二输出。例如,输入到mlm的第二神经元层中的输入可以包括第一输出(第一神经元层的输出)。在框840处,方法800可以继续以下:处理装置将第二输出存储在第二多个存储器位置中。在一些实现方式中,如图3b中所描绘的,第一多个存储器位置在第一存储器缓冲区(例如,第一缓冲区311)中,并且第二多个存储器位置在与第一存储器缓冲区不同的第二存储器缓冲区(例如,第二缓冲区312)中。在一些实现方式中,如图3c中所描绘的,第一多个存储器位置和第二多个存储器位置在同一存储器缓冲区(例如,缓冲区321)中。
[0104]
在框850处,执行方法800的处理装置可以计算mlm的第三神经元层的第三输出。例如,输入到mlm的第三神经元层中的输入可以包括第二输出(第二神经元层的输出)。在框860处,方法800可以继续以下:处理装置将第三输出存储在第一多个存储器位置中。在一些实现方式中,在框860处重写第一多个存储器位置中的存储在mlm的后续操作中将不再使用的数据的至少一些存储器位置。在使用两个存储器缓冲区的那些实现方式中,第一存储器缓冲区的大小可以足以存储mlm的奇数神经元层中的任何一个奇数神经元层的输出,其中
mlm的奇数层包括第一神经元层、第三神经元层等。类似地,第二存储器缓冲区的大小可以足以存储mlm的偶数神经元层中的任何一个偶数神经元层的输出,mlm的偶数神经元层包括第二神经元层、第四神经元层(如果存在)等。在使用单个存储器缓冲区的那些实现方式中,单个存储器缓冲区的大小可以足以存储mlm的任何两个连续神经元层的输出。在所描述的实现方式中的任何实现方式中,存储器缓冲区中的任何存储器缓冲区可以是位于处理装置的处理器芯片上的高速缓存缓冲区(用于更快地执行读和/或写操作)。对于mlm的任意数量的神经元层,可以继续上面针对三个神经元层所描述的计算和存储操作的序列。
[0105]
图9是根据本公开内容的一些实现方式的在执行一个或更多个机器学习模型期间存储器使用的优化的另一示例方法900的流程图。在一些实现方式中,方法900可以由边缘计算装置(ecd)的处理装置执行以在该边缘计算装置上部署mlm。在一些实现方式中,ecd可以包括处理器速度小于2.0dmips/mhz的微控制器单元,例如或类似的处理装置。在一些实现方式中,ecd的处理装置可以是具有浮点支持单元的32位处理器。在一些实现方式中,方法900可以由应用mlm的任何计算机(包括台式计算机、服务器计算机、云计算机等)的处理装置来执行。作为mlm处理的一部分,例如作为神经元层中的一个神经元层的操作的一部分,执行方法900的处理装置可以识别内核并将该内核应用于数据。数据可以是输入数据(例如,由mlm的输入神经元层处理的数据)或任何中间数据(例如,先前由mlm的一个或更多个神经元层处理的数据)。
[0106]
可以向数据应用多个内核操作。更具体地,可以将内核例如以滑动方式应用于数据的多个部分,其中任何合适的步幅标识内核相对于数据的移位。更具体地,多个内核操作中的每个内核操作可以包括将内核应用于数据的相应部分。例如,如图3a中所描绘的,内核可以是应用于数据的非交叠部分的池化内核(例如,步幅等于内核的大小),第一内核操作应用于数据的区域302的左上部分、第二内核操作应用于数据的区域302的右上部分等。在一些实现方式中,内核可以是应用于数据的交叠部分的卷积内核(例如,步幅小于内核的大小)。
[0107]
在框910处,执行方法900的处理装置可以例如通过将内核应用于数据的多个部分中的第一部分来执行机器学习模型的多个内核操作中的第一内核操作。在应用内核之前,数据的第一部分可以存储在第一组存储器位置中。例如,再次参照图3a,区域302的左上部分可以被存储在缓冲区304的第一元素、第二元素、第五元素和第六元素中。在框920处,方法900可以继续以下:处理装置选择第一组存储器位置的存储在后续内核操作中不被使用的数据值的子集。例如,在计算第一内核操作的输出(例如,选择6作为数据的左上部分的最大元素)之后,处理装置可以选择缓冲区304的存储在mlm的后续内核(或任何其他)操作中将不被使用的值(例如,1)的第一元素。在框930处,方法900可以继续以下:处理装置将第一内核操作的输出存储在第一组存储器位置的所选择的子集中。类似地,可以结合第二内核操作(例如,将内核应用于区域302的右上部分)、第三内核操作等重复使用存储器。
[0108]
方法900的多种变型是可能的。虽然上面使用最大池化内核来说明方法900的操作的执行,但是可以替代地使用计算数据的相应部分内的平均值的内核或计算数据的相应部分的卷积的内核。类似地,可以利用输出其大小小于输入到内核中的输入的大小的数据的任何内核来实现存储器优化。在所描述的实现方式中的任何实现方式中,第一组(第二组、第三组等)存储器位置可以在位于执行方法900的处理装置的处理器芯片上的高速缓存缓
冲区中。
[0109]
图10是根据本公开内容的一些实现方式的对由一个或更多个机器学习模型处理的数据执行运行时量化的示例方法1000的流程图。在一些实现方式中,方法1000可以由部署mlm的边缘计算装置(ecd)的处理装置来执行。ecd可以是支持整数运算和/或浮点运算的微控制器。在一些实现方式中,方法1000可以由应用mlm的任何合适的计算机的处理装置来执行。方法1000可以用于部署先前经训练和量化的mlm。(例如,由训练服务器)执行的量化可以包括将经训练的mlm的参数(例如,权重、偏差、激活函数等)从浮点数格式改变成整数格式。不同的整数格式(例如,4位格式、8位格式、16位格式等)可以用于mlm的不同神经元层的网络参数。在一些实现方式中,所有神经元层的网络参数可以具有相同的格式。
[0110]
在框1010处,方法1000可以包括处理装置获得输入到mlm中的第一输入数据。第一输入数据可以是包括任何数目的输入数据的多个输入数据的一部分。“第一”在本文中仅用作多个输入数据中的一些特定输入数据的标识符,并且不预先假定任何严格的顺序。在一些实现方式中,第一(或任何其他)输入数据为浮点数格式。在一些实现方式中,第一(或任何其他)输入数据为整数格式。在一些实现方式中,第一(或任何其他)输入数据包括声音的数字表示,例如表示人类声音和/或语音的片段或任何其他声音的位序列。
[0111]
在框1020处,方法1000可以继续以下:处理装置识别与第一输入数据相关联的第一值范围,例如[i
lower
,i
upper
]。例如,第一值范围[i
lower
,i
upper
]可以包括第一输入数据的最小值i
min
(使得i
lower
≤i
min
))和第一输入数据的最大值i
max
(使得i
max
≤i
upper
)。在一些实现方式中,第一值范围[i
lower
,i
upper
]可以包括第一输入数据的预定部分。例如,预定部分可以基于第一输入数据的分布的标准差σ来确定,并且可以包括标准差σ的预定量例如n,使得i
upper-i
lower
≥nσ,其中n可以是任何整数值(例如,n=3、4、5等)或小数值(例如,n=3.5、4.4等)。
[0112]
在框1030处,方法1000可以继续以下:处理装置识别与整数格式相关联的第二值范围。第二值范围可以是旨在用于存储第一输入数据的目标值范围[i1,i2]。例如,第二值范围可以与8位整数格式(例如,目标范围[0,255]或[-128,127]等)或16位整数格式(例如,目标范围[0,65536]或[-32768,32767]等)相关联。在一些实现方式中,目标整数格式可以是用于存储mlm的第一神经元层的权重的格式(例如,在由训练服务器执行的mlm的量化期间针对mlm选择的权重的格式)。
[0113]
在框1040处,执行方法1000的处理装置可以确定用于输入数据的缩放因子,并且可以通过基于第一值范围到第二值范围的映射对第一输入数据进行重新缩放来获得第一经重新缩放的输入数据。例如,映射可以根据i
lower

i1和i
upper

i2来变换端点,并且可以相应地变换其他点(例如,以成比例的方式)。可以存储缩放因子(或逆缩放因子)以供后续使用。在框1050处,方法1000可以继续以下:使用mlm的第一神经元层处理第一经重新缩放的输入数据以获得第一中间数据(例如,第一层的输出)。在框1060处,方法1000可以包括使用第一中间数据获得mlm的第一推理输出。第一推理输出可以包括第一输入数据的第一分类。例如,第一分类可以包括对其声音由第一输入数据表示的人的识别(在声音识别的情况下)、对人说出的单词的识别(在语音识别的情况下)、对对象的识别(在对象识别的情况下)等。
[0114]
如利用图10中的标注部分所描绘的,获得mlm的第一推理输出可以涉及附加操作,
包括但不限于通过附加神经元层处理第一神经元层的输出(第一中间输出)。更具体地,在框1062处,方法1000可以包括识别与第一中间数据相关联的第三值范围例如值范围[j
lower
,j
upper
],其可以类似于与第一输入数据(输入至第一神经元层中的数据)相关联的值范围[i
lower
,i
upper
]来识别。在框1064处,方法1000可以包括识别与第一中间数据的整数格式相关联的第四值范围。例如,第四值范围可以是另一目标值范围[j1,j2]。在一些实现方式中,目标值范围[j1,j2]可以与用于存储mlm的第二神经元层的权重的整数格式——例如,在由训练服务器执行的mlm的量化期间针对mlm选择的第二神经元层的权重的格式——相关联。值范围[j1,j2]]可以与值范围[i1,i2]相同。在一些实现方式中,值范围[j1,j2]可以与值范围[i1,i2]不同。
[0115]
在框1066处,方法1000可以包括确定用于第一中间数据的第二缩放因子,并且通过基于第三值范围到第四值范围的映射(例如,使用j
lower

j1和j
upper

j2)对第一中间数据进行重新缩放来获得第二经重新缩放的输入数据。在框1068处,方法1000可以包括使用mlm的第二神经元层处理第二经重新缩放的输入数据以获得第二中间数据(例如,第二神经元层的输出)。该处理可以继续以下:处理装置使用第二中间输出来获得(例如,使用第三神经元层、第四神经元层等)mlm的第一推理输出。
[0116]
可以实现方法1000的多种变型。例如,虽然在一些实现方式中,输入数据和中间数据被重新缩放(量化),但是在其他实现方式中,输入/中间数据和mlm的参数二者都可以被重新缩放。例如,mlm的参数可以例如在训练服务器上执行的量化之后以一种整数格式(或甚至以浮点格式)存储,但是可以与输入或中间数据一起被重新缩放成另一种整数格式。
[0117]
应当理解,以上描述旨在是说明性的而非限制性的。在阅读和理解了以上描述之后,许多其他实现方式示例对于本领域技术人员将是明显的。虽然本公开内容描述了具体示例,但是将认识到,本公开内容的系统和方法不限于本文中描述的示例,而是可以在所附权利要求的范围内通过修改来实践。因此,说明书和附图被认为是说明性意义的而非限制性意义的。因此,本公开内容的范围应当参考所附权利要求以及这样的权利要求所赋予的等同物的全部范围来确定。
[0118]
上面所阐述的方法、硬件、软件、固件或代码的实现方式可以经由存储在机器可访问、机器可读、计算机可访问或计算机可读介质上的可由处理元件执行的指令或代码来实现。“存储器”包括以由机器(例如,计算机或电子系统)可读的形式提供(即,存储和/或发送)信息的任何机制。例如,“存储器”包括:随机存取存储器(ram),例如静态ram(sram)或动态ram(dram);rom;磁或光存储介质;闪存装置;电存储装置;光存储装置;声学存储装置;以及适于以由机器(例如,计算机)可读的形式存储或发送电子指令或信息的任何类型的有形机器可读介质。
[0119]
在该整个说明书中对“一个实现方式”或“实现方式”的引用意味着结合该实现方式描述的特定特征、结构或特性被包括在本公开内容的至少一个实现方式中。因此,短语“在一个实现方式中”或“在实现方式中”在该整个说明书的各处中的出现不一定全部都指代同一实现方式。此外,特定特征、结构或特性可以在一个或更多个实现方式中以任何合适的方式组合。
[0120]
在前述说明书中,已经参考具体示例性实现方式给出了详细描述。然而,将明显的是,在不脱离如所附权利要求中阐述的本公开内容的更广泛的精神和范围的情况下,可以
对其进行各种修改和改变。因此,说明书和附图应当被视为是说明性意义的而非限制性意义的。此外,实现方式、实现和/或其他示例性语言的前述使用不一定指相同的实现方式或相同的示例,而是可以指不同的和有区别的实现方式以及可能相同的实现方式。
[0121]
在本文中使用词语“示例”或“示例性”来意指用作示例、实例或说明。在本文中被描述为“示例”或“示例性”的任何方面或设计不一定被解释为比其他方面或其他设计优选或有利。而是,词语“示例”或“示例性”的使用旨在以具体的方式呈现构思。如在本技术中所使用的,术语“或”旨在意指包含性的“或”而非排他性的“或”。即,除非另有指定或根据上下文是清楚的,否则“x包括a或b”旨在意指任何自然的包含性排列。即,如果x包括a、x包括b或者x包括a和b两者,则在前述情况中的任何情况下都满足“x包括a或b”。另外,除非另有指定或根据上下文清楚地指向单数形式,否则在本技术和所附权利要求中使用的冠词“一”和“一个”通常应当被解释为意指“一个或更多个”。此外,全文中术语“实现方式”或“一个实现方式”或“实现”或“一个实现”的使用不旨在意指相同的实现方式或实现,除非如此描述。此外,如本文所使用的术语“第一”、“第二”、“第三”、“第四”等意在作为在不同元素之间进行区分的标记,并且不一定根据其数字标号具有顺序含义。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1