CN117435168A - 一种数据类型的处理方法及相关装置 - Google Patents

一种数据类型的处理方法及相关装置 Download PDF

Info

Publication number
CN117435168A
CN117435168A CN202210831017.6A CN202210831017A CN117435168A CN 117435168 A CN117435168 A CN 117435168A CN 202210831017 A CN202210831017 A CN 202210831017A CN 117435168 A CN117435168 A CN 117435168A
Authority
CN
China
Prior art keywords
tensor
data type
model
tensors
data
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
Application number
CN202210831017.6A
Other languages
English (en)
Inventor
胡琪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202210831017.6A priority Critical patent/CN117435168A/zh
Priority to PCT/CN2023/106490 priority patent/WO2024012388A1/zh
Publication of CN117435168A publication Critical patent/CN117435168A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Biomedical Technology (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Biophysics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Medical Informatics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一种数据类型的处理方法,应用于人工智能领域。该方法包括:获取模型中待设置数据类型的第一张量,第一张量用于表示模型中参与运算的第一数据;获取运行模型的运行设备所支持的多种数据类型;根据第一张量在模型中所参与的目标运算以及参与目标运算的其他张量的数据类型,从多种数据类型中确定目标数据类型为第一张量的数据类型,其中第一张量的数据类型与其他张量的数据类型满足目标运算的执行条件。基于本方法,能够自动地为模型中的张量设置适应的数据类型,免去了编程人员手动设置张量的数据类型的复杂过程,使得编程人员不再需要根据模型的部署情况来推导张量的数据类型,有效地降低了编程的复杂度,进而提高了模型的编程效率。

Description

一种数据类型的处理方法及相关装置
技术领域
本申请涉及人工智能(Artificial Intelligence,AI)技术领域,尤其涉及一种数据类型的处理方法及相关装置。
背景技术
如今AI已广泛应用于越来越多的行业。为了优化AI模型开发以及编程体验,不同的AI编程系统框架应运而生。这些AI系统框架实现并封装了复杂的AI计算执行器、内核应用、设备接口及网络接口,对用户提供简化的应用程序编程接口(ApplicationProgramming Interface,API)以支持模型的搭建、部署、推理以及训练。因此,AI系统框架目前已经成为AI研发人员的必备工具。
AI系统框架中的主要数据单位是张量(Tensor)。张量是一种基本的数据结构,本质上是一个任意维的数组。由于张量能够自定义维度,因此张量的表示能力很强,能支持不同计算的数据表示。
现有的AI系统框架通常都支持多种数据类型,编程人员需要指定运行于AI系统框架中的模型的各个张量的数据类型,以保证AI系统框架的正常运行。目前,编程人员是通过人工编辑代码的方式来指定每个张量的数据类型,AI系统框架易用性较低,导致AI模型的编程复杂度高。
发明内容
本申请提供了一种数据类型的处理方法,能够自动地为模型中的张量设置适应的数据类型,免去了编程人员手动设置张量的数据类型的复杂过程,使得编程人员不再需要根据模型的部署情况来推导张量的数据类型,有效地降低了编程的复杂度,进而提高了模型的编程效率。
本申请第一方面提供了一种数据类型的处理方法,应用于设置AI模型中的张量的数据类型。具体地,该方法包括:系统先获取模型中待设置数据类型的第一张量,所述第一张量用于表示所述模型中参与运算的第一数据。然后,系统获取运行所述模型的运行设备所支持的多种数据类型,所述多种数据类型为张量的数据类型,例如FP16、FP32或FP64等数据类型。最后,系统根据所述第一张量在所述模型中所参与的目标运算以及参与所述目标运算的其他张量的数据类型,从所述多种数据类型中确定目标数据类型为所述第一张量的数据类型,其中所述第一张量的数据类型与所述其他张量的数据类型满足所述目标运算的执行条件。
本方案中,对于待设置数据类型的张量,通过确定该张量在模型中所参与的运算以及参与同一个运算的其他张量的数据类型,在运行设备所支持的数据类型中为该张量选择能够满足运算执行条件的数据类型,从而保证张量所参与的运算能够顺利执行。本方案能够自动地为模型中的张量设置适应的数据类型,免去了编程人员手动设置张量的数据类型的复杂过程,使得编程人员不再需要根据模型的部署情况来推导张量的数据类型,有效地降低了编程的复杂度,进而提高了AI系统框架的易用性以及模型的编程效率。
在一种可能的实现方式中,由于第一张量可以为执行运算的参数,也可以是执行运算所得到的结果,因此在一些情况下,第一张量可能会参与模型中的多个运算。具体地,第一张量所参与的目标运算包括第一运算和第二运算,所述第一张量为所述第一运算的运算结果,且所述第一张量为所述第二运算的输入,所述第一张量的数据类型与所述其他张量的数据类型满足所述第一运算以及所述第二运算的执行条件。
在一种可能的实现方式中,所述模型为预训练模型,所述第一张量为权重张量。在系统确定第一张量的数据类型的过程中,系统根据所述第一张量所表示的权重值,在所述多种数据类型中确定能完整表示所述权重值的数据类型,以便于完整地保留第一张量所表示的权重值。其次,系统根据所述第一张量在所述模型中所参与的目标运算以及参与所述目标运算的其他张量的数据类型,从所述能完整表示所述权重值的数据类型中确定所述目标数据类型为所述第一张量的数据类型;其中,所述目标数据类型为至少一种数据类型中存储开销最小的数据类型,所述至少一种数据类型为所述能完整表示所述权重值的数据类型中满足所述目标运算的执行条件的数据类型。
本方案中,在模型为预训练模型,且待设置数据类型的张量为权重张量的情况下,先根据张量所表示的权重值选择能够完整表示权重值的数据类型,再基于张量所参与的运算的执行条件来进一步选择数据类型,能够完整地保留张量所表示的权重值,从而确保预训练模型中初步训练得到的权重参数的精度不会受到影响,提高模型的调优效率。
在一种可能的实现方式中,在所述模型中的张量均设置完毕数据类型后,系统根据所述模型中的张量所设置的数据类型,确定所述模型中的所有张量预期所占用的缓存空间总量,即需要多少缓存空间来存储这些设置好数据类型的张量。若所述缓存空间总量大于所述运行设备的可用缓存空间,系统则调整所述模型中部分张量的数据类型;其中,在所述部分张量的数据类型调整后,所述模型中的所有张量预期所占用的缓存空间总量小于或等于所述运行设备的可用缓存空间。
本方案中,通过在设置完毕张量的数据类型后,比对所有张量所占用的缓存空间总量以及运行设备的可用缓存空间,并根据比对结果适应性地选择调整张量的数据类型,能够保证张量最终所设置的数据类型满足运行设备的运行需求,确保模型能够顺利运行。
在一种可能的实现方式中,被调整数据类型的部分张量不包括预先指定数据类型的张量。
在一种可能的实现方式中,系统调整所述模型中部分张量的数据类型,包括:系统确定所述模型中的第一部分张量,所述第一部分张量为不预先指定数据类型的张量。然后,系统在所述第一部分张量中确定能够调整数据类型的第二部分张量,其中所述第二部分张量包括第一类张量和/或第二类张量,所述第一类张量为调整数据类型后仍能满足所参与的运算的执行条件的张量,所述第二类张量为和参与相同运算的其他张量共同调整数据类型后仍能满足运算执行条件的张量。最后,系统对所述第二部分张量的数据类型进行调整。
本方案中,先确定模型中没有预先指定数据类型的张量,然后在这部分张量中筛选出调整数据类型后仍满足运算要求的张量,最后再对筛选得到的张量的数据类型进行调整,能够在实现张量数据类型调整的同时,保证张量在数据类型进行调整后仍能够满足模型的正常运行需求。
在一种可能的实现方式中,系统对所述第二部分张量的数据类型进行调整,包括:系统按照张量在模型中执行运算的先后顺序,依次对所述第二部分张量中的张量进行数据类型调整,直至所述模型中的所有张量预期所占用的缓存空间总量小于或等于所述运行设备的可用缓存空间。
本方案中,按照张量在模型中执行运算的先后顺序,从前往后逐个对张量的数据类型进行调整,直至张量的数据类型满足模型的运行需求,能够在保证模型正常运行的同时,尽可能地避免模型的性能受到影响。
在一种可能的实现方式中,所述方法还包括:在所述模型结束一轮迭代训练后,系统获取第二张量的梯度值,所述第二张量为权重张量。若所述第二张量的梯度值小于或等于预设阈值,系统则调整所述第二张量的数据类型;其中,所述第二张量的数据类型在调整后的精确度高于调整前的精确度。
本方案中,通过在模型的每轮迭代训练结束后,基于梯度值对模型中的权重张量的数据类型进行调整,能够快速实现调整权重张量的数据类型,避免人工对权重张量的数据类型进行调整,提高了模型的调优效率。
在一种可能的实现方式中,所述方法还包括:在所述模型结束一轮迭代训练后,系统获取第三张量的值以及所述第三张量的数据类型对应的指数值表示范围;若所述第三张量的指数值大于所述指数值表示范围内的第一阈值或所述第三张量的尾数值的长度大于第二阈值,则调整所述第三张量的数据类型;或者,若所述第三张量的指数值小于所述指数值表示范围内的第三阈值以及所述第三张量的尾数值的长度小于第四阈值,则调整所述第三张量的数据类型;其中,所述第一阈值大于或等于所述指数值表示范围内第一比例的值,所述第三阈值小于或等于所述指数值表示范围内第二比例的值。
本方案中,通过在模型的每轮迭代训练结束后,基于张量的值与张量的数据类型对应的指数值表示范围和尾数值的长度之间的关系,来实现自适应调整张量的数据类型,在保证模型能够正常运行的同时,提高了模型的调优效率。
在一种可能的实现方式中,通过应用程序编程接口API获取数据类型设置指令,所述数据类型设置指令用于指示自动设置所述模型中未指定数据类型的张量的数据类型,所述未指定数据类型的张量包括所述第一张量;所述数据类型指令还用于指示在所述模型的训练阶段自适应调整张量的数据类型。
本申请第二方面提供一种数据类型的处理装置,包括:第一获取单元,用于获取模型中待设置数据类型的第一张量,所述第一张量用于表示所述模型中参与运算的第一数据;第二获取单元,还用于获取运行所述模型的运行设备所支持的多种数据类型,所述多种数据类型为张量的数据类型;第一处理单元,用于根据所述第一张量在所述模型中所参与的目标运算以及参与所述目标运算的其他张量的数据类型,从所述多种数据类型中确定目标数据类型为所述第一张量的数据类型,其中所述第一张量的数据类型与所述其他张量的数据类型满足所述目标运算的执行条件。
在一种可能的实现方式中,所述目标运算包括第一运算和第二运算,所述第一张量为所述第一运算的运算结果,且所述第一张量为所述第二运算的输入,所述第一张量的数据类型与所述其他张量的数据类型满足所述第一运算以及所述第二运算的执行条件。
在一种可能的实现方式中,所述模型为预训练模型,所述第一张量为权重张量;所述第一处理单元,具体用于:根据所述第一张量所表示的权重值,在所述多种数据类型中确定能完整表示所述权重值的数据类型;根据所述第一张量在所述模型中所参与的目标运算以及参与所述目标运算的其他张量的数据类型,从所述能完整表示所述权重值的数据类型中确定所述目标数据类型为所述第一张量的数据类型;其中,所述目标数据类型为至少一种数据类型中存储开销最小的数据类型,所述至少一种数据类型为所述能完整表示所述权重值的数据类型中满足所述目标运算的执行条件的数据类型。
在一种可能的实现方式中,所述装置还包括第二处理单元;所述第二处理单元用于:在所述模型中的张量均设置完毕数据类型后,根据所述模型中的张量所设置的数据类型,确定所述模型中的所有张量预期所占用的缓存空间总量;若所述缓存空间总量大于所述运行设备的可用缓存空间,则调整所述模型中部分张量的数据类型;其中,在所述部分张量的数据类型调整后,所述模型中的所有张量预期所占用的缓存空间总量小于或等于所述运行设备的可用缓存空间。
在一种可能的实现方式中,所述部分张量不包括预先指定数据类型的张量。
在一种可能的实现方式中,所述第二处理单元具体用于:确定所述模型中的第一部分张量,所述第一部分张量为不预先指定数据类型的张量;在所述第一部分张量中确定能够调整数据类型的第二部分张量,其中所述第二部分张量包括第一类张量和/或第二类张量,所述第一类张量为调整数据类型后仍能满足所参与的运算的执行条件的张量,所述第二类张量为和参与相同运算的其他张量共同调整数据类型后仍能满足运算执行条件的张量;对所述第二部分张量的数据类型进行调整。
在一种可能的实现方式中,所述第二处理单元具体用于:按照张量在模型中执行运算的先后顺序,依次对所述第二部分张量中的张量进行数据类型调整,直至所述模型中的所有张量预期所占用的缓存空间总量小于或等于所述运行设备的可用缓存空间。
在一种可能的实现方式中,所述装置还包括:第三获取单元,用于在所述模型结束一轮迭代训练后,获取第二张量的梯度值,所述第二张量为权重张量;第三处理单元,用于若所述第二张量的梯度值小于或等于预设阈值,则调整所述第二张量的数据类型;其中,所述第二张量的数据类型在调整后的精确度高于调整前的精确度。
在一种可能的实现方式中,所述装置还包括:第三获取单元,用于在所述模型结束一轮迭代训练后,获取第三张量的值以及所述第三张量的数据类型对应的指数值表示范围;第三处理单元,用于若所述第三张量的指数值大于所述指数值表示范围内的第一阈值或所述第三张量的尾数值的长度大于第二阈值,则调整所述第三张量的数据类型;或者,若所述第三张量的指数值小于所述指数值表示范围内的第三阈值以及所述第三张量的尾数值的长度小于第四阈值,则调整所述第三张量的数据类型;其中,所述第一阈值大于或等于所述指数值表示范围内第一预设比例的值,所述第三阈值小于或等于所述指数值表示范围内第二比例的值。
在一种可能的实现方式中,还包括:第四获取单元,通过API获取数据类型设置指令,所述数据类型设置指令用于指示自动设置所述模型中未指定数据类型的张量的数据类型,所述未指定数据类型的张量包括所述第一张量;所述数据类型指令还用于指示在所述模型的训练阶段自适应调整张量的数据类型。
本申请第三方面提供一种电子设备,可以包括处理器,处理器和存储器耦合,存储器存储有程序指令,当存储器存储的程序指令被处理器执行时实现上述第一方面或第一方面任一实现方式所述的方法。对于处理器执行第一方面的各个可能实现方式中的步骤,具体均可以参阅第一方面,此处不再赘述。
本申请第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行上述第一方面或第一方面任一实现方式所述的方法。
本申请第五方面提供了一种电路系统,所述电路系统包括处理电路,所述处理电路配置为执行上述第一方面或第一方面任一实现方式所述的方法。
本申请第六方面提供了一种计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面或第一方面任一实现方式所述的方法。
本申请第七方面提供了一种芯片系统,该芯片系统包括处理器,用于支持服务器或门限值获取装置实现上述第一方面或第一方面任一实现方式中所涉及的功能,例如,发送或处理上述方法中所涉及的数据和/或信息。在一种可能的设计中,所述芯片系统还包括存储器,所述存储器,用于保存服务器或通信设备必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包括芯片和其他分立器件。
上述第二方面至第七方面的有益效果可以参考上述第一方面的介绍,在此不再赘述。
附图说明
图1为本申请实施例提供的一种计算图的示意图;
图2为本申请实施例提供的一种AI系统框架的示意图;
图3为本申请实施例提供的一种数据类型的处理方法的流程示意图;
图4为本申请实施例提供的一种数据类型的处理方法的另一流程示意图;
图5为本申请实施例提供的一种数据类型的处理方法的另一流程示意图;
图6为本申请实施例提供的一种模型的训练过程示意图;
图7为本申请实施例提供的一种设置计算图中的张量的数据类型的示意图;
图8为本申请实施例提供的一种根据梯度更新模型中的权重的流程示意图;
图9为本申请实施例提供的一种自适应调整非权重张量的数据类型的流程示意图;
图10为本申请实施例提供的一种数据类型的处理装置的结构示意图;
图11为本申请实施例提供的芯片的一种结构示意图;
图12为本申请实施例提供的一种计算机可读存储介质的结构示意图。
具体实施方式
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本申请的实施例中对相同属性的对象在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
下面结合附图,对本申请的实施例进行描述。本领域普通技术人员可知,随着技术的发展和新场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
为了便于理解,以下先对本申请实施例涉及的一些术语概念做解释说明。
(1)张量
张量是一个多维的数据存储形式,数据的维度被称为张量的阶。张量可以看作是向量和矩阵在多维空间中的推广,即向量可以看作是一维张量,矩阵可以看作是两维的张量。通常,创建一个张量至少要明确两个属性:1、数据类型,如32位浮点、32位整数等;2、数组维度。例如,张量创建指令“x=sys.Tensor(shape=(2,2),dtype=float32)”实际上则是即用AI系统框架提供的接口创建了一个维度为[2,2]的数组,且数组中的每个数值均为32位浮点类型。
(2)数据类型
数据类型指的是用于声明不同类型的变量或常量等数据的一个广泛的系统。以变量为例,变量的数据类型决定了变量在存储时所占用的空间,以及如何解释存储的位模式。常见的数据类型包括:FP16、FP32、FP64、INT4、INT8以及BF16。
FP16、FP32、FP64以及BF16等浮点数数据类型,通常包括符号位、指数位和尾数位。其中,符号位用于确定数据的正负符号,指数位用于确定数据的指数,尾数位用于确定数据的真实数值。具体地,FP16是半精度浮点数,用1bit来表示符号,5bit表示指数,10bit表示尾数。FP32是单精度浮点数,用8bit表示指数,23bit表示尾数。FP64是双精度浮点数,用1bit来表示符号,11bit表示指数,52bit表示尾数。此外,BF16是一种较新的浮点数数据类型,实质上是对FP32单精度浮点数截断数据,即1bit表示符号,8bit表示指数,7bit表示尾数。
INT4和INT8为整数数据类型,通常用于表示一个整数。具体地,INT4用1bit表示符号,3bit表示具体数值;INT8用1bit表示符号,7bit表示具体数值。
总的来说,不同的数据类型占用位宽不同,位宽占用大的数据类型的表示范围及精度相对更高,位宽占用相同的数据类型依据指数位和有效数位长度的不同而具有不同的表示范围和精度。通常来说,数据类型中的指数位越长,则该数据类型的表示范围越大;数据类型中的有效数位越长,则该数据类型的精度越高。
(3)计算图
计算图是由节点(node)和有向边构成的图。在计算图中,节点代表一种运算操作或一个数据,如加法操作或乘法操作等操作;有向边则代表数据的流向,通过确定与节点连接的有向边则能够确定参与运算的数据。示例性地,请参阅图1,图1为本申请实施例提供的一种计算图的示意图。如图1所示,代表乘法操作的节点(以下简称乘法节点)共连接有三个有向边,流入乘法节点的两个有向边分别表示数据X和数据Y执行乘法节点所指示的乘法操作,流出乘法节点的有向边则表示数据P为执行乘法节点所指示的乘法操作后所得到的结果。代表加法操作的节点(以下简称加法节点)也连接有三个有向边,流入加法节点的两个有向边分别表示数据P和数据Z执行加法节点所指示的加法操作,流出加法节点的有向边则表示数据G为执行加法节点所指示的加法操作后所得到的结果。
以下将介绍本申请实施例提供的方法的应用场景。
请参阅图2,图2为本申请实施例提供的一种AI系统框架的示意图。如图2所示,AI系统框架中包括用户层、接口层和系统层。其中,用户层包括c语言接口、Python语言接口以及Java语言接口等接口,用于向用户提供各种语言的编程接口,以便于用户对AI系统框架的实现进行编程。
接口层用于实现用户层与系统层之间的衔接,以使得用户层输入的编程代码能够在系统层得到实现。例如,在系统层是由c语言来编程实现的情况下,接口层包括c语言应用程序编程接口(c language Application Programming Interface,C API),用于将用户层所输入的编程代码转换为能够在系统层实现的c语言代码。
系统层包括运行时(runtime)、内核实现(kernel implements)、网络层和设备层。运行时包括会话模块、计算图模块和执行模块。其中,计算图模块提供了估算张量和执行操作的运行环境。计算图模块本身不会进行任何计算,也不保存任何中间计算结果,即计算图模块实质上是搭建模型的计算过程,而不执行计算过程。会话模块则用于运行一个计算图,或者运行计算图的一部分。会话模块类似于一个执行者,给计算图灌入输入数据,得到输出,并保存中间的计算结果;此外,会话模块也给计算图模块分配内存或显卡等计算资源。执行模块用于执行计算图模块中所搭建的具体计算过程,例如加法操作、减法操作、乘法操作或除法操作等操作。
内核实现用于实现计算图中的各种计算过程,例如卷积操作(conv)、归一化(softmax)操作以及梯度更新操作。网络层用于实现不同节点之间的通信,包括远程过程调用(Remote Procedure Call,RPC)接口和远程直接数据存取(Remote Direct MemoryAccess,RDMA)接口。设备层用于对接具体的硬件设备,例如图形处理器(graphicsprocessing unit,GPU)、中央处理器(central processing unit,CPU)等硬件,以及获取硬件设备的信息。在图2所示的AI系统框架中,通常以张量来表示AI系统框架中所运行的各种数据。编程人员需要指定运行于AI系统框架中的模型的各个张量的数据类型,以保证AI系统框架的正常运行。目前,编程人员是通过人工编辑代码的方式来指定每个张量的数据类型,导致AI模型的编程效率较低。
有鉴于此,本申请实施例提供了一种数据类型的处理方法,对于待设置数据类型的张量,通过确定该张量在模型中所参与的运算以及参与同一个运算的其他张量的数据类型,在运行设备所支持的数据类型中为该张量选择能够满足运算执行条件的数据类型,从而保证张量所参与的运算能够顺利执行。该方法能够自动地为模型中的张量设置适应的数据类型,免去了编程人员手动设置张量的数据类型的复杂过程,提高了模型的编程效率。
请参阅图3,图3为本申请实施例提供的一种数据类型的处理方法的流程示意图。如图3所示,该数据类型的处理方法用于处理AI领域的模型中的数据。具体地,该数据类型的处理方法包括以下的步骤301-303。
步骤301,获取模型中待设置数据类型的第一张量,所述第一张量用于表示所述模型中参与运算的第一数据。
本实施例中,模型可以是指AI领域中的神经网络模型,且该模型可以是待训练的模型或者是已训练好的模型。在模型的编程过程中,用户可能会通过编辑代码指定模型中的部分张量的数据类型,例如指定部分对模型训练过程影响较大的权重张量的数据类型。或者,用户可能会均不指定模型中的张量的数据类型,而是由AI系统框架来自动设置所有张量的数据类型。也就是说,模型中可能会存在部分已由用户指定数据类型的张量以及另一部分未指定数据类型的张量,模型中的所有张量也可能是未指定数据类型的,本实施例对此并不做限定。
在模型中存在用户未指定数据类型的张量的情况下,待设置数据类型的第一张量可以为模型中所有未指定数据类型的张量中的任意一个。其中,第一张量用于表示模型中参与运算的第一数据。例如,第一张量所表示的第一数据可以为模型中的权重参数,则第一张量为权重张量;第一张量所表示的第一数据可以为模型的输入数据,那么第一张量则为激活张量;除了上述的权重张量、激活张量之外,第一张量也可以是模型中的其他张量,在此不再一一赘述。
示例性地,系统可以是通过API来获取数据类型设置指令,所述数据类型设置指令用于指示自动设置所述模型中未指定数据类型的张量的数据类型。其中,模型中未指定数据类型的张量包括上述的第一张量。
简单来说,在一些示例中,模型中的神经网络层的运算操作可以表示为:其中,/>是输入数据,/>是输出数据,/>是偏差参数,W是权重参数,α()是操作函数。在第一张量为权重张量的情况下,第一张量用于表示神经网络层中的权重参数或偏差参数;在第一张量为激活张量的情况下,第一张量用于表示神经网络层中的输入数据。
步骤302,获取运行所述模型的运行设备所支持的多种数据类型,所述多种数据类型为张量的数据类型。
通常来说,不同的运行设备所支持的数据类型是不同的。因此,在设置张量的数据类型之前,可以确定运行模型的运行设备当前所支持的数据类型,以便于从运行设备所支持的数据类型选择其中的一种作为张量的数据类型。一般来说,目前用于运行模型的运行设备会支持多种数据类型,例如上述的FP16、FP32、FP64、INT4、INT8以及BF16。其中,用于运行模型的运行设备例如可以为CPU或GPU。
步骤303,根据所述第一张量在所述模型中所参与的目标运算以及参与所述目标运算的其他张量的数据类型,从所述多种数据类型中确定目标数据类型为所述第一张量的数据类型,其中所述第一张量的数据类型与所述其他张量的数据类型满足所述目标运算的执行条件。
在确定待设置数据类型的第一张量后,系统进一步确定第一张量在模型中所参与的目标运算,以及与第一张量参与同一个运算的其他张量的数据类型。其中,第一张量参与模型中的目标运算可以是指第一张量为执行目标运算的参数,也可以是指第一张量为执行目标运算所得到的结果。例如,假设模型中的某个运算为加法运算,且该加法运算具体为a+b=c,那么参与该加法运算的张量可以是指执行加法运算的a或b,第一张量也可以是指该加法运算执行后所得到的结果c。
本实施例中,模型中的运算通常都会有相应的执行条件,参与该运算的张量均需要满足运算的执行条件,才能够顺利地执行运算。例如,加法运算的执行条件为等式右侧张量的数据类型的精度不低于等式左侧张量的数据类型的精度,即加法运算的运算结果的精度不低于执行加法运算的张量的精度。类似地,对于模型中其他的一些运算,例如乘法运算、减法运算和除法运算,这些运算的执行条件与加法运算相同,在此不再赘述。
可选的,对于第一张量所参与的目标运算,所述目标运算的执行条件具体包括所述目标运算的运算结果的精度不低于执行所述目标运算的张量的精度。此外,除了上述的执行条件之外,在目标运算为不同类型的运算的情况下,目标运算还可能具有其他的执行条件,在此不再赘述。
因此,在确定第一张量在模型中所参与的目标运算后,系统能够进一步获取目标运算的执行条件。然后,在参与目标运算的其他张量的数据类型已知的情况下,系统能够确定第一张量需要采用哪种数据类型才能够满足目标运算的执行条件,从而在运行设备所支持的多种数据类型中设置目标数据类型为第一张量的数据类型。在第一张量采用目标数据类型的情况下,第一张量的数据类型与其他张量的数据类型能够满足目标运算的执行条件。
例如,假设第一张量为张量A,张量A所参与的目标运算具体为:张量A+张量B=张量C;并且,张量B和张量C的数据类型均为FP16。在运行设备支持的数据类型为FP16和FP32的情况下,由于张量C的数据类型的精度不低于张量A的数据类型的精度,因此可以在FP16和FP32中确定FP16为张量A的数据类型。
一般来说,模型中的张量通常是参与模型中的一个运算。例如,在第一张量为权重张量的情况下,第一张量只参与一次卷积运算。
然而,由于第一张量可以为执行运算的参数,也可以是执行运算所得到的结果,因此在一些情况下,第一张量可能会参与模型中的多个运算。例如,在第一张量为激活张量的情况下,第一张量所表示的第一数据可能为模型的某个神经网络层的输入数据,且该第一数据为上一个神经网络层的输出数据。此时,第一张量可能会同时参与模型中相邻的两个神经网络层的运算,即第一张量作为运算结果参与了前一个神经网络的运算,同时第一张量还作为输入数据参与了后一个神经网络层的运算。又例如,在模型的神经网络层包括多个运算操作的情况下,第一张量可能同时参与该多个运算操作。示例性地,如图1所示,模型的某个神经网络层包括乘法运算和加法运算,在第一张量为参数P的情况下,第一张量作为乘法运算的结果参与了乘法运算,第一张量还作为加法运算的输入参与了乘法运算之后的加法运算。
总的来说,第一张量所参与的目标运算可以包括一个或多个运算。在目标运算包括多个运算的情况下,第一张量的数据类型需要满足第一张量所参与的所有运算的执行条件。具体地,目标运算包括第一运算和第二运算,所述第一张量为所述第一运算的运算结果,且所述第一张量为所述第二运算的输入,所述第一张量的数据类型与其他张量的数据类型满足第一运算以及第二运算的执行条件。
示例性地,假设第一张量为张量C,第一张量所参与的第一运算具体为张量A*张量B=张量C;第一张量所参与的第二运算具体为张量C+张量D=张量E。其中,第一运算中的张量A和张量B的数据类型均为FP16,第二运算中的张量D以及张量E的数据类型也为FP16。在运行设备所支持的数据类型包括FP16和FP32的情况下,对于第一运算的执行条件而言,张量C的数据类型的精度需要不低于张量A和张量B的数据类型的精度,即张量C的数据类型为FP16或FP32时均满足第一运算的执行条件;对于第二运算的执行条件而言,张量C的数据类型的精度不高于张量E的数据类型的精度,因此张量C的数据类型只有在FP16时才满足第二运算的执行条件。也就是说,系统最终可以确定张量C的数据类型为FP16。
可选的,在参与目标运算的其他张量的数据类型还没设置的情况下,第一张量的数据类型被设置为运行设备所支持的任意一种数据类型可能仍然满足目标运算的执行条件。例如,假设第一张量所参与的加法运算中的其他张量的数据类型还没设置,则第一张量被设置为运行设备所支持的任意一种数据类型时仍然满足该加法运算的执行条件。
也就是说,在这种情况下,第一张量可被设置的数据类型有多种。在第一张量可被设置的数据类型有多种时,系统可以确定一种默认的数据类型为第一张量的数据类型,即为第一张量设置一种预先设定好的默认数据类型。
可以理解的是,以上介绍了对模型中的第一张量进行数据类型的设置的过程。在实际应用中,系统可以是基于上述的方法对待设置数据类型的其他张量进行数据类型的设置,从而为模型中所有待设置数据类型的张量设置对应的数据类型。
示例性地,系统可以是先为用户指定数据类型的张量设置对应的数据类型,然后系统再根据上述的方法逐一为剩余的张量设置对应的数据类型,从而实现模型中所有张量的数据类型的设置。
本实施例中,对于待设置数据类型的张量,通过确定该张量在模型中所参与的运算以及参与同一个运算的其他张量的数据类型,在运行设备所支持的数据类型中为该张量选择能够满足运算执行条件的数据类型,从而保证张量所参与的运算能够顺利执行。本实施例所提供的方法能够自动地为模型中的张量设置适应的数据类型,免去了编程人员手动设置张量的数据类型的复杂过程,提高了模型的编程效率。
可选的,在运行设备所运行的模型为预训练模型的情况下,模型中的权重参数是经过预训练后所得到的初始值,因此在模型的后续训练过程中需要基于预训练得到的权重参数对模型进行进一步的训练。在模型为预训练模型,且第一张量为权重张量的情况下,第一张量所表示的第一数据为预训练得到的权重参数。在执行上述的步骤303时,系统具体通过执行以下的流程来设置第一张量的数据类型。
首先,系统根据所述第一张量所表示的权重值,在运行设备所支持的多种数据类型中确定能完整表示所述权重值的数据类型,以便于完整地保留第一张量所表示的权重值。
然后,系统再根据所述第一张量在所述模型中所参与的目标运算以及参与所述目标运算的其他张量的数据类型,从所述能完整表示所述权重值的数据类型中确定所述目标数据类型为所述第一张量的数据类型。并且,所述目标数据类型为至少一种数据类型中存储开销最小的数据类型,所述至少一种数据类型为所述能完整表示所述权重值的数据类型中满足所述目标运算的执行条件的数据类型。
也就是说,系统从所述能完整表示所述权重值的数据类型中确定满足所述目标运算的执行条件的至少一种数据类型之后,再从该至少一种数据类型中确定存储开销最小的数据类型为目标数据类型。
示例性地,假设运行设备所支持的数据类型包括FP8以及FP16,且模型中某个权重张量所表示的权重的数值为0.78515625。通过分析该权重张量的数值,能够确定该权重张量的数值是基于(-1)0×2(14-15)×(1+2-1+2-4+2-7)计算得到。因此,系统能够确定该权重张量的符号位的值为0;权重张量的指数位的值为14,且指数位的值转换为二进制且省略高位即表示为1110;权重张量的尾数值为1.5703125,权重张量的尾数值转换为二进制且省略低位即表示为1001001。
首先,分析权重张量的指数部分。由于该权重张量的指数位的值为14,且数据类型FP8以及F16的指数位的表示范围为30,因此该权重张量的指数位小于FP8以及F16表示范围的90%(30*0.9=27),即权重张量的指数表示可以用数据类型FP8以及F16。相反,如果该权重张量的指数部分超过了FP8以及F16表示范围的90%,则指数数据类型的表示还要进一步考虑BF16以及FP32等数据类型。此处将表示范围的90%设置为对比基准,仅作为一种示例,也可以依据需要设置其他基准值。
其次,再分析权重张量的尾数部分。基于对权重张量指数部分的分析可知,权重张量的备选数据类型是FP8以及F16,因此只需在FP8以及F16进一步之间分析张量尾数适合的数据类型。具体地,将张量尾数部分与系统设定的FP8以及F16掩码进行按位与计算。FP8以及F16掩码是用于判断尾数适合FP8还是F16数据类型的掩码,本例中设置为0.109375,即(2-4+2-5+2-6)的计算结果,也就是FP8无法表示而FP16可以表示的最高三位为1、其他位为0且省略整数部分的值。其中,该掩码取值仅为示例,也可以根据需要设置其他值。该权重张量尾数部分与上述掩码按位与计算的结果为0.0625,大于0,则说明FP8不能满足该权重张量的精度需求。此外,如果张量尾数部分与掩码按位与计算结果为0,则说明使用较少位数来表示尾数所损失的精度有限,可以设置为FP8数据类型。此外,如果张量指数分析的结论还需要考虑bf16、fp32数据类型,则还需要将张量尾数与更多掩码进行按位与计算,根据多个按位与计算的结果分析适合的数据类型。
本方案中,在模型为预训练模型,且待设置数据类型的张量为权重张量的情况下,先根据张量所表示的权重值选择能够完整表示权重值的数据类型,再基于张量所参与的运算的执行条件来进一步选择数据类型,能够完整地保留张量所表示的权重值,从而确保预训练模型中初步训练得到的权重参数的精度不会受到影响,提高模型的调优效率。
可选的,请参阅图4,图4为本申请实施例提供的一种数据类型的处理方法的另一流程示意图。上述的数据类型的处理方法还包括以下的步骤304-步骤307。
步骤304,在所述模型中的张量均设置完毕数据类型后,根据所述模型中的张量所设置的数据类型,确定所述模型中的所有张量预期所占用的缓存空间总量。
本实施例中,上述的步骤301-303介绍了对模型中的某个张量的数据类型进行设置的过程,在实际应用中,系统可以是基于上述的步骤301-303对模型中的各个张量进行数据类型的设置。由于每个张量的数据类型确定后,张量所需要占用的缓存空间也是固定的。因此,在模型中的所有张量均完成数据类型的设置后,系统则根据模型中各个张量所设置的数据类型,确定模型中所有张量预期所占用的缓存空间总量,即需要多少缓存空间来存储这些设置好数据类型的张量。
步骤305,判断缓存空间总量是否大于所述运行设备的可用缓存空间。
其中,运行设备的可用缓存空间是指能够用于存储张量的缓存空间。
步骤306,若所述缓存空间总量大于所述运行设备的可用缓存空间,则调整所述模型中部分张量的数据类型。
在模型中的张量预期所占用的缓存空间总量大于运行设备的可用缓存空间的情况下,代表张量的数据类型设置有误,需要对模型中的张量的数据类型进行调整,否则运行设备中的可用缓存空间无法实现存储所有的张量。
一般来说,张量的数据类型的精度越高,则张量所需要占用的缓存空间越大。因此,系统可以是将模型中部分张量的数据类型的精度调低,从而减少张量所占用的缓存空间。并且,在系统调整部分张量的数据类型后,模型中的所有张量预期所占用的缓存空间总量小于或等于所述运行设备的可用缓存空间,即运行设备的可用缓存空间能够满足所有张量的存储需求。
可选的,在模型中存在有预先指定数据类型的张量的情况下,被调整数据类型的部分张量不包括预先指定数据类型的张量。例如,系统在调整张量的数据类型的过程中,先确定模型中由用户通过编辑代码的方式来指定数据类型的张量,然后确定这部分预先指定数据类型的张量以外的其余张量为能够调整数据类型的张量;最后,系统再在能够调整数据类型的张量中选择部分或全部张量进行数据类型的调整。
步骤307,若所述缓存空间总量不大于所述运行设备的可用缓存空间,则不调整所述模型中张量的数据类型。
在模型中的张量预期所占用的缓存空间总量不大于运行设备的可用缓存空间的情况下,代表张量的数据类型设置没有问题,运行设备中的可用缓存空间能够实现存储模型中所有的张量,因此系统不调整模型中张量的数据类型。
本实施例中,通过在设置完毕张量的数据类型后,比对所有张量所占用的缓存空间总量以及运行设备的可用缓存空间,并根据比对结果适应性地选择调整张量的数据类型,能够保证张量最终所设置的数据类型满足运行设备的运行需求,确保模型能够顺利运行。
为了便于理解,以下将详细介绍上述步骤306中调整张量数据类型的过程。请参阅图5,图5为本申请实施例提供的一种数据类型的处理方法的另一流程示意图。
步骤3061,确定所述模型中的第一部分张量,所述第一部分张量为不预先指定数据类型的张量。
示例性地,在用户通过编辑代码的方式指定了部分张量的数据类型的情况下,系统逐个对模型中的张量进行数据类型的设置。对于用户预先指定数据类型的张量,系统先为这部分张量设置相应的数据类型;对于用户没有指定数据类型的张量,系统则对这部分张量进行标记。这样一来,系统在需要调整张量的数据类型时,则能够确定具有标记的张量为不预先指定数据类型的张量,即上述的第一部分张量。
步骤3062,在所述第一部分张量中确定能够调整数据类型的第二部分张量,其中所述第二部分张量包括第一类张量和/或第二类张量,所述第一类张量为调整数据类型后仍能满足所参与的运算的执行条件的张量,所述第二类张量为和参与相同运算的其他张量共同调整数据类型后仍能满足运算执行条件的张量。
在确定并非是预先指定数据类型的第一部分张量后,系统继续在该第一部分张量中确定能够调整数据类型的第二部分张量。其中,能够调整数据类型的第二部分张量可以是包括两种类型的张量,分别为第一类张量和第二类张量。
其中,如果某个张量调整数据类型后,仍能满足其参与的运算的执行条件,则称该张量为第一类张量。例如,假设张量A所参与的运算为张量A*张量B=张量C,且该运算的执行条件为张量C的数据类型的精度需要不低于张量A和张量B的数据类型的精度。在数据类型调整前,张量A、张量B和张量C的数据类型均为FP32,那么张量A的数据类型调整为FP16之后,张量A仍然满足所参与的运算的执行条件,因此张量A属于上述的第一类张量。
此外,如果某个张量和同一个运算中的其他张量一起调整数据类型后,该张量满足所参与的运算的执行条件,则称该张量为第二类张量。也就是说,第二类张量独自调整数据类型后会导致无法满足运算的执行条件,但与第二类张量参与同一个运算的其他张量也是能够调整数据类型的,且第二类张量和参与同一个运算的其他张量一起调整数据类型后,则能够满足运算的执行条件。例如,假设张量F所参与的运算为张量D+张量E=张量F,且该运算的执行条件为张量F的数据类型的精度需要不低于张量D和张量E的数据类型的精度。在数据类型调整前,张量D、张量E和张量F的数据类型均为FP32,那么如果仅仅是张量F的数据类型调整为FP16,那么张量F则不满足运算的执行条件。但是在张量D和张量E均为能够调整数据类型的张量的情况下,张量D、张量E和张量F的数据类型同时调整为FP32后,仍然满足所参与的运算的执行条件,因此张量F属于上述的第二类张量。
可以理解的是,在第一部分张量中,除了上述能够调整数据类型的第二部分张量以外,可能还会包括一些不能够调整数据类型的张量。例如,如果某个张量调整数据类型后,则不满足运算的执行条件,则该张量为不能够调整数据类型的张量;或者,如果某个张量需要参与同一个运算的其他张量一起调整数据类型才能够满足运算的执行条件,但参与同一个运算的其他张量是不能够调整数据类型的,即其他张量是预先指定数据类型的张量。
步骤3063,对所述第二部分张量的数据类型进行调整。
在确定能够调整数据类型的第二部分张量后,则对第二部分张量的数据类型进行调整,以使得调整数据类型后的第二部分张量预期所占用的缓存空间减少。
本方案中,先确定模型中没有预先指定数据类型的张量,然后在这部分张量中筛选出调整数据类型后仍满足运算要求的张量,最后再对筛选得到的张量的数据类型进行调整,能够在实现张量数据类型调整的同时,保证张量在数据类型进行调整后仍能够满足模型的正常运行需求。
可选的,在对张量的数据类型进行调整的过程中,系统可以是按照张量在模型中执行运算的先后顺序,依次对所述第二部分张量中的张量进行数据类型调整,直至所述模型中的所有张量预期所占用的缓存空间总量小于或等于所述运行设备的可用缓存空间。例如,在确定能够调整数据类型的第二部分张量后,系统则按照张量执行运算的先后顺序,逐个对张量的数据类型进行调整。并且,系统每次对一个张量的数据类型进行调整后,系统都判断一次模型中所有张量预期所占用的缓存空间总量是否不大于运行设备的可用缓存空间。如果模型中所有张量预期所占用的缓存空间总量不大于运行设备的可用缓存空间,则系统停止调整张量的数据类型;如果模型中所有张量预期所占用的缓存空间总量仍大于运行设备的可用缓存空间,则系统继续调整张量的数据类型。
一般来说,在模型中越靠前的张量的精度的重要性越低,即张量的精度对模型的性能影响越低;而模型中越靠后的张量的精度的重要性越高,即张量的精度对模型的性能影响越大。因此,本方案中按照张量在模型中执行运算的先后顺序,从前往后逐个对张量的数据类型进行调整,直至张量的数据类型满足模型的运行需求,能够在保证模型正常运行的同时,尽可能地避免模型的性能受到影响。
以上介绍了在模型进行训练前,对模型中的张量的数据类型进行设置的过程。以下将介绍在模型结束一轮迭代训练后,对模型中的张量的数据类型进行调整的过程。
可以理解的是,在模型的持续训练过程中,张量的精度需求可能是会发生变化的。例如,在模型的训练初期,用于表示模型中权重的张量可以采用精度较低的数据类型,以提高模型在训练过程中的运算速度;在模型的训练后期,模型已逐渐收敛,因此用于表示模型中权重的张量可能需要采用精度较高的数据类型,以保证模型的性能。
示例性地,系统通过API所获取到的数据类型设置指令还可以是用于指示在模型的训练阶段自适应调整张量的数据类型。也就是说,基于数据类型设置指令的指示,系统可以是在模型的训练阶段内,根据模型的训练情况来自动调整张量的数据类型,从而避免编程人员手动调整张量的数据类型,提高模型调优的效率。
在一些可能的实现方式中,在模型结束一轮迭代训练后,系统获取第二张量的梯度值,该第二张量为权重张量。若第二张量的梯度值小于或等于预设阈值,则需要更精细地更新梯度,因此系统调整所述第二张量的数据类型;其中,所述第二张量的数据类型在调整后的精确度高于调整前的精确度。此外,预设阈值可以是根据实际情况来设置,本实施例对此不做具体限定。
可以理解的是,模型的训练过程实际上就是更新模型权重参数的一个过程。在模型训练过程中,先执行模型前向计算,再基于模型前向计算的结果反向计算模型中各个权重对应的梯度值,最后基于各个梯度值更新模型中的各个权重。在权重的更新过程中,权重对应的梯度值越大,代表权重的值与期望值偏差越大,权重的值需要进行较大幅度的调整;权重对应的梯度值越小,代表权重的值与期望值偏差越小,权重的值需要进行较小幅度的调整。因此,在权重张量的梯度值小于或等于预设阈值的情况下,可以认为权重张量可能接近期望值,因此可以将权重张量的数据类型调整为更高精度的数据类型,以便于对权重张量的值进行更高精度的调整。
值得注意的是,在系统调整第二张量的数据类型的过程中,系统需要保证在第二张量的数据类型调整后,模型中所有张量预期占用的缓存空间总量并不会大于运行设备的可用缓存空间。
本方案中,通过在模型的每轮迭代训练结束后,基于梯度值对模型中的权重张量的数据类型进行调整,能够快速实现调整权重张量的数据类型,避免人工对权重张量的数据类型进行调整,提高了模型的调优效率。
在一些可能的实现方式中,在模型结束一轮迭代训练后,系统获取第三张量的值以及第三张量的数据类型对应的指数值表示范围,其中第三张量可以为模型中的任意一个张量。若所述第三张量的指数值大于所述指数值表示范围内的第一阈值或所述第三张量的尾数值的长度大于第二阈值,则调整所述第三张量的数据类型;或者,若所述第三张量的指数值小于所述指数值表示范围内的第三阈值以及所述第三张量的尾数值的长度小于第四阈值,则调整所述第三张量的数据类型;其中,所述第一阈值大于或等于所述指数值表示范围内第一比例的值,所述第三阈值小于或等于所述指数值表示范围内第二比例的值。
其中,第一比例和第二比例第三阈值可以是根据实际应用场景来进行设置或调整,本实施例对此并不做具体限定。并且,第四阈值的数值可以是与指数值表示范围相关的。指数值表示范围越大,第四阈值则越大;指数值表示范围越小,第四阈值则越小。例如,第一比例可以设置为第三阈值90%,即第一阈值大于或等于指数值表示范围90%的值。也就是说,当第三张量的指数值大于指数值表示范围的90%,或者第三张量的尾数值超出上述的尾数值表示范围时时,系统则对第三张量的数据类型进行调整,即将第三张量的数据类型调整为表示范围更大的数据类型。
又例如,第二比例可以设置为20%,即第三阈值小于或等于指数值表示范围20%的值。也就是说,当第三张量的指数值小于指数值表示范围的20%,且第三张量的尾数值的长度小于第四阈值时,系统则对第三张量的数据类型进行调整,即将第三张量的数据类型调整为表示范围更小的数据类型。
本方案中,通过在模型的每轮迭代训练结束后,基于张量的值与张量的数据类型对应的数值表示范围之间的关系,来实现自适应调整张量的数据类型,在保证模型能够正常运行的同时,提高了模型的调优效率。
此外,上述的第二张量在基于梯度值调整数据类型之后,可以是再基于第二张量的值以及第二张量的数据类型对应的指数值表示范围和尾数值长度来确定是否需要进行第二次调整数据类型。其中,对第二张量进行第二次调整数据类型的方式可以参考第三张量的数据类型调整方式,此处不再赘述。
值得注意的是,上述的第二张量和第三张量都是在模型结束一轮迭代训练后,由系统进行数据类型的调整。在一些实施例中,用户可能希望部分张量的数据类型在模型的训练过程中并不会发生变化,且希望另外一部分张量的数据类型在模型的训练过程中能够自适应调整。因此,用户可以在模型训练前指定训练过程中能够自适应调整数据类型的张量(即能够根据模型训练情况适应性地调整数据类型的张量),以使得系统能够有针对性地对部分张量进行数据类型的自适应调整。
也就是说,上述的第二张量和第三张量均为预先指定的自适应调整数据类型的张量。在模型的训练过程中,系统仅对预先指定的自适应调整数据类型的张量进行数据类型的调整,而不调整其他张量的数据类型。
以上介绍了本申请实施例提供的一种数据类型的处理方法,为便于理解,以下将结合具体例子详细介绍本申请实施例所提供的数据类型的处理方法的执行过程。
请参阅图6,图6为本申请实施例提供的一种模型的训练过程示意图。如图6所示,模型的训练过程包括以下的步骤601-609。
步骤601,获取用户输入的编码代码。
本实施例中,用户可以使用图2所示的AI系统框架中最上层API来进行编码,以输入用于设置数据类型的编码代码。示例性地,在图2所示的AI系统框架中,用户层中可以扩展有专用的编程API,该编程API用于为用户提供设置数据类型的接口。
示例性地,用于创建张量编码指令具体可以为:x=sys.Tensor(shape=,dtype=,autotune_type=)。其中,shape指定张量的维度;dtype指定张量的数据类型。需要说明的是,用户可以不显式指定dtype的具体类型(即dtype的类型为缺省),或者将dtype设置为”auto_set”,从而让系统自动设置张量的数据类型。此外,autotune_type为本实施例新增的参数,为布尔类型,缺省值为false。当autotune_type为缺省状态时,系统训练过程中不再对张量的数据类型进行调整。当autotune_type设置为true时,系统训练过程中将动态调整该张量的数据类型。因此,在实际应用中,用户可以依据实际的场景和模型,将部分或全部张量的dtype设置为”auto_set”,也可以将部分或全部张量的autotune_type设置为true。例如,用户可以将某些关键张量设置为较高精度的数据类型,将其他张量数据类型设置为缺省的并将其autotune_type设置为true从而自适应调整。
此外,在一些可能的实现方式中,AI系统框架还提供了编程导语,以便于对所有张量进行统一的设置。例如,编程导语“#framework auto_set dtype”指定由系统自动设置所有张量的数据类型;编程导语“#framework auto_tune dtype”指定系统对所有张量自适应调整数据类型。具体导语标示内容可以根据实际应用来调整,不局限于上述示例。
步骤602,将用户编程代码转换为底层C语言API的代码。
本步骤,C层API也需要增加类似于用户层的编程扩展。具体的,增加张量创建API的参数扩展,包括系统自行设置数据类型、系统自适应调整数据类型的参数扩展。这样,在获取到用户层输入的用户编程代码的情况下,系统能够将用户编程代码转换为底层C语言API的代码(即将高级语言转换为低级的机器语言),以便于系统执行用户编程代码所指示的指令。
步骤603,构建模型的计算图,根据C语言API的代码,对不同类型的张量采用不同的策略来设置数据类型。
本步骤中,计算图是一种描述方程的图形,实际上计算图就是将计算过程图形化表示出来。一般来说,计算图是由节点和有向边来组成。节点通常包括计算节点(Operation)、存储节点(Variable)和数据节点(Placeholder)这三类节点。由于模型中的数据通过张量来表示,因此计算图中的数据节点通常也可以称为张量节点。有向边通常用于指示数据的流动方向,例如数据节点A和数据节点B均通过有向边指向计算节点A,表示数据节点A所表示的数据和数据节点B所表示的数据共同执行计算节点A所表示的计算操作。因此,通过构建模型的计算图,能够以计算图的形式表示了整个模型中需要执行的计算过程。
此外,由于用户编程代码中指示了如何设置模型中的张量的数据类型,因此在将用户编程代码转换为C语言API的代码后,则能够根据C语言API的代码,对不同类型的张量采用不同的策略来设置数据类型。具体来说,对于用户指定数据类型的张量,系统为这部分张量设置用户所指定的数据类型;对于用户没有指定数据类型的张量,系统则自动为这部分张量设置相应的数据类型,具体设置方式请参考上述图3对应的实施例,在此不再赘述。
步骤604,执行模型的前向计算。
在构建得到模型的计算图之后,有序地执行计算图中所指示的各个计算操作,从而完成模型的前向计算。
步骤605,反向计算模型中的权重的梯度。
在执行完毕一次模型的前向计算后,以损失函数的输出为输入,在计算图中反向计算模型中的权重的梯度,从而得到模型中各个权重的梯度。
其中,步骤604和步骤605与现有的相关技术类似,在此不再赘述。
步骤606,根据梯度更新模型中的权重张量的数据类型以及权重值。
在得到模型中各个权重的梯度后,可以先根据梯度来更新模型中的各个权重的数据类型。然后,根据梯度来更新各个权重的数值。
步骤607,判断是否设置自适应调整非权重张量的数据类型。
在模型中的权重张量的数值以及数据类型更新完毕之后,系统判断是否用户是否设置了自适应调整非权重张量的数据类型。具体地,用户可以在输入AI系统框架的编程代码中指定自适应调整非权重张量的数据类型。
步骤608,自适应调整非权重张量的数据类型。
当用户设置了自适应调整非权重张量的数据类型,系统则根据非权重张量的当前数值,自适应地调整非权重张量的数据类型。
步骤609,判断模型的训练是否达到预设条件。
最后,在张量的数据类型调整完毕后,系统判断模型的训练是否达到预设条件,即模型是否达到收敛条件。如果模型的训练未达到预设条件,则系统继续转至执行上述的步骤604,即重复对模型进行训练;如果模型的训练达到预设条件,停止对模型的训练。
为了便于理解,以下将结合流程图详细介绍上述的步骤603、606-608。
请参阅图7,图7为本申请实施例提供的一种设置计算图中的张量的数据类型的示意图。如图7所示,上述的步骤603中设置计算图中的张量的数据类型的过程包括以下的步骤6031-60312。
步骤6031,对计算图中的张量进行分析。
本步骤,系统从计算图的原始输入开始,逐个对计算图中的张量进行分析,以确定每个张量的数据类型。
步骤6032,判断用户是否通过编程代码设置了当前所分析的张量的数据类型。
基于用户所输入的编程代码,系统可以获得用户对各个张量数据类型的设置信息。因此,系统通过对用户输入的编程代码进行分析,能够判断用户是否通过编程代码设置了当前所分析的张量的数据类型。
步骤6033,如果用户设置了当前所分析的张量的数据类型,则基于用户的设置参数设置该张量的数据类型。
步骤6034,如果用户未设置当前所分析的张量的数据类型,则标记该张量的数据类型为待定。
也就是说,系统先按照用户提供的设置信息对用户指定数据类型的张量进行数据类型的设置,并将用户未指定数据类型的张量标记为待定,以便于后续再统一对剩余的张量进行数据类型的设置。
步骤6035,判断是否还有张量待分析。
在完成一个张量的分析以及数据类型的设置之后,系统判断是否还有张量待分析。如果当前还有张量待分析,系统则转至执行步骤6031,继续对张量进行分析以及数据类型的设置。如果当前没有张量是待分析的,系统则转至执行步骤6036,以对剩余未设置数据类型的张量进行数据类型的设置。
步骤6036,所有由用户预先指定数据类型的张量设置完毕数据类型后,从硬件层获取设备信息。
本步骤中,为了智能化适配不同硬件平台的能力,系统需要从硬件层获取设备信息,例如运行设备所支持的数据类型以及剩余可用缓存空间。
步骤6037,判断当前模型是否为预训练模型。
如果当前模型为预训练模型,则代表模型中的权重张量的数值是在预训练过程中所确定的,模型中在后续的训练过程中需要基于权重张量已有的数值继续进行训练。如果当前模型不为预训练模型,则模型中在后续的训练过程中需要初始化权重张量的数值。
步骤6038,如果当前模型为预训练模型,设置模型中剩余的权重张量的数据类型。
本步骤中,在确定当前模型为预训练模型的情况下,系统确定模型中剩余未设置数据类型的权重张量,然后系统再设置模型中这部分剩余的权重张量的数据类型。其中,设置模型中剩余的权重张量的数据类型包括以下的两个步骤。
1,分析权重张量节点的数值,初步确定权重张量节点能够设置的数据类型。
系统根据权重张量节点的数值,在运行设备所支持的多种数据类型中确定能完整表示该权重张量节点的数值的数据类型,以便于完整地保留该权重张量节点的数值。
2,分析该权重张量节点的上下游张量节点,根据上下游张量节点的数据类型和运算的执行条件设置当前权重张量节点的数据类型。
其中,该权重张量节点的上下游张量节点则为与该权重张量节点参与同一个运算的张量节点。因此,通过分析上下游张量节点的数据类型,系统能够基于和权重张量节点参与同一个运算的其余所有张量节点的数据类型以及运算的执行条件,来进一步确定当前权重张量节点的数据类型。简单来说,对于权重张量节点与已设置数据类型的其他张量节点相邻,则需要确保这些张量的数据类型与对应的运算操作的要求匹配。
具体地,关于如何设置权重张量的数据类型的过程可以参考上述实施例的介绍,此处不再赘述。
步骤6039,设置模型中非权重张量的其他张量的数据类型。
对于模型中非权重张量的其他张量,系统不考虑这些张量的数值对数据类型设置的影响,而是基于这些张量的上下游张量节点的数据类型来设置这些张量的数据类型,即保证设置好这些张量的数据类型后并不会影响到运算的正常执行。
步骤60310,如果当前模型不为预训练模型,则对剩余张量统一进行数据类型的设置。
在当前模型不为预训练模型的情况下,代表系统可以不用考虑张量本身的数值对模型中剩余张量的数据类型的影响,因此系统对剩余张量统一进行数据类型的设置。例如,系统统一将剩余张量的数据类型设置为常用的一种数据类型,比如FP16。
步骤60311,模型中所有张量的数据类型设置完毕后,判断模型的缓存需求是否溢出。
在模型中所有张量的数据类型设置完毕后,系统能够确定模型中的所有张量预期所占用的缓存空间总量,从而判断模型的缓存需求是否溢出。如果模型中的所有张量预期所占用的缓存空间总量大于运行设备的可用缓存空间,则代表模型的缓存需求溢出;如果模型中的所有张量预期所占用的缓存空间总量不大于运行设备的可用缓存空间,则代表模型的缓存需求没有溢出。
步骤60312,如果模型的缓存需求溢出,则对用户未指定数据类型的张量的数据类型进行调整,并适当调整该张量的上下游张量节点的数据类型。
具体地,系统可以是将用户未指定数据类型的张量的数据类型的精度调低,从而减少张量所占用的缓存空间。由于张量的数据类型发生调整后,可能会导致张量所参与的运算的执行条件无法满足,因此系统适当调整张量的上下游张量节点的数据类型,从而保证张量的数据类型发生调整后仍能满足运算的执行条件。
此外,系统在完成调整张量的数据类型之后,再次进行缓存溢出检查。如果模型的缓存需求仍然溢出,则系统再次调整张量的数据类型,直至模型的缓存需求不会溢出为止。如果所有可调整张量数据类型均已最大限度内调整到最低精度表示,而模型的缓存需求仍然溢出,则系统报错提醒用户调整模型。
本实施例中,步骤60311和步骤60322的具体实现过程可以参考图4对应的实施例,在此不再赘述。
请参阅图8,图8为本申请实施例提供的一种根据梯度更新模型中的权重的流程示意图。如图8所示,上述的步骤606中根据梯度更新模型中的权重的过程包括以下的步骤6061-6067。
步骤6061,判断用户是否设置自适应调整当前权重张量的数据类型。
基于用户所输入的编程代码,系统可以获得用户对各个权重张量数据类型的设置信息,从而判断用户是否设置自适应调整当前权重张量的数据类型。如果用户设置了自适应调整当前权重张量的数据类型,即权重张量的autotune_type参数设置为true,则代表系统能够在一次训练迭代结束时对该权重张量的数据类型进行调整;如果用户没有设置自适应调整当前权重张量的数据类型,即权重张量的autotune_type参数没被设置为true,则代表系统不需要对当前权重张量的数据类型进行调整。
步骤6062,根据权重张量的梯度值判断权重张量的数据类型是否需要调整。
示例性地,如果权重张量的梯度值小于或等于预设阈值,代表模型可能接近收敛,因此系统可以调整权重张量的数据类型,以提高权重张量的表示精度。
此外,系统还可以根据权重张量当前的数值以及数据类型,来确定权重张量的数据类型是否需要调整。如果权重张量当前的值所适合的精度与数据类型的匹配度较低,例如当前权重张量的数据类型的表示范围过大或过小时,系统同样可以调整权重张量的数据类型。
步骤6063,在设备支持范围内调整权重张量的数据类型。
在确定权重张量的数据类型需要调整的情况下,系统则在设备支持范围内调整权重张量的数据类型。此外,系统在调整权重张量的数据类型的过程中,可以适应性地调整权重张量的上下游张量节点的数据类型,以保证权重张量的数据类型调整后仍能满足运算的运行条件。例如,系统可以在计算图当前权重张量节点的上下游插入数据类型转换节点,以转换当前权重张量节点的上下游节点的数据类型,从而使得权重张量节点满足运算的执行条件。
具体地,步骤6062和步骤6063中调整权重张量的数据类型的过程具体可以参考上述实施例对第二张量的数据类型进行调整的过程,在此不再赘述。
步骤6064,调整权重张量的数据类型后,判断模型的缓存需求是否溢出。
步骤6065,如果模型的缓存需求溢出,则放弃调整数据类型,只基于梯度值更新权重张量的数值。
步骤6066,如果模型的缓存需求不溢出,则维持数据类型的调整,并基于梯度值更新权重张量的数值。
步骤6067,判断是否基于梯度值更新完模型中的所有权重张量。
如果系统已经基于梯度值更新完模型中的所有权重向量,则结束对权重向量的数据类型的调整;如果系统未基于梯度值更新完模型中的所有权重向量,则系统转至执行上述的步骤6061,继续对后续的其他权重向量进行数据类型的更新。
请参阅图9,图9为本申请实施例提供的一种自适应调整非权重张量的数据类型的流程示意图。如图9所示,上述的步骤608中自适应调整非权重张量的数据类型的过程包括以下的步骤6081-6086。
步骤6081,获取张量节点当前的值以及张量节点的上下游节点的数据类型。
步骤6082,判断张量节点当前的值与数据类型的匹配度是否较低。
例如,针对于张量节点当前的值,张量节点的数据类型的数值表示范围偏大或偏小时,代表张量节点当前的值与数据类型的匹配度较低,需要调整张量节点的数据类型。
步骤6083,在设备支持范围内调整张量节点的数据类型。
此外,系统在调整张量节点的数据类型的过程中,可以适应性地调整张量节点的上下游张量节点的数据类型,以保证张量节点的数据类型调整后仍能满足运算的运行条件。
具体地,步骤6082和步骤6083中调整张量节点的数据类型的过程具体可以参考上述实施例对第三张量的数据类型进行调整的过程,在此不再赘述。
步骤6084,调整张量的数据类型后,判断模型的缓存需求是否溢出。
步骤6085,如果模型的缓存需求溢出,则回退数据类型的调整,即不对数据类型进行调整。
步骤6086,如果模型的缓存需求不溢出,则判断是否还存在非权重类张量节点待分析。
如果还存在非权重类张量节点待分析,则转至执行步骤6081,继续对剩余的张量节点进行分析,以便于调整剩余的张量节点的数据类型。如果不存在非权重类张量节点待分析,则结束自适应调整非权重张量的数据类型的过程。
以上介绍了本申请实施例提供的数据类型的处理方法,以下将介绍执行数据类型的处理方法的设备。
可以参阅图10,图10为本申请实施例提供的一种数据类型的处理装置的结构示意图。如图10所示,本申请实施例提供的一种数据类型的处理装置包括:第一获取单元1001、第二获取单元1002和第一处理单元1003。第一获取单元1001,用于获取模型中待设置数据类型的第一张量,所述第一张量用于表示所述模型中参与运算的第一数据;第二获取单元1002,还用于获取运行所述模型的运行设备所支持的多种数据类型,所述多种数据类型为张量的数据类型;第一处理单元1003,用于根据所述第一张量在所述模型中所参与的目标运算以及参与所述目标运算的其他张量的数据类型,从所述多种数据类型中确定目标数据类型为所述第一张量的数据类型,其中所述第一张量的数据类型与所述其他张量的数据类型满足所述目标运算的执行条件。
在一种可能的实现方式中,所述目标运算包括第一运算和第二运算,所述第一张量为所述第一运算的运算结果,且所述第一张量为所述第二运算的输入,所述第一张量的数据类型与所述其他张量的数据类型满足所述第一运算以及所述第二运算的执行条件。
在一种可能的实现方式中,所述模型为预训练模型,所述第一张量为权重张量;所述第一处理单元1003,具体用于:根据所述第一张量所表示的权重值,在所述多种数据类型中确定能完整表示所述权重值的数据类型;根据所述第一张量在所述模型中所参与的目标运算以及参与所述目标运算的其他张量的数据类型,从所述能完整表示所述权重值的数据类型中确定所述目标数据类型为所述第一张量的数据类型;其中,所述目标数据类型为至少一种数据类型中存储开销最小的数据类型,所述至少一种数据类型为所述能完整表示所述权重值的数据类型中满足所述目标运算的执行条件的数据类型。
在一种可能的实现方式中,所述装置还包括第二处理单元1004;所述第二处理单元1004用于:在所述模型中的张量均设置完毕数据类型后,根据所述模型中的张量所设置的数据类型,确定所述模型中的所有张量预期所占用的缓存空间总量;若所述缓存空间总量大于所述运行设备的可用缓存空间,则调整所述模型中部分张量的数据类型;其中,在所述部分张量的数据类型调整后,所述模型中的所有张量预期所占用的缓存空间总量小于或等于所述运行设备的可用缓存空间。
在一种可能的实现方式中,所述部分张量不包括预先指定数据类型的张量。
在一种可能的实现方式中,所述第二处理单元1004具体用于:确定所述模型中的第一部分张量,所述第一部分张量为不预先指定数据类型的张量;在所述第一部分张量中确定能够调整数据类型的第二部分张量,其中所述第二部分张量包括第一类张量和/或第二类张量,所述第一类张量为调整数据类型后仍能满足所参与的运算的执行条件的张量,所述第二类张量为和参与相同运算的其他张量共同调整数据类型后仍能满足运算执行条件的张量;对所述第二部分张量的数据类型进行调整。
在一种可能的实现方式中,所述第二处理单元1004具体用于:按照张量在模型中执行运算的先后顺序,依次对所述第二部分张量中的张量进行数据类型调整,直至所述模型中的所有张量预期所占用的缓存空间总量小于或等于所述运行设备的可用缓存空间。
在一种可能的实现方式中,所述装置还包括:第三获取单元1005,用于在所述模型结束一轮迭代训练后,获取第二张量的梯度值,所述第二张量为权重张量;第三处理单元1006,用于若所述第二张量的梯度值小于或等于预设阈值,则调整所述第二张量的数据类型;其中,所述第二张量的数据类型在调整后的精确度高于调整前的精确度。
在一种可能的实现方式中,所述装置还包括:第三获取单元1005,用于在所述模型结束一轮迭代训练后,获取第三张量的值以及所述第三张量的数据类型对应的指数值表示范围;第三处理单元1006,用于若所述第三张量的指数值大于所述指数值表示范围内的第一阈值或所述第三张量的尾数值的长度大于第二阈值,则调整所述第三张量的数据类型;第三处理单元1006,还用于若所述第三张量的指数值小于所述指数值表示范围内的第三阈值以及所述第三张量的尾数值的长度小于第四阈值,则调整所述第三张量的数据类型;其中,所述第一阈值大于或等于所述指数值表示范围内第一比例的值,所述第三阈值小于或等于所述指数值表示范围内第二比例的值。
在一种可能的实现方式中,还包括:第四获取单元1007,通过API获取数据类型设置指令,所述数据类型设置指令用于指示自动设置所述模型中未指定数据类型的张量的数据类型,所述未指定数据类型的张量包括所述第一张量;所述数据类型指令还用于指示在所述模型的训练阶段自适应调整张量的数据类型。
具体的,上述的数据类型的处理装置可以由芯片来实现。请参阅图11,图11为本申请实施例提供的芯片的一种结构示意图,所述芯片可以表现为神经网络处理器NPU1100,NPU 1100作为协处理器挂载到主CPU(Host CPU)上,由Host CPU分配任务。NPU的核心部分为运算电路1103,通过控制器1104控制运算电路1103提取存储器中的矩阵数据并进行乘法运算。
在一些实现中,运算电路1103内部包括多个处理单元(Process Engine,PE)。在一些实现中,运算电路1103是二维脉动阵列。运算电路1103还可以是一维脉动阵列或者能够执行例如乘法和加法这样的数学运算的其它电子线路。在一些实现中,运算电路1103是通用的矩阵处理器。
举例来说,假设有输入矩阵A,权重矩阵B,输出矩阵C。运算电路从权重存储器1102中取矩阵B相应的数据,并缓存在运算电路中每一个PE上。运算电路从输入存储器1101中取矩阵A数据与矩阵B进行矩阵运算,得到的矩阵的部分结果或最终结果,保存在累加器(accumulator)1108中。
统一存储器1106用于存放输入数据以及输出数据。权重数据直接通过存储单元访问控制器(Direct Memory Access Controller,DMAC)1105,DMAC被搬运到权重存储器1102中。输入数据也通过DMAC被搬运到统一存储器1106中。
BIU为Bus Interface Unit即,总线接口单元1111,用于AXI总线与DMAC和取指存储器(Instruction Fetch Buffer,IFB)1109的交互。
总线接口单元1111(Bus Interface Unit,简称BIU),用于取指存储器1109从外部存储器获取指令,还用于存储单元访问控制器1105从外部存储器获取输入矩阵A或者权重矩阵B的原数据。
DMAC主要用于将外部存储器DDR中的输入数据搬运到统一存储器1106或将权重数据搬运到权重存储器1102中或将输入数据数据搬运到输入存储器1101中。
向量计算单元1107包括多个运算处理单元,在需要的情况下,对运算电路1103的输出做进一步处理,如向量乘,向量加,指数运算,对数运算,大小比较等等。主要用于神经网络中非卷积/全连接层网络计算,如Batch Normalization(批归一化),像素级求和,对特征平面进行上采样等。
在一些实现中,向量计算单元1107能将经处理的输出的向量存储到统一存储器1106。例如,向量计算单元1107可以将线性函数;或,非线性函数应用到运算电路1103的输出,例如对卷积层提取的特征平面进行线性插值,再例如累加值的向量,用以生成激活值。在一些实现中,向量计算单元1107生成归一化的值、像素级求和的值,或二者均有。在一些实现中,处理过的输出的向量能够用作到运算电路1103的激活输入,例如用于在神经网络中的后续层中的使用。
控制器1104连接的取指存储器(instruction fetch buffer)1109,用于存储控制器1104使用的指令;
统一存储器1106,输入存储器1101,权重存储器1102以及取指存储器1109均为On-Chip存储器。外部存储器私有于该NPU硬件架构。
其中,上述任一处提到的处理器,可以是一个通用中央处理器,微处理器,ASIC,或一个或多个用于控制上述程序执行的集成电路。
可以参阅图12,图12为本申请实施例提供的一种计算机可读存储介质的结构示意图。本申请还提供了一种计算机可读存储介质,在一些实施例中,上述实施例所公开的方法可以实施为以机器可读格式被编码在计算机可读存储介质上或者被编码在其它非瞬时性介质或者制品上的计算机程序指令。
图12示意性地示出根据这里展示的至少一些实施例而布置的示例计算机可读存储介质的概念性局部视图,示例计算机可读存储介质包括用于在计算设备上执行计算机进程的计算机程序。
在一个实施例中,计算机可读存储介质1200是使用信号承载介质1201来提供的。信号承载介质1201可以包括一个或多个程序指令1202,其当被一个或多个处理器运行时可以提供以上针对图3描述的功能或者部分功能。因此,例如,参考图3中所示的实施例,步骤301-303的一个或多个特征可以由与信号承载介质1201相关联的一个或多个指令来承担。此外,图12中的程序指令1202也描述示例指令。
在一些示例中,信号承载介质1201可以包含计算机可读介质1203,诸如但不限于,硬盘驱动器、紧密盘(CD)、数字视频光盘(DVD)、数字磁带、存储器、ROM或RAM等等。
在一些实施方式中,信号承载介质1201可以包含计算机可记录介质1204,诸如但不限于,存储器、读/写(R/W)CD、R/W DVD、等等。在一些实施方式中,信号承载介质1201可以包含通信介质1205,诸如但不限于,数字和/或模拟通信介质(例如,光纤电缆、波导、有线通信链路、无线通信链路、等等)。因此,例如,信号承载介质1201可以由无线形式的通信介质1205(例如,遵守IEEE 802.12标准或者其它传输协议的无线通信介质)来传达。
一个或多个程序指令1202可以是,例如,计算机可执行指令或者逻辑实施指令。在一些示例中,计算设备的计算设备可以被配置为,响应于通过计算机可读介质1203、计算机可记录介质1204、和/或通信介质1205中的一个或多个传达到计算设备的程序指令1202,提供各种操作、功能、或者动作。
需要说明的是,电子设备各单元/或元器件之间的信息交互、执行过程等内容,与本申请中图3-图9对应的方法实施例基于同一构思,具体内容可参见本申请前述所示的方法实施例中的叙述,此处不再赘述。
需要说明的是,对于电子设备的具体实现方式以及带来的有益效果,均可以参考图3-图9对应的各个方法实施例中的叙述,此处不再一一赘述。
本申请实施例还提供了一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机控制电子设备执行如前述方法实施例所示任一项实现方式。
本申请实施例还提供的一种计算机程序产品,计算机程序产品包括计算机程序代码,当计算机程序代码在计算机上运行时,使得计算机执行如前述方法实施例所示任一项实现方式。
本申请实施例还提供一种芯片系统,包括存储器和处理器,存储器用于存储计算机程序,处理器用于从存储器中调用并运行计算机程序,使得芯片执行如前述方法实施例所示任一项实现方式。
另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本申请提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本申请而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、U盘、移动硬盘、ROM、RAM、磁碟或者光盘等,包括若干指令用以使得一台计算机设备执行本申请各个实施例所述的方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、通信装置、计算设备或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、通信装置、计算设备或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的通信装置、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘(Solid State Disk,SSD))等。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

Claims (23)

1.一种数据类型的处理方法,其特征在于,包括:
获取模型中待设置数据类型的第一张量,所述第一张量用于表示所述模型中参与运算的第一数据;
获取运行所述模型的运行设备所支持的多种数据类型,所述多种数据类型为张量的数据类型;
根据所述第一张量在所述模型中所参与的目标运算以及参与所述目标运算的其他张量的数据类型,从所述多种数据类型中确定目标数据类型为所述第一张量的数据类型,其中所述第一张量的数据类型与所述其他张量的数据类型满足所述目标运算的执行条件。
2.根据权利要求1所述的方法,其特征在于,所述目标运算包括第一运算和第二运算,所述第一张量为所述第一运算的运算结果,且所述第一张量为所述第二运算的输入,所述第一张量的数据类型与所述其他张量的数据类型满足所述第一运算以及所述第二运算的执行条件。
3.根据权利要求1或2所述的方法,其特征在于,所述模型为预训练模型,所述第一张量为权重张量;
所述根据所述第一张量在所述模型中所参与的目标运算以及参与所述目标运算的其他张量的数据类型,从所述多种数据类型中确定目标数据类型为所述第一张量的数据类型,包括:
根据所述第一张量所表示的权重值,在所述多种数据类型中确定能完整表示所述权重值的数据类型;
根据所述第一张量在所述模型中所参与的目标运算以及参与所述目标运算的其他张量的数据类型,从所述能完整表示所述权重值的数据类型中确定所述目标数据类型为所述第一张量的数据类型;
其中,所述目标数据类型为至少一种数据类型中存储开销最小的数据类型,所述至少一种数据类型为所述能完整表示所述权重值的数据类型中满足所述目标运算的执行条件的数据类型。
4.根据权利要求1-3任意一项所述的方法,其特征在于,所述方法还包括:
在所述模型中的张量均设置完毕数据类型后,根据所述模型中的张量所设置的数据类型,确定所述模型中的所有张量预期所占用的缓存空间总量;
若所述缓存空间总量大于所述运行设备的可用缓存空间,则调整所述模型中部分张量的数据类型;
其中,在所述部分张量的数据类型调整后,所述模型中的所有张量预期所占用的缓存空间总量小于或等于所述运行设备的可用缓存空间。
5.根据权利要求4所述的方法,其特征在于,所述部分张量不包括预先指定数据类型的张量。
6.根据权利要求4或5所述的方法,其特征在于,所述调整所述模型中部分张量的数据类型,包括:
确定所述模型中的第一部分张量,所述第一部分张量为不预先指定数据类型的张量;
在所述第一部分张量中确定能够调整数据类型的第二部分张量,其中所述第二部分张量包括第一类张量和/或第二类张量,所述第一类张量为调整数据类型后仍能满足所参与的运算的执行条件的张量,所述第二类张量为和参与相同运算的其他张量共同调整数据类型后仍能满足运算执行条件的张量;
对所述第二部分张量的数据类型进行调整。
7.根据权利要求6所述的方法,其特征在于,所述对所述第二部分张量的数据类型进行调整,包括:
按照张量在模型中执行运算的先后顺序,依次对所述第二部分张量中的张量进行数据类型调整,直至所述模型中的所有张量预期所占用的缓存空间总量小于或等于所述运行设备的可用缓存空间。
8.根据权利要求1-7任意一项所述的方法,其特征在于,所述方法还包括:
在所述模型结束一轮迭代训练后,获取第二张量的梯度值,所述第二张量为权重张量;
若所述第二张量的梯度值小于或等于预设阈值,则调整所述第二张量的数据类型;
其中,所述第二张量的数据类型在调整后的精确度高于调整前的精确度。
9.根据权利要求1-8任意一项所述的方法,其特征在于,所述方法还包括:
在所述模型结束一轮迭代训练后,获取第三张量的值以及所述第三张量的数据类型对应的指数值表示范围;
若所述第三张量的指数值大于所述指数值表示范围内的第一阈值或所述第三张量的尾数值的长度大于第二阈值,则调整所述第三张量的数据类型;
或者,若所述第三张量的指数值小于所述指数值表示范围内的第三阈值以及所述第三张量的尾数值的长度小于第四阈值,则调整所述第三张量的数据类型;
其中,所述第一阈值大于或等于所述指数值表示范围内第一比例的值,所述第三阈值小于或等于所述指数值表示范围内第二比例的值。
10.根据权利要求1-9任意一项所述的方法,其特征在于,所述方法还包括:
通过应用程序编程接口API获取数据类型设置指令,所述数据类型设置指令用于指示自动设置所述模型中未指定数据类型的张量的数据类型,所述未指定数据类型的张量包括所述第一张量;
所述数据类型指令还用于指示在所述模型的训练阶段自适应调整张量的数据类型。
11.一种数据类型的处理装置,其特征在于,包括:
第一获取单元,用于获取模型中待设置数据类型的第一张量,所述第一张量用于表示所述模型中参与运算的第一数据;
第二获取单元,还用于获取运行所述模型的运行设备所支持的多种数据类型,所述多种数据类型为张量的数据类型;
第一处理单元,用于根据所述第一张量在所述模型中所参与的目标运算以及参与所述目标运算的其他张量的数据类型,从所述多种数据类型中确定目标数据类型为所述第一张量的数据类型,其中所述第一张量的数据类型与所述其他张量的数据类型满足所述目标运算的执行条件。
12.根据权利要求11所述的装置,其特征在于,所述目标运算包括第一运算和第二运算,所述第一张量为所述第一运算的运算结果,且所述第一张量为所述第二运算的输入,所述第一张量的数据类型与所述其他张量的数据类型满足所述第一运算以及所述第二运算的执行条件。
13.根据权利要求11或12所述的装置,其特征在于,所述模型为预训练模型,所述第一张量为权重张量;
所述第一处理单元,具体用于:
根据所述第一张量所表示的权重值,在所述多种数据类型中确定能完整表示所述权重值的数据类型;
根据所述第一张量在所述模型中所参与的目标运算以及参与所述目标运算的其他张量的数据类型,从所述能完整表示所述权重值的数据类型中确定所述目标数据类型为所述第一张量的数据类型;
其中,所述目标数据类型为至少一种数据类型中存储开销最小的数据类型,所述至少一种数据类型为所述能完整表示所述权重值的数据类型中满足所述目标运算的执行条件的数据类型。
14.根据权利要求11-13任意一项所述的装置,其特征在于,还包括第二处理单元;所述第二处理单元用于:
在所述模型中的张量均设置完毕数据类型后,根据所述模型中的张量所设置的数据类型,确定所述模型中的所有张量预期所占用的缓存空间总量;
若所述缓存空间总量大于所述运行设备的可用缓存空间,则调整所述模型中部分张量的数据类型;
其中,在所述部分张量的数据类型调整后,所述模型中的所有张量预期所占用的缓存空间总量小于或等于所述运行设备的可用缓存空间。
15.根据权利要求14所述的装置,其特征在于,所述部分张量不包括预先指定数据类型的张量。
16.根据权利要求14或15所述的装置,其特征在于,所述第二处理单元具体用于:
确定所述模型中的第一部分张量,所述第一部分张量为不预先指定数据类型的张量;
在所述第一部分张量中确定能够调整数据类型的第二部分张量,其中所述第二部分张量包括第一类张量和/或第二类张量,所述第一类张量为调整数据类型后仍能满足所参与的运算的执行条件的张量,所述第二类张量为和参与相同运算的其他张量共同调整数据类型后仍能满足运算执行条件的张量;
对所述第二部分张量的数据类型进行调整。
17.根据权利要求16所述的装置,其特征在于,所述第二处理单元具体用于:
按照张量在模型中执行运算的先后顺序,依次对所述第二部分张量中的张量进行数据类型调整,直至所述模型中的所有张量预期所占用的缓存空间总量小于或等于所述运行设备的可用缓存空间。
18.根据权利要求11-17任意一项所述的装置,其特征在于,还包括:
第三获取单元,用于在所述模型结束一轮迭代训练后,获取第二张量的梯度值,所述第二张量为权重张量;
第三处理单元,用于若所述第二张量的梯度值小于或等于预设阈值,则调整所述第二张量的数据类型;
其中,所述第二张量的数据类型在调整后的精确度高于调整前的精确度。
19.根据权利要求11-18任意一项所述的装置,其特征在于,还包括:
第三获取单元,用于在所述模型结束一轮迭代训练后,获取第三张量的值以及所述第三张量的数据类型对应的指数值表示范围和尾数值表示范围;
第三处理单元,用于若所述第三张量的指数值大于所述指数值表示范围内的第一阈值或所述第三张量的尾数值的长度大于第二阈值,则调整所述第三张量的数据类型;
第三处理单元,还用于若所述第三张量的指数值小于所述指数值表示范围内的第三阈值以及所述第三张量的尾数值的长度小于第四阈值,则调整所述第三张量的数据类型;
其中,所述第一阈值大于或等于所述指数值表示范围内第一比例的值,所述第三阈值小于或等于所述指数值表示范围内第二比例的值。
20.根据权利要求11-19任意一项所述的装置,其特征在于,还包括:
第四获取单元,用于通过API获取数据类型设置指令,所述数据类型设置指令用于指示自动设置所述模型中未指定数据类型的张量的数据类型,所述未指定数据类型的张量包括所述第一张量;
所述数据类型指令还用于指示在所述模型的训练阶段自适应调整张量的数据类型。
21.一种数据类型的处理装置,其特征在于,包括存储器和处理器;所述存储器存储有代码,所述处理器被配置为执行所述代码,当所述代码被执行时,所述装置执行如权利要求1至10任意一项所述的方法。
22.一种计算机存储介质,其特征在于,所述计算机存储介质存储有指令,所述指令在由计算机执行时使得所述计算机实施权利要求1至10任意一项所述的方法。
23.一种计算机程序产品,其特征在于,所述计算机程序产品存储有指令,所述指令在由计算机执行时使得所述计算机实施权利要求1至10任意一项所述的方法。
CN202210831017.6A 2022-07-15 2022-07-15 一种数据类型的处理方法及相关装置 Pending CN117435168A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202210831017.6A CN117435168A (zh) 2022-07-15 2022-07-15 一种数据类型的处理方法及相关装置
PCT/CN2023/106490 WO2024012388A1 (zh) 2022-07-15 2023-07-10 一种数据类型的处理方法及相关装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210831017.6A CN117435168A (zh) 2022-07-15 2022-07-15 一种数据类型的处理方法及相关装置

Publications (1)

Publication Number Publication Date
CN117435168A true CN117435168A (zh) 2024-01-23

Family

ID=89535597

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210831017.6A Pending CN117435168A (zh) 2022-07-15 2022-07-15 一种数据类型的处理方法及相关装置

Country Status (2)

Country Link
CN (1) CN117435168A (zh)
WO (1) WO2024012388A1 (zh)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112559163B (zh) * 2019-09-10 2023-05-23 华为技术有限公司 优化张量计算性能的方法及装置
CN112825152A (zh) * 2019-11-20 2021-05-21 马上消费金融股份有限公司 深度学习模型的压缩方法、装置、设备及存储介质
CN111241204B (zh) * 2020-02-14 2023-01-10 苏州浪潮智能科技有限公司 一种梯度数据的同步方法、装置、设备及存储介质
JP2022034897A (ja) * 2020-08-19 2022-03-04 富士通株式会社 情報処理装置、機械学習方法及び機械学習プログラム
CN113570030B (zh) * 2021-01-18 2024-05-10 腾讯科技(深圳)有限公司 数据处理方法、装置、设备以及存储介质

Also Published As

Publication number Publication date
WO2024012388A1 (zh) 2024-01-18

Similar Documents

Publication Publication Date Title
US20190244097A1 (en) Information processing apparatus and information processing method
US20190266473A1 (en) Operation processing apparatus, information processing apparatus and information processing method
KR102655950B1 (ko) 뉴럴 네트워크의 고속 처리 방법 및 그 방법을 이용한 장치
US20220004858A1 (en) Method for processing artificial neural network, and electronic device therefor
CN112200297A (zh) 神经网络优化方法、装置及处理器
CN112163601A (zh) 图像分类方法、系统、计算机设备及存储介质
CN110764885A (zh) 一种多移动设备的dnn任务的拆分和卸载方法
CN110647974A (zh) 深度神经网络中的网络层运算方法及装置
CN116644804B (zh) 分布式训练系统、神经网络模型训练方法、设备和介质
CN114626516A (zh) 一种基于对数块浮点量化的神经网络加速系统
CN112434785B (zh) 一种面向超级计算机的分布式并行深度神经网络性能评测方法
CN212460600U (zh) 一种数据处理系统
CN113688988A (zh) 精度调整方法及装置、存储介质
CN115238883A (zh) 神经网络模型的训练方法、装置、设备及存储介质
US11551087B2 (en) Information processor, information processing method, and storage medium
US20220405561A1 (en) Electronic device and controlling method of electronic device
CN108376283B (zh) 用于神经网络的池化装置和池化方法
CN117435168A (zh) 一种数据类型的处理方法及相关装置
WO2022057459A1 (zh) 一种基于Tensorcore处理int4数据类型的方法、系统、设备及介质
US20210012192A1 (en) Arithmetic processing apparatus, control method, and non-transitory computer-readable recording medium having stored therein control program
CN113705801A (zh) 一种神经网络模型的训练装置、方法及相关设备
CN114626284A (zh) 一种模型处理方法及相关装置
US20200134434A1 (en) Arithmetic processing device, learning program, and learning method
CN115696405B (zh) 一种兼顾公平性的计算任务卸载优化方法及系统
CN115965070B (zh) 计算图处理方法、装置、设备、存储介质以及程序产品

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