参数服务器笔记

18 篇文章 0 订阅
13 篇文章 0 订阅
主要用于对分布式机器学习算法/深度学习算法参数优化。


李沐和陈天奇等国内英才成立的DMLC深度学习项目组:
github: https://github.com/dmlc/ps-lite ,C++ ( https://github.com/dmlc/mxnet DMLC的深度学习框架,MXNet中就用到了 ps)
CMU机器学习系领头人Eric Xing带领的小组推出的参数服务器Petuum ,C++
豆瓣的Paracel: Google公司用来做深度学习的训练框架DistBelief。DistBelief将巨大的深度学习模型分布存储在全局的参数服务器中,计算节点通过参数服务器进行信息传递,很好地解决了随机梯度下降和L-BFGS算法的分布式训练问题。豆瓣当时并没有做深度学习的需求,但我们意识到机器学习问题可以转化成优化问题,而解优化问题的众多方法和随机梯度下降的过程是类似的:选定初始值,按某种方向,迭代直到收敛。C++

参数服务器使用的是MPI,相比MR过程,AllReduce更高效, http://blog.csdn.net/cyh_24/article/details/50545780中的两个动态图比较直观的解释了这一点。

机器学习算法和计算机领域的其他算法相比,有自己的一些独特特点。例如:迭代性,模型的更新并非一次完成,需要循环迭代多次;容错性,即使在每个循环中产生一些错误,模型最终的收敛不受影响;参数收敛的非均匀性,模型中有些参数经过几个循环便不再改变,其他参数需要很长时间收敛。这些特点决定了机器学习系统的设计和其他计算系统的设计有很大不同,因此理想中的分布式机器学习任务,并不能随着机器的增加而能力线性提升,因为大量资源都会浪费在通讯,等待,协调,这些时间可能会占据大部分比例。参数服务器就是被提出来专门用于大规模最优化处理的框架,它特定用于这种需求:大规模的训练数据,比如TB甚至PB级别的;大规模的模型参数,在大规模的优化框架中,常常会有数十亿乃至千亿级别的参数需要估计。因此,在设计面临这种挑战的系统时,比如大规模深度学习系统,大规模Logistic Regression系统,大规模主题模型,大规模矩阵分解等等依赖于SGD或者L-BFGS最优化的算法,需要解决频繁访问修改模型参数时所需消耗的巨大带宽,以及如何提高并行度,减少同步等待造成的延迟,还有容错等挑战。

Communication pattern between clients and servers. Clients process data while servers synchronize parameters and perform global updates. Note that most code is shared between clients and servers, the main difference being the manner in which they update parameters.
Client处理数据,Servers用来同步参数并全局更新,大多数code是在clients和servers之间共享的,不同的是它们更新参数的方式。

Data communication between nodes is captured by two operations, push and pull. The former sends local modified data entries of the shared parameters to others, while the latter retrieves remote modifications.
数据交换主要有两种操作:push和pull。push将本地修改过的共享参数发送给其他,pull用来接受远程的更改。push和pull都是非阻塞的。

Parameter Server 优势
1. Efficient communication:  
由于是异步的通信,因此,不需要停下来等一些机器执行完一个iteration(除非有必要),这大大减少了延时。为机器学习任务做了一些优化(后续会细讲),能够大大减少网络流量和开销;
2. Flexible consistency models:  
宽松的一致性要求进一步减少了同步的成本和延时。parameter server 允许算法设计者根据自身的情况来做算法收敛速度和系统性能之间的trade-off。
3. Elastic Scalability:  
使用了一个分布式hash表使得新的server节点可以随时动态的插入到集合中;因此,新增一个节点不需要重新运行系统。
4. Fault Tolerance and Durability:  
我们都知道,节点故障是不可避免的,特别是在大规模商用服务器集群中。从非灾难性机器故障中恢复,只需要1秒,而且不需要中断计算。Vector clocks 保证了经历故障之后还是能运行良好;
5. Ease of Use  
全局共享的参数可以被表示成各种形式:vector,matrices 或者相应的sparse类型,这大大方便了机器学习算法的开发。并且提供的线性代数的数据类型都具有高性能的多线程库。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值