掌桥专利:专业的专利平台
掌桥专利
首页

数据存储方法、装置、电子设备和介质

文献发布时间:2024-04-18 19:59:31


数据存储方法、装置、电子设备和介质

技术领域

本公开涉及人工智能领域、金融科技领域或其他技术领域,更具体地,涉及一种数据存储方法、装置、电子设备和介质。

背景技术

随着技术的发展,人工智能在工作生活中占据越来越重要的地位。人工智能模型是指利用计算机算法和技术来模拟人类智能和学习能力的程序或系统。例如存在具有数亿以上模型参数量的大模型,并需要海量数据进行训练。模型参数和训练数据的传输及存储对计算机的计算性能及存储性能提出了更高的要求。

相关技术中,例如对于int32或int64类型训练数据,一般使用pickle(Python中的序列化模块)存储,对于float32型的模型参数一般转化为float16型存储。其中,float32型使用32位(4字节)来表示一个浮点数,float16型使用16位(2字节)来表示一个浮点数,float16型具有较小的数值范围和较低的精度。

在实现本公开发明构思的过程中,发明人发现,将浮点数格式的模型参数转换为更低精度的浮点数格式,虽然存储空间可以减少,但参数的数值精度被大幅降低,不能符合精度要求,导致影响人工智能模型的使用效果。

发明内容

鉴于上述问题,本公开提供了数据存储方法、装置、电子设备和介质。

本公开实施例的一个方面,提供了一种数据存储方法,包括:获取预先训练的人工智能模型的第一模型参数,其中,所述第一模型参数以浮点数格式表示,所述人工智能模型用于对输入数据处理以输出预测结果;基于预定精度系数处理所述第一模型参数,并转换为以整数型格式表示的第二模型参数,其中,所述预定精度系数通过预设的所述人工智能模型的参数精度所确定;将所述第二模型参数转换为表结构数据存储到具有特定数据压缩格式的第一文件,其中,所述第二模型参数占用的存储空间小于所述第一模型参数占用的存储空间。

根据本公开的实施例,基于预定精度系数处理所述第一模型参数,并转换为以整数型格式表示的第二模型参数包括:将预定精度系数乘以所述第一模型参数,得到乘积结果,所述预定精度系数使得所述乘积结果保持所述参数精度对应的小数点数量;将所述乘积结果转换为以整数型格式表示的第二模型参数。

根据本公开的实施例,在将所述第二模型参数转换为表结构数据存储到具有特定数据压缩格式的第一文件之后,所述方法还包括:读取所述第一文件中以表结构数据存储的所述第二模型参数;将所述第二模型参数转为以浮点数格式表示的第三模型参数;将所述预定精度系数的倒数乘以所述第三模型参数,并在部署所述人工智能模型时进行加载。

根据本公开的实施例,在获取预先训练的人工智能模型的第一模型参数之前,所述方法还包括:获取用于训练所述人工智能模型的初始文本数据;处理所述初始文本数据中文本内容得到标记序列结果,所述标记为从所述文本内容中划分出的训练数据基本单元;将所述标记序列结果转换为表结构数据存储到具有特定数据压缩格式的第二文件,其中,所述第二文件中存储的所述标记序列结果配置成训练所述人工智能模型的输入数据。

根据本公开的实施例,所述初始文本数据包括用于预训练阶段的第一文本数据,所述第一文本数据通过段落形式表示,处理所述初始文本数据中文本内容得到标记序列结果包括:将所述第一文本数据按照最大子序列长度进行切分,得到N1个第一子序列,其中,每个所述第一子序列包括M个有效文本元素,任两个相邻的所述第一子序列之间具有预定长度的重叠部分,M为大于或等于1的整数,N1为大于或等于2的整数;基于N1个所述第一子序列得到所述标记序列结果。

根据本公开的实施例,将所述第一文本数据按照最大子序列长度进行切分,得到N1个第一子序列包括:从所述第一文本数据切分出S个段落,S为大于或等于1的整数;对于每个所述段落序列化处理,得到S个段落序列,所述序列化处理包括将原始数据进行编码转换为特定格式;对于每个所述段落序列按照所述最大子序列长度、所述预定长度和最小子序列长度进行切分,得到N1个所述第一子序列,其中,所述最小子序列长度用于约束每个所述第一子序列包括M个所述有效文本元素。

根据本公开的实施例,所述初始文本数据包括用于微调阶段的第二文本数据,所述第二文本数据通过对话形式表示,处理所述初始文本数据中文本内容得到标记序列结果包括:处理所述第二文本数据得到K组对话数据,其中,每组所述对话数据包括至少一组问答数据,每组所述问答数据包括提问内容及对其的回答内容,K为大于或等于1的整数;对每组所述对话数据序列化处理,得到K个对话序列,其中每个所述对话序列包括至少一组问答序列,所述序列化处理包括将原始数据进行编码转换为特定格式;将每个所述对话序列中所述问答序列按照最大子序列长度进行拼接,得到N2个第二子序列,其中,所述拼接包括将每个所述问答序列中序列化后的提问内容及回答内容拼接,和/或将多个所述问答序列拼接,N2为大于或等于1的整数;基于N2个所述第二子序列得到所述标记序列结果。

根据本公开的实施例,将每个所述对话序列中所述问答序列按照最大子序列长度进行拼接,得到N2个第二子序列包括:若任一组所述问答序列中提问内容的长度大于所述最大子序列长度,基于该组问答序列中的回答内容的长度截断该提问内容后进行拼接;其中,该组问答序列中的回答内容与截断后的提问内容的长度之和小于等于所述最大子序列长度。

根据本公开的实施例,基于N2个所述第二子序列得到所述标记序列结果包括:复制N2个所述第二子序列得到N2个第二子序列副本;将N2个所述第二子序列副本中所有提问内容删除处理;基于N2个所述第二子序列及删除处理后的N2个所述第二子序列副本得到所述标记序列结果。

本公开实施例的另一方面提供了一种数据存储装置,包括:获取模块,用于获取预先训练的人工智能模型的第一模型参数,其中,所述第一模型参数以浮点数格式表示,所述人工智能模型用于对输入数据处理以输出预测结果;转换模块,用于基于预定精度系数处理所述第一模型参数,并转换为以整数型格式表示的第二模型参数,其中,所述预定精度系数通过预设的所述人工智能模型的参数精度所确定;存储模块,用于将所述第二模型参数转换为表结构数据存储到具有特定数据压缩格式的第一文件,其中,所述第二模型参数占用的存储空间小于所述第一模型参数占用的存储空间。

本公开实施例的另一方面提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得一个或多个处理器执行如上所述的方法。

本公开实施例的另一方面还提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行如上所述的方法。

本公开实施例的另一方面还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现如上所述的方法。

上述一个或多个实施例具有如下有益效果:提出了将浮点数格式的模型参数转换为整数型的模型参数进行存储的方式,利用预定精度系数处理第一模型参数,有利于转换为以整数型格式表示的第二模型参数后,具有预设的所述人工智能模型的参数精度,并实现数据压缩效果,与将模型参数在不同精度浮点数格式之间的转换存储相比,有效降低存储空间占用,提高数据传输效率,提升数据读取/写入的性能,降低模型参数精度损失。

附图说明

通过以下参照附图对本公开实施例的描述,本公开的上述内容以及其他目的、特征和优点将更为清楚,在附图中:

图1示意性示出了根据本公开实施例的数据存储方法的应用场景图;

图2示意性示出了根据本公开实施例的使用人工智能模型的流程图;

图3示意性示出了根据本公开实施例的对训练数据转换和压缩的流程图;

图4示意性示出了根据本公开实施例的处理第一文本数据的流程图;

图5示意性示出了根据本公开实施例的切分第一文本数据的流程图;

图6示意性示出了根据本公开实施例的处理第二文本数据的流程图;

图7示意性示出了根据本公开实施例的得到标记序列结果的流程图;

图8示意性示出了根据本公开实施例的对模型参数转换和压缩的流程图;

图9示意性示出了根据本公开实施例的对模型参数转换的流程图;

图10示意性示出了根据本公开另一实施例的训练数据及模型参数转换和压缩的流程图;

图11示意性示出了根据本公开实施例的参数逆转换的流程图;

图12示意性示出了根据本公开实施例的数据存储装置的结构框图;以及

图13示意性示出了根据本公开实施例的适于实现数据存储方法的电子设备的方框图。

具体实施方式

以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。

首先对本公开一些实施例中涉及的技术术语释义如下,以便能够有助于理解本公开的技术方案。

大模型:模型参数量在数亿甚至十亿以上,需要海量数据进行训练的深度学习模型。例如以transformer为基础模型结构的各种模型。

Token:又称标记,自然语言模型中,用于文本的一个字,词或短语,是将自然语言转化为数据的基本单元。在输入到模型进行训练前,会将文本转化为一系列token的组合,每个token对应一个整型数字,那么这个文本就被转成了一个可以输入模型的数字序列,即标记序列结果。

Parquet:一种以列结构存储数据的数据格式,有着极高的压缩率,通常用于分布式关系数据库如hadoop的结构化数据存储。类似的结构化数据常用压缩技术还有ORC,h5等。

相关技术中,训练一个符合预期的大模型,除了算法和算力外,一个关键因素就是需要大量的数据。但数据和模型的体量过大,势必会造成严重的硬盘、内存消耗和I/O读写性能问题,导致数据的传输非常困难,且容易出现硬盘空间不足的问题。例如对于int32,int64型训练数据,一般使用pickle存储,对于float32型的模型参数一般转化为float16存储。基于pickle的序列化存储,是无压缩的存储,占用空间非常大。将float32型模型参数转化成float16后,存储空间可以减少一般,但参数的数值精度被降低到1e-4位。

本公开实施例的数据存储方法,提出了将浮点数格式的模型参数转换为整数型的模型参数进行存储的方式,利用预定精度系数处理第一模型参数,有利于转换为以整数型格式表示的第二模型参数后,具有预设的人工智能模型的参数精度,并实现数据压缩效果,与将模型参数在不同精度浮点数格式之间的转换存储相比,有效降低存储空间占用,提高数据传输效率,提升数据读取/写入的性能,降低模型参数精度损失。

在本发明的技术方案中,所涉及的用户信息(包括但不限于用户个人信息、用户图像信息、用户设备信息,例如位置信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、存储、使用、加工、传输、提供、公开和应用等处理,均遵守相关国家和地区的相关法律法规和标准,采取了必要保密措施,不违背公序良俗,并提供有相应的操作入口,供用户选择授权或者拒绝。

图1示意性示出了根据本公开实施例的数据存储方法的应用场景图。需要注意的是,图1所示仅为可以应用本公开实施例的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。

如图1所示,根据该实施例的应用场景100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。

终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。

服务器105可以是提供各种服务的服务器,例如对用户利用终端设备101、102、103所浏览的网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。

服务器105可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或分布式系统,还可以是提供云服务、云计算、网络服务、中间件服务等基础云计算服务的云服务器。

需要说明的是,本发明实施例所提供的数据存储方法可以由终端设备101、102、103或服务器105执行。相应地,本发明实施例所提供的数据存储装置一般可以设置于终端设备101、102、103或服务器105中。

应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。

以下将基于图1描述的场景,通过图2~图11对本公开实施例的数据存储方法进行详细描述。

图2示意性示出了根据本公开实施例的使用人工智能模型的流程图。

如图2所示,该实施例包括:

在操作S201,获取初始的训练数据,进行数据转换和压缩,以减小存储空间占用,提高数据传输效率。例如初始的训练数据包括新闻稿、用户评论、用户反馈、图像等。训练数据的类型由实际应用场景确定,本公开不进行限定。

在操作S202,对人工智能模型进行训练。

例如人工智能模型可以基于卷积神经网络(convosutionas neuras network,CNN)构建得到。卷积神经网络是一种带有卷积结构的深度神经网络,包含了一个由卷积层和子采样层构成的特征抽取器。卷积神经网络可以采用误差反向传播(back propagation,BP)算法在训练过程中修正初始的模型参数的大小,使得误差损失越来越小。

在操作S203,对训练完成的人工智能模型的模型参数进行转换和压缩,同样减小存储空间占用,提高数据传输效率。

在操作S204,对人工智能模型的模型参数进行逆转换,以进行模型部署。

在操作S205,利用部署完成的人工智能模型进行结果预测。

在操作S206,获得人工智能模型输出的预测结果。

在采用人工智能模型的一些应用场景中,例如包括分类、图像识别、语音识别、智能问答等场景。例如通过输入目标行人的步行视频中的步态图像,得到步态图像序列帧,模型进行步态特征的提取进而实现身份识别。又例如输入待分类账户的账户数据,账户数据包括交易数据和关联账户数据,交易数据用于表征第一账户的交易特征,关联账户数据用于表征与第一账户之间存在关联的第二账户的账户数据,模型识别账户数据是否异常。再例如可以输入目标客户的图像数据及客户特征,其中,客户特征包括:资产特征和/或消费特征。然后模型输出目标客户的客户类型。可以理解,上述应用场景仅是示例性的,本公开不进行具体限定。

结合图2示出的使用人工智能模型的整体流程,下面对数据转换和压缩、参数转换和压缩以及参数逆转换等环节的数据存储进一步阐述。

图3示意性示出了根据本公开实施例的对训练数据转换和压缩的流程图。

如图3所示,该实施例是操作S210的其中一个实施例,包括:

在操作S310,获取用于训练人工智能模型的初始文本数据。

初始文本数据包括采集到的初始文本,例如从网页采集的新闻、数据库中存储的文本数据等。

在操作S320,处理初始文本数据中文本内容得到标记序列结果,标记为从文本内容中划分出的训练数据基本单元。

标记又称为token,标记序列结果是将文本转化成的可以输入模型的数字序列,是处理初始文本数据后得到的训练数据。

在操作S330,将标记序列结果转换为表结构数据存储到具有特定数据压缩格式的第二文件,其中,第二文件中存储的标记序列结果配置成训练人工智能模型的输入数据。

表结构是指一种由行和列组成的数据结构。特定数据压缩格式可以包括Parquet、ORC和h5等,相应的第二文件包括Parquet文件、ORC文件和h5文件等。

根据本公开的实施例,将非结构化的初始文本数据统一转换为表结构数据,并存储到具有特定数据压缩格式的第二文件,可以有效减少int32,int64,flora16等大模型中惯用的数据类型下的存储空间占用,并具备可靠和高性能读写的特点。

在一些实施例中,初始文本数据包括用于预训练阶段的第一文本数据,第一文本数据通过段落形式表示。

例如,对于第一文本数据,可以用于无监督的模型预训练阶段。其中不同的段落间用两个换行符分隔,在读取文件时按行读取,然后将字符串累加,当遇到两个换行符时,表示目前的字符串是一个段落,然后将其序列化后送出。接着,将字符串清空,开始继续累加下一行,如此重复直至将所有文本全部送出。不会一次性将所有原始数据读取到内存,每次只读取一个片段(段落或一行),不至于当原始数据过大时导致内存溢出。可以将整个段落序列拆成若干个长度为MAX_LENGTH(最大子序列长度)的子序列,子序列前后之间有OVER_LAPPING_LEN(预定长度)个重叠的部分,且每个子序列中至少包含FILTER_LEN(最小子序列长度)个有效元素,然后将这些子序列逐个送出。下面通过图4和图5进一步说明。

图4示意性示出了根据本公开实施例的处理第一文本数据的流程图。

如图4所示,该实施例是操作S320的其中一个实施例,包括:

在操作S410,将第一文本数据按照最大子序列长度进行切分,得到N1个第一子序列,其中,每个第一子序列包括M个有效文本元素,任两个相邻的第一子序列之间具有预定长度的重叠部分,M为大于或等于1的整数,N1为大于或等于2的整数。

最大子序列长度包括每个子序列所允许的最大长度,有效文本元素包括从初始文本数据得到的元素,且为非0元素。重叠部分指的是初始文本数据中相邻文本生成的相邻的第一子序列之间,具有相同的部分,例如前一个第一子序列的尾部与后一个第一子序列的首部是根据相同文本得到。

在操作S420,基于N1个第一子序列得到标记序列结果。可以直接将N1个第一子序列作为标记序列结果一部分,也可以进一步对N1个第一子序列进行去噪等操作后作为标记序列结果一部分。

根据本公开的实施例,将段落形式的文本数据处理得到N1个第一子序列,有利于模型对输入数据的识别,提高训练效率。另外,能够有利于对训练数据的结构化处理。

图5示意性示出了根据本公开实施例的切分第一文本数据的流程图。

如图5所示,该实施例是操作S410的其中一个实施例,包括:

在操作S510,从第一文本数据切分出S个段落,S为大于或等于1的整数。

在操作S520,对于每个段落序列化处理,得到S个段落序列。

例如先初始化一个指针,然后获取第一文本数据中任一个文章的总长度,并结合预设切分尺度执行切分。具体而言,判断指针是否在文章的开头,切分是否已经包含文章的结尾,根据判断结果对文章进行切分。对段落序列化处理得到段落序列。序列化处理包括将原始数据进行编码转换为特定格式。

在操作S530,对于每个段落序列按照最大子序列长度、预定长度和最小子序列长度进行切分,得到N1个第一子序列,其中,最小子序列长度用于约束每个第一子序列包括M个有效文本元素。

例如,预先定义了最大子序列长度(如2048)、前后两个子序列的预定长度(即交叉长度,如1)和最小子序列长度(如256),并对段落序列逐步截取。例如当子序列的长度大于最小子序列长度且等于最大子序列长度时将其送出,如果只是大于最小子序列长度而小于最大子序列长度,其余则补充0元素使之等于最大子序列长度。

在一些实施例中,初始文本数据包括用于微调阶段的第二文本数据,第二文本数据通过对话形式表示。对于第二文本数据,可以每次读取并送出原始数据的一行(用一个换行符分隔),这一行就是一个包括了一组对话的样本。

一般一组对话中可能只包含一组问答,也可能包含多组问答。而后面的问答可能承接前面的问答。此时在获取到一条样本后,将其处理为“BEGINNING OF CONVERSATION:USER:<用户提问内容>”,“ASSISTANT:<回答内容>”,...,“USER:<用户提问内容>”,“ASSISTANT:<回答内容>”的形式。然后逐个将它们转换成token_id子序列,并记录一段子序列的长度。且要确保它们在按顺序拼接在一起后,生成的序列的长度不大于设定的MAX_LENGTH。最后接收将token_ids子序列转换成table(表结构)后以parquet格式写入硬盘。以下结合图6和图7进一步说明。

图6示意性示出了根据本公开实施例的处理第二文本数据的流程图。

如图6所示,该实施例是操作S320的其中一个实施例,包括:

在操作S610,处理第二文本数据得到K组对话数据,其中,每组对话数据包括至少一组问答数据,每组问答数据包括提问内容及对其的回答内容,K为大于或等于1的整数。

在操作S620,对每组对话数据序列化处理,得到K个对话序列,其中每个对话序列包括至少一组问答序列。

在操作S630,将每个对话序列中问答序列按照最大子序列长度进行拼接,得到N2个第二子序列,其中,拼接包括将每个问答序列中序列化后的提问内容及回答内容拼接,和/或将多个问答序列拼接,N2为大于或等于1的整数。

在一些实施例中,将每个对话序列中问答序列按照最大子序列长度进行拼接,得到N2个第二子序列包括:若任一组问答序列中提问内容的长度大于最大子序列长度,基于该组问答序列中的回答内容的长度截断该提问内容后进行拼接。其中,该组问答序列中的回答内容与截断后的提问内容的长度之和小于等于最大子序列长度。

具体而言,如果拼接后的长度大于最大子序列长度,则执行截断策略。截断策略中,首先保证整个序列之后包含一组USER和ASSISTANT的对话,如果第一个USER的内容长度已经超过MAX_LENGTH,则需要将其从尾部截断到MAX_LENGTH-MAX_ASSISTANT_LEN(最大回答内容长度)这个长度,确保至少留下MAX_ASSISTANT_LEN的空间给第一个ASSISTANT回答的内容。

在此前提下,如果还有剩余空间则添加后续对话内容,直至整个空间长度为MAX_LENGTH。如果整个样本的多组对话转换成token_id序列,拼接在一起后还未达到MAX_LENGTH的长度,则再起后面补充若干个0元素,使之长度刚好为MAX_LENGTH。

在操作S640,基于N2个第二子序列得到标记序列结果。

图7示意性示出了根据本公开实施例的得到标记序列结果的流程图。

如图7所示,该实施例是操作S640的其中一个实施例,包括:

在操作S710,复制N2个第二子序列得到N2个第二子序列副本。

在操作S720,将N2个第二子序列副本中所有提问内容删除处理。

在操作S730,基于N2个第二子序列及删除处理后的N2个第二子序列副本得到标记序列结果。

示例性地,将N2个第二子序列(token_ids序列)送出命名为input_ids,与此同时送出另外一个副本序列(N2个第二子序列副本)命名为label_ids。在生成N2个第二子序列副本时,先对input_ids做一个复制,保证两个序列完全一样,然后根据之前记录的每一段内容转换成token_ids子序列的长度,将labels序列中所有属于“USER内容”的元素值为-100(所有提问内容删除处理)。

删除处理后的N2个第二子序列副本用于在训练阶段使用,其本质上是增加了mask(掩膜)作为标签用于模型训练。

根据本公开的实施例,将对话形式的第二文本数据按照对话为单位,将其中的问答内容序列化处理,并根据最大子序列长度拼接,有利于将非结构化数据转换为结构化数据的效果,并减小存储空间占用,提高数据传输效率。

在训练阶段,对于第一文本数据,接收其送出的token_ids序列,转换成表结构数据。例如当累计到一定数量batch_size后,如5万个(根据服务器的内存而定),将其转化为一个字段的表,字段为“input_ids”,其是值为5万个长度、元素类型为int32的数组。然后存成parquet格式,直至N1个第一子序列全部存储完成。

在训练阶段,对于第二文本数据,接收到input_ids和label_ids两个序列,分批次转换成包含两个字段的表中,并使用与第一文本数据相同的方法写入parquet文件。通常这种存储方式可以以最小的硬盘空间占用存储,转换成整数型id后的训练数据。

另外,考虑到在读取这些parquet文件时,会一次性将整个parquet文件读取到内存中,为避免内存溢出,可以将原始数据按行拆分成多个小的文件,然后将它们分别转化为token_id存储成parquet格式。

将这些转换成parquet的数据传送到模型训练服务器,逐个读取并进行模型训练。此时,从parquet文件一次性读取到的数据已经是经过转化后的整型数据,可以直接输入模型进行训练,节省了常规方法中,边读取边转换的时间,相当于不再存在训练模型时的从硬盘读取数据的环节,模型训练速度也就不会再受到硬盘读取速度的制约。

图8示意性示出了根据本公开实施例的对模型参数转换和压缩的流程图。

如图8所示,该实施例包括:

在操作S810,获取预先训练的人工智能模型的第一模型参数,其中,第一模型参数以浮点数格式表示,人工智能模型用于对输入数据处理以输出预测结果。

本公开涉及的第一模型参数、第二模型参数和第三模型参数包括人工智能模型的权重矩阵。

在操作S820,基于预定精度系数处理第一模型参数,并转换为以整数型格式表示的第二模型参数,其中,预定精度系数通过预设的人工智能模型的参数精度所确定。

在操作S830,将第二模型参数转换为表结构数据存储到具有特定数据压缩格式的第一文件,其中,第二模型参数占用的存储空间小于第一模型参数占用的存储空间。例如第一文件与第二文件具有相同的数据压缩格式。

根据本公开的实施例,提出了将浮点数格式的模型参数转换为整数型的模型参数进行存储的方式,利用预定精度系数处理第一模型参数,有利于转换为以整数型格式表示的第二模型参数后,具有预设的人工智能模型的参数精度,并实现数据压缩效果,与将模型参数在不同精度浮点数格式之间的转换存储相比,有效降低存储空间占用,提高数据传输效率,提升数据读取/写入的性能,降低模型参数精度损失。

图9示意性示出了根据本公开实施例的对模型参数转换的流程图。

如图9所示,该实施例是操作S820的其中一个实施例,包括:

在操作S910,将预定精度系数乘以第一模型参数,得到乘积结果,预定精度系数使得乘积结果保持参数精度对应的小数点数量。

在操作S920,将乘积结果转换为以整数型格式表示的第二模型参数。

例如,模型训练完成后,将模型参数存储为parquet压缩格式节省空间。举例而言,模型参数若为float32型的双精度小数,一个10亿参数量大小模型基本需要50G的硬盘空间来存储。可以使用如下公式1的转换方法,将其转化为int32型:

W

其中,W是指代表模型参数的权重矩阵。

参照公式1,将原始模型的每个层的float32型参数乘以10的5次方(即预定精度系数),然后转化为int32型。接着逐个转化为表结构存储到parquet文件。可以减少50%以上的空间占用,且保持误差小于1e-5,比float16型参数精度高一位小数点。

图10示意性示出了根据本公开另一实施例的训练数据及模型参数转换和压缩的流程图。

如图10所示,该实施例包括:

在操作S1010,获取模型对应的字典文件,如sentencepiece产生的分词模型,存储了所有token的文档文件,json文件等。使用transformers库中的AutoTokenizer工具加载这些文件,并编译生成一个可以把文本快速转化为token_id的FastTokenizer工具。

在操作S1020,根据原始文本数据生成为token_id生成器(genarator)。

在操作S1030,将token_id分批次转化为parquet格式存储。

在操作S1040,读取parquet数据文件并进行模型训练。

在操作S1050,将训练好的模型参数文件转换成int32并存储为parquet格式文件。

在操作S1060,读取parquet格式模型参数文件逆转换为float32后用于模型预测,结合如下图11进一步描述。

根据本公开的实施例,对于int32/int64类型训练、测试数据等有75%以上的压缩率,高者甚至可以达到97%的压缩率,而对于float32型模型参数有50%以上的压缩率且误差精确到1e-5位以下。可以有效降低大数据、大模型文件的硬盘占用,提高数据传输效率,提升数据读取/写入的性能,降低高模型精度损失。

图11示意性示出了根据本公开实施例的参数逆转换的流程图。

如图11所示,该实施例包括:

在操作S1110,读取第一文件中以表结构数据存储的第二模型参数。

在操作S1120,将第二模型参数转为以浮点数格式表示的第三模型参数。

在操作S1130,将预定精度系数的倒数乘以第三模型参数,并在部署人工智能模型时进行加载。

例如将模型文件传输到模型部署环境,将模型参数按如下公式2逆转换为float32型:

W

需要说明的是,模型参数float32转int32和in32转float32方法中用到的预定精度系数1e

根据本公开的实施例,转换和压缩训练数据,降低数据的存储空间占用,提升数据在不同系统间的传输效率,且节省了模型训练过程中数据读取过程中频繁从硬盘中读取数据所占用的时间,提升模型训练速度,不再受硬盘IO影响。另一方面,转化和压缩模型参数,降低模型文件空间占用的同时,保持了比单精度(float16)存储方式更精确的数值。

基于上述数据存储方法,本公开还提供了一种数据存储装置。以下将结合图12对该装置进行详细描述。

图12示意性示出了根据本公开实施例的数据存储装置的结构框图。

如图12所示,该实施例的数据存储装置1200包括获取模块1210、转换模块1220、存储模块1230。

获取模块1210可以执行操作S810,用于获取预先训练的人工智能模型的第一模型参数,其中,第一模型参数以浮点数格式表示,人工智能模型用于对输入数据处理以输出预测结果。

转换模块1220可以执行操作S820,用于基于预定精度系数处理第一模型参数,并转换为以整数型格式表示的第二模型参数,其中,预定精度系数通过预设的人工智能模型的参数精度所确定。

存储模块1230可以执行操作S830,用于将第二模型参数转换为表结构数据存储到具有特定数据压缩格式的第一文件,其中,第二模型参数占用的存储空间小于第一模型参数占用的存储空间。

在一些实施例中,数据存储装置1200还可以包括训练数据处理模块,该模块可以执行操作S310~操作S330、操作S410~操作S420、操作S510~操作S530、操作S610~操作S640、操作S710~操作S730,在此不再赘述。

在一些实施例中,数据存储装置1200还可以包括模型部署模块,该用户可以执行操作S910~操作S920,在此不再赘述。

数据存储装置1200包括分别用于执行如上图2~图11描述的任意一个实施例的各个步骤的模块。

需要说明的是,装置部分实施例中各模块/单元/子单元等的实施方式、解决的技术问题、实现的功能、以及达到的技术效果分别与方法部分实施例中各对应的步骤的实施方式、解决的技术问题、实现的功能、以及达到的技术效果相同或类似,在此不再赘述。

根据本公开的实施例,获取模块1210、转换模块1220、存储模块1230中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。

根据本公开的实施例,获取模块1210、转换模块1220、存储模块1230中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,获取模块1210、转换模块1220、存储模块1230中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。

图13示意性示出了根据本公开实施例的适于实现数据存储方法的电子设备的方框图。

如图13所示,根据本公开实施例的电子设备1300包括处理器1301,其可以根据存储在只读存储器(ROM)1302中的程序或者从存储部分1308加载到随机访问存储器(RAM)1303中的程序而执行各种适当的动作和处理。处理器1301例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC))等等。处理器1301还可以包括用于缓存用途的板载存储器。处理器1301可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。

在RAM 1303中,存储有电子设备1300操作所需的各种程序和数据。处理器1301、ROM 1302以及RAM 1303通过总线1304彼此相连。处理器1301通过执行ROM 1302和/或RAM1303中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,程序也可以存储在除ROM 1302和RAM 1303以外的一个或多个存储器中。处理器1301也可以通过执行存储在一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。

根据本公开的实施例,电子设备1300还可以包括输入/输出(I/O)接口1305,输入/输出(I/O)接口1305也连接至总线1304。电子设备1300还可以包括连接至I/O接口1305的以下部件中的一项或多项:包括键盘、鼠标等的输入部分1306。包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1307。包括硬盘等的存储部分1308。以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1309。通信部分1309经由诸如因特网的网络执行通信处理。驱动器1310也根据需要连接至I/O接口1305。可拆卸介质1311,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1310上,以便于从其上读出的计算机程序根据需要被安装入存储部分1308。

本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的。也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。

根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 1302和/或RAM 1303和/或ROM 1302和RAM 1303以外的一个或多个存储器。

本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本公开实施例所提供的方法。

在该计算机程序被处理器1301执行时执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。

在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分1309被下载和安装,和/或从可拆卸介质1311被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。

在这样的实施例中,该计算机程序可以通过通信部分1309从网络上被下载和安装,和/或从可拆卸介质1311被安装。在该计算机程序被处理器1301执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。

根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。

附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。

以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

技术分类

06120116525148