分布式深度学习系统
1.Centralized
1.1 Parameter Server (star)
1.2 Hierarchical PS (tree)
2.Decentralized (ring)
1.1 Parameter Server
2012_nips_large_scale_distributed_deep_networks
2014_osdi_Scaling Distributed Machine Learning with the Parameter Server
分布式训练或者优化的一个难点在于各机器处理时间各异,有时候需要等最慢的机器运行完成
Downpour SGD的主要思想是,将训练集划分若干子集,并对每个子集运行一个单独的模型副本。模型副本之间的通信均通过中心参数服务器(parameter server, ps)组,该参数服务器组维护了模型参数的当前状态,并分割到多台机器上(例如,如果我们参数服务器组有10个节点,那么每个节点将负责存储和更新模型参数的1/10,如图所示)。
该方法在两个方面体现异步性: 1. 模型副本之间运行独立,在各自负责的数据集(子集)上独立运行 2. 参数服务器(parameter server)组各节点之间同样是独立的,PS片独立运行
在处理每个mini-batch之前,模型副本都会向参数服务器请求最新的模型参数。因为DistBelief框架也是分布在多台机器上,所以其框架的每个节点只需和参数服务器组中包含和该节点有关的模型参数的那部分节点进行通信。在DistBelief副本获得更新后的模型参数后,运行一次mini-batch样本来计算参数的梯度,并推送到参数服务器,以用于更新当前的模型参数值。更新的频度也可以设置,在处理机器失效方面,Downpour SGD比标准(同步)SGD要鲁棒。对于同步SGD来讲,如果一台机器失效,整个训练过程将会延时;但是对于异步SGD来讲,如果某个模型副本的一台机器失效,其他模型副本仍然继续处理样本并更新参数服务器中的模型参数。 但是由于每个参数服务器只更新互斥的一部分参数,副本之间不会进行通信,因此可能会导致参数发散而不利于收敛。 另外一项能极大提高Downpour SGD鲁棒性的技术是使用Adagrad自适应学习速率方法。 通过这种结合,达到了最好的效果(最短的时间内达到了规定的准确率)。 server 节点可以跟其他 server 节点通信,每个server负责自己分到的参数,server group 共同维持所有参数的更新。 worker 节点之间没有通信,只跟自己对应的server进行通信。每个worker group有一个task scheduler,负责向worker分配任务,并且监控worker的运行情况。当有新的worker加入或者退出,task scheduler 负责重新分配任务。
1.2 Hierarchical PS 2016 ICDM Model Accuracy and Runtime Tradeoff in distributed DL
本质上还是集中式架构,利用树形结构(tree)缓解server节点的通信压力。 Rudra-adv: 每个叶子节点就是worker(图中表示为L), 用来完成计算任务,训练数据,然后传递梯度给server(图中表示为PS). 除了根节点以外的PS,都是负责接收孩子节点传来的梯度,取平均,再传给父亲节点,直到传递给根节点。根节点接收传递过来的梯度,更新权重,然后把更新后的权重发送给worker. Rudra-adv* : 为了进一步缓解PS的通信压力,把所有的worker组成一个树形结构。不同于Rudra-adv的设计,每一个worker可以异步从服务器获得更新的权重。
2.Decentralized 2017 NIPS Can Decentralized Algorithms Outperform Centralized Algorithms
与Parameter Server的最大区别就是没有server节点,整个网络拓扑就是一个环(ring)。
每一个worker保存着相同的模型副本,在每一轮迭代中,每一个worker计算minibatch size的梯度,然后用AllReduce来同步所有节点的梯度,这样一轮结束后,所有worker都有了更新后的梯度。这种情况下,对于每个worker只有O(1)数量的梯度需要传递,但是完成一轮同步需要O(n)次交换信息(n为节点总数),通信压力还是很大。作者给出的改进方式是worker只与它的邻居交换梯度,取平均,然后就直接更新模型的权重(而不是像之前需要等待整个环上所有节点的梯度)。