随笔分类 -  分布式机器学习

摘要:分布式机器学习:异步SGD和Hogwild!算法(Pytorch)同步算法的共性是所有的节点会以一定的频率进行全局同步。然而,当工作节点的计算性能存在差异,或者某些工作节点无法正常工作(比如死机)的时候,分布式系统的整体运行效率不好,甚至无法完成训练任务。为了解决此问题,人们提出了异步的并行算法。在异步的通信模式下,各个工作节点不需要互相等待,而是以一个或多个全局服务器做为中介,实现对全局模型的更新和读取。这样可以显著减少通信时间,从而获得更好的多机扩展性。 阅读全文
posted @ 2023-02-13 22:07 orion-orion 阅读(1057) 评论(0) 推荐(0) 编辑
摘要:分布式机器学习:模型平均MA与弹性平均EASGD(PySpark)SSGD算法由于通信比较频繁,在通信与计算比较大时(不同节点位于不同的地理位置),难以取得理想的加速效果。模型平均方法(MA)中,每个工作节点会根据本地数据对本地模型进行多轮的迭代更新,直到本地模型收敛说本地迭代轮数超过一个预设的阈值,再进行一次全局的模型平均,并以此均值做为最新的全局模型继续训练。但是MA算法通常会带来精度损失,实践中需要仔细调整参数设置,或者通过增加数据块粒度的动量来获取更好的效果。EASGD方法则不强求全局模型的一致性,而是为每个工作节点保持了独立的探索能力。 阅读全文
posted @ 2022-06-30 15:05 orion-orion 阅读(1820) 评论(0) 推荐(0) 编辑
摘要:分布式机器学习:同步并行SGD算法的实现与复杂度分析(PySpark)其中,SSGD算法每次依据来自 𝐾个不同的工作节点上的样本的梯度来更新模型,设每个工作节点上的小批量大小为 𝑏,则该算法等价于批量大小为 𝑏𝐾 的小批量随机梯度下降法。尽管梯度的计算可以被分摊到个计算节点上,然而梯度下降的迭代是串行的。每轮迭代中,Spark会执行同步屏障(synchronization barrier)来确保在各worker开始下一轮迭代前w已被更新完毕。如果存在掉队者(stragglers),其它worker就会空闲(idle)等待,直到下一轮迭代。 阅读全文
posted @ 2022-06-26 11:24 orion-orion 阅读(2164) 评论(0) 推荐(1) 编辑
摘要:分布式机器学习:PageRank算法的并行化实现(PySpark)目前对图算法进行并行化的主要思想是将大图切分为多个子图,然后将这些子图分布到不同的机器上进行并行计算,在必要时进行跨机器通信同步计算得出结果。学术界和工业界提出了多种将大图切分为子图的划分方法,主要包括两种,边划分(Edge Cut)和点划分(Vertex Cut)。总而言之,边划分将节点分布到不同机器中(可能划分不平衡),而点划分将边分布到不同机器中(划分较为平衡)。接下来我们使用的算法为边划分。我们下面的算法是简化版,没有处理悬挂节点的问题。 阅读全文
posted @ 2022-06-03 22:06 orion-orion 阅读(1157) 评论(0) 推荐(1) 编辑
摘要:分布式机器学习:逻辑回归的并行化实现(PySpark)逻辑回归的目标函数常采用梯度下降法求解,该算法的并行化可以采用Map-Reduce架构。先将第𝑡t轮迭代的权重广播到各worker,各worker计算一个局部梯度(map过程),然后再将每个节点的梯度聚合(reduce过程),最终对参数进行更新。在Spark中每个task对应一个分区,决定了计算的并行度。在Spark的实现过程中,map阶段各task运行map()函数对每个样本(𝑥𝑖,𝑦𝑖)计算梯度𝑔𝑖, 然后对每个样本对应的梯度运行进行本地聚合,以减少后面的数据传输量。 阅读全文
posted @ 2022-05-27 19:00 orion-orion 阅读(1139) 评论(0) 推荐(1) 编辑
摘要:分布式多任务学习:论文总结归纳和展望做为最后一篇分布式多任务学习的论文阅读记录,我决定对我目前为止粗读和精读的论文进行一次总结,然后陈述一些个人对该研究领域的见解和想法。目前已经有许多论文对多任务学习提出了并行化策略,我们可以大致概括如下几类:(1) 基于近端梯度的同步算法 (2) 基于近端梯度的异步算法 (3) 基于分解代理损失函数的算法 (4) 基于本地去偏估计的算法。⽬前关于不同的损失函数和不同的正则项已经有很多学者做过了,不过⽬前基于任务簇/层次化的多任务学习⽅法还没有⼈对专门其并⾏化。 阅读全文
posted @ 2021-11-12 21:02 orion-orion 阅读(1811) 评论(1) 推荐(1) 编辑
摘要:分布式多任务学习:去偏Lasso实现高效通信在分布式的环境中,已有的基于近端梯度的同步/异步优化算法需要多轮的通信,时间开销较大。这样,如何实现机器间的有效通信是我们必须要想办法解决该问题。论文《distributed multitask learning》提出的算法介于传统的近端梯度优化算法和local lasso之间,其计算只需要一轮通信,但仍然保证了使用group regularization所带来的统计学效益。 阅读全文
posted @ 2021-11-10 20:48 orion-orion 阅读(590) 评论(1) 推荐(0) 编辑
摘要:分布式多任务学习:代理损失函数进行任务分解实现多任务学习的一种典型的方法为增加一个正则项,写为f(W)+g(W)形式,目标函数中的f(W)很容易并行化,但是一般g(W)就很难并行化了,那么如何解决这个问题呢?答案是运用一个可以分解的代理损失函数来替换掉原始的目标函数。我们接下来就以论文《Parallel Multi-Task Learning》[4](zhang 2015c等人)为例来介绍该思想。该论文MTLR模型[5](zhang 2015a)的基础上利用FISTA算法设计代理损失函数,该代理函数可以依据学习任务进行分解,从而并行计算。 阅读全文
posted @ 2021-11-05 11:10 orion-orion 阅读(570) 评论(1) 推荐(0) 编辑
摘要:分布式多任务学习:同步和异步优化算法对于多任务学习,当任务数量很大时,其计算复杂度很高,此时需要用多CPU/多GPU对学习算法进行加速,尽量使𝐾个任务的梯度的计算分摊到𝐾个不同的工作节点(worker)上。但实际上由于正则项的存在和损失函数的复杂性,想做到这个需要我们仔细地设计并行多任务学习算法,在保证算法加速的同时而尽量不影响优化算法最终的收敛,并保证优化算法结果的一致性。我们将会从MTL的单机优化方法开始,逐步说明分布式优化的必要性并先后介绍它的两种主要实现手段——同步分布式优化算法和异步分布式优化算法。 阅读全文
posted @ 2021-10-30 22:15 orion-orion 阅读(1656) 评论(1) 推荐(0) 编辑

点击右上角即可分享
微信分享提示