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

一种模型压缩方法、装置及相关设备

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


一种模型压缩方法、装置及相关设备

技术领域

本申请涉及人工智能领域,尤其涉及一种模型压缩方法、装置及相关设备。

背景技术

在人工智能(Artificial Intelligence,AI)领域,通常会通过分布式训练系统对模型进行训练,例如采用参数服务器(parameter server,PS)—工作服务器(worker)架构的分布式训练系统进行模型训练。在采用PS架构的分布式训练系统对模型进行训练时,参数服务器会多次将更新后的模型参数分别发送给多个工作服务器。当模型参数的数据量较大时,例如模型为推荐模型,大量的模型参数会增加参数服务器和工作服务器之间的通信时延,降低模型训练效率。因此如何降低模型参数,降低参数服务器和工作服务器之间的通信量,提高模型训练的效率是分布式训练中一个亟待解决的技术问题。

发明内容

本申请提供一种模型压缩方法、装置及相关设备,能够降低模型参数的数据量,减少模型参数对服务器等计算设备的内存占用,减少分布式训练中计算设备之间的通信量,降低通信时延,提高模型训练效率。

第一方面,本申请提供一种模型压缩方法,计算设备首先统计用于训练模型的数据集中,模型的嵌入embedding层的各个嵌入向量的标识(Identity,ID)出现的频率,根据各个嵌入向量的ID出现的频率将ID划分为第一集合和第二集合;然后对第一集合中的各个ID对应的嵌入向量的第一维度使用第一压缩算法进行压缩,得到第一集合中各个ID对应的嵌入向量的第二维度,以及分别对第二集合中各个ID对应的嵌入向量的第一维度使用第二压缩算法进行压缩,得到第一集合中各个ID对应的嵌入向量的第三维度;其中,第二维度和第三维度均小于第一维度;最后分别将嵌入层中属于第一集合的各个ID对应的嵌入向量由第一维度压缩为第二维度,分别将嵌入层中属于第二集合的各个ID对应的嵌入向量由第一维度压缩为第三维度,以实现对嵌入层的压缩,即实现对模型的压缩。

对于一个模型,其嵌入层的嵌入向量的第一维度是训练模型时所需要的维度,但在分布式训练系统中,大量的模型参数占用大量内存,同样会增加参数服务器和工作服务器之间的通信量,影响模型训练效率。根据用于训练模型的数据集中嵌入向量的ID出现的频率将ID分为两个部分,对于不同的部分采用不同的方案确定各个ID对应的嵌入向量在压缩后的维度,实现在嵌入向量的第一维度的基础上对嵌入向量进行压缩,并根据各个嵌入向量对应的压缩后的维度初始化各个嵌入向量,从而实现了对模型的嵌入层的压缩,能够降低了模型的参数量,减少对内存的占用,并能在分布式训练中减少参数服务器与工作服务器之间的通信量,降低通信时延,提高模型训练效率。

在一种可能的实现方式中,上述根据各个嵌入向量的ID的频率将ID划分为第一集合和第二集合,包括:根据各个嵌入向量的ID在数据集中出现的频率将ID划分为n个区间,从n个区间的每个区间中按照频率从低到高分别获取第一比例的ID,得到上述第一集合,则第二集合包括除第一集合中的ID之外的ID。其中,第i个区间中任意一个ID对应的频率大于第i-1个区间中任意一个ID对应的频率,n为大于或等于2的正整数,i为大于等于1小于等于n的整数。

各个嵌入向量的ID按照在数据集中出现的频率划分为多个区间后,将每个区间中出现频率相对低的ID取出组成第一集合,各个区间中其他的ID组成第二集合,进而能够对不同频率的ID根据不同的方法确定压缩后的维度。

在一种可能的实现方式中,上述根据各个嵌入向量的ID在数据集中出现的频率将ID划分为n个区间,包括:根据压缩率、各个嵌入向量的ID在上述数据集中出现的频率和区间数量n,将嵌入向量的ID划分为n个区间;其中,压缩率是指将上述嵌入层压缩后的大小与压缩前的大小的比值。

通过设置压缩率和区间数量,能够根据压缩率和区间数量确定将ID按照频率划分为多个区间的阈值,进而确定每个区间包括的ID的数量,不需要根据各个ID出现的频率和经验去调节阈值;同时用户能够根据需要设置上述压缩率,控制压缩后的嵌入层所占的存储空间。

在一种可能的实现方式中,上述第一集合中所包括的ID数量与第二集合中所包括的ID数量的比值满足第二比例,且第二集合中任意一个ID在上述数据集出现的频率大于第一集合中任意一个ID在数据集中出现的频率。

在一种可能的实现方式中,上述第二压缩算法包括为上述n个区间中各个区间设定的维度,且每个区间所设定的维度不同;上述分别对所述第二集合中各个ID对应的嵌入向量的第一维度使用第二压缩算法进行压缩,得到第三维度,包括:根据第二压缩算法所包括的为各个区间所设定的维度,确定第二集合中各个区间所包括的各个ID对应的嵌入向量的第三维度。

在一种可能的实现方式中,上述分别对所述第一集合中各个ID对应的嵌入向量的第一维度使用第一压缩算法进行压缩,得到的第二维度,包括:为第一集合中各个ID构建不同维度的多个向量,并为每个向量初始化一个权重,该权重用于指示向量在模型训练中的贡献;根据上述数据集对第一模型进行训练,确定训练后第一集合中各个ID对应的多个维度的向量的权重;将第一ID对应的多中维度的向量中权重最大的向量的维度作为第一ID对应的嵌入向量的维度;其中,第一ID是第一集合中的任意一个ID;第一模型包括第一集合中各个ID对应的多中维度的向量和第二集合中各个ID对应的嵌入向量根据第三维度初始化后的向量。

对于第二集合中的各个ID,预先设置对应的嵌入向量压缩后的维度,直接根据预先设置的压缩后的维度初始化第二集合中各个ID对应的嵌入向量;对于第一集合中的各个ID,通过构建多个不同维度的向量,并通过上述方法将构建的向量带入模型中参与模型训练,确定不同维度的向量对模型训练的贡献,以确定上述第一集合中各个ID对应的嵌入向量对应的第三维度,能够减少对专家经验的依赖,减少通过自主学习算法的搜索空间,提高模型压缩的效率。

在一种可能的实现方式中,上述数据集包括第一训练集和第二训练集,上述根据数据集对第一模型进行训练,包括:根据第一训练集对第一模型进行前向传播,得到第一损失值,根据第一损失值进行反向传播,对第一模型的部分模型参数进行更新,第一模型的部分模型参数包括第一模型中除上述第一集合中的ID对应的各种维度的向量对应的权重之外的参数,例如模型原本包括的权重w;根据第二训练集对第一模型进行前向传播,得到第二损失值,根据第二损失值进行反向传播,对第一集合中的ID对应的各种维度的向量对应的权重进行更新。

第一集合中的ID对应的各种维度的向量对应的权重和模型原有的权重w都在训练中进行优化更新,使用相同的损失函数,为了防止权重对数据集的过拟合,使用双层优化方法,第一集合中的ID对应的各种维度的向量对应的权重在一个数据集上训练,权重w在另一个数据集上训练,从而避免出现过拟合。

在一种可能的实现方式中,第一模型还包括还原算子,还原算子用于将嵌入层输出的第二维度和/或第三维度的向量转换到第一维度,该还原算子在根据上述数据集对第一模型进行训练的过程中同样会得到训练。

在嵌入层之后增加还原算子,该还原算子可采用矩阵乘、逆卷积或空洞卷积等可以放大维度的算子实现,在根据上述第一训练集和第二训练集训练第一模型之前,先初始化还原算子的参数,在训练第一模型的过程中进行更新还原算子的参数。上述embedding层的嵌入向量包括多种维度,例如32维、16维和12维。每一种维度的嵌入向量需要对应一个还原算子,相同维度的嵌入向量共享同一个还原算子,从而充分利用内存,减少内存消耗。例如上述第一维度是64维,在根据训练数据获取多个12维的嵌入向量之后,通过同一个还原算子将12维的嵌入向量还原到64维。

第二方面,本申请提供一种模型压缩装置,其特征在于,包括:

统计模块,用于获取模型的嵌入层的各个嵌入向量的ID在模型的待训练的数据集中出现的频率;

处理模块,用于根据各个嵌入向量的ID的频率将ID划分为第一集合和第二集合;

处理模块,还用于对第一集合中的各个ID对应的嵌入向量的第一维度使用第一压缩算法进行压缩,得到第一集合中各个ID对应的嵌入向量的第二维度,以及分别对第二集合中各个ID对应的嵌入向量的第一维度使用第二压缩算法进行压缩,得到第一集合中各个ID对应的嵌入向量的第三维度;最后分别将嵌入层中属于第一集合的各个ID对应的嵌入向量由第一维度压缩为第二维度,分别将嵌入层中属于第二集合的各个ID对应的嵌入向量由第一维度压缩为第三维度,以实现对嵌入层的压缩。

在一种可能的实现方式中,上述处理模块具体用于:根据各个嵌入向量的ID在数据集中出现的频率将ID划分为n个区间,从n个区间的每个区间中按照频率从低到高分别获取第一比例的ID,得到上述第一集合,则第二集合包括除第一集合中的ID之外的ID。其中,第i个区间中任意一个ID对应的频率大于第i-1个区间中任意一个ID对应的频率,n为大于等于2的正整数,i为大于等于1小于等于n的整数。

在一种可能的实现方式中,上述处理模块具体用于:根据压缩率、各个嵌入向量的ID在上述数据集中出现的频率和区间数量n,将嵌入向量的ID划分为n个区间;其中,压缩率是指将上述嵌入层压缩后的大小与压缩前的大小的比值。

在一种可能的实现方式中,上述第一集合中所包括的ID数量与第二集合中所包括的ID数量的比值满足第二比例,且第二集合中任意一个ID在上述数据集出现的频率大于第一集合中任意一个ID在数据集中出现的频率。

在一种可能的实现方式中,上述第二压缩算法包括为上述n个区间中各个区间设定的维度,且每个区间所设定的维度不同;上述处理模块具体用于:根据第二压缩算法包括的为各个区间设定的维度,确定第二集合中各个区间所包含的各个ID对应的嵌入向量的第三维度。

在一种可能的实现方式中,处理模块具体用于:为第一集合中各个ID构建不同维度的多个向量,并为每个向量初始化一个权重,该权重用于指示向量在模型训练中的贡献;根据上述数据集对第一模型进行训练,确定训练后第一集合中各个ID对应的不种维度的多个向量的权重;将第一ID对应的多个维度的向量中权重最大的向量的维度作为第一ID对应的嵌入向量的维度;其中,第一ID是第一集合中的任意一个ID;第一模型包括第一集合中各个ID对应的多中维度的向量和第二集合中各个ID对应的嵌入向量根据第三维度初始化后的向量。

在一种可能的实现方式中,上述数据集包括第一训练集和第二训练集,上述处理模块具体用于:根据第一训练集对第一模型进行前向传播,得到第一损失值,根据第一损失值进行反向传播,对第一模型的部分模型参数进行更新,第一模型的部分模型参数包括第一模型中除上述第一集合中的ID对应的各种维度的向量对应的权重之外的参数,例如模型原本包括的权重w;根据第二训练集对第一模型进行前向传播,得到第二损失值,根据第二损失值进行反向传播,对第一集合中的ID对应的各种维度的向量对应的权重进行更新。

在一种可能的实现方式中,上述第一模型还包括还原算子,上述还原算子用于将嵌入层输出的第二维度和/或第三维度的向量转换到第一维度,该还原算子在根据上述数据集对第一模型进行训练的过程中同样会得到训练。

第三方面,本申请提供一种包括处理器和存储器,所述存储器中存储计算机程序指令,所述处理器执行所述计算机程序指令以实现如上述第一方面或第一方面任一种可能实现方式中所述方法的操作步骤。

第四方面,本申请提供了一种计算机程序产品,当该计算机程序产品在服务器上运行时,使得服务器执行如上述第一方面或第一方面任一种可能实现方式中所述方法的操作步骤。

第五方面,本申请提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当所述指令在服务器上运行时,使得计算设备执行如上述第一方面或第一方面任一种可能实现方式中所述方法的操作步骤。

附图说明

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

图1为本申请实施例提供的一种分布式训练系统的架构示意图;

图2为本申请实施例提供的一种模型压缩方法的流程示意图;

图3为本申请实施例提供的一种嵌入向量还原过程的示意图;

图4为本申请实施例提供的一种模型压缩装置的示意图;

图5为本申请实施例提供的一种计算设备的示意图。

具体实施方式

下面将结合附图,对本申请中的技术方案进行描述。

图1是本申请实施例提供的一种分布式训练系统的架构示意图,该分布式训练系统架构为参数服务器(parameter server,PS)-工作服务器(worker)架构,PS架构包括一个参数服务器100和k个工作服务器200,其中,k大于或等于2。在进行模型训练前,将初始化后的模型参数加载到参数服务器。在进行模型训练时,参数服务器将初始化后的模型参数发送给各个工作服务器,每个工作服务器从参数服务器得到的是模型参数相同的完整的模型。其中,模型参数主要包括模型的权重w。然后各个工作服务器获取各自对应的一个批次(batch)的训练数据,根据训练数据和模型参数对模型进行训练。其中,各个工作服务器获取到的训练数据各不相同,例如,工作服务器1获取到训练数据1,工作服务器2获取到训练数据2,工作服务器k获取到训练数据k。工作服务器通过前向传播得到损失值(loss),并根据损失值进行反向传播,得到各个权重w对应的梯度,并将得到的各个权重对应的梯度发送给参数服务器。其中,由于各个工作服务器采用的是不同的训练数据(数据集中不同batch的数据)对模型进行训练,因此对于同一个权重,不同工作服务器计算得到的梯度不相同。参数服务器在接收到各个工作服务器发送的各个权重对应的梯度后,根据各个权重对应的梯度更新模型参数。参数服务器在更新模型参数后,分布式训练系统继续执行如下步骤:

(1)参数服务器将更新后的模型参数分别发送给各个工作服务器;

(2)工作服务器获取新的训练数据,根据更新后的模型参数和新的训练数据再次进行前向传播和反向传播,得到各个权重对应的梯度,并将各个权重对应的梯度发送给参数服务器;

(3)参数服务器接收到各个工作服务器发送的各个权重对应的梯度后,根据各个权重对应的梯度再次更新模型参数,然后再执行上述步骤(1)。参数服务器和工作服务器循环执行上述步骤多次,直至模型收敛,得到训练好的模型。

上述图1所示的分布式训练系统在训练过程中,参数服务器先将模型参数加载到内存中,并且参数服务器需要多次将更新后的模型参数发送给各个工作服务器,如果模型参数的数据量较大,则会占用参数服务器和工作服务器大量内存空间,并导致参数服务器和工作服务器之间的通信时延较长,增加模型训练的时间。特别是在推荐和搜索领域,推荐模型的参数量巨大,一个推荐模型的模型参数的数据量通常会达到太字节(Terabyte,TB),如果通过上述分布式训练系统进行推荐模型的训练,模型参数会占用参数服务器和工作服务器大量的内存,并极大增加参数服务器和工作服务器之间的通信量,严重影响模型的训练效率。

为了降低模型参数的数据量、降低分布式训练中不同服务器之间的通信量,可以对模型进行压缩,例如对模型的embedding层进行压缩,embedding层包括m个n维的嵌入向量,可以将embedding层的m个向量分别进行压缩,将n维的嵌入向量压缩到更低维度,以降低模型参数的数据量,减少不同服务器之间的通信量,降低通信时延,从而提高模型训练效率。

本申请提供一种模型压缩方法,用于对模型中的embedding层的嵌入向量进行压缩。embedding层的每个嵌入向量对应有各自的标识(Identity,ID),例如embedding层包括m个n维的嵌入向量,ID分别为1~m,每个嵌入向量可以代表一个用户的用户特征或者一个商品的商品特征。该模型压缩方法中,首先根据用于训练模型的数据集中的ID确定数据集中embedding层的各个ID出现的频率。应理解,上述数据集中包括embedding层中的各个ID,每个ID会在数据集中出现一次或者多次;在对模型进行训练时,每次输入到模型中的是数据集中的多个ID,然后根据ID从embedding层获取各个ID对应的嵌入向量输入到模型中,进而对模型进行训练。

在确定数据集中embedding层的各个ID的频率之后,根据各个ID的频率将embedding层的ID划分为第一集合和第二集合,对于两个集合中各个ID对应的嵌入向量,分别采用不同的方案确定各个嵌入向量的压缩维度。其中,压缩维度是指将嵌入向量进行压缩后的维度,压缩维度小于或等于第一维度,第一维度是指模型训练所需的维度,即能够满足模型训练的嵌入向量的维度。在确定各个ID对应的嵌入向量的压缩维度之后,根据确定的各个ID对应的压缩维度初始化各个嵌入向量,得到压缩后的嵌入层。例如,通过第一压缩算法确定第一集合中各个ID对应的嵌入向量的第二维度,通过第二压缩算法确定第二集合中各个ID对应的嵌入向量的第三维度;然后根据第一集合中各个ID对应的嵌入向量的第二维度初始化第一集合中各个ID对应的嵌入向量,根据第二集合中各个ID对应的嵌入向量的第三维度初始化第二集合中各个ID对应的嵌入向量。

如图2所示,图2是本申请实施例提供的一种模型压缩方法的流程示意图,该方法包括S201至S204。

S201.获取模型的嵌入层的各个嵌入向量的标识在模型的待训练的数据集中出现的频率,根据各个嵌入向量的ID的频率将ID划分为第一集合和第二集合。

本申请实施例中,需要对模型的embedding层的嵌入向量进行压缩,该模型的embedding层理论上包括m个n维的嵌入向量,每个嵌入向量对应一个ID。用于对模型进行训练的数据集中包括m个嵌入向量对应的ID,每个ID在数据集中出现的次数不同。在根据训练集中的ID训练模型时,模型每次根据获取的多个ID从embedding层中获取对应的嵌入向量,用于对模型进行训练。

上述embedding层中的每个嵌入向量的第一维度是n维,才能够满足模型训练的需求。但为了在通过图1所示的分布式训练系统训练模型时,降低参数服务器和工作服务器之间的通信量,本申请实施例中,对embedding层的每个n维的嵌入向量进行压缩,使得部分或者全部的嵌入向量的维度小于n维。例如嵌入向量的第一维度是64维,将embedding层部分或者全部的嵌入向量压缩到小于64维,从而达到降低embedding层数据量,即达到压缩模型的目的,能够减少上述图1中参数服务器和工作服务器之间的通信量。

本申请实施例对模型的embedding层中的部分或者全部嵌入向量进行压缩时,对嵌入向量进行压缩包括第一压缩算法对一部分ID对应的嵌入向量进行压缩,以及根据第二压缩算法确定另一部分ID对应的嵌入向量的压缩维度,根据确定的压缩维度对嵌入向量进行压缩。具体的,根据embedding层的各个嵌入向量的ID在数据集中出现的频率,可以将嵌入向量的ID划分为第一集合和第二集合。其中,第一集合包括需要根据第一压缩算法确定压缩维度的ID,第二集合包括需要根据第二压缩算法确定压缩维度的ID。

在一种可能的实现方式中,计算设备能够通过下述方法确定第一集合中包括的ID和第二集合中包括的ID。首先获取上述数据集中出现的各个ID,在确定嵌入向量的各个ID在数据集中出现的频率之后,根据压缩率、各个ID在数据集中出现的频率和区间数量n,将嵌入向量的ID划分为的n个区间,其中,n为大于或等于2的正整数。如果出现频率最低的ID对应的频率是f1,出现频率最高的ID对应的频率是f2,区间数量n等于3,则三个区间分别为[f1,a]、(a,b]和(b,f2]。其中,a,b为未知的频率阈值,能够根据压缩率进行求解。压缩率是指模型的嵌入层压缩后的大小与压缩前的大小的比值。即,将嵌入层压缩后,嵌入层的嵌入向量所占存储空间的大小与压缩前所占存储空间的大小的比值。上述第二压缩算法中包括各个区间中属于第二集合的各个ID对应的压缩维度。

对于上述多个区间中的每个区间,将每个区间中的ID按照频率从高到低排序,从各个区间中获取第一比例的频率较低的ID,即从每个区间中按照频率从低到高分别获取第一比例的ID,得到第一集合,则第二集合是包括除所述第一集合中的ID之外的ID。

下面介绍如何确定上述频率阈值a和b。继续以上述区间数量n等于3为例,如果压缩率为r,区间[f1,a]中ID的数量是x,区间(a,b]中ID的数量是y,区间(b,f2]中ID的数量是z,上述第一比例为p,原嵌入向量的维度为64,区间(b,f2]中属于第二集合的ID对应的嵌入向量的压缩维度是32,而区间(a,b]中属于第二集合的ID对应的嵌入向量的压缩维度是16,区间[f1,a]中属于第二集合的ID对应的嵌入向量的压缩维度是12,则根据如下公式能够根据压缩率能够确定上述a和b两个频率阈值。

上述pm表示第一集合所包括的ID的数量,(1-p)z表示区间(b,f2]中属于第二集合的ID的数量,(1-p)y表示区间(a,b]中属于第二集合的ID的数量,(1-p)x表示区间[f1,a]中属于第二集合的ID的数量。通过上述公式能够确定x、y和z的值,进而能够确定上述频率阈值a和b。在确定上述a和b之后,根据a和b将数据集中的ID划分为三个区间,即可确定上述各个区间所包括的ID,然后从各个区间获取第一比例的嵌入向量,得到上述第一集合和第二集合。需要说明的是,上述公式中的64pm是第一集合中包括的ID对应的嵌入向量在没有被压缩时所占用的存储空间,如果在第一集合中包括的ID对应的嵌入向量没有被压缩,第二集合中包括的ID对应的嵌入向量被压缩的情况下,嵌入层的嵌入向量的压缩率满足上述公式,则在第一集合和第二集合的中的ID对应的嵌入向量均被压缩时,嵌入层的嵌入向量的压缩率也必然满足上述公式。

在另一种可能的实现方式中,在确定各个嵌入向量的ID对应的频率之后,可以根据各个ID出现的频率将嵌入向量划分为第一集合和第二集合,其中第一集合中任意一个ID在数据集中出现的频率低于第二集合中任意一个ID在数据集中出现的频率,且第一集合中包括的ID数量与数据集中包括的ID数量的比值满足第二比例。示例性的,如果embedding层中包括1000个嵌入向量,第二比例为30%,在确定各个ID的频率之后,将各个ID按照出现的频率从高到低排列,则第一集合包括排列在后的300个ID,第二集合包括排列在前的700个ID。

S202.分别对第一集合中各个ID对应的嵌入向量的第一维度使用第一压缩算法进行压缩,得到的第二维度,分别对第二集合中各个ID对应的嵌入向量的第一维度使用第二压缩算法进行压缩,得到第三维度。

其中,上述第二维度和第三维度均小于第一维度,上述第二压缩算法包括为上述n个区间中的各个区间设定的维度,且各个区间所设定的维度不同。

在确定第一集合和第二集合各自包括的ID之后,对于第二集合中各个区间所包括的各个ID对应的嵌入向量,采用第二压缩算法确定各个ID对应的嵌入向量在压缩后的维度。其中,第二集合中频率越高的ID对应的嵌入向量,压缩后的维度越高。例如,嵌入向量的第一维度是64维,上述(b,f2]区间中的ID由于在数据集中出现的频率较高,第二集合中属于该区间的ID对应的嵌入向量的维度可以不进行压缩,或者为该区间设定的维度大于为其他区间设定的维度,即第二集合中属于该区间的ID对应的嵌入向量在压缩后的维度大于其他区间中的ID对应的嵌入向量在压缩后的维度;比如为区间(b,f2]设定的维度是32,则区间(b,f2]中属于第二集合的ID对应的嵌入向量的第三维度是32,而为区间(a,b]设定的维度是16,则区间(a,b]中属于第二集合的ID对应的嵌入向量的第三维度是16;为区间[f1,a]设定的维度是12,则区间[f1,a]中属于第二集合的ID对应的嵌入向量的第三维度是12。

本申请实施例中,对于第一集合中的任意一个ID,构建其对应的不同维度的多个向量,即为第一集合中的每个ID初始化多个向量;在构建各个ID对应的不同维度的多个向量之后,为每个向量分别初始化一个权重。以为一个ID初始化三个不同维度的向量为例,三个向量的权重分别为α

应理解,上述第二维度和第三维度的值仅用作举例,不能理解为具体限定,第二维度和第三维度还可以是其他数值,对于第二集合中属于区间(b,f2]的ID,该区间对应的第三维度最大值等于第一维度。上述为第一集合中一个ID初始化的3个向量的维度可以与第二集合中三个区间对应的维度相同。例如上述第二集合中属于三个区间的ID对应设定的维度分别是12维、16维和32维,则为第一集合中一个ID构建的三个向量的维度分别为12维、16维和32维。

优选地,初始化第一集合中一个ID对应的多个向量时,可以仅初始化维度最高的一个向量,其他维度较低的向量取维度最高的分支向量中的部分数值,这样其他维度较低的向量不用占用另外的内存空间,在需要使用向量时,读取维度最高的分支向量对应位置的数据即可,从而实现分支向量的内存共享,避免因为过多分支向量导致的额外的内存占用。例如,第一集合中的一个ID对应的三个向量的维度分别是12维、16维和32维,则初始化一个32维的向量作为该ID对应的第一个向量,将该32维的向量中的前12维作为该ID对应的第二个向量,将该32维的向量中奇数位或者偶数位的16位元素作为该ID对应的第三个向量。

在为第一集合中的各个ID初始化不同维度的多个向量,为第二集合中的各个ID初始化对应的嵌入向量之后,得到第一模型,该第一模型的embedding层包括第一集合中各个ID对应的多个向量和第二集合中各个ID对应的嵌入向量。在得到第一模型之后,用数据集中的训练数据对第一模型进行训练,在训练的过程中更新第一集合中各个ID对应的向量的权重。在完成一个或多个epoch的训练之后,对于第一集合中的任意一个ID,根据该ID对应的各个向量的权重,确定该ID对应的嵌入向量。具体的,第一集合中一个ID对应的多个向量中,权重越大的向量,表示该向量对模型训练的贡献越大,选择权重最大的一个向量作为该ID对应的嵌入向量,删除第一模型中该ID对应的其他向量。

例如,第一集合中有一个ID为h,该ID对应的三个向量分别是第一向量、第二向量和第三向量。其中,第一向量的维度是32维,第二向量的维度是16维,第三向量的维度是12维;三个向量的权重分别为α

在确定第一集合中各个ID对应的嵌入向量之后,即得到压缩后的embedding层,该embedding层包括第一集合中各个ID对应的嵌入向量和第二集合中各个ID对应的嵌入向量。该embedding层中部分或者全部的嵌入向量的维度小于第一维度。

在一种可能的实现方式中,上述在通过数据集中的训练数据对第一模型进行训练时,将数据集中的训练数据分为第一训练集和第二训练集,然后根据第一训练集对第一模型进行训练时,更新模型参数,该模型参数包括推荐模型各个网络层的权重w和embedding向量,即第一模型中除第一集合中的ID对应的各个向量的权重之外的参数,不更新第一集合中的ID对应的各个向量的权重。根据第二训练集对第一模型进行训练时,更新第一集合中的ID对应的各个向量的权重,不更新第一模型中的其他参数。

S203.根据第二维度和第三维度确定嵌入层,得到第二模型。

上述根据第一压缩算法确定第一集合中的各个ID对应的嵌入向量的第二维度时,会为第一集合中的每个ID初始化不同维度的多个向量;在根据第二压缩算法确定第二集合中各个ID对应的嵌入向量的第三维度的过程中,会为第二集合中每个ID初始化一个嵌入向量,从而得到第一模型的embedding层,该第一模型的embedding层包括第一集合中各个ID对应的多个向量和第二集合中各个ID对应的嵌入向量。在根据数据集对第一模型进行训练时,第一模型的embedding层会通过模型训练得到更新;在根据数据集对第一模型进行训练后,能够确定第一集合中各个ID对应的嵌入向量和第二集合中各个ID对应的嵌入向量,从而得到第二模型。在第二模型中,第一集合中的任意一个ID对应的嵌入向量是模型训练后,该ID对应的不同维度的多个向量中权重最大的向量,第二集合中任意一个ID对应的嵌入向量是上述初始化的一个嵌入向量经过模型训练更新后的向量。

S204.通过分布式训练系统对第二模型进行训练,得到训练好的第二模型。

在得到第二模型之后,通过如图1所述的分布式训练系统对第二模型进行训练,首先将第二模型加载到参数服务器。在对第二模型进行训练时,参数服务器将第二模型发送给各个工作服务器,每个工作服务器从参数服务器得到的相同的完整的第二模型。然后各个工作服务器获取各自对应的一个批次(batch)的训练数据对第二模型进行训练。工作服务器通过前向传播得到损失值,并根据损失值进行反向传播,得到梯度数据,该梯度数据包括各个模型参数对应的梯度,然后将得到的梯度数据发送给参数服务器。其中,由于各个工作服务器采用的是不同的训练数据(数据集中不同batch的数据)对第二模型进行训练,因此对于同一个模型参数,不同工作服务器计算得到的梯度不相同。参数服务器在接收到各个工作服务器发送的梯度数据后,根据梯度数据更新模型参数。参数服务器在更新模型参数后,得到更新后的第二模型,分布式训练系统继续执行如下步骤:

(1)参数服务器将更新后的第二模型分别发送给各个工作服务器;

(2)各个工作服务器获取新的训练数据,对更新后的第二模型再次进行前向传播和反向传播,得到模型参数对应的梯度数据,并将梯度数据发送给参数服务器;

(3)参数服务器接收到各个工作服务器发送的梯度数据之后,根据各个工作服务器发送的梯度数据再次更新模型参数,得到更新后的第二模型。

参数服务器和工作服务器循环执行上述步骤(1)~(3)多次,直至模型收敛,得到训练好的第二模型。

因为压缩后的embedding层的部分或者全部嵌入向量的维度小于或等于第一维度,因此降低了embedding层的参数数量,从而降低了模型的参数量。在基于上述图1所示的分布式训练系统训练模型时,能够减少模型参数对参数服务器和工作服务器内存的占用;上述训练过程中,参数服务器需要多次将更新后的模型发送给各个工作服务器,本方案能够降低模型的参数量,从而减少上述训练过程中参数服务器和各个工作服务器之间的通信量,减少通信时延,提高模型训练效率。另外,对于上述第一集合中出现频率较低的嵌入向量,通过构建对应的不同维度的多个向量,将这多个向量加入到模型中进行训练,确定对模型训练贡献最大的向量作为模型的嵌入向量,不仅能降低模型的数据量,还能降低压缩后的精度损失。

本申请实施例中,在对上述第一模型进行训练时,可以在一个计算设备中实现对第一模型的训练,也可以通过图1所示的分布式训练系统实现对第一模型的训练。

在一个计算设备中对第一模型进行训练时,先根据第一训练集中第一批次(batch)的数据进行前向传播,计算得到第一损失值,根据第一损失值进行反向传播,更新上述模型参数;然后根据第二训练集中第一batch的数据进行前向传播,计算得到第二损失值,根据第二损失值进行反向传播,更新第一集合中的各个ID对应的各个向量的权重。再根据第一训练集中第二batch的数据进行前向传播,计算得到第三损失值,根据第三损失值进行反向传播,再次更新上述模型参数;然后根据第二训练集中第二batch的数据进行前向传播,计算得到第四损失值,根据第四损失值进行反向传播,再次更新第一集合中各个ID对应的各个向量的权重。如此循环,直至第一训练集和第二训练集中的数据均参与模型训练,完成一次epoch训练之后,对于第一集合中的一个ID,根据该ID对应的各个向量对应的权重,将最大权重对应的向量确定为该ID对应的嵌入向量。

在通过图1所示的分布式训练系统对第一模型进行训练时,参数服务器执行上述S201以及S202中初始化第二结集合中各个ID对应的嵌入向量和第一集合中各个ID对应的多个向量的操作,得到上述第一模型。在得到上述第一模型之后,参数服务器将第一模型发送给各个工作服务器。各个工作服务器从第一训练集中获取各自对应的一个batch的数据,然后进行前向传播得到一个损失值loss,并根据损失值进行反向传播,得到上述模型参数对应的梯度,然后各个工作服务器将得到的梯度发送给参数服务器。参数服务器在接收到各个工作服务器发送的梯度后,根据各个梯度更新上述模型参数。参数服务器在更新推荐模型的参数后,分布式训练系统继续执行如下步骤:

(1)参数服务器将更新模型参数后的模型分别发送给各个工作服务器;

(2)工作服务器从第二训练集中获取各自对应的一个batch的数据,然后进行前向传播得到一个损失值,并根据损失值进行反向传播,得到上述第一集合中的ID对应的各个向量的权重对应的梯度,并将各个向量的权重对应的梯度发送给参数服务器;

(3)参数服务器在接收到各个工作服务器发送的梯度后,根据各个权重对应的梯度更新第一集合中的ID对应的各个向量的权重;

(4)参数服务器将更新后的模型分别发送给各个工作服务器;

(5)工作服务器再从第一训练集中获取各自对应的一个batch的数据,然后进行前向传播得到一个损失值,并根据损失值进行反向传播,得到模型参数对应的梯度,然后各个工作服务器将得到的梯度发送给参数服务器;

(6)参数服务器在接收到各个工作服务器发送的梯度后,根据各个梯度更新上述模型参数。然后再执行上述步骤(1),参数服务器和工作服务器循环执行上述步骤,直至第一训练集和第二训练集中的数据均参与模型训练,完成一次epoch训练。

如图3所示,上述压缩后的embedding层中的部分或者全部嵌入向量的维度小于第一维度,根据数据集中的ID从embedding层取出的嵌入向量的维度并不是第一维度,而模型训练和推理时需要第一维度的向量,因此在根据训练集中的ID从embedding层获取对应的嵌入向量之后,需要将嵌入向量还原至第一维度。例如第一维度是64维,压缩后的嵌入向量的维度是32维、16维或12维,则在从embedding层获取对应的嵌入向量后,需要将获取的嵌入向量全部还原维64维。本申请实施例中,在嵌入层之后增加还原模块,该还原模块可采用矩阵乘、逆卷积或空洞卷积等可以放大维度的还原算子实现,在根据上述第一训练集和第二训练集训练第一模型之前,先初始化还原算子,在训练第一模型的过程中更新还原算子。

需要说明的是,上述embedding层的嵌入向量包括多种维度,例如32维、16维和12维。每一种维度的嵌入向量需要对应一个还原算子,相同维度的嵌入向量共享同一个还原算子,从而充分利用内存,减少内存消耗。例如第一维度是64维,在根据训练数据获取多个12维的嵌入向量之后,通过同一个还原算子将12维的嵌入向量还原到64维。

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

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

上文结合附图详细介绍了本申请提供的模型压缩方法。下面结合图4和图5,描述本申请实施例所提供的进行模型压缩的装置与计算设备。参见图4,图4是本申请实施例提供的一种模型压缩装置的示意图,该模型压缩装置400包括统计模块410和处理模块420。其中,

统计模块410用于统计嵌入embedding层的各个嵌入向量的ID在数据集中出现的频率,处理模块420用于根据各个嵌入向量的ID的频率将ID划分为第一集合和第二集合;对第一集合中的各个ID对应的嵌入向量的第一维度使用第一压缩算法进行压缩,得到第一集合中各个ID对应的嵌入向量的第二维度,以及分别对第二集合中各个ID对应的嵌入向量的第一维度使用第二压缩算法进行压缩,得到第一集合中各个ID对应的嵌入向量的第三维度;最后分别将嵌入层中属于第一集合的各个ID对应的嵌入向量由第一维度压缩为第二维度,分别将嵌入层中属于第二集合的各个ID对应的嵌入向量由第一维度压缩为第三维度,以实现对嵌入层的压缩。

具体的,上述处理模块420根据第一压缩算法和第二压缩算法确定各个ID对应的嵌入向量的压缩维度的方法可以参照上述方法实施例中相关描述,在此不再赘述。

可选地,上述处理模块420根据各个嵌入向量的ID的频率将ID划分为第一集合和第二集合,具体包括:处理模块420根据各个嵌入向量的ID在数据集中出现的频率将ID划分为n个区间,其中,第i个区间中任意一个ID对应的频率大于第i-1个区间中任意一个ID对应的频率,i为大于等于1小于等于n的整数;从n个区间的每个区间中按照频率从低到高分别获取第一比例的ID,得到第一集合,则第二集合包括除第一集合中的ID之外的ID。

可选地,上述处理模块420根据各个嵌入向量的ID在数据集中出现的频率将所述ID划分为n个区间,具体包括:根据压缩率、各个嵌入向量的ID在上述数据集中出现的频率和区间数量n,将嵌入向量的ID划分为n个区间;其中,压缩率是指将上述嵌入层压缩后的大小与压缩前的大小的比值。具体的,处理模块420将各个嵌入向量的ID根据压缩率和区间数量划分为第一集合和第二集合的方法可以参照上述S201中的相关描述,在次不再赘述。

可选地,上述第二压缩算法包括为上述n个区间中各个区间设定的维度,且每个区间所设定的维度不同;上述处理模块具体用于:根据第二压缩算法包括的为各个区间设定的维度,确定第二集合中各个区间所包含的各个ID对应的嵌入向量的第三维度。

可选地,上述处理模块420根据第一压缩算法确定所述第一集合中各个ID对应的嵌入向量的第三维度,具体包括:为第一集合中各个ID构建不同维度的多个向量,并为每个向量初始化一个权重,该权重用于指示向量在模型训练中的贡献;根据上述数据集对第一模型进行训练,确定训练后第一集合中各个ID对应的不种维度的多个向量的权重;将第一ID对应的多个维度的向量中权重最大的向量的维度作为第一ID对应的嵌入向量的维度;其中,第一ID是第一集合中的任意一个ID;第一模型包括第一集合中各个ID对应的多中维度的向量和第二集合中各个ID对应的嵌入向量根据第三维度初始化后的向量。具体的,处理模块420将根据第一压缩算法和第二压缩算法确定各个ID对应的嵌入向量的压缩维度的方法可以参照上述S201中的相关描述,在次不再赘述。

参见图5,图5是本申请实施例提供的一种计算设备500的示意图,计算设备500包括:一个或者多个处理器510、通信接口520以及存储器530,所述处理器510、通信接口520以及存储器530通过总线540相互连接,其中,

处理器510执行各种操作的具体实现可参照上述图2所对应的方法实施例中所执行的具体操作。例如,处理器510用于实现上述图2中S201~S204中的操作,在此不再赘述。

处理器510可以有多种具体实现形式,例如,处理器510可以包括中央处理器(central processing unit,CPU)以及一个或多个图像处理器(graphics processingunit,GPU),其中,GPU用于实现上述S202中训练第一模型的过程,CPU用于实现上述方法实施例中除训练第一模型之外的操作。处理器510还可以包括其他硬件芯片的组合。上述硬件芯片可以是ASIC,可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD),现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic arraylogic,GAL)或其任意组合。

通信接口520可以为有线接口或无线接口,用于与其他模块或设备进行通信,有线接口可以是以太接口、局域互联网络(local interconnect network,LIN)等,无线接口可以是蜂窝网络接口或使用无线局域网接口等。本申请实施例中通信接口520具体可用于获取用户设置的压缩率、区间数量、上传的数据集等。

存储器530可以是非易失性存储器,例如,只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。存储器530也可以是易失性存储器,易失性存储器可以是随机存取存储器(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)。

存储器530也可用于存储程序代码和数据,例如数据集和模型参数等,以便于处理器510调用存储器530中存储的程序代码执行上述图2所对应的方法实施例中的操作步骤。此外,计算设备500可能包含相比于图5展示的更多或者更少的组件,或者有不同的组件配置方式。

总线540可以是快捷外围部件互连标准(peripheral component interconnectexpress,PCIe)总线,或扩展工业标准结构(extended industry standard architecture,EISA)总线、统一总线(unified bus,Ubus或UB)、计算机快速链接(compute express link,CXL)、缓存一致互联协议(cache coherent interconnect for accelerators,CCIX)等。总线540可以分为地址总线、数据总线、控制总线等。总线540除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

可选地,计算设备500还可以包括输入/输出接口550,输入/输出接口550连接有输入/输出设备,用于接收输入的信息,输出操作结果。

具体地,计算设备500执行各种操作的具体实现可参照上述方法实施例中S201~S202执行的具体操作,在此不再赘述。

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

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

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

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

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

相关技术
  • 一种超声设备扫查数据的坐标变换方法、装置及相关设备
  • 一种神经网络压缩方法、装置、电子设备及存储介质
  • 一种压缩文件管理方法、装置、计算机设备及存储介质
  • 神经网络模型压缩方法、装置和计算机设备
  • 神经网络模型压缩方法、装置和计算机设备
  • 空间解相关方法及设备、空间重相关方法及设备、数据压缩装置以及数据解压缩装置
  • 目标检测模型的压缩方法、检测方法、装置及相关设备
技术分类

06120116496993