原文地址:http://blog.csdn.net/solomon1558/article/details/52335420
5. 参数服务器
5.1 背景介绍
在机器学习和深度学习领域,单机已经解决不了目前快速增长的数据和参数了,分布式的优化已经成了一种先决条件。现实中,训练数据的数量可能达到1TB到1PB之间,而训练过程中的参数可能会达到109到1012。而往往这些模型的参数需要被所有的worker节点频繁的访问,这就会带来很多问题和挑战:
访问巨量的参数,需要大量的网络带宽支持。
机器学习算法具有连续性,只有上一次迭代完成(各个worker都完成)之后,才能进行下一次迭代,这就导致了如果机器之间性能差距大(木桶理论),就会造成性能的极大损失。
分布式机器学习系统需要容错能力。算法部署在云环境中,机器是不可靠的,并且job也是有可能被抢占的。
传统的分布式学习框架在解决这些问题时遇到了困难:MPI Gradient Aggregation的主要缺点是批任务求解器的速度不高,同时MPI本身无法支撑大规模数据。MapReduce:解决了MPI无法支撑大数据的问题,但无法改进批处理求解器的训练性能,并且还引入了新的问题,包括迭代式计算的低效,节点之间通信低效。由CMU推出的GraphLab是一种基于图的抽象,用图来做抽象可以解决许多机器学习问题,但仍然有许多问题无法很好高效求解,比如深度学习中的多层结构。参数服务器是近年来新出现的专门用于机器学习算法的数据并行抽象。它通过采用一个分布式的Key-Value存储模型存放参数,提供了有效的机制用于在分布式系统不同的Worker节点之间同步模型参数,而每个Worker只需要保存它计算时所依赖的一小部分参数即可。从而避免因频繁的参数数据交互而导致过高的通信开销。
5.2 Parameter Server系统架构
参数服务器的概念最早来自AlexSmola于2010年提出的并行LDA的框架[5]。它通过采用一个分布式的Memcached作为存放参数的存储,这样就提供了有效的机制用于在分布式系统不同的Worker节点之间同步模型参数,而每个Worker只需要保存它计算时所依赖的一小部分参数即可。当然,这里存放参数的存储跟做OLTP应用中的Key-Value抽象有所不同,因为以Key-Value为单元进行频繁的参数数据交互会导致过高的通信开销,因此参数服务器通常采用数学封装来进行参数同步,比如向量,张量,矩阵的行列等。
图5-1 并行LDA的框架
上图的sampler是并行LDA里的组件,可类比为通用参数服务器框架里的计算单元。Smola提出的模型是最早的参数服务器抽象,随后出现了许多改进,Google的Jeff Dean 2012年进一步提出了第一代Google大脑的解决方案DistBelief[4],主要用于超大规模深度学习网络的训练。DistBelief将巨大的深度学习模型分布存储在全局的参数服务器中,计算节点通过参数服务器进行信息传递,很好地解决了SGD和L-BFGS算法的分布式训练问题。
5-2分布式SGD框架流程图
图中是分布式异步SGD架构流程图,运行时,需要把训练数据分为多个子集,然后在每个子集上运行模型的多个副本,模型通过集中式的参数服务器通信,参数服务器存放了模型的全部参数和状态。异步体现在两方面:模型的副本独立运行;参数服务器的分片也各自独立运行。DistBelief采用BSP并行模型维护全局参数的数据一致性。BSP(Bulk Synchronous Parallel)是上世纪八十年代就提出的,它要求算法在每一次迭代结束后都要同步等待,因此会因为最慢的机器拖慢整个系统。
为了参数同步的成本和延时,CMU Eric Xing的Petuum项目组提出了被称为SSP(Staleness Synchronous Parallel)的延迟同步模型[6]。SSP目的是在理论保证正确的前提下,利用机器学习算法的自我修复能力尽可能提升迭代吞吐量。其基本思想是允许各机器以不同步调对模型进行更新,但是加一个限制,使得最快的机器的进度和最慢机器的进度之差不要太大。这样做的好处是:既减轻慢的节点拖整个系统的后腿,又能保证模型的最终收敛。这样延迟异步的控制方式避免了传统基于BSP的分布式计算的等待时间。
图5-3 PS-Lite参数服务器框架图
如图5-3所示,李沐和DMLC团队实现的参数服务器架构PS-Lite[7]属于第三代参数服务器,相比之前的DistBelief提供了更加通用的架构:在设计上包含一个Server Group和若干个Worker Group,Server Group用来做参数服务器,每个Server Node存放一个参数分片,由Server Manager管理整个Server Group,维持整个Server Group的元数据的一致性视图,以及参数分片情况。每个Worker Group运行一个应用,Worker Node只跟Server Node通信用来更新参数,Worker Node之间没有任何交互。每个Worker Group内有一个调度器,负责给Worker Nodes分配任务以及监控,如果有Worker Node挂掉或者新加入,调度器负责重新调度剩余的任务。PS-Lite针对网络带宽的优化主要是针对Server之间的参数复制提供了采用先聚合再复制的方式:
图5-4 参数传输
Server之间复制主要是为容错考虑,因此Worker和Server之间的数据传输仍依赖参数服务器本身异步机制带来的带宽节省:在应用于深度学习时,主要借助于称作Delayed Block Proximal Gradient的方法:每次迭代只更新一个block的参数;Worker节点计算梯度的同时还需要计算特定坐标的学习速率,既该block的二阶偏导数的对角线。在数据传输时,PS-Lite还会引入部分定义的Filter来避免传输对模型影响不大的参数,例如Random Skip或者KKT Filter,引入这些Filter可以让传输的模型参数量减少十倍以上。关于Delayed BlockProximal Gradient的收敛证明,参见李沐的文章[8]。
5.3 参数服务器容灾策略
参数服务器中服务节点和计算节点采用不同的容灾策略。对于计算节点,可以采用重启任务,丢弃失败节点,或者其他与算法相关的策略。而服务节点维护的是全局参数,若数据丢失和下线会严重影响应用的运行,因此对其数据一致性和恢复时效性要求更高。
参数服务器中服务节点的容灾采用的是一致性哈希和链备份。服务节点在存储模型参数时,通过一致性哈希协议维护一段或者数段参数。这个协议用于确保当有服务节点发生变化时,只有维护相邻参数段的服务节点会受到影响。每个服务节点维护的参数同时会在数个其他服务节点上备份。当一个服务节点收到来自计算节点的数据时,它会先将此数据备份到其备份节点上,然后再通知计算节点操作完成。中间的任何失败都会导致这次发送失败,但不会造成数据的不一致。
链备份适用于任何机器学习算法,但会使网络通信量成倍增长,从而可能形成性能瓶颈。对于某些算法,我们可以采用先聚合再备份的策略来减少通信。例如,在梯度下降算法里,每个服务节点先聚合来自所有计算节点的梯度,之后再更新模型参数,因此可以只备份聚合后的梯度而非来自每个计算节点的梯度。聚合可以有效减少备份所需通信量,但聚合会使得通信的延迟增加。不过这可以通过前面描述的异步执行来有效地隐藏。在实现聚合链备份时,我们可以使用向量钟(vector clock)来记录收到了哪些节点的数据。向量钟允许我们准确定位未完成的节点,从而对节点变更带来的影响进行最小化。由于参数服务器的通信接口是基于区段发送的,所有区段内的关键字可以共享同一个向量钟来压缩其存储开销。
6. 总结与讨论
针对Caffe依赖项复杂,可移植性差的问题,本文介绍了一种采用第三方库方案的跨平台Caffe项目。本文随后分析了Caffe两级I/O的设计思路,阐释了Caffe多线程I/O和多重预缓冲的具体实现。在此基础上,又分析了Caffe多GPU数据并行的设计与实现。针对Caffe源生并行方案的种种缺点,本文通过调研发现参数服务器框架适用于大规模分布式深度学习系统。本文对Caffe所做的分析,为今后多平台移植和多机多卡分布式Caffe的研究和改进提供了有力的支持。随着深度学习的快速发展,多机多卡分布式深度学习系统的研究将更加深入,未来将数据并行与模型并行混合使用,将会结合两者的优势,取得更好的性能。
Reference
[1] 流深度学习工具评估,https://github.com/zer0n/deepframeworks
[2] Dragon:A Light Deep Learning Framework,https://github.com/neopenx/Dragon
[3] caffe-windows,https://github.com/niuzhiheng/caffe#windows-installation
[4] JeffreyDean, Greg S. Corrado, Rajat Monga, et al, and Andrew Y. Ng (2012) Large ScaleDistributed DeepNetworks. in Advances in NeuralInformation Processing 25 (NIPS2012), MIT Press, Cambridge, MA
[5] AlexSmola.An Architecture for Parallel Topic Models. VLDB, 2010.
[6] JamesCipar, Qirong Ho, Jin Kyu Kim, Seunghak Lee,Gregory R. Ganger, Garth Gibson,Kimberly Keeton*, Eric Xing. Solving the straggler problem with boundedstaleness. Presented as part of the 14th Workshop on Hot Topics in OperatingSystems,2013
[7] Ps-lite参数服务器,https://github.com/dmlc/ps-lite
[8]Li, Mu and Andersen, David G and Smola, Alex J and Yu, Kai.CommunicationEfficient Distributed Machine Learning with the Parameter Server.NIPS,2014
跨平台Caffe及I/O模型与并行方案(五)
最新推荐文章于 2022-01-28 12:30:26 发布