在海量数据和高维稀疏特征的背景下,推荐系统能够实现在线实时训练,追踪用户和物料的最新状态,依靠的是参数服务器Parameter Server。
一、传统分布式计算的不足
使用Hadoop/Spark这些大数据工具遇到的困难:
(1)Master节点需要容纳的参数量过大:推荐系统的特征数量非常多,每个特征的embedding维数有16位、32位等,参数量过大。
(2)代价大:在每轮训练中,Master都要将巨大的参数量传播带各个Slave节点,每个Slave节点还需要将相同大小的梯度回传,代价很大。
二、基于PS的分布式训练范式
(一)PS的简单描述
PS是一个分布式的K-V(Key-Value)数据库。
(二)PS的设计特点
1、突破单台机器资源限制,避免单点失效:参数不再集中存储于单一的Master节点,而是由一群PS Server节点共同存储、读写。
2、节省带宽和传输时间:在训练每个batch的时候,只需要传递当前batch所涵盖的非零特征参数。
(三)PS的结构
主要由三类节点构成:Server、Worker、Schedular。
1、Worker:PS中有多个
①拉取Pull:从Server拉取最新的模型参数。
②训练Train:本地训练,计算出梯度。
③推送Push:向Server推送梯度。
2、Server:PS中有多个
每个Server结点实际上就是一个k-v数据库。
①存储:每个Server结点存储海量参数中的一部分,又称为shard。
②应对Pull:将worker节点请求的参数最新值发送过去。
③应对push:聚合从各个worker节点发送的梯度,再利用SGD算法更新模型参数。
3、Schedular
负责PS结点的管理,比如新节点的注册、Pull和Push到正确节点。
![](https://i-blog.csdnimg.cn/direct/ddf6a702ddd74220876d7560cbcad35f.png)
三、PS的训练流程
(一)一轮训练的操作节点序列
worker-worker-schedular-server-worker-worker-server
(二)操作流程
1、worker归纳当前batch的本地训练数据涵盖了哪些特征。
2、worker向Server发送Pull请求,拉取当前batch需要的模型参数,比如特征的Embedding等。
3、schedular实现路由机制,将worker的pull请求拆分,分别路由到相应的server节点。这是因为每个server节点都存储一部分模型参数。
4、server接收worker的pull请求,从存储中找到相应特征的最新参数,回复给worker。
5、worker收齐server的最新参数后进行训练,得到梯度。
6、worker向Server发送Push请求,将计算的梯度推送给sever。
7、server接收worker发送来的梯度,进行聚合汇总,通过SGD更新参数,完成一轮训练。
![](https://i-blog.csdnimg.cn/direct/af38d7bab6b345e9b917cf2aea2792e6.png)
(三)PS训练模式的特点
结合了data parallelism数据并行和model parallelism模型并行两种分布式计算范式。
1、数据并行
海量数据分布存储在各个节点上。
2、模型并行
多个worker节点相对解耦,适合模型并行。
四、PS并行策略
根据worker节点冲突的频繁程度,分为以下三种并行策略。
(一)批量同步并行BSP:阻塞等待
1、流程
- worker节点本地数据训练后,计算得到梯度,推送给server节点,然后阻塞等待。
- server节点收集其所有worker节点的梯度后,聚合梯度,SGD更新参数。
- server向worker节点通知解除阻塞。
- worker从server拉取最新参数,进行下一轮训练。
2、优缺点
①优点
多worker节点更新不会发生冲突。
②缺点
一轮迭代中,速度快的节点要停下来等待速度慢的节点,形成短板效应。
![](https://i-blog.csdnimg.cn/direct/16fffe5bec014aa9a20555cf94f9ccb1.png)
(二)异步并行ASP
1、策略描述
每个worker节点推送梯度给server后就进行下一轮训练,不用等待其他worker。
2、缺点
可能会造成梯度失效,但在实际场景中由于特征稀疏,每个worker节点局部训练数据所包含的非零特征相互重叠得不严重。梯度失效示例如下:worker节点1和worker节点2从server节点1拉取最新参数θ0,worker节点1训练后将计算的梯度推送到server节点1,此时server节点1根据接收到worker节点1的梯度进行更新参数为θ1。worker节点2训练结束后推送梯度给server节点1,server节点1在上个参数θ1的基础上更新参数为θ2。而实际上worker节点2计算得到的梯度是基于参数θ0的。
![](https://i-blog.csdnimg.cn/direct/977c4169056f4cb5adf50ea31e8d2999.png)
(三)半同步半异步SSP
1、策略
SSP是BSP和ASP的折中策略,SSP允许各个worker节点在一定迭代次数内保持同步,但是当最慢的worker节点和最快的worker节点之间的迭代次数差值超过一定限度,所有worker节点就会停下来进行一次同步。
2、优点
达到了计算速度和收敛精度的平衡。