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

一种数据处理方法、装置及相关设备

文献发布时间:2024-04-18 19:58:30


一种数据处理方法、装置及相关设备

技术领域

本申请涉及计算机技术领域,尤其涉及一种数据处理方法、装置及相关设备。

背景技术

随着信息技术的发展,应用数据以及多媒体通信业务需求量极大增长,大量的数据需要在不同的设备之间通过网络进行传输或交互,例如高性能计算(high performancecomputing,HPC)、人工智能(Artificial Intelligence,AI)模型训练、多媒体数据传输等应用中,为了提高计算效率,提高用户体验等,需要提高不同设备之间交互数据的效率,降低数据传输过程中的时延。而降低不同设备之间传输的数据量是提高数据交互效率,降低时延的一个有效途径。因此如何降低不同设备之间交互的数据量是一个需要解决的技术问题。

发明内容

本申请提供一种数据处理方法、装置及相关设备,通过对需要传输的数据进行压缩,能够降低需要传输的数据量,提高数据交互效率,降低数据传输的时延。

第一方面,本申请提供一种数据处理方法,该方法包括:计算设备根据待压缩的多个第一数据确定第一基准值;然后计算每个第一数据与第一基准值的差值;确定每个差值对应的编码;根据每个编码得到对应的第一数据被压缩后的数据。其中,各个第一数据对应的编码中的部分或全部编码的长度小于原第一数据的长度。

上述基准值是待压缩的多个数据中出现次数较多的数据,待压缩的多个数据分别与基准值做差值后,并根据差值确定每个数据对应的编码后,部分或者全部数据对应的编码的长度小于原第一数据的长度,并且多个数据与基准值的差值中0的数量最多,将差值中为0的差值进行编码后,能够将差值为0对应的数据压缩到较少的位数;由于编码所占的比特位小于各个数据,从而能够实现对数据的压缩,降低不同计算设备之间交互的数据量,提高数据传输效率。

在一种可能的实现方式中,上述多个第一数据为多个浮点数各自的指数值。

在AI模型训练等应用中,模型中的权重以及模型训练过程中产生的激活值、梯度等数据的数据类型通常是浮点(float point,FP)型,例如双精度浮点型(FP64)、单精度浮点型(FP32)和半精度浮点型(FP16)等。通过对浮点数中的指数值进行压缩,能够降低浮点数在传输过程中的数据量,提高数据传输效率,降低数据时延,对于AI模型训练,能够降低AI模型训练过程中交互的数据量,降低数据传输的时延、提高模型训练效率。

在一种可能的实现方式中,上述确定每个差值对应的编码,包括:根据所述每个差值和编码表确定所述每个差值对应的编码,所述编码表中记录了预设的多个差值对应的编码。计算设备中保存有编码表,在计算出一个数据与基准值的差值后,即可根据编码表确定对应的编码。

在一种可能的实现方式中,上述编码表中,绝对值大于阈值的差值对应的编码为固定值,上述根据每个编码得到对应的第一数据被压缩后的数据,包括:当第一差值的绝对值大于阈值时,则将固定值及第一差值对应的第一数据作为第一差值对应的第一数据被压缩后的数据。

可选的,如果多个第一数据为多个浮点数各自的指数值,对于其中的任意一个第一指数值,根据编码表确定第一指数值与基准值之间的第一差值对应的编码;在第一差值的绝对值小于或等于第一阈值时,将第一差值对应的编码作为第一指数值对应的编码;在第一差值的绝对值大于第一阈值时,将第一差值对应的编码和第一指数值作为所述第一指数值对应的编码;其中,上述基准值是出现次数较多的指数值,当待压缩的多个指数值分别与基准值做差值时,得到的多个差值中0的数量最多,将差值中为0的差值根据上述编码方式进行编码后,能够将差值为0对应的指数值压缩到较少的位数;在模型训练中,浮点数的指数值的分布通常接近正态分布,上述多个差值中绝对值小于阈值的差值所占的比例也较多,因此将差值中绝对值小于或等于阈值的差值同样根据上述编码方式进行编码,由于编码所占的比特位小于各个指数值,差值中绝对值小于第一阈值的差值的数量占比较多,从而能够将大部分指数值通过上述方式进行压缩,达到压缩浮点数,降低不同计算设备之间交互的数据量,提高数据传输效率。

在一种可能的实现方式中,上述根据待压缩的多个第一数据确定一个第一基准值,包括:对多个第一数据进行采样,得到多个采样值;将多个采样值划分为t1个组,确定t1个组中每个组中多个采样值的中位数,得到t1个中位数;将t1个中位数划分为t2个组,确定t2个组中每个组中的中位数,得到t2个中位数,将这t2个中位数对应的中位数作为多个第一数据对应的第一基准值。

在第一数据的数量较多时,通过对第一数据进行采样,能够降低在确定基准值时处理的数据量,提高确定基准值的效率。

在一种可能的实现方式中,上述多个浮点数还包括尾数值;数据处理方法还包括:计算设备分别对多个浮点数的尾数值进行压缩,得到各个尾数值被压缩后的数据;根据多个浮点数的指数值被压缩后的数据和多个浮点数的尾数值被压缩后的数据,得到多个浮点数被压缩后的数据。

对浮点数的指数值同样进行压缩,能够进一步降低数据传输中需要传输的数据量,提高数据传输的效率。

在一种可能的实现方式中,上述数据处理方法还包括:生成第一元数据,该第一元数据包括第一基准值,第一基准值用于对多个第一数据被压缩后的数据进行解码,得到多个第一数据。

通过生成包括基准值的元数据,在将压缩后的数据和元数据发送给接收端,以使接收到压缩后的数据的计算设备能够根据元数据对接收到的压缩后的数据进行解码,得的被压缩前的数据。

在一种可能的实现方式中,在多个第一数据分别是多个浮点数的指数值时,第一元数据还包括压缩类型和尾数压缩等级;压缩类型用于指示是否对多个浮点数的尾数值进行了压缩,尾数压缩等级用于指示在对尾数值进行了压缩时,尾数值被压缩后的数据的长度。

当对浮点数据进行压缩时,可以选择是否压缩浮点数的尾数值,以及选择对尾数值的压缩程度,因此在对浮点数进行压缩时,上述元数据还包括压缩类型和尾数压缩等级,以使接收到压缩后的数据的计算设备能够根据元数据对接收到的压缩后的数据的指数部分和尾数部分分别进行解码,得的被压缩前的浮点数据。

在一种可能的实现方式中,上述方法还包括:接收待解压数据,该待解压数据包括编码部分和第二元数据;其中,第二元数据包括第二基准值,编码部分包括多个编码;根据第二基准值和多个编码,分别对多个编码进行解码,得到多个第二数据。

计算设备在接收到数据后,在接收到的数据中存在基准值时,计算设备能够确定接收的数据是待解压的数据,通过待解压数据中的编码以及计算设备中存储的编码表,能够确定每个编码对应的差值,进而根据差值和基准值恢复出原始数据。

在一种可能的实现方式中,在待解压数据是被压缩的浮点数对应的数据时,待解压数据还包括尾数部分,第二元数据还包括被压缩的浮点数的数据类型、压缩类型和尾数压缩等级,压缩类型用于指示是否对浮点数的尾数值进行了压缩,尾数压缩等级用于指示在对尾数值进行压缩后,尾数值被压缩后的数据的长度;上述根据第二基准值和多个编码,对待解压数据进行解码,得到多个第二数据,包括:根据数据类型确定被压缩前的浮点数的指数值的长度和尾数值的长度;根据指数值的长度、第二基准值和多个编码,分别对多个编码进行解码,得到多个指数值;在根据压缩类型确定待解压数据中尾数部分是对尾数值进行压缩后的数据时,根据尾数压缩等级和尾数值的长度,对尾数部分被压缩后的数据进行解码,得到多个尾数值;根据解码得到的多个指数值和多个尾数值,恢复出被压缩前的浮点数。

第二方面,本申请提供一种数据处理装置,该装置包括通信单元和处理单元,通信单元用于获取多个第一数据;处理单元,用于根据待压缩的多个第一数据确定一个第一基准值;然后计算每个第一数据与第一基准值的差值;确定每个差值对应的编码;根据每个编码得到对应的第一数据被压缩后的数据。各个第一数据对应的编码中的部分或全部编码的长度小于指数值的长度。

在一种可能的实现方式中,上述多个第一数据分别为多个浮点数的指数值。

在一种可能的实现方式中,上述处理单元具体用于:根据所述每个差值和编码表确定所述每个差值对应的编码,所述编码表中记录了预设的多个差值对应的编码。

在一种可能的实现方式中,上述编码表中,绝对值大于阈值的差值对应的编码为固定值,上述处理单元具体用于:当第一差值的绝对值大于阈值时,则将固定值及第一差值对应的第一数据作为第一差值对应的第一数据被压缩后的数据。

在一种可能的实现方式中,上述根据待压缩的多个第一数据确定一个第一基准值时,处理单元具体用于:对多个第一数据进行采样,得到多个采样值;将多个采样值划分为t1个组,确定所述t1个组中每个组中多个采样值的中位数,得到t1个中位数;将所述t1个中位数划分为t2个组,确定所述t2个组中每个组中的中位数,得到t2个中位数,将所述t2个中位数对应的中位数作为所述多个第一数据对应的第一基准值。

在一种可能的实现方式中,上述多个浮点数还包括尾数值;处理单元还用于分别对多个浮点数的尾数值进行压缩,得到各个尾数值被压缩后的数据;根据多个浮点数的指数值被压缩后的数据和多个浮点数的尾数值被压缩后的数据,得到多个浮点数被压缩后的数据。

在一种可能的实现方式中,上述处理单元还用于:生成第一元数据,该第一元数据包括第一基准值,第一基准值用于对多个第一数据被压缩后的数据进行解码,得到多个第一数据。

在一种可能的实现方式中,在多个第一数据分别是多个浮点数的指数值时,上述第一元数据还包括压缩类型和尾数压缩等级;压缩类型用于指示是否对多个浮点数的尾数值进行了压缩,尾数压缩等级用于指示在对尾数值进行了压缩时,尾数值被压缩后的数据的长度。

在一种可能的实现方式中,上述通信单元还用于:接收待解压数据,该待解压数据包括编码部分和第二元数据;其中,第二元数据包括第二基准值,编码部分包括多个编码;根据第二基准值和多个编码,分别对多个编码进行解码,得到多个第二数据。

在一种可能的实现方式中,在待解压数据是被压缩的浮点数对应的数据时,待解压数据还包括尾数部分,第二元数据还包括被压缩的浮点数的数据类型、压缩类型和尾数压缩等级,压缩类型用于指示是否对浮点数的尾数值进行了压缩,尾数压缩等级用于指示在对尾数值进行压缩后,尾数值被压缩后的数据的长度;上述处理单元具体用于:根据数据类型确定被压缩前的浮点数的指数值的长度和尾数值的长度;根据指数值的长度、第二基准值和多个编码,分别对多个编码进行解码,得到多个指数值;在根据压缩类型确定待解压数据中尾数部分是对尾数值进行压缩后的数据时,根据尾数压缩等级和尾数值的长度,对尾数部分被压缩后的数据进行解码,得到多个尾数值;根据解码得到的多个指数值和多个尾数值,恢复出被压缩前的浮点数。

第三方面,本申请提供一种计算设备,该计算设备包括一个或多个处理器、存储器和压缩引擎,存储器中存储计算机程序指令,处理器执行计算机程序指令生成待压缩的数据,压缩引擎用于实现如上述第一方面或第一方面任意可能实现方式中所描述的数据处理方法,对待压缩数据进行压缩。

在一种可能的实现方式中,计算设备还包括通信引擎和解压引擎,该通信引擎用于接收待解压数据,解压引擎用于实现如上述第一方面或第一方面任意可能实现方式中描述的数据处理方法,对接收到的待解压数据进行解码。

在一种可能的实现方式中,上述压缩引擎和解压引擎位于所述通信引擎。

在一种可能的实现方式中,上述压缩引擎位于各个处理器中,解压引擎位于通信引擎中。

在一种可能的实现方式中,上述压缩引擎和解压引擎均是独立于处理器、存储器和通信引擎的模块。

第四方面,本申请提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当所述指令在服务器上运行时,使得服务器执行第一方面或第一方面任一种可能实现方式中的数据处理方法。

第五方面,本申请提供了一种计算机程序产品,当该计算机程序产品在服务器上运行时,使得服务器执行第二方面或第二方面任一种可能实现方式中的数据处理方法。

附图说明

为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例提供的一种分布式训练集群的架构示意图;

图2是本申请实施例提供的一种数据处理方法的流程示意图;

图3是本申请实施例提供的一种浮点数的示意图;

图4是本申请实施例提供的一种计算设备的示意图;

图5是本申请实施例提供的另一种计算设备的示意图;

图6是本申请实施例提供的另一种计算设备的示意图;

图7是本申请实施例提供的一种压缩引擎的示意图;

图8是本申请实施例提供的另一种压缩引擎的示意图;

图9是本申请实施例提供的另一种压缩引擎的示意图;

图10是本申请实施例提供的一种确定基准值的示意图;

图11是本申请实施例提供的另一种确定基准值的示意图;

图12是本申请实施例提供的一种有效载荷的示意图;

图13是本申请实施例提供的另一种有效载荷的示意图;

图14是本申请实施例提供的另一种计算设备的示意图;

图15是本申请实施例提供的另一种计算设备的示意图;

图16是本申请实施例提供的另一种计算设备的示意图;

图17是本申请实施例提供的一种解压引擎的示意图;

图18是本申请实施例提供的一种解压引擎的示意图;

图19是本申请实施例提供的一种数据处理装置的示意图。

具体实施方式

下面将结合附图,对本申请提供的数据处理方法的技术方案进行描述。

随着信息技术的发展,大量的数据需要在不同的设备之间通过网络进行传输或交互,例如高性能计算(high performance computing,HPC)、AI模型训练、多媒体数据传输等应用中会涉及大量的数据传输。通过提高不同计算设备之间的数据交互效率,降低数据传输的时延,能够提高数据处理的效率,提高用户体验。针对如何提高不同计算设备之间的数据交互效率的问题,降低不同计算设备之间传输的数据量是提高数据传输效率,降低数据传输时延的一种有效方法。

示例性的,如图1所示,图1是本申请实施例提供的一种分布式训练集群的架构示意图,该分布式训练集群用于分布式训练场景中对AI模型进行训练,该分布式训练集群包括一个或多个服务器,每个服务器包括一个或多个处理器。当包括多个服务器时,多个服务器之间通过网络连接。在AI模型的训练过程中,参与训练的多个服务器之间或者同一个服务器中不同计算设备之间能够通过all-to-all、allgather或者allreduce等聚合通信方式进行数据交互,进而完成AI模型的训练。随着AI模型规模越来越大,不同计算设备之间交互的数据量也不断增长,数据交互过程所需的时延在模型训练中的占比也越来越高。需要说明的是,上述计算设备可以是集群中的服务器,也可以是服务器中的处理器,本申请实施例不做具体限制。因此如何降低模型训练过程中交互的数据量,是降低数据交互的时延、提高模型训练效率的有效途径。

本申请提供一种数据处理方法,能够对数据进行压缩,从而能够降低数据交互过程需要传输的数据量,提高数据传输的效率,降低时延。如图2所示,图2是本申请实施例提供的一种数据处理方法的流程示意图。该方法包括如下S201至S203。

S201、根据待压缩的多个第一数据确定一个第一基准值。

上述待压缩的多个第一数据是计算设备需要传输的数据,在传输这多个第一数据之前,计算设备需要将这多个第一数据进行压缩,以降低传输过程中的数据量。

计算设备在对这多个第一数据进行压缩前,先根据这多个第一数据确定一个第一基准值。在确定第一基准值时,计算设备可以统计这多个第一数据中出现次数最多的一个第一数据,将该出现次数最多的第一数据作为第一基准值。计算设备还可以将这多个第一数据划分为t1个组,确定每个组中的中位数,得到t1个中位数;然后将t1个中位数划分为t2个组,再确定t2个组中每个组中的中位数,得到t2个中位数。依次类推,直至最终得到的多个中位数不能继续分组,例如,分组后每个组中的数值少于三个,将这多个中位数对应的中位数作为该集合对应的基准值。计算设备还可以先对这多个第一数据进行采样,得到多个采样值,然后将这个采样值划分为t1个组,然后按照上述方法确定第一基准值。

示例性的,第一集合包括100个指数值,指数编码模块320对这100个指数值进行采样,得到27个指数值。指数编码模块320先将这27个指数值每3个分为一组,得到9组数据,确定每组数据中的中位数,得到9个中位数;然后将这9个中位数再以每3个分为一组,得到3组数据,确定每组数据中的中位数,得到3个中位数,最后将这3个中位数对应的中位数作为第一集合对应的基准值。

S202、确定每个第一数据与第一基准值的差值。

计算设备在确定第一基准值之后,计算上述多个第一数据中每个第一数据与第一基准值之间的差值。应理解,多个第一数据与第一基准值之间的差值包括正数、0以及负数。

S203、确定每个差值对应的编码,根据每个编码得到对应的第一数据被压缩后的数据。

计算设备中存储有编码表,该编码表中记录预设的多个差值对应的编码,计算设备在确定每个第一数据与第一基准值之间的差值之后,根据编码表查找每个差值对应的编码,每个差值对应的编码即为该差值对应的第一数据对应的编码,每个第一数据对应的编码即为每个第一数据被压缩后的数据。

需要说明的是,本申请中差值与编码的对应关系以及每个第一数据对应的被压缩后的数据的形式在后文进行详细介绍,在此不再阐述。

本申请实施例中,计算设备在对上述多个第一数据进行压缩后,会将每个第一数据被压缩后的数据发送给其他计算设备,其他计算设备需要对压缩后的数据进行解码。计算设备在对多个第一数据进行压缩时,会生成对应的第一元数据,该第一元数据包括上述第一基准值。计算设备会将元数据也发送给其他计算设备,以使其他计算设备根据每个第一数据被压缩后的数据以及第一元数据对被压缩后的数据进行解码,得到上述多个第一数据。

在一种可能的实施例中,上述第一数据可以是浮点数中的指数值。浮点数是采用科学计数法表示一个数字,浮点数包括符号位、尾数、基数和指数,浮点数能够表示为如下形式:

V=(-1)

其中,S表示符号位,取值为0或1,0表示浮点数为正,1表示浮点数为负;M表示尾数;R表示基数,二进制数中R的值是2;E表示指数。

在计算机中,用浮点数表示一个数字时,只需要确定上述符号位、指数和尾数几个变量即可。不同精度的浮点数中,指数和尾数的长度不同。例如,FP64采用64比特(bit)存储一个浮点数,64bit包括1bit符号位、11bit指数和52bit尾数;FP32采用32bit存储一个浮点数,包括1bit符号位、8bit指数和23bit尾数;FP16采用16bit存储一个浮点数,包括1bit符号位、5bit指数和10bit尾数。如图3所示,图3是本申请实施例提供的一种浮点数的示意图,图3中示例性示出了FP32的数据的存储示意图,32bit的数据中,第1至23位存尾数,第24至第31位存指数,第32位存符号位。

在AI模型训练等应用中,模型中的权重以及模型训练过程中产生的激活值、梯度等数据的数据类型通常是浮点(float point,FP)型,例如双精度浮点型(FP64)、单精度浮点型(FP32)和半精度浮点型(FP16)等。通过对浮点数中的指数值进行压缩,能够降低浮点数在传输过程中的数据量,提高数据传输效率,降低数据时延,对于AI模型训练,能够降低AI模型训练过程中交互的数据量,降低数据传输的时延、提高模型训练效率。

在一种可能的实现方式中,如果上述第一数据是浮点数中的指数值,即计算设备是对浮点数进行压缩,而每个浮点数还包括尾数值;计算设备还可以分别对多个浮点数的尾数值进行压缩,得到各个尾数值被压缩后的数据;根据多个浮点数的指数值被压缩后的数据和多个浮点数的尾数值被压缩后的数据,得到多个浮点数被压缩后的数据。

应理解,在多个第一数据分别是多个浮点数的指数值时,第一元数据还包括压缩类型和尾数压缩等级;压缩类型用于指示是否对多个浮点数的尾数值进行了压缩,尾数压缩等级用于指示在对尾数值进行了压缩时,尾数值被压缩后的数据的长度。当对浮点数据进行压缩时,用户可以选择是否压缩浮点数的尾数值,以及选择对尾数值的压缩程度,因此在对浮点数进行压缩时,上述第一元数据还包括压缩类型和尾数压缩等级,以使接收到压缩后的数据的计算设备能够根据第一元数据对接收到的压缩后的数据的指数部分和尾数部分分别进行解码,得的被压缩前的浮点数据。

在一种可能的实现方式中,计算设备还能够接收其他计算设备发送的压缩后的数据,即接收到待解压数据,该待解压数据包括编码部分和第二元数据;其中,第二元数据包括第二基准值,编码部分包括多个编码。计算设备能够根据第二基准值和多个编码,分别对多个编码进行解码,得到多个第二数据。例如,计算设备根据一个编码以及计算设备中存储的编码表,确定该编码对应的差值,然后将该差值与第二基准值相加,即可得到该编码对应的原始数据。

在一种可能的实现方式中,在待解压数据是被压缩的浮点数对应的数据时,待解压数据还包括尾数部分,第二元数据中还包括被压缩的浮点数的数据类型、压缩类型和尾数压缩等级,压缩类型用于指示是否对浮点数的尾数值进行了压缩;尾数压缩等级用于指示在对尾数值进行压缩后,尾数值被压缩后的数据的长度。计算设备在接收到对浮点数进行压缩后的待解压数据后,根据数据类型确定被压缩前的浮点数的指数值的长度和尾数值的长度;根据指数值的长度、第二基准值和多个编码,分别对多个编码进行解码,得到多个指数值。在根据压缩类型确定待解压数据中尾数部分是对尾数值进行压缩后的数据时,根据尾数压缩等级和尾数值的长度,对尾数部分被压缩后的数据进行解码,得到多个尾数值。例如,原始的尾数值的长度为10比特(bit),尾数压缩等级指示尾数值被压缩后的数据长度是6bit,则计算设备对尾数部分每个被压缩后的数据补充4bit,得到10bit的尾数值。最后计算设备根据解码得到的多个指数值和多个尾数值,恢复出被压缩前的浮点数。

下面以上述第一数据是浮点数的指数值,即对浮点数进行压缩和解码为例,结合本申请提供的计算设备的结构,对本申请提供的数据处理方法进行详细介绍。

本申请实施例提供一种计算设备,该计算设备包括压缩引擎。该压缩引擎能够实现对浮点数的压缩,从而降低数据交互过程中计算设备间进行交互的数据量,提高数据传输的效率,降低数据传输时延。如图4所示,图4是本申请实施例提供的一种计算设备的示意图,该计算设备10包括一个或多个处理器100、通信引擎200、压缩引擎300和存储器400,压缩引擎300位于通信引擎200中;其中,图中仅示出一个处理器,每个处理器100包括一个或多个核心(core);处理器100、通信引擎200和存储器400通过片内总线(图中未示出)连接,并通过片内总线交互数据。该计算设备10的多个core通过并行计算分别计算AI模型中的某一个算子,并各自产生该算子对应的原始张量中的一个切片,各个core将产生的切片写入存储器400中,得到上述算子对应的完整的原始张量。计算设备在调用通信引擎200进行计算设备间的数据的传输时,通信引擎200在获取存储器400中的数据后,调用压缩引擎300对数据进行压缩,得到压缩后的浮点数据。压缩引擎300将压缩后的浮点数据发送给通信引擎200,由通信引擎200对压缩后的浮点数据进行封装后发送给其他计算设备。上述压缩引擎300的结构和压缩引擎300对浮点数进行压缩的方法在后文进行详细说明,在此不再赘述。

如图5所示,图5是本申请实施例提供的另一种计算设备的示意图,在该计算设备20中,上述压缩引擎300部署于core中。一个core产生上述原始张量的一个切片后,该core调用压缩引擎300对数据进行压缩,得到压缩后的浮点数据。各个core将压缩后的浮点数据写入到存储器400中的时候,会存储到多个不连续的地址对应的存储空间中,即原始张量在存储器中是多个不连续的数据片段,存储器400通过分散聚合表(scatter gather list,SGL)记录每个core写入的浮点数据的地址信息。通信引擎200读取SGL,根据SGL中的地址信息读取存储器400中的浮点数据进行封装,并发送给其他计算设备。上述压缩引擎300的结构和压缩引擎300对浮点数进行压缩的方法在后文进行详细说明,在此不再赘述。

如图6所示,图6是本申请实施例提供的另一种计算设备的示意图,在该计算设备30中,上述压缩引擎300部署于计算设备30中,为计算设备30中独立于处理器100、通信引擎200和存储器400的一个模块,其中,一个或多个处理器100、通信引擎200、压缩引擎300和存储器400通过片内总线(图中未示出)连接,并通过片内总线交互数据。该计算设备10的多个core分别计算AI模型中的某一个算子,并各自产生该算子对应的原始张量中的一个切片,各个core将产生的切片写入存储器400中,得到上述算子对应的完整的原始张量。计算设备30调用压缩引擎300对原始张量中的浮点数进行压缩,得到压缩后的浮点数据,并将压缩后的浮点数据再次写入存储器400。计算设备30在调用通信引擎200进行计算设备间的数据传输时,通信引擎200从存储器400获取压缩后的浮点数据,对压缩后的浮点数据进行封装后发送给其他计算设备。上述压缩引擎300的结构和压缩引擎300对浮点数进行压缩的方法在后文进行详细说明,在此不再赘述。

需要说明的是,上述原始张量是指计算设备产生的需要发送给其他计算设备的数据,压缩引擎300每次获取一个数据包的数据,由于数据包的限制,该数据包中包括原始张量中的部分数据。例如原始张量是1兆字节的浮点数,数据包中仅包括512字节的浮点数。压缩引擎300在得到上述一个数据包的浮点数后,对该数据包中包括的多个浮点数进行压缩,得到压缩后的浮点数据。

需要说明的是,上述计算设备的结构仅是示例,不能理解为具体限定,计算设备还可以为其他结构,本申请实施例不做具体限定。上述通信引擎200可以通过直接内存访问(direct memory access,DMA)、远程直接内存访问(remote direct memory access,RDMA)、基于融合以太网的RDMA(RDMA over converged ethernet,RoCE)以及系统直接内存访问(system DMA,SDMA)等技术与其他计算设备之间进行数据的交互。上述其他计算设备可能是同一个服务器内的其他处理器,也可能是其他服务器内的处理器,本申请实施例不做具体限定。

下面介绍压缩引擎300的结构和压缩引擎300对浮点数据进行压缩的方法。

如图7所示,图7是本申请实施例提供的一种压缩引擎的示意图。该压缩引擎300能够实现对浮点数的压缩,在计算设备间需要互相交互浮点数据时,能够降低计算设备间进行交互的数据量,提高数据传输效率,例如,在使用分布式集群对AI模型进行训练的过程中,能够降低用于训练的各个计算设备之间交互的数据量,提高模型训练速度。压缩引擎300包括提取模块310、指数编码模块320以及数据合并模块330。提取模块310用于获取多个浮点数,从多个浮点数中提取出各个浮点数的指数,得到各个浮点数的指数对应的指数值。其中,每个浮点数对应一个指数,每个指数具有对应的指数值,即每个浮点数对应一个指数值;不同的浮点数对应的指数值可能相同,也可能不同。例如压缩引擎300获取到100个浮点数,100个浮点数对应提取100个指数值,这100个指数值中,可能存在部分指数值相同。比如三个浮点数对应的指数值是4,有四个浮点数对应的指数值是6。

指数编码模块320用于对提取模块310提取出的各个浮点数的指数值分别进行编码,得到各个指数值对应的编码。其中,各个指数值对应的编码中,部分或者全部指数值对应的编码的长度小于指数值的长度,从而实现对浮点数的压缩。例如,对于上述FP64的浮点数中的11bit的指数,部分指数值对应的编码的长度小于11bit。数据合并模块330用于合并各个指数值对应的编码以及各个浮点数对应的尾数,得到压缩后的浮点数据。应理解,各个浮点数还包括符号位,上述数据合并模块330用于合并上述各个浮点数的指数值对应的编码、各个浮点数对应的尾数以各个浮点数的符号位。

本申请实施例中,上述提取模块310在提取出各个浮点数的指数值之后,指数编码模块320先确定每个指数值对应的基准值,然后根据每个指数值和每个指数值对应的基准值对每个指数值进行编码,得到每个指数值对应的编码。需要说明的是,关于如何根据每个指数值基准值的确定方法以及根据指数值和基准值对指数值进行编码的方法在后文进行说明,在此暂不进行赘述。

在一种可能的实现方式中,如图8所示,图8是本申请实施例提供的另一种压缩引擎的示意图。上述压缩引擎300还包括元数据生成模块340,元数据生成模块340用于生成元数据,元数据包括上述多个浮点数的数据类型以及各个指数值对应的基准值。其中,数据类型包括FP128、FP64、FP32或FP16等浮点数对应的类型;元数据中的基准值用于接收到压缩后的浮点数据的计算设备对浮点数据进行解码,以根据各个指数值对应的编码和基准值恢复出各个指数值。数据合并模块330用于合并上述各个指数值对应的编码、各个浮点数的尾数以及元数据,得到压缩后的浮点数据。

在一种可能的实现方式中,如图9所示,图9是本申请实施例提供的另一种压缩引擎的示意图。该压缩引擎300还包括尾数压缩模块350,尾数压缩模块350用于对各个浮点数的尾数对应的尾数值进行压缩,得到各个尾数值对应的压缩值。当压缩引擎300包括尾数压缩模块350时,上述提取模块310还用于从上述多个浮点数中提取出各个浮点数的尾数,得到多个尾数值。其中,每个浮点数对应一个尾数,一个尾数对应有一个尾数值,即一个浮点数对应一个尾数值。尾数压缩模块350在对尾数进行压缩时,可以通过对尾数进行截取以实现对尾数的压缩。对于任意类型的浮点数据的尾数,尾数压缩模块350可以截取尾数值中预设长度或者预设比例的部分作为尾数值对应的压缩值。例如,尾数压缩模块350截取尾数值中前二分之一的字符作为一个尾数值对应的压缩值,或者尾数压缩模块350均截取尾数值中的前5bit作为各个尾数对应的压缩值。比如,对于FP32的浮点数,尾数部分包括23bit,可以截取每个尾数值的前12bit作为尾数值对应的压缩值;对于FP16的浮点数,尾数部分包括10bit,可以截取每个尾数值的前5bit作为尾数值对应的压缩值。

可选的,尾数压缩模块350可以根据配置的尾数压缩等级对尾数进行压缩,尾数压缩等级用于指示压缩引擎对尾数进行压缩以及对尾数值进行压缩后得到的压缩值的长度,不同的等级对应的压缩后的压缩值的长度不同。例如,尾数压缩等级包括4个等级,分别为0~3共四个等级,其中,0级表示不压缩尾数,1级表示保留尾数值中前60%的数据;2级表示保留尾数值中前50%的数据;3级表示保留尾数值中前40%的数据。对于FP16的浮点数据,尾数实际包括10bit,0级表示不压缩尾数,1级表示对尾数值进行压缩得到的压缩值长度为6bit,2级表示对尾数值进行压缩得到的压缩值长度为5bit,3级表示对尾数值进行压缩得到的压缩值长度为4bit。示例性的,如果尾数压缩等级是3,一个FP16的浮点数对应的尾数值是0011101011,则压缩后该尾数值对应的压缩值是0011。

应理解,在压缩引擎300包括上述尾数压缩模块350时,上述元数据生成模块340生成的元数据还包括压缩类型和尾数压缩等级。如下表1所示,元数据可以包括如下表1所示的域段。其中,压缩类型包括对浮点数不进行压缩、只压缩指数、只压缩尾数以及既压缩指数也压缩尾数四种压缩类型;尾数压缩等级用于指示尾数值被压缩后得到的压缩值的长度。

上述数据合并模块330用于对各个指数值对应的编码、尾数值压缩后对应的压缩值以及上述元数据进行合并,得到压缩后的浮点数据。元数据用于接收到压缩后的浮点数据的计算设备根据元数据中所包括的各个域段恢复出浮点数,计算设备根据元数据恢复出浮点数的方法在后文进行说明,在此暂不进行赘述。

表1

应理解,上述压缩类型和尾数压缩等级可以是用户根据需求进行配置的。用户能够通过配置是压缩引擎300只对浮点数的指数进行压缩,也可以配置对浮点数的指数和尾数都进行压缩。在配置对尾数进行压缩时,还需要配置尾数压缩等级,以使压缩引擎300确定对尾数进行压缩后的长度。例如在训练AI模型时,在需要较短的训练时间时,可以设置压缩类型为压缩指数和尾数,且设置成较高的尾数压缩等级,以使尾数被压缩后的压缩值的长度更短,最大限度的降低需要传输的数据量,降低计算设备间通信带来的时延。

下面介绍指数编码模块320确定各个指数值对应的基准值的方法。

指数编码模块320根据各个指数值确定基准值时,指数编码模块320将上述多个指数值划分为n个集合。然后根据各个集合中不同指数值确定每个集合中的多个指数值对应的一个基准值,得到m个基准值;其中,n为大于或等于1的正整数,m为小于或等于n的正整数。

在将上述多个指数值划分为n个集合之后,在确定每个集合中的多个指数值对应的基准值时,可以通过以下三种方式确定每个集合对应的基准值。

第一种方式,如图10所示,图10是本申请实施例提供的一种确定基准值的示意图。对于每个集合中的多个指数值,指数编码模块320通过每个集合中的多个指数值确定一个基准值,即,n个集合中的每个集合对应一个基准值E

第二种方式,在确定每个集合对应的基准值时,对于n个集合中的第一集合,先对第一集合中的K个指数值进行采样,得到K1个采样值。对这K1个采样值,先将K1个采样值划分为t1个组,确定每个组中的采样值的中位数,得到t1个中位数;然后将t1个中位数划分为t2个组,再确定t2个组中每个组中的中位数,得到t2个中位数。依次类推,直至最终得到的多个中位数不能继续分组,例如,分组后每个组中的数值少于三个,将这多个中位数对应的中位数作为该集合对应的基准值。

示例性的,第一集合包括100个指数值,指数编码模块320对这100个指数值进行采样,得到27个指数值。指数编码模块320先将这27个指数值每3个分为一组,得到9组数据,确定每组数据中的中位数,得到9个中位数;然后将这9个中位数再以每3个分为一组,得到3组数据,确定每组数据中的中位数,得到3个中位数,最后将这3个中位数对应的中位数作为第一集合对应的基准值。

第三种方式,如图11所示,图11是本申请实施例提供的另一种确定基准值的示意图。对于每个集合中的多个指数值,指数编码模块320将根据前一个集合中的多个指数值计算得到的基准值,作为后一个集合中的多个指数值对应的基准值。即,根据第i个集合中的多个指数值,计算出一个基准值E

应理解,当n等于1,即指数编码模块320不将上述多个指数值划分为多个集合时,指数编码模块320只能通过上述第一种方式或第二种方式确定这多个指数值对应的基准值。

需要说明的是,指数编码模块320在根据上述任意一种方式确定每个集合对应的基准值时,在进行采样时,对于指数值为0的值,可以不进行采样。

下面介绍指数编码模块320对指数值进行编码的操作过程。指数编码模块320确定各个指数值对应的基准值之后,基于各个指数值和各个指数值对应的基准值能够通过以下三种方法对各个指数值进行编码。

第一种方法,指数编码模块320根据指数值和指数值对应的基准值之间的差值对指数值进行编码,指数编码模块320通过对差值进行编码,然后将差值对应的编码作为该指数值对应的编码。如下表2所示,表2中是本申请实施例提供的一种编码表,该编码表包括指数值和基准值之间不同差值对应的编码。如果一个指数值与该指数值对应的基准值之间的差值的绝对值小于第一阈值(表2中第一阈值为4),根据编码表确定该差值对应的编码,该差值的编码即为该指数值对应的编码;如果一个指数值与该指数值对应的基准值之间的差值的绝对值大于或等于第一阈值,根据编码表确定该差值对应的编码,该指数值对应的编码包括该差值对应的编码与该指数值的实际值,即该指数值对应的编码是该差值对应的编码与该指数值的实际值的组合。

需要说明的是,对差值进行编码的编码方式还可以是其他方式,表2中所示的差值与编码的对应关系仅是一种示例,差值与编码还可以是其他对应关系;另外,对于绝对值大于或等于第一阈值的差值,表2中统称为“其他差值”,所有其他差值对应的编码相同;上述第一阈值仅用于举例,不能理解为具体限定,第一阈值还可以是其他值,例如3、5或6等,本申请实施例不做具体限定。

表2

指数编码模块320在根据每个集合中的指数值和每个集合中的指数值对应的基准值进行编码时,对于n个集合中的第一集合,确定第一集合中的每个指数值与第一集合对应的基准值E

示例性的,如果需要压缩FP32的浮点数,指数值包括8bit,基准值是3。对于指数值为2的指数,该指数值与基准值之间的差值为-1,该差值的绝对值小于第一阈值4,根据编码表确定该差值对应的编码是10,则指数值2对应的编码即为10。对于指数值为6的指数,该指数值与基准值之间的差值为3,则该指数值6对应的编码为11110。对于指数值为8的指数,用二进制表示为00001000,该指数值与基准值之间的差值为5,该差值的绝对值大于第一阈值4,该差值对应的编码为111111,则指数值8对应的编码为11111100001000。

通过上述压缩方法,由于基准值是一个集合中出现次数较多的指数值,当用一个集合中的多个指数值分别与基准值做差值时,得到的多个差值中0的数量最多,将差值中为0的差值根据上述编码方式进行编码后,能够将差值为0对应的指数值压缩为2比特;又因为多个指数值通常满足正态分布,上述多个差值中绝对值小于第一阈值的差值所占的比例也较多,因此将差值中绝对值小于第一阈值的差值同样根据上述编码方式进行编码,由于编码所占的比特位小于各个指数值,差值中绝对值小于第一阈值的差值的数量占比较多,从而能够将大部分指数值通过上述方式进行压缩,达到压缩浮点数,降低不同计算设备之间交互的数据量,提高数据传输效率。

第二种方法,指数编码模块320在确定各个集合对应的基准值时,如果在对各个集合中的指数值进行采样时,对于指数值为0的指数不进行采样,指数编码模块320在对指数值进行编码时,对于非0的指数值,对指数值与基准值之间的差值的绝对值进行编码,并在编码时增加一位符号位指示差值的符号;对于指数值为0的指数,直接编码为0。具体的,如下表3所示,表3中是本申请实施例提供的一种编码表。表3中,对于差值为0和指数值为0这两种情况,对应的编码均是0,通过符号位区分编码0是表示差值为0还是指数值为0。当符号位置1,编码为0时,表示的是差值0;当符号位置0,编码为0时,表示的是指数值为0。如果一个指数值与该指数值对应的基准值的差值的绝对值小于第二阈值(表3中第二阈值为7),该指数值对应的编码即为其对应的差值的编码;如果一个指数值与该指数值对应的基准值的差值的绝对值大于或等于第二阈值,根据编码表确定该差值对应的编码,该指数值对应的编码包括该差值对应的编码与该指数值的实际值,即该指数值对应的编码是该差值对应的编码与该指数值的实际值的组合。

例如,如果基准值是2,符号位是0时表示指数值与基准值之间的差值为正,符号位是1时表示指数值与基准值之间的差值为负。对于指数值为2的指数,即差值为0时,该差值对应的编码0,并将该编码对应的符号位赋值为1;对于指数值为0的指数,该指数值对应的编码0,并将该编码对应的符号位赋值为0。对于指数值为4或者-4的指数,差值的绝对值为2,则指数值4或者-4对应的编码均是110,但是对于指数值4,会将该指数值的编码对应的符号位赋值为0;对于指数值-4,会将该指数值的编码对应的符号位赋值为1。对于指数值为9的指数,差值的绝对值为7,该差值的编码为11111110,指数值9用二进制表示是00001001,则该指数值9的编码1111111000001001,并将该编码对应的符号位赋值为0。

表3

需要说明的是,对差值的绝对值进行编码的编码方式还可以是其他方式,表3中所示的差值的绝对值与编码的对应关系仅是一种示例,差值与编码还可以存着其他对应关系;另外,对于绝对值大于或等于第二阈值的差值,表3中统称为“其他差值”,所有其他差值的绝对值对应的编码相同。应理解,上述第二阈值仅用于举例,不能理解为具体限定,第二阈值还可以是其他值,例如3、5或6等,本申请实施例不做具体限定。

在AI训练等场景中,计算设备之间需要传输的数据通常具有稀疏性,即要传输的数据通常包括较多为0的值,通过将为0的指数值压缩为一个比特位的编码,能够大量降低需要传输的数据量;同时用一个符号位指示指数值和基准值之间的差值的符号,使得绝对值相同的差值能够使用相同的编码,从而能够对更多的差值通过上述编码进行压缩,即对更多的指数值进行压缩,更好的降低压缩后的浮点数据的数据量。

第三种方法,指数编码模块320在确定上述各个集合对应的基准值之后,对于任意一个集合,例如上述第一集合,指数编码模块320将第一集合对应的基准值分别加上绝对值小于第三阈值的整数,得到多个数值。例如,第三阈值是4,则将基准值分别加上±1、±2和±3等。然后对这多个数值进行编码,得到多个编码。在对第一集合中的多个指数值进行编码时,将第一集合中的多个指数值分别与上述多个数值进行匹配,如果一个指数值与其中一个数值相同,则将该数值对应的编码作为该指数值对应的编码;如果一个指数值与上述多个数值均不匹配,则该指数值对应的编码包括其他数值对应的编码与该指数值,其他数值是指除上述多个数值之外的数值。应理解,上述第三阈值仅用作举例,不能理解为具体限定。

如表4所示,表4是多个数值与编码之间的编码表。表4中,基准值为6,即,当第一集合中的多个指数值对应的基准值为6时,指数编码模块能够生成如表4所示的编码表。当第一集合中的一个指数值为6,则该指数值对应的编码是00。如果第一集合中的一个指数值是8,则该指数对应的编码是110。如果一个指数值是10,且上述多个浮点数FP32类型的数据,指数值占8bit,则指数值10用二进制表示为00001010,该指数值10对应的编码是11111100001010。

表4

需要说明的是,当将上述多个指数划分为多个集合时,每个集合在确定一个基准值之后,都会根据基准值与第三阈值生成一个数值与编码之间的编码表,并且当两个集合对应的基准值不相同时,数值与编码的映射关系也不同。示例性的,如果第二集合中对应的基准值是4,则对应的编码表可能如下表5所示。当第二集合中的一个指数值为4,则该指数值对应的编码是00,当第二集合中的一个指数值为6,则该指数值对应的编码是110,如果一个指数值是8,且上述多个浮点数是FP32类型的数据,指数值8用二进制表示为00001000,则该指数值8对应的编码是11111100001000。

表5

如上表4和表5所示,对于不同的集合,当两个集合对应的基准值不同时,不同的指数值对应的编码不同,相同的编码表示不同的指数值。本申请实施例中,以基准值对应的编码作为基准编码,定义各个编码与基准编码之间的距离,例如基准编码是00。一个编码与编码00之间的距离指示该编码对应的数值与编码00对应的基准值之间的差值。例如,定义编码01与编码00之间的距离是1,编码10与编码00之间的距离是-1;编码110与编码00之间的距离是2,编码1110与编码00之间的距离是-2;编码11110与编码00之间的距离是3,编码111110与编码00之间的距离是-3。通过上述定义,在根据编码恢复出对应的指数值时,首先确定编码与00之间的距离,然后在基准值的基础上加上距离,即可得到对应的数值,该数值就是该编码对应的指数值。

需要说明的是,本申请实施例对上述每个集合中的指数值的数量不做具体限定,优选的,每个集合中指数值的数量为压缩引擎一个时钟周期(clock)能够处理的数据的数量。例如,如果压缩引擎每次获取的一个数据包中包括512字节的FP16的浮点数,即包括256个浮点数,压缩引擎一个时钟周期能够处理128字节的数据,即64个FP16的浮点数,则该数据包中的浮点数能够被分成4个集合,一个集合中包括64个浮点数。

通过上述压缩方法,由于基准值是一个集合中出现次数较多的指数值,又因为多个指数值通常满足正态分布,当用一个集合对应的基准值分别与绝对值小于第二阈值的整数相加得到多个数值后,这多个数值与该集合中占比较大的指数值相同,然后对这多个数值进行编码,就相当于对该集合中占比较大的一部分指数值进行了编码。由于编码的长度小于各个指数值,集合中占比较大的一部分指数值用较短长度的编码表示后,能够实现对大部分指数值的压缩。从而能够将大部分指数值通过上述方式进行压缩,达到压缩浮点数,降低不同计算设备之间交互的数据量,提高数据传输效率。例如降低AI模型训练过程中不同计算设备之间交互的数据量,提高模型训练效率。

本申请实施例中,上述计算设备在压缩引擎300将多个浮点数压缩之后,需要将压缩后得到的包括元数据的浮点数据发送给通信引擎200,或者将浮点数据写入存储器400中,由通信引擎200从存储器400中获取这多个浮点数对应的浮点数据,然后由通信引擎200将浮点数据封装为数据包后再发送给其他计算设备。通信引擎200在发送数据包时,通常一个数据包中的有效载荷(payload)的长度是固定的。例如以太网数据包的有效载荷是1500字节,本申请实施例中,以数据包的有效载荷为512字节为例。如果压缩引擎300获取的一个数据包包括512字节的FP16的浮点数,即包括256个浮点数。压缩引擎300在将这个数据包中的256个浮点数进行压缩后,得到一组对应的浮点数据。通信引擎200在得到这一组压缩后的浮点数据后,由于浮点数据不足512字节,例如512字节的浮点数被压缩后的大小为394字节,则通信引擎200在封装时,会将394字节填充为512字节,然后进行封装之后发送出去。

在一种可能的实现方式中,上述通信引擎200在对浮点数据进行封装时,可以还可以对浮点数据按照预设的方式进行补齐。例如,对有效载荷按照10字节或者20字节等对齐。以20字节补齐为例,即通信引擎200发送的数据包中的有效载荷均是20字节的整数倍。如果压缩引擎在对一个数据包中的浮点数进行压缩后得到的一组浮点数据的长度是235字节,通信引擎200得到这一组235字节的浮点数据后,通信引擎200会填充5字节,将有效载荷补齐为240字节,然后对240字节的数据添加报文头进行封装后发送给其他计算设备。

在一种可能的实现方式中,在通信引擎200对数据包中的数据进行补齐的情况下,如下表6所示,上述压缩引擎300生成的元数据中还包括数据长度,数据长度用于指示通信引擎200获取的浮点数据的长度,以使通信引擎200确定需要填充的数据的长度。

需要说明的是,压缩引擎300每次获取到一个数据包中的浮点数后,会对该数据包中所包括的多个浮点数进行压缩得到一组浮点数据。由于压缩过程中生成的元数据中的基准值仅适用于恢复该组浮点数据,因此通信引擎200每次从压缩引擎300或存储器400获取一组浮点数据进行补齐并封装。

表6

在一种可能的实现方式中,如果通信引擎200每次发送的数据包的有效载荷需要是固定长度,例如有效载荷的固定长度是512字节。则压缩引擎300在对接收到的数据包中的浮点数进行压缩时,可以将多个数据包中的浮点数的指数值以相同的基准值进行压缩,得到多组浮点数,然后由通信引擎200对这多组浮点数据按照512字节进行补齐后进行封装。

示例性的,压缩引擎300在获取到第一个数据包之后,确定该数据包中的多个浮点数对应的基准值,并对指数值进行压缩得到一组浮点数据。如果该组浮点数据的长度小于512字节,压缩引擎300在得到第二个数据包中的多个浮点数之后,继续使用上述第一个数据包对应的基准值对第二个数据包中的多个浮点数进行压缩,这样第一个数据包和第二个数据包的元数据相同。如果第一个数据包在压缩后的数据长度是215字节,第二个数据包压缩后的数据长度是230字节,元数据的长度是10字节,则通信引擎200将这两组浮点数据按照512字节进行补齐时,需要补充57字节后再一起封装并发送。

上面介绍了本申请实施例提供的计算设备以及利用计算设备进行数据压缩的方法,在压缩引擎300对浮点数进行压缩得到上述压缩后的浮点数据之后,通信引擎200会获取压缩后的浮点数据,将压缩后的浮点数据作为有效载荷(payload),封装为报文后发送给其他计算设备。根据上述压缩引擎300对浮点数的压缩方式,压缩后的浮点数据包括元数据部分、编码部分、尾数部分以及指数值部分。如图12所示,图12是本申请实施例提供的一种有效载荷的示意图。图12中,元数据部分用于存放上述表1或者表6中所示的域段;在压缩引擎300没有对浮点数的尾数进行压缩的情况下,尾数部分用于存放各个浮点数的符号位以及尾数值;在压缩引擎300对浮点数的尾数部分进行压缩的情况下,尾数部分用于存放浮点数的符号位以及尾数值被压缩后的压缩值;编码部分用于存放各个指数值对应的编码;指数值部分用于存放部分指数真实的指数值。例如,在通过上述第一种方法对指数值进行编码时,指数值部分用于存放与基准值的差值的绝对值大于或等于第一阈值的指数值;在通过上述第二种方法对指数值进行编码时,指数值部分用于存放与基准值的差值的绝对值大于或等于上述第二阈值的指数值;在通过上述第三种方法对指数值进行编码时,指数值部分用于存放大于或等于上述第三阈值的指数值。

其中,被压缩的多个浮点数中每个浮点数的符号位与该浮点数的尾数值或者该浮点数的尾数值对应的压缩值存放在一起,即尾数部分在存放时,先存第一个浮点数的符号位和第一个浮点数的尾数值对应的压缩值,然后再存第二个浮点数的符号位和第二个浮点数的尾数值对应的压缩值,依此类推,直至压缩引擎300将上述多个浮点数对应的符号位和尾数值对应的压缩值存放到上述尾数部分。

应理解,当压缩引擎300使用上述第一种方法对指数值进行压缩时,即通过如上述表2所示的编码表对差值进行编码时,编码部分用于存放各个指数值与基准值的差值所对应的编码;如果压缩引擎采用上述第三种方法对指数值进行压缩,即通过如上述表4或表5所示的编码表对各个指数值进行编码时,上述编码部分用于存放各个数值对应的编码。

当压缩引擎300通过上述第二种方法对指数值进行压缩,即通过如上述表3所示的编码表对指数值与基准值之间的差值的绝对值进行编码时,压缩引擎300所生成的有效载荷部分的格式如图13所示,图13是本申请实施例提供的另一种有效载荷的示意图。图13中的有效载荷部分还包括编码对应的符号位,编码对应的符号位包括非0的指数值与基准值之间的差值对应的符号以及指数值为0的指数的符号。

需要说明的是,压缩引擎300在生成上述格式的有效载荷时,上述编码部分存放的数据和尾数部分存放的数据存在一一对应的关系。如果压缩引擎共对256个浮点数进行了压缩,且是对指数值和尾数值都进行压缩,尾数部分先存放第一个浮点数的符号位和第一个浮点数的尾数值对应的压缩值,然后再存第二个浮点数的符号位和第二个浮点数的尾数值对应的压缩值;则编码部分同样先存放上述第一个浮点数对应的编码,然后存放上述第二浮点数对应的编码。如果有效载荷还包括编码对应的符号位,则编码对应的符号位部分先存放上述第一个浮点数的指数值与基准值之间的差值的符号;再存放第二个浮点数的指数值与基准值之间的差值的符号。

在计算设备使用上述压缩引擎将浮点数进行压缩以降低传输的数据量后,对于接收到压缩后的浮点数据的计算设备,需要对浮点数据进行解压以得到完整的浮点数。下面介绍本申请实施例提供的解压引擎。

本申请实施例还提供另一种计算设备,该计算设备还包括解压引擎,该计算设备在接收到其他计算设备发送的压缩后的浮点数据时,能够调用解压引擎对压缩后的浮点数据进行解压,恢复出多个浮点数。计算设备40包括一个或多个处理器100、通信引擎200、压缩引擎300、解压引擎500和存储器400。其中,压缩引擎300可以部署于通信引擎200中,也可以部署于core中,压缩引擎300还可以是处理器100、通信引擎200和存储器400之外的一个独立的模块;解压引擎500可以部署于通信引擎200中,也可以是处理器100、通信引擎200和存储器400之外的一个独立的模块。压缩引擎300的结构和对浮点数进行压缩的方法可以参照上述图7至图13的相关描述中的操作,解压引擎500的结构以及解压引擎500对压缩后的浮点数据进行解压的方法在后文进行说明,在此不赘述。

示例性的,如图14所示,图14是本申请实施例提供的另一种计算设备的示意图。上述压缩引擎300和解压引擎500均部署于上述通信引擎200中。如图15所示,图15是本申请实施例提供的另一种计算设备的示意图。上述压缩引擎300部署于core中,解压引擎500为处理器100、通信引擎200和存储器400之外的一个独立的模块。如图16所示,图16是本申请实施例提供的另一种计算设备的示意图。上述压缩引擎300和解压引擎500均为处理器100、通信引擎200和存储器400之外的一个独立的模块。应理解,以上仅为举例,压缩引擎300和解压引擎500部署还可以是其他形式,例如压缩引擎300部署于core中,解压引擎500部署于通信引擎中。

下面介绍解压引擎500的结构以及解压引擎500对浮点数据进行解压的方法。

如图17所示,图17是本申请实施例提供的一种解压引擎的示意图。如果上述计算设备的压缩引擎300是如上图8所示,压缩引擎300只能对指数值进行压缩,则解压引擎500包括元数据解析模块510、分离模块520、指数解码模块530和数据恢复模块540。元数据解析模块510用于获取上述数据类型和基准值,将数据类型发送给分离模块520,以使分离模块520根据数据类型确定每个尾数值的长度,进而从有效载荷中分离出上述尾数部分和编码部分;元数据解析模块510还用于将数据类型和基准值发送给指数解码模块530,以使指数解码模块530根据数据类型确定指数值的长度,并根据基准值和编码部分恢复出指数值。分离模块520用于提取出有效载荷中的尾数部分、编码部分和指数值部分。

对于通过上述第一种方法对指数值进行编码得到的浮点数据,指数解码模块530获取编码部分和元数据中的一个或多个基准值后,对于编码部分的任意一个编码,例如第t个编码,指数解码模块530在获取到第t个编码后,首先确定该编码对应的基准值和该编码对应的差值,然后将差值与上述基准值相加,即可得到该编码对应的真实的指数值。需要说明的是,如果指数解码模块530获取的编码是111111,则指数解码模块530从指数值部分获取该编码对应的真实的指数值。

例如,指数解码模块530是第j次获取到编码111111,则指数解码模块530从指数值部分获取第j个指数值,即为该编码对应的真实的指数值。指数解码模块530从第(j-1)p+1位开始,获取连续的p个比特位,这p个比特位组成的数值即为第j个指数值。其中,p为真实的指数值的长度。示例性的,如果被压缩的浮点数是FP32类型的浮点数,即指数值包括8bit,一个集合对应的基准值是4,对于该集合对应的编码,如果编码是00,该编码对应的基准值是4,该编码对应的差值是0,则该编码00对应的指数值是4;如果编码是10,该编码对应的差值是-1,则该编码10对应的指数值是3;如果编码是11110,该编码对应的差值是3,则该编码11110对应的指数值是7;如果编码是111111,该编码是指数解码模块530第3次获取到编码111111,则指数解码模块530从指数值部分的第17位开始,获取8bit的数据,如果获取的8bit的数据是00001001,则该编码对应的指数值是9。

对于通过上述第二种方法对指数值进行编码的浮点数据,指数解码模块530获取上述编码部分和元数据中的一个或多个基准值后,对于编码部分的任意一个编码,例如第t个编码,首先确定该编码对应的基准值、该编码对应的差值的绝对值以及该编码对应的差值的符号位,将差值与上述基准值相加,即可得到该编码对应的真实的指数值。需要说明的是,如果编码是11111110,则指数解码模块530从指数值部分获取该编码对应的真实的指数值。示例性的,如果被压缩的浮点数是FP32类型的浮点数,即指数值包括8bit,一个集合对应的基准值是4,对于该集合对应的编码,如果编码是0,该编码对应的符号位是1,表示该编码是差值0对应的编码,即该编码对应的指数值是4;如果编码是0,且该编码对应的符号位是0,则表示该编码对应的指数值为0;如果编码是10,该编码对应的符号位是1,表示该编码对应的差值是-1,则该编码10对应的指数值是3;如果编码是11110,该编码对应的符号位是0,表示该编码对应的差值是4,则该编码11110对应的指数值是8;如果编码是11111110,该编码是指数解码模块530第2次获取到编码11111110,则指数解码模块530从指数值部分的第9位开始,获取8bit的数据,如果获取的8bit的数据是00001000,则该编码对应的指数值是8。

对于以上述第三种方法对指数值进行编码的浮点数据,指数解码模块530获取上述编码部分和元数据中的一个或多个基准值后。对于编码部分的任意一个编码,例如第t个编码,确定该集合对应的基准值,如果编码是00,该编码对应的指数值就是基准值,对于其他编码,根据该编码与编码00的距离,在基准值的基础上加上该编码与编码00的距离,即为该编码对应的指数值。需要说明的是,如果编码是111111,则指数解码模块530从指数值部分获取该编码对应的真实的指数值。

示例性的,一个集合对应的基准值是4,对于该集合对应的编码,如果编码是00,则该编码对应的指数值是4;如果编码是10,该编码与编码00的距离是-1,则该编码10对应的指数值是3;如果编码是11110,该编码与编码00的距离是3,则该编码11110对应的指数值是7。

数据恢复模块540用于根据各个浮点数的指数对应的指数值和尾数部分的浮点数的符号位与尾数值,恢复出各个浮点数。例如,被压缩的多个浮点数是FP32类型的数据,对于其中一个浮点数,根据编码部分确定该浮点数的指数的值是8,将该指数转换为8bit的二进制数,从尾数部分得到该浮点数数的符号位以及23bit的尾数,即可得到该浮点数的真实值。

在一种可能的实现方式中,如图18所示,图18是本申请实施例提供的一种解压引擎的示意图。如果上述压缩引擎300包括尾数压缩模块350,则上述解压引擎500还包括尾数恢复模块550。上述元数据还包括压缩类型和尾数压缩等级。数据类型指示上述多个浮点数的数据类型;压缩类型指示压缩引擎300是否对浮点数进行了压缩,以及压缩引擎300是压缩了指数还是尾数,或者是指数和尾数都进行了压缩;尾数压缩等级指示压缩引擎300对尾数值进行压缩后得到的压缩值的长度。如果压缩引擎300对尾数值进行了压缩,则上述有效载荷的尾数部分包括的是上述多个浮点数的符号位和上述多个浮点数的尾数值对应的压缩值。

如果分离模块520根据压缩类型确定尾数部分包括的是压缩值之后,根据尾数压缩等级能够确定各个压缩值的长度,进而从尾数部分提取出各个压缩值。尾数恢复模块550能够根据数据类型确定每个浮点数的尾数值的长度,根据尾数值的长度和压缩值的长度,确定压缩引擎300在对尾数值进行压缩时所删除的长度,并最终给每个压缩值补偿对应长度的随机数,得到每个尾数对应的尾数值。

示例性的,如果分离模块520根据压缩类型确定压缩引擎300压缩了指数和尾数;根据元数据中的数据类型确定被压缩的数据是FP16类型的数据,即尾数值包括10bit;根据尾数压缩等级确定尾数值被压缩后的压缩值的长度是4bit,因此压缩引擎300在对尾数进行压缩时,删除了6bit的字符。分离模块520在获取到编码部分之后,每4bit提取一个压缩值,然后由尾数恢复模块550随机产生一个6bit的随机数,拼接在4bit的压缩值后得到10bit的尾数值。

数据恢复模块540用于将指数解码模块530输出的各个浮点数对应的指数值和尾数恢复模块550输出的各个浮点数对应的尾数值一一对应并拼接,得到各个浮点数。

对于上述方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制。另外,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明所必须的。

本领域的技术人员根据以上描述的内容,能够想到的其他合理的步骤组合或者合理的计算设备的结构,也属于本申请的保护范围内。其次,本领域技术人员也应该熟悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明所必须的。

上述结合附图详细介绍了本申请提供的数据处理方法以及用于实现该数据处理方法的计算设备。下面结合附图介绍本申请提供的相关装置和设备。

如图19所示,图19是本申请实施例提供的一种数据处理装置的示意图。该数据处理装置190包括通信单元191和处理单元192。其中,通信单元191用于获取多个第一数据;处理单元192用于根据待压缩的多个第一数据确定一个第一基准值;然后计算每个第一数据与第一基准值的差值;确定每个差值对应的编码;根据每个编码得到对应的第一数据被压缩后的数据。各个第一数据对应的编码中的部分或全部编码的长度小于指数值的长度。应理解,上述多个第一数据可以是多个浮点数的指数值。

上述处理单元192在确定每个差值对应的编码时,具体用于:根据所述每个差值和编码表确定每个差值对应的编码,所述编码表中记录了预设的多个差值对应的编码。上述编码表中,绝对值大于阈值的差值对应的编码为固定值,上述处理单元具体用于:当第一差值的绝对值大于阈值时,则将固定值及第一差值对应的第一数据作为第一差值对应的第一数据被压缩后的数据。

可选的,浮点数还包括尾数值;处理单元192还可以用于分别对多个浮点数的尾数值进行压缩,得到各个尾数值被压缩后的数据;根据多个浮点数的指数值被压缩后的数据和多个浮点数的尾数值被压缩后的数据,得到多个浮点数被压缩后的数据。

本申请实施例中,计算设备在对上述多个第一数据进行压缩后,会将每个第一数据被压缩后的数据发送给其他计算设备,其他计算设备需要对压缩后的数据进行解码。处理单元192在对多个第一数据进行压缩时,会生成对应的第一元数据,该第一元数据包括上述第一基准值。计算设备会将元数据也发送给其他计算设备,以使其他计算设备根据每个第一数据被压缩后的数据以及第一元数据对被压缩后的数据进行解码,得到上述多个第一数据。

可选的,在对多个浮点数进行压缩时,上述第一元数据还包括压缩类型和尾数压缩等级;压缩类型用于指示是否对多个浮点数的尾数值进行了压缩,尾数压缩等级用于指示在对尾数值进行了压缩时,尾数值被压缩后的数据的长度。

在一种可能的实现方式中,上述通信单元191还用于接收其他设备发送的待解压数据,该待解压数据包括编码部分和第二元数据;其中,第二元数据包括第二基准值,编码部分包括多个编码;根据第二基准值和多个编码,分别对多个编码进行解码,得到多个第二数据。

在一种可能的实现方式中,在待解压数据是被压缩的浮点数对应的数据时,待解压数据还包括尾数部分,第二元数据还包括被压缩的浮点数的数据类型、压缩类型和尾数压缩等级,压缩类型用于指示是否对浮点数的尾数值进行了压缩,尾数压缩等级用于指示在对尾数值进行压缩后,尾数值被压缩后的数据的长度;处理单元192根据数据类型确定被压缩前的浮点数的指数值的长度和尾数值的长度;根据指数值的长度、第二基准值和多个编码,分别对多个编码进行解码,得到多个指数值;在根据压缩类型确定待解压数据中尾数部分是对尾数值进行压缩后的数据时,根据尾数压缩等级和尾数值的长度,对尾数部分被压缩后的数据进行解码,得到多个尾数值;根据解码得到的多个指数值和多个尾数值,恢复出被压缩前的浮点数。

需要说明的是,数据处理装置190能够实现对数据的压缩和解压,数据处理装置190实现对数据的压缩的操作可以参照上述实施例中压缩引擎完成的操作,实现对数据的解压的操作可以参照上述实施例中压缩引擎完成的操作,在此不再赘述。

本申请实施例还提供一种计算设备,该计算设备的结构示意图可以参照上述图4至图6或者图14至图16对应的计算设备的示意图。

需要说明的是,计算设备均包括多个处理器100,每个处理器100之间能够通过all-to-all、allgather或者allreduce等聚合通信方式进行数据交互。其中,上述处理器100可以中央处理器(central processing unit,CPU)、图像处理器(graphics processingunit,GPU)、嵌入式神经网络处理器(neural-network processing units,NPU)、张量处理器(tensor processing unit,TPU)、数据处理单元(data processing units,DPU)、加速处理器(accelerated processing unit,APU)、浮点计算单元(floating processing units,FPU)或专用集成电路(application-specific integrated circuit,ASIC)等。处理器还可以是单核处理器或多核处理器。处理器可以由CPU和硬件芯片的组合。上述硬件芯片可以是ASIC、PLD或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logicdevice,CPLD)、FPGA,通用阵列逻辑(generic array logic,GAL)或其任意组合。处理器也可以单独采用内置处理逻辑的逻辑器件来实现,例如FPGA或数字信号处理器(digitalsignal processor,DSP)等。

通信引擎200可以为有线接口或无线接口,用于与其他模块或设备进行通信,有线接口可以是以太接口、局域互联网络(local interconnect network,LIN)等,无线接口可以是蜂窝网络接口或使用无线局域网接口等。本申请实施例中通信引擎200具体可用于获取其他计算设备发送的待解压数据等操作。

存储器400可以是非易失性存储器,例如,只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。存储器400也可以是易失性存储器,易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic RAM,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhancedSDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,DR RAM)。

总线可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等。

可选地,该计算设备还可以包括输入/输出接口,输入/输出接口连接有输入/输出设备,用于接收用户输入的信息,例如用户输入的压缩类型、尾数压缩等级等。

具体地,上述计算设备执行各种操作的具体实现可参照上述方法实施例中计算设备执行的数据压缩和数据解码的具体操作,在此不再赘述。

本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在处理器上运行时,可以实现上述计算设备所执行的方法步骤,所述计算机可读存储介质的处理器在执行上述方法步骤的具体实现可参照上述实施例的具体操作,在此不再赘述。

本申请实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机指令,在被计算设备执行时,计算设备执行如上述实施例中计算设备所执行的方法。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。

上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质、或者半导体介质。半导体介质可以是固态硬盘(solid state drive,SSD)。

本申请实施例方法中的步骤可以根据实际需要进行顺序调整、合并或删减;本申请实施例装置中的模块可以根据实际需要进行划分、合并或删减。

以上对本申请实施例进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

相关技术
  • 一种数据处理方法、装置、网络侧设备及终端设备
  • 一种数据处理方法及装置、一种计算设备及存储介质
  • 一种样本数据处理方法、样本数据处理装置及电子设备
  • 一种数据处理方法、数据处理装置、计算机设备及可读存储介质
  • 一种DPI设备的数据处理方法及相关的DPI设备
  • 一种通道数据处理方法、EIT数据处理方法及相关设备
  • 一种通道数据处理方法、EIT数据处理方法及相关设备
技术分类

06120116500909