分布式计算系统、方法及存储介质与流程

文档序号:16067454发布日期:2018-11-24 12:48阅读:297来源:国知局

本发明涉及计算机技术,尤其涉及一种分布式计算系统、方法及存储介质。

背景技术

人工智能得到快速发展,广泛应用到各种行业中。以商品推荐的应用场景为例,根据用户的行为数据,采用机器学习的方法训练出预测用户对不同商品的评分的模型,从而能够计算出用户对不同商品的评分的排序,选取评分高的商品向用户推荐,能够帮助用户迅速定位感兴趣的商品,实现精准、高效地产品营销。

例如,目前的商品推荐依赖于大数据处理技术,需要对采集的海量的行为数据进行分析处理,以训练具有评分预测性能的模型,这对承担训练任务的计算系统的资源(包括内存资源、通信资源等)开销提出很高的要求。

然而,相关技术提供的计算系统中单个节点的资源有限,且计算系统的升级往往具有滞后性,单个节点的资源有限的现状与模型训练的计算需要高资源开销之间的矛盾,成为难以解决的技术问题。



技术实现要素:

本发明实施例提供一种分布式计算系统、方法及存储介质,能够以资源集约的方式完成计算任务。

本发明实施例的技术方案是这样实现的:

第一方面,本发明实施例提供一种分布式计算系统,包括:

至少两个计算节点和至少两个参数服务节点;其中,

所述计算节点,用于根据训练数据的子集包括的用户,初始化用户矩阵中对应所述用户的向量,得到由所初始化的向量构成的用户子矩阵;

所述计算节点,用于根据所述训练数据的子集、从所述参数服务节点获取的项目子矩阵,迭代计算所述用户子矩阵、以及所述项目子矩阵,将每次迭代计算之后得到的项目子矩阵传输至相应的参数服务节点;

所述参数服务节点,用于初始化部分项目对应的向量,得到由所初始化的向量构成的项目子矩阵,所述部分项目为所述训练数据包括的项目中的部分项目;

所述参数服务节点,用于根据所述计算节点传输的项目子矩阵,更新所述参数服务节点所存储的项目子矩阵。

第二方面,本发明实施例提供一种分布式计算方法,应用于包括至少两个计算节点和至少两个参数服务节点的分布式计算系统;包括:

所述计算节点根据训练数据的子集包括的用户,初始化用户矩阵中对应所述用户的向量,得到由所初始化的向量构成的用户子矩阵;

所述计算节点根据所述训练数据的子集、从所述参数服务节点获取的项目子矩阵,迭代计算所述用户子矩阵、以及所述项目子矩阵,将每次迭代计算之后得到的项目子矩阵,传输至相应的参数服务节点;

所述参数服务节点初始化部分项目对应的向量,得到由所初始化的向量构成的项目子矩阵,所述部分项目为所述训练数据包括的项目中的部分项目;

所述参数服务节点根据所述计算节点传输的项目子矩阵,更新所述参数服务节点所存储的项目子矩阵。

第三方面,本发明实施例提供一种存储介质,存储有可执行程序,所述可执行程序被处理器执行时实现以下的操作:

当处于计算节点模式时,根据训练数据的子集包括的用户,初始化用户矩阵中对应所述用户的向量,得到由所初始化的向量构成的用户子矩阵;

当处于计算节点模式时,根据所述训练数据的子集、从所述参数服务节点获取的项目子矩阵,迭代计算所述用户子矩阵、以及所述项目子矩阵,将每次迭代计算之后得到的项目子矩阵传输至相应的参数服务节点;

当处于参数服务节点模式时,初始化部分项目对应的向量,得到由所初始化的向量构成的项目子矩阵,所述部分项目为所述训练数据包括的项目中的部分项目;

当处于参数服务节点模式时,根据所述计算节点传输的项目子矩阵,更新所述参数服务节点所存储的项目子矩阵。

本发明实施例具有以下有益效果:

1)将项目矩阵和用户矩阵以子矩阵的方式分布式存储,降低了对单个节点的内存空间的占用,克服了相关技术对于单节点内存需要能够存储完整的用户矩阵和项目矩阵的限制,能够在内存资源有限的分布式计算系统中实现大规模的计算;

2)单个节点的通信开销被有效降低,消除了通信开销遇到网络带宽瓶颈的情况,有利于网络通信负载的均衡化,避免了因等待数据导致计算节点闲置的情况,提升了计算效率。

3)多个计算节点基于训练数据的子集对存储的用户子矩阵、以及项目子矩阵进行迭代计算,一方面,因为计算复杂度降低进而降低了对单个节点的计算资源的开销,降低了单个节点的计算复杂度,另一方面,计算节点并行计算的方式有效提升了计算效率。

附图说明

图1是本发明实施例提供的根据矩阵分解模型将评分矩阵分解为用户矩阵和项目矩阵的一个可选的示意图;

图2是本发明实施例提供的大数据平台的一个可选的结构示意图;

图3是本发明实施例提供根据矩阵分解模型将评分矩阵分解为用户矩阵和项目矩阵的一个示意图;

图4是本发明实施例提供的分布式计算系统200的一个可选的架构示意图;

图5是本发明实施例提供的分布式计算系统200的一个可选的结构示意图;

图6是本发明实施例提供的如图5所示的分布式计算系统200用于模型训练时的一个可选的处理示意图;

图7是本发明实施例提供的如图5所示的分布式计算系统200用于模型训练时的一个可选的处理示意图;

图8-1是本发明实施例提供的参数服务节点与计算节点之间传输项目矩阵的参数的一个可选的示意图;

图8-2是本发明实施例提供的参数服务节点与计算节点之间传输项目矩阵的参数的一个可选的示意图;

图9是本发明实施例提供的计算节点分批次与参数服务节点传输项目矩阵的处理示意图;

图10是本发明实施例提供的应用于一种分布式计算方法的流程示意图;

图11是本发明实施例提供的训练用于预测评分的模型的可选的流程示意图;

图12是本发明实施例提供的如图2所示的大数据平台200的一个可选的应用场景示意图。

具体实施方式

以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

对本发明进行进一步详细说明之前,对本发明实施例中涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释。

1)行为数据,包括用户(如序列号等形式的标识信息描述),用户产生评分行为的项目(如商品、文章、应用等,可以采用序列号等方式描述)、以及用户针对项目的兴趣度(本文中也称为评分),多个用户的行为数据构成行为数据集(本文中也称为训练数据);以线上商品为例,评分行为包括:浏览商品、收藏项目、购买商品和评论商品。

2)模型,即矩阵分解模型,也称为潜在语义模型(lfm,latentfactormodel),用于初始化评分矩阵,将用于表示训练数据的评分矩阵进行分解,形成用户矩阵与项目矩阵的乘积的模型。

3)矩阵分解(mf,matrixfactorization),将训练数据使用评分矩阵y表示,假设评分数据涉及m个用户对n个不同项目的评分,评分矩阵y的每个行向量对应一个用户对不同项目的评分,评分矩阵y的每个列向量对应一个项目所得到的不同用户的评分,使用矩阵分解模型初始化评分矩阵,即在评分矩阵中引入k(为预设值)个维度的特征,从而将评分矩阵y根据矩阵分解模型初始化为:用户-特征矩阵(简称用户矩阵)u和特征-项目矩阵v(简称项目矩阵)的乘积。

由于训练数据是用户的行为数据,而实际上用户不可能采集对全部项目的评分,对评分矩阵中的缺失值进行预测,也就是预测用户对未评分项目的评分,通过矩阵分解模型,将对缺失值的预测问题,转换为求解用户矩阵的参数和项目矩阵的参数的问题,也就是求解用户矩阵在k个维度的参数向量、以及项目矩阵在k个维度的参数向量的问题。

举例来说,参见图1,图1是本发明实施例提供的根据矩阵分解模型将评分矩阵分解为用户矩阵和项目矩阵的一个可选的示意图,对于给定的训练数据(包括所有的用户、所有的项目,以及每个用户产生评分行为的项目的评分),使用潜在语义模型对行为数据进行建模,得到如图1所示的模型(假设行为数据中有3个用户和4个项目的评分,被分解为用户矩阵(表示3个用户对3个维度的特征的兴趣度)和项目矩阵(表示4个项目在3个维度的特征的权重)。

以用户1对于项目1的评分y11为例,可以表示为:用户矩阵中用户1对应的行向量(u11,u12,u13)与项目矩阵中对应项目1的列向量(q11,q21,q31)的乘积。

4)训练,即模型训练,利用训练数据迭代计算模型的参数,即迭代计算用户矩阵u的参数uik和项目矩阵v中的参数vkj,直至满足迭代中止条件,如迭代计算达到预定次数或者参数收敛。

5)分布式计算:是将训练数据分解为多个子集,分配给分布式计算系统中的多个计算节点,由计算节点基于分配的训练数据的子集并行计算模型的参数,由于将计算任务分配给多个计算节点完成,因此分布式计算可以扩大计算规模,提高训练的效率。

6)参数服务节点架构:一种分布式计算实现机器学习的架构的分布式计算系统,主要由参数服务节点(ps,parameterserver)和计算节点(worker)组成,每种节点的数量至少为两个。

7)参数服务节点:在分布式计算系统中包括至少两个参数服务节点,每个参数服务节点可以由一台或多台服务器实现,当由一台服务器实现时也可以称为参数服务节点,负责存储、更新项目矩阵的子矩阵(下文中称为项目子矩阵)的参数,参数服务节点向计算节点提供参数读取、更新项目矩阵的参数的服务。

8)计算节点:每个计算节点可以由一台服务器或多台服务器实现,参数服务节点架构中包括多个计算节点。每个计算节点分配到训练数据中一个子集,子集中包括部分用户的行为数据),并从参数服务节点获取项目矩阵的参数(参数服务节点总是存储项目矩阵的最新的参数),使用训练数据更新用户矩阵中对应上述部分用户的参数、以及项目矩阵的部分项目(也就是前述的部分用户产生评分行为的项目)的参数的更新值,再把项目矩阵的参数的更新值传输给参数服务节点,参数服务节点结合各个计算节点传输的参数的更新值,更新参数服务节点本地存储的项目矩阵。

9)spark:基于映射-规约(map-reduce)节点实现的模型训练的分布式计算架构,涉及映射节点和规约节点,映射节点负责数据的过滤分发,规约节点负责数据的计算归并。

大数据平台广泛用于各行业的采集的用户的行为数据的处理,在必要时进行数据清洗和筛选,之后根据行为数据建立矩阵分解模型,来预测用户对不同项目的评分,评分反映了用户对项目感兴趣的程度,在项目推荐的业务场景中,根据项目的评分从高到低的顺序向用户推荐,能够支持有针对性地开展生产/营销活动,实现生产/营销的高效率和成本的节约化。

对训练得到上述的模型进行说明,作为基于训练数据训练模型的一个示例,参见图2,图2是本发明实施例提供的大数据平台的一个可选的结构示意图,涉及分布式计算系统200、数据采集系统300、实时计算系统400、离线计算系统500和资源调度600几个部分,下面分别进行说明。

数据采集系统300用于采集训练模型的训练数据(例如,对于项目推荐来说,训练数据可以包括:全部用户、全部项目、用户在线上产生浏览、购买、关注、放入购物车等等的各种行为的项目的列表),进行适当的处理。可以理解,对于训练数据,适当的处理可以包括:数据清洗和筛选,以过滤掉噪音数据(如取值在预定区间之外的明显不属实的数据)、超出有效期(如在半年前采集的数据),以及使得训练数据符合期望的分布等。

在本发明可选实施例中,对于采用用户的各种行为数据而言,提供用户授权和应用授权的机制以保护隐私。

分布式计算系统200用于根据训练数据以迭代计算模型的参数的方式训练模型,直至满足迭代中止条件。

实时计算系统400用于实现分布式计算系统200采用实时方式(也称为在线方式)训练机器学习模型,训练数据中的一个或一批记录(每个记录对应一个用户,包括用户对不同对象的评分)提交到分布式计算系统200时,分布式计算系统200在内存中实时加载所接收的一个或一批的记录并进行训练,根据训练结果(例如,评分的真实值与预测值之间的差异程度)实时计算模型的更新的参数。

离线计算系统500用于实现分布式计算系统200采用离线方式训练模型,分布式计算系统200将新接收的训练数据与所接收的历史训练数据在内存中全部加载,以迭代计算模型的更新的参数。

资源调度600用于对上述各系统分配计算资源如中央处理器(cpu)和图形处理器(gpu),并分配用于通信的带宽资源等。

就分布式计算系统200训练模型而言,以训练前述的用于评分的模型为例,需要采集用户对不同项目(如项目)的评分,形成用户对不同项目的评分数据,评分数据一个示例如下表1所示:

表1用户-项目评分数据

对于如表1所示的评分数据来说,基于评分数据可以建立由全部用户、全部项目、用户对不同项目评分的数据构成的评分矩阵,当然评分矩阵中不可避免地存在缺失值;评分矩阵根据矩阵分解模型初始化,即表示为:用户-特征矩阵与特征-项目矩阵(简称项目矩阵,表示不同特征的用户对不同项目的评分)的乘积。

作为评分矩阵分解的示例,参见图3,图3是本发明实施例提供根据矩阵分解模型将评分矩阵分解为用户矩阵和项目矩阵的一个示意图,设评分数据涉及m个用户对n个项目的评分,则使用评分矩阵y表示评分数据时,y的维度为:m×n;使用矩阵分解模型初始化评分矩阵,即在评分矩阵中引入k个维度的特征,从而将评分矩阵y分解为用户-特征矩阵(简称用户矩阵)u和特征-项目矩阵v(简称项目矩阵)的乘积的形式,即:

ym×n≈um×k×vk×n(1)

y的维度为:m×n,yij表示第i个用户对第j个项目的评分,yij表示为:

其中,uik表示用户i对特征k的评分,vkj表示项目j在特征k中的权重,k取值为1≤k≤k,i、j的取值均为正整数,1≤i≤m,1≤j≤n。

根据矩阵分解模型,把评分矩阵y初始化为用户矩阵u和项目矩阵v的乘积,用户矩阵u的维度为m×k,行向量ui是一个k维的向量,对应用户i对k个维度的特征的评分;项目矩阵v的维度为k×n,每一列对应一个k维的列向量vj,代表项目j在k个维度的权重;k是矩阵分解时指定的特征的维度,用户i对项目j的评分yij是ui和vj的乘积。

实际采集用户的评分数据涉及项目数量较多、且每个用户往往只对部分项目有评分,所以评分矩阵具有稀疏性,即评分矩阵中的部分元素的取值是缺失的(用0表示),称为缺失值,根据上述公式(2),能够对评分矩阵中的缺失值进行预测,从而将缺失值的预测转换为求解用户矩阵u的参数uik和项目矩阵v中的参数vkj的问题,也就是求解用户矩阵u在k个维度的参数向量ui、以及项目矩阵v在k个维度的参数向量vj的问题。

举例来说,以用户向量ui和项目向量vj的乘积作为用户i对项目j的评分的预测值,记为用户i对项目j的评分的真实值为yij,将预测值与真实值之差记为eij,即:

eij=yij-ui·vj(3)

那么,求解模型参数的问题转换为最小化eij的问题,基于此,使用目标函数表示模型针对评分的预测值与真实值之间的差距,目标函数如公式(4)所示:

为了防止模型与训练数据过拟合的问题,在目标函数中引入正则项,目标函数如公式(5)所示:

其中β/2为正则项的权重,由于用户i对项目j的评分值yij是ui和vj的乘积分解为k个维度,那么得到矩阵分解算法的目标函数可以表示为:

迭代训练模型的过程,转换为求解使得上述目标函数收敛时uik、vkj的取值(也就是参数)过程,例如,对上述目标函数使用梯度下降法,也即是使得目标函数的负梯度方向进行收敛求解uik与vkj,得到uik与vkj的更新公式为:

uik←uik+2αeijvkj(7.1)

vkj←vkj+2αeijuik(7.2)

其中,α为步长,表示学习速率,实际应用中,将迭代训练次数到达预定次数,或者,目标函数的值低于预定值(即目标函数收敛)作为迭代训练的中止条件,输出训练后得到模型的参数,根据参数,结合公式(2)可以计算用户对不同项目的评分,选取评分最高的一定数量的项目进行推荐。

参见图4,图4是本发明实施例提供的分布式计算系统200的一个可选的架构示意图,利用map-reduce分布式架构实现了分布式的矩阵分解和训练,模型存储在驱动(driver)节点210,可由一台服务器(或多台服务器)实现,每个执行器(executor)节点可以采用一台服务器(或多台服务器)实现,驱动节点210向执行器节点220传输项目矩阵和用户矩阵之后,执行器节点220根据接收的用户矩阵和项目矩阵进行训练,计算出模型的参数的更新值,之后传输给驱动节点210,驱动节点210结合所有执行器节点220传输的参数的更新值,更新本地存储的模型的参数,再将模型的全部参数广播给所有的执行器节点220。

可以看出,存在以下问题:

1)矩阵分解模型很容易达到很大的规模,以netfliex站点提供的训练数据为例,涉及17771个项目,480000个用户,当取k=1000的时候,模型的维度高达5×108。spark分布式计算架构将模型的参数全部维护在单个驱动节点上,驱动节点的内存的物理限制导致了无法训练复杂的模型。

2)在为训练模型而进行映射/规约的过程中,每个执行器节点把模型的参数传输给驱动节点,驱动节点汇总后广播给所有执行器节点,导致驱动节点和执行器节点之间的很大的通信开销,驱动节点和多个执行器节点通信会遇到带宽的瓶颈问题,模型参数的更新值的传输耗时导致通信效率低。

针对上述问题,本发明可选实施例中提供一种基于参数服务节点的分布式计算架构,以用户为维度分解训练数据得到训练数据的子集,在多个计算节点基于训练数据的子集并行训练模型,然后由参数服务节点将各个计算节点计算的模型的参数进行组合的方案。

例如,参见图5,图5是本发明实施例提供的分布式计算系统200的一个可选的结构示意图,在图5中,涉及参数服务节点230、控制节点240、计算节点250、调度层260和存储层270。

控制节点240用于控制参数服务节点230以及计算节点250的整体操作,保证操作的有序进行,包括:以用户为维度划分训练数据形成子集,每个子集中包括部分用户(即训练数据所涉及的全部用户中的部分用户),向各计算节点250分配训练数据的子集,并控制各计算节点和参数服务节点230工作的有序进行。可以理解,在一可选实施例中,图5示出的分布式计算系统200中可以省略设置控制节点240,将控制节点240的功能耦合到参数服务节点230中。

参数服务节点230和计算节点250的数量均为多个,每个参数服务节点230用于存储项目矩阵v的子矩阵(下文中称为项目子矩阵);每个计算节点250用于存储用户矩阵u的一个子矩阵(下文中称为用户子矩阵),根据从参数服务节点230获取的项目子矩阵,结合所分配到的训练数据的子集,迭代计算所存储的用户子矩阵的参数的更新值,以及所获取的项目子矩阵的参数的更新值,在每次迭代计算完成后,将项目子矩阵的参数的更新值返回(当然,也可以直接返回更新的参数)相应的参数服务节点230。

调度层260是对分布式计算系统200的调度功能的抽象表示,涉及控制节点240、参数服务节点230和计算节点250的计算资源(如cpu和gpu)的分配,以及控制节点240、参数服务节点230和计算节点250之间进行通信的通信资源的分配。

存储层270是对分布式计算系统200的存储资源的抽象表示,涉及上述各节点的内存资源以及非易失性的存储资源。

可以理解,图5示出的分布式计算系统200可以由服务器的集群实现,服务器集群中的服务器在物理位置上可以是分离的,也可以在同一物理位置部署,通过光缆、电缆等各种通信方式连接。

对于图5示出的各个节点来说,与集群中的服务器可以是一一对应的关系,当然根据服务器的实际处理能力也可以在一个服务器中部署多个节点;特别地,针对集群中的服务器在硬件、软件上的差异,在本发明可选实施例中可以在集群中设置虚拟机环境,在虚拟机环境中部署图5示出的节点,有利于节点的快速部署和迁移。

对图5示出的分布式计算系统200进行用于评分的模型的训练进行说明,参见图6,图6是本发明实施例提供的如图5所示的分布式计算系统200用于模型训练时的一个可选的处理示意图(其中省略掉图5中的部分结构),示出了基于参数服务节点的分布式计算架构,其中,涉及多个参数服务节点230和多个计算节点250,分别进行说明。

参数服务节点230用于存储项目矩阵v,并且每个参数服务节点230存储项目矩阵v中对应部分项目的向量构成的项目子矩阵,记为v-part,不同参数服务节点230存储的项目子矩阵对应的项目不同,并且,全部参数服务节点230存储的项目子矩阵对应的项目的交集为训练数据中涉及的全部项目。

由于每个参数服务节点230存储的子矩阵仅与部分项目对应,从而能够通过调整参数服务节点230的数量来实现对模型中项目的规模自适应调整的技术效果,有利于根据业务需求调整分布式计算系统200中参数服务节点230的规模。

例如,当需要扩展项目的规模时,可以在分布式计算系统200中增加参数服务节点230的数量,由新增的参数服务节点230来负责存储项目矩阵v中对应新增项目的向量;同理,当不再需要预测某些项目的评分时,可以通过撤销存储相应子矩阵的参数服务节点230来实现。

计算节点250用于利用分配到的训练数据的子集,子集中包括部分用户(即训练数据中涉及的全部用户中的部分用户)的行为数据,每次迭代计算的过程中,计算节点250依次从各参数服务节点230获取项目子矩阵v的参数,对于从任一参数服务节点230获取的项目子矩阵的参数,结合所分配到的子集,根据上述的更新公式(7.1)计算用户子矩阵u-part(也就是用户矩阵u中对应上述部分用户的向量构成的矩阵)更新的参数,在本地更新用户子矩阵u-part;然后根据公式(7.2)计算项目子矩阵v-part的参数的更新值,将项目子矩阵v-part的参数的更新值传输给存储相应项目子矩阵的参数服务节点230进行更新。

可以理解,由于每个计算节点250仅对部分用户的训练数据进行处理,这就能够通过调整计算节点250的数量实现对用户规模自适应调整的技术效果。举例来说,当需要扩展用户的规模时,可以在分布式计算系统200中增加计算节点250的数量,由新增计算节点250来负责存储、计算用户矩阵u中对应新增用户的维度的子矩阵;同理,当不再需要预测某些用户针对项目的评分时,可以通过撤销存储相应用户的子矩阵的计算节点250来实现。

下面再对训练模型的实现过程进行说明。

矩阵分解模型的规模=(用户数+项目数)×k,实际应用中模型的规模会上升到数亿,甚至十亿或百亿,本发明实施例中利用参数服务节点的分布式计算架构,降低了计算节点存储、计算的模型的维度,进而减少计算节点与参数服务节点之间因传输模型参数而导致的网络通信的开销,提高网络传输效率,并支持通过调整参数服务节点和计算节点的数量,实现了支持模型规模的线性伸缩,具体来说,主要涉及以下几个方面。

1)训练数据划分

将训练数据处理为“用户id,项目id:评分,…,项目:评分”的格式,即一个用户的所有评分存储在一条记录中,将训练数据以用户为维度划分(例如,均匀划分)为多个子集,每个子集包括多个用户的记录,子集被分配给多个计算节点250;例如,根据各计算节点250的算力均衡的状态,向各计算节点平均分配训练数据的子集;或者,根据各计算节点250的算力悬殊(算力比值超出比值阈值)的情况,根据算力的比值,分配对应比例的训练数据的子集。

2)模型存储

根据前述公式(7.1)和(7.2)可知,项目子矩阵和用户子矩阵的更新相互依赖,每次迭代计算,首先需要使用项目子矩阵的参数计算用户子矩阵的参数的更新值(可以理解,由于每次迭代计算,都是在参数的原有取值的基础上迭代一个更新值,因此,本文中,对于计算参数的更新值、以及计算更新的参数,可以不做具体区分),然后使用用户子矩阵的参数的更新值计算项目子矩阵的参数的更新值,因此在迭代开始之前,计算节点需要通过网络从参数服务节点获取项目子矩阵的参数,迭代结束之后计算节点需要通过网络向参数服务节点传输项目子矩阵的参数的更新值。

鉴于在大多数应用场景中,训练数据中涉及的用户数量都远远超过项目数量,以netfliex训练数据为例,涉及的用户数量是项目数量的27倍。因此,为了减少计算节点250和参数服务节点230之间因传输参数导致的通信开销,由参数服务节点230存储项目子矩阵,由计算节点250存储计算用户子矩阵,这样,在每次迭代计算中,当计算节点250计算用户子矩阵的参数的更新值时,只需要从各参数服务节点250获取项目子矩阵的参数,在迭代计算结束后,将项目子矩阵的更新的参数返回给存储相应项目子矩阵的参数服务节点230,由参数服务节点230更新项目子矩阵。

可见,参数服务节点230和计算节点250之间只需要传输项目矩阵的参数即可,不需要传输用户矩阵u,由于v小于u多个数量级,这就显著降低了参数服务节点230和计算节点250之间的通信开销。

3)模型计算

由公式(7.1)示出的用户矩阵中的特征向量ui在维度k的分量uik的更新公式可知,参数的计算只和用户的评分有关,用户矩阵中对应不同用户的向量相互独立,因此,以用户为维度将用户矩阵u分为多个子矩阵,对应存储在多个计算节点250,每个计算节点250分配到的训练数据计算所存储的用户子矩阵的参数的更新值,用户子矩阵维度是:计算节点250分配到的训练数据涉及的用户数量×k。

以梯度下降法求解参数为例,首先,控制节点240划分训练数据,向各计算节点250分配训练数据的子集;初始化用户矩阵u和项目矩阵v,然后迭代多次训练,每次迭代训练中,每个计算节点250,并行执行如下操作:

参见图7,图7是本发明实施例提供的如图5所示的分布式计算系统200用于模型训练时的一个可选的处理示意图,从各参数服务节点230获取到相应参数服务节点230存储的项目子矩阵的参数,根据前述的公式(7.1),计算节点250计算本地存储的用户子矩阵u-part的更新的参数;再根据公式(7.2),计算项目子矩阵的参数的更新值,传输给存储相应项目子矩阵的参数服务节点230,由参数服务节点230更新本地存储的项目子矩阵。

由于计算节点250计算项目子矩阵中对应项目的向量的更新值时,计算结果只与用户对该项目的评分相关,且计算节点250分配到的训练数据的子集可能只包括项目子矩阵中部分项目的评分,因此只能计算出项目子矩阵中已评分项目对应的向量按照最大梯度下降时对应的更新值,对无评分的项目计算的梯度值为0,相当于没有更新。

鉴于上述情况,在本发明可选实施例中,计算节点250从参数服务节点230获取项目子矩阵时,可以只获取参数服务节点230存储的项目子矩阵中与已评分项目对应的向量,记为v-sub,根据公式(7.1),结合所分配的训练数据的子集、以及项目子矩阵中已评分项目对应的向量,计算本地存储的用户子矩阵中部分用户对应的向量的更新值,上述的部分用户为针对项目子矩阵中已评分项目产生评分行为的用户;

根据公式(7.2),结合用户子矩阵中部分用户对应向量的更新值,计算项目子矩阵中与已评分项目对应的向量的更新值,向参数服务节点230(即存储相应项目子矩阵的参数服务节点230)返回已评分项目的向量的更新值,由于未评分项目对应的向量不再需要传输,因此节约了传输未评分项目的向量而导致的通信开销。

举例来说,参见图8-1,图8-1是本发明实施例提供的参数服务节点1与计算节点之间传输项目矩阵的参数的一个可选的示意图,设分布式计算系统中设置有4个计算节点,计算节点1至计算节点4对应分配到训练数据的不同子集,且对应存储的用户子矩阵为:upart1、upart2、upart3和upart4;计算节点1至4从参数服务节点1获取项目子矩阵vpart1的参数时,分别从参数服务节点1获取子集中已评分项目在项目子矩阵vpart1中对应的向量。

以计算节点1举例来说,根据所分配到的训练数据的子集确定子集中已评分的项目,从参数服务节点获取已评分项目在项目子矩阵vpart1中对应的向量,以参数服务节点1为例,所获取的已评分项目在项目子矩阵vpart1中对应的向量记为vpart1-sub1;根据公式(7.1),结合所分配到的训练数据的子集、以及vpart1-sub1计算upart1的参数的更新值,具体而言,计算upart1中部分用户对应的向量的更新值时,上述部分用户为针对已评分项目产生评分行为的用户;根据公式(7.2),结合upart1的部分用户对应的向量的更新值,计算vpart1-sub1的更新值,记为δvpart1-sub1,传输δvpart1-sub1给参数服务节点1,参数服务节点1根据各计算节点返回的更新值(包括计算节点1返回的δvpart1-sub4、计算节点2返回的δvpart1-sub2、计算节点3返回的δvpart1-sub3、计算节点4返回的δvpart1-sub4)更新本地存储的项目子矩阵。

图8-1中仅示出了一个参数服务节点1,分布式计算系统中设置有至少2个参数服务节点,以还包括存储项目子矩阵vpart2的参数服务节点2为例,那么,参见图8-2,计算节点1至4还从参数服务节点2对应获取已评分项目在项目子矩阵vpart2中对应的向量,记为vpart2-sub1、vpart2-sub2、vpart2-sub3和vpart2-sub4,并进行迭代计算,同理,参数服务节点2根据各计算节点返回向量的更新值(包括计算节点1返回的δvpart2-sub4、计算节点2返回的δvpart2-sub2、计算节点3返回的δvpart2-sub3、计算节点4返回的δvpart2-sub4)更新本地存储的项目子矩阵vpart2。

对于图7示出的分布式计算系统200,当计算节点250分配到的训练数据涉及的项目数量以及k的取值较大而使模型超出预定规模时(例如,使模型的规模达到以亿计时),存在v-sub矩阵所需的存储空间仍然超过单个计算节点250的内存的情况。

对于这种情况,由于项目矩阵中各项目的向量相互独立,因此可以采用分批次更新v-sub矩阵的方案,使每个批次传输的参数小于计算节点250的内存,保证计算节点250具有足够的内存计算参数的更新值。

在本发明可选实施例中,计算节点250分批次从参数服务节点230获取v-sub矩阵的参数,根据所分配到训练数据的子集中的以评分项目,分批次从参数服务节点230获取v-sub中的部分已评分项目对应的向量;根据公式(7.1),结合每个批次获取的已评分项目的向量、以及所分配到的训练数据的子集,计算所存储的用户子矩阵的参数的更新值;根据公式(7.2),结合用户子矩阵的参数的更新值,计算已评分项目对应向量的更新值,传输给相应的参数服务节点230,供参数服务节点230更新本地存储的项目子矩阵中已评分项目的向量。

举例来说,参见图9,图9是本发明实施例提供的计算节点分批次与参数服务节点传输项目矩阵的处理示意图,在图9中,训练数据涉及m个用户对n个项目的评分,训练数据被划分为子集平均分配给4个计算节点,4个计算节点对应存储初始化的用户矩阵的子矩阵,记为upart1、upart2、upart3和upart4;

各计算节点并行执行这样的操作:将所分配到的子集中的已评分项目,划分为2个批次,每次迭代计算过程中,向参数服务节点存储的项目子矩阵中获取一个批次的已评分项目对应的向量,记为v-sub;根据公式(7.1),结合v-sub和分配到的训练数据的子集,计算用户子矩阵中部分用户(即对已评分项目产生评分行为的用户)对应向量的更新值,然后根据公式(7.2),结合用户子矩阵中部分用户对应向量的更新值,计算项目子矩阵中已评分项目对应向量的更新值,传输给参数服务节点,由参数服务节点更新本地所存储的项目矩阵。

计算节点与参数服务节点之间分批次传输项目子矩阵的参数,避免了一次性传输项目子矩阵的全部参数导致计算节点内存资源受限的情况,有效规避了训练大规模模型时对于单个计算节点的内存资源开销大的情况。

下面对本发明实施例前述提供的分布式计算系统进行模型训练的计算实现的过程进行说明,参见图10,图10是本发明实施例提供的应用于一种分布式计算方法,应用于包括至少两个计算节点和至少两个参数服务节点的分布式计算系统;包括:

步骤101,计算节点根据训练数据的子集包括的用户,初始化用户矩阵中对应用户的向量,得到由所初始化的向量构成的用户子矩阵。

在本发明可选实施例中,分布式控制系统还可以包括控制节点,控制节点以用户为维度划分训练数据,将训练数据包括的多个针对不同所述项目的评分数据划分为多个子集,将所述多个子集分配给计算节点;例如,可以采用平均分配或根据计算节点的算力按比例分配的方式。

步骤102,参数服务节点初始化部分项目对应的向量,得到由所初始化的向量构成的项目子矩阵,部分项目为训练数据包括的项目中的部分项目。

步骤103,计算节点根据训练数据的子集、从参数服务节点获取的项目子矩阵,迭代计算用户子矩阵、以及项目子矩阵,传输每次迭代计算后的项目子矩阵,至相应的参数服务节点。

在本发明可选实施例中,参数服务节点在次迭代计算项目子矩阵时,可以计算项目子矩阵的更新值,将项目子矩阵的更新值传输至相应的参数服务节点(即存储迭代计算之前的项目子矩阵的参数服务节点),参数服务节点根据计算节点传输的项目子矩阵的更新值计算项目子矩阵的新的参数,并更新参数服务节点本地存储的项目子矩阵。

在本发明可选实施例中,计算节点采用如下的方式初始化用户矩阵中对应用户的向量,计算节点根据所分配到的子集,确定子集中包括的已评分项目,从参数服务节点存储的项目子矩阵中,获取已评分项目对应的向量;

相应地,计算节点迭代计算用户子矩阵、以及项目子矩阵采用如下方式:迭代计算用户子矩阵中部分用户对应的向量、以及项目子矩阵中对应已评分项目的向量,部分用户为子集包括的用户中针对已评分项目有评分的用户;

在计算节点每次迭代计算结束后,将迭代计算后得到以已评分项目对应的向量,传输至相应的参数服务节点,供参数服务节点更新所存储的项目子矩阵。

其中,为了进一步降低计算节点与参数服务节点传输项目子矩阵的通信开销,计算节点从参数服务节点存储的项目子矩阵中,获取已评分项目对应的向量时,可以从参数服务节点存储的项目子矩阵中,分批次获取已评分项目对应的向量;迭代计算用户子矩阵中相应批次用户对应的向量、以及相应批次的已评分项目对应的向量,相应批次用户为部分用户中针对批次的已评分项目有评分的用户;

在每次迭代计算结束后,将每次迭代计算后得到的与相应批次的已评分项目对应的向量,传输至相应的参数服务节点,供参数服务节点根据本地所存储的项目子矩阵。

对于确定批次的方式来说,计算节点根据计算节点的内存空间确定,其中,每个批次的已评分项目对应的向量占用的存储空间,小于计算节点的内存空间,保证计算具有足够的资源完成计算。

不难看出,由于计算节点与参数服务节点之间不需要传输项目子矩阵中未评分项目对应的向量,在不影响迭代计算的前提下,最大程度降低了计算节点与参数服务节点之间的通信消耗,对于计算节点来说,传输等待的时间得以进一步减低,进而提升了迭代计算的效率。

在本发明可选实施例中,计算节点迭代计算用户子矩阵、以及项目子矩阵时,以使损失函数沿最大梯度下降为目标,计算用户子矩阵和项目子矩阵;举例来说,在每次迭代计算过程中,计算节点将评分预测值与训练数据的子集中包括的评分实际值作差,得到预测差值;将预测差值与项目子矩阵的乘积,与本地存储的用户子矩阵叠加,得到更新的用户子矩阵;将预测差值与更新的用户子矩阵的乘积,与项目子矩阵叠加,得到更新的项目子矩阵;在满足迭代中止条件时,由控制节点负责输出完整的模型。

就控制节点输出模型来说,组合各计算节点存储的用户子矩阵,得到用户矩阵;组合各参数服务节点存储的项目子矩阵,得到项目矩阵;当需要预测目标用户针对目标项目的评分时,根据用户矩阵中对应目标用户的向量,与项目矩阵中对应目标项目的向量的乘积,得到目标用户针对目标项目的评分。

参见图11,图11是本发明实施例提供的训练用于预测评分的模型的可选的流程示意图,结合图7示出的分布式计算系统进行说明。

首先对涉及的模型的参数说明:

n:项目的个数

m:用户的个数

k:用户的特征向量、项目的特征向量的维度。

iterm,训练数据中的样本数据,样本数据包括用户id,用户对项目的评分。

iternum:迭代训练的次数

batchnum:每次迭代训练的过程中,计算节点250分批次从参数服务节点230获取项目矩阵,并根据每个批次获取项目子矩阵进行迭代计算。

第一、初始化

步骤201,控制节点240为各计算节点250平均分配训练数据的子集。

步骤202,各计算节点250并行执行以下处理:

步骤2021,根据分配到的训练数据的子集,创建并初始化用户子矩阵,每个计算节点存储用户矩阵的一个子矩阵。

用户子矩阵的每个行向量对应一个用户,行号对应用户的id,行向量表示用户对不同特征的评分,用户子矩阵包括部分用户对应的向量,上述的部分用户为计算节点250分配到的子集所包括的用户。

步骤2022,将已评分项目划分为多个批次。

收集分配到的训练数据的子集中已评分项目的id的集合,记为idset;将idset平均分成多个子集,数量为batchnum,各子集记为:idset[1],…,idset[batchnum]。

步骤203,参数服务节点230创建并初始化n×k维的项目矩阵的子矩阵,每个参数服务节点存储项目子矩阵。

n为项目个数,项目矩阵的每个列向量对应一个项目,列号对应项目的id,列向量表示项目在不同的特征中的权重。

需要指出,步骤201、步骤202与步骤203之间不存在执行顺序的限制。

第二、迭代计算过程

迭代iternum次迭代计算,每次迭代计算过程,针对每个参数服务节点250,执行以下步骤:

步骤204,计算节点250分批次从参数服务节点230存储的项目子矩阵中,获取已评分项目对应的向量。

每个批次中,从参数服务节点230获取idset[m]对应的向量,m的取值满足:1≤m≤batchnum,参数服务节点250根据每个计算节点250针对项目矩阵中idset[m]对应的向量的请求,向计算节点250返回项目矩阵中idset[m]对应的向量。

步骤205,更新用户子矩阵中对已评分项目有评分的用户的向量,计算项目子矩阵中已评分项目对应的向量的更新值。

更新计算节点250存储的用户子矩阵中对idset[m]中有评分的用户的更新的向量:uik←uik+2αeijvkj;计算idset[m]对应的向量的更新值:δvkj=2αeijuik;然后将idset[m]对应的向量的更新值δvkj传输给参数服务节点230。

步骤206,参数服务节点230根据各计算节点返回的项目子矩阵中已评分项目对应的向量的更新值,更新本地存储的项目子矩阵。

在接收到计算节点250传输idset[m]对应的向量的更新值时,更新idset[m]对应的向量如下:

vj←vj+δvj/num,num为分布式计算系统200中的计算节点250的数量。

步骤207,控制节点240从各计算节点250获取用户子矩阵的参数并组合形成用户矩阵,从各参数服务节点230获取项目矩阵的参数并组合形成项目矩阵。

至此,得到训练数据中各用户对不同项目的评分的基于矩阵分解模型的表达,根据公式(2)可以计算不同用户对项目的评分,在商品推荐的业务场景中,可以选取评分最高的商品向用户推荐。

本发明实施例提供一种存储介质,包括任何类型的易失性或非易失性存储设备、或者它们的组合来实现。其中,非易失性存储器可以是只读存储器(rom,readonlymemory)、可编程只读存储器(prom,programmableread-onlymemory)、可擦除可编程只读存储器(eprom,erasableprogrammableread-onlymemory)等,在存储介质中存储有可执行程序,可执行程序被处理器执行时,用于执行如下的操作:

当处于计算节点模式时,根据训练数据的子集包括的用户,初始化用户矩阵中对应所述用户的向量,得到由所初始化的向量构成的用户子矩阵;

当处于计算节点模式时,根据训练数据的子集、从参数服务节点获取的项目子矩阵,迭代计算所述用户子矩阵、以及所述项目子矩阵,将每次迭代计算之后得到的项目子矩阵,传输至相应的参数服务节点;

当处于参数服务节点模式时,初始化部分项目对应的向量,得到由所初始化的向量构成的项目子矩阵,所述部分项目为所述训练数据包括的项目中的部分项目;

当处于参数服务节点模式时,根据计算节点传输的项目子矩阵,更新参数服务节点存储的项目子矩阵。

在本发明可选实施例中,可执行程序被处理器执行时,还用于执行如下的操作:

当处于控制节点模式时,以用户为维度,划分训练数据包括的针对多个项目的评分,得到训练数据的多个子集,将多个子集分配给至少两个计算节点。

在本发明可选实施例中,可执行程序被处理器执行时,还用于执行如下的操作:

当处于控制节点模式时,当计算节点迭代计算的中止条件满足时,组合各计算节点存储的用户子矩阵,得到用户矩阵;组合各参数服务节点存储的项目子矩阵,得到项目矩阵;

当处于控制节点模式时,根据用户矩阵中对应目标用户的向量,与项目矩阵中对应目标项目的向量的乘积,得到目标用户针对目标项目的评分。

在本发明可选实施例中,可执行程序被处理器执行时,具体用于执行如下的操作:

当处于计算节点模式时,根据所分配到的子集,确定子集中包括的已评分项目,从参数服务节点存储的项目子矩阵中,获取已评分项目对应的向量;

当处于计算节点模式时,迭代计算用户子矩阵中部分用户对应的向量、以及项目子矩阵中对应已评分项目的向量,部分用户为子集包括的用户中针对已评分项目产生评分行为的用户;

当处于计算节点模式时,将每次迭代计算后得到的与已评分项目对应的向量,传输至相应的参数服务节点。

在本发明可选实施例中,可执行程序被处理器执行时,具体用于执行如下的操作:

当处于计算节点模式时,从参数服务节点存储的项目子矩阵中,分批次获取已评分项目对应的向量;

当处于计算节点模式时,迭代计算用户子矩阵中相应批次用户对应的向量、以及相应批次的已评分项目对应的向量,相应批次用户为部分用户中针对批次的已评分项目产生评分行为的用户;

当处于计算节点模式时,将每次迭代计算后得到的与相应批次的已评分项目对应的向量,传输至相应的参数服务节点。

在本发明可选实施例中,可执行程序被处理器执行时,具体用于执行如下的操作:

当处于计算节点模式时,根据计算节点的内存空间,确定批次的数量,其中,每个批次的已评分项目对应的向量占用的存储空间,小于计算节点的内存空间。

在本发明可选实施例中,可执行程序被处理器执行时,具体用于执行如下的操作:

当处于参数服务节点模式时,根据计算节点传输的与已评分项目对应的向量,更新参数服务节点存储的项目子矩阵。

在本发明可选实施例中,可执行程序被处理器执行时,具体用于执行如下的操作:

当处于计算节点模式时,将评分预测值与训练数据的子集中包括的评分实际值作差,得到预测差值;

当处于计算节点模式时,将预测差值与项目子矩阵的乘积,与用户子矩阵叠加,得到更新的用户子矩阵;

当处于计算节点模式时,将预测差值与更新的用户子矩阵的乘积,与项目子矩阵叠加,得到更新的项目子矩阵。

可以理解,当分布式计算系统的节点中设置上述的存储介质时,部分节点处于计算节点模式,部分节点处于参数服务接地模式,一个示例如数据图7所示,分布式计算系统能够基于训练数据进行迭代计算,对于如图1表示的训练数据的评分矩阵来说,能够将评分矩阵分解为如图1所示的用户矩阵和项目矩阵的乘积,根据图1示出的模型,能够计算用户对不同项目的评分,评分表示了用户对项目的感兴趣的程度,根据评分的降序可以精确选取用户感兴趣的项目向用户推荐。

下面再结合一个具体的应用场景进行说明,参见图12,图12是本发明实施例提供的如图2所示的大数据平台200的一个可选的应用场景示意图,示例性地,图2示出的大数据平台100部署的分布式计算系统200可以采用如图7示出的分布式计算系统200的架构。

在图12中示出了一线上购物系统700,线上购物系统700提供基于页面访问方式,支持用户通过浏览器、购物app的访问,对于登录线上购物系统700的用户,线上购物系统700开启行为数据采集功能,采集如下形式的行为数据:用户id、访问时间、浏览商品、购买商品、退货商品和商品评分。

线上购物系统700向大数据平台100的数据采集系统300开放行为数据的权限,数据采集系统300定期或不定期获取线上购物系统700的访问用户的行为数据,对行为数据进行清洗,如去除恶意评分数据、以及具有作弊行为的偏高的评分,将评分数据以用户为维度构造训练数据,训练数据的每个记录包括有用户id、商品id和商品评分。

训练数据被提交大数据平台100的分布式计算系统200进行迭代计算,基于用户对已评分商品的评分预测出用户对未评分商品的评分,形成如图1所示的矩阵分解模型,在图1中,用户对每个商品的评分使用用户矩阵中对应该用户的向量、与商品矩阵中对应该商品的向量的乘积表示,用户模型和商品模型的参数返回线上购物系统700。

线上购物系统700根据矩阵分解模型能够计算用户对不同商品的评分,举例来说,线性购物系统700需要针对一商品进行线上促销时,为了精确定位该商品的潜在消费用户,根据矩阵分解模型计算出对该商品评分最高的预定数量的用户,向用户推送商品的促销信息,实现精准营销。

可以理解,上述的购物系统700也可以替换为网上app商店,实现精准向用户推荐感兴趣的app,还可以为社交平台系统,向用户推荐感兴趣的联系人;本领域技术人员可以根据上述说明而轻易实施,不再重复说明。

综上所述,本发明实施例具有以下有益效果:

1)将用户矩阵以用户子矩阵的方式分布存储,将项目矩阵以项目子矩阵的方式分布存储,降低了对节点的内存空间的占用,克服了相关技术对于单机内存需要能够存储完整的用户矩阵和项目矩阵的限制,能够在内存有限的分布式计算系统中实现大规模的计算;

2)多个计算节点基于训练数据的子集对存储的用户子矩阵、以及从参数服务节点获取的项目子矩阵进行计算,一方面,降低了单个节点的计算复杂度,另一方面,计算节点并行计算的方式有效提升了计算效率;

3)将项目矩阵和用户矩阵以子矩阵的方式分布式存储,有效降低了计算节点与参数服务节点之间传输项目子矩阵的容量,一方面,单个节点的通信开销被有效降低,消除了通信开销遇到网络带宽瓶颈的情况,有利于网络通信负载的均衡化;另一方面,传输效率高,避免了因等待数据导致计算节点闲置的情况,提升了计算效率。

4)计算节点与参数服务节点之间只传输已评分项目对应的向量、以及更新值,由于不需要传输未评分项目相关的向量,降低了计算节点与参数服务节点之间的通信开销和传输延时,有利于提升计算效率。

5)通过将用户矩阵划分为子矩阵分配给多个计算节点,将项目矩阵分解为多个项目子矩阵分布存储在参数服务节点,每次迭代分批获取项目向量,解决了大规模矩阵分解模型的计算问题,可以通过增加参数服务节点、计算节点的数量的方法线性扩展模型规模,支持超大规模的计算。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1