采用参数服务器的大规模分布式机器学习

1. 简介

大规模分布式机器学习三大挑战:

  • 访问这些参数(训练数据范围达到1TB到1PB,参数量范围10^9^ ~ 10^12^)需要巨大的网络带宽。
  • 很多机器学习算法是有顺序性的。当同步的花费、机器的延迟高时,会导致栅栏效应影响性能。
  • 错误容忍是决定性的。学习任务(Learing Tasks)经常在机器可能是不可靠的、工作可能被占用的云环境中执行。

本文描述了第三代参数服务器的开源实现

该参数服务器的五个关键特征:
- 高效的通信(Efficient communication):异步通信模型不阻碍计算,最优化机器学习任务来减少网络负担。
- 灵活的一致性模型(Flexible consistency models):宽松的一致性进一步隐藏同步花销和延迟。允许算法设计者去平衡算法收敛率与系统效率。
- 灵活的可扩展性(Elastic Scalability):在无需重启运行中的框架下便可添加新节点。
- 错误容忍和持久(Fault Tolerance and Durability)
- 易用(Ease of Use)

2. 架构

风险最小化问题:学习一个模型能通过future examplexx来预测值yy,模型由参数ww组成。

F(w)=∑i=1nl(xi+yi+w)+Ω(w)

F(w)=\sum_{i=1}^nl(x_i+y_i+w)+\Omega(w)
loss函数l(x+y+w)l(x+y+w)表示在训练数据中预测错误,正则化函数Ω(w)\Omega(w)使模型复杂,因此我们希望F(w)F(w)最小化。
如上图figure4。参数服务器可以同时跑不止一个算法。
每个服务器节点维持全局共享参数的一部分。为保证可靠性,服务器节点之间可以相互通信来复制、迁移参数。用一个服务器管理节点来维持服务器元数据的一致性,例如节点是否存活,参数划分的分配情况。
每个工作组跑一个应用。工作节点在本地存储一部分训练数据来计算本地梯度等值。工作节点只与服务器节点通信来更新和取回共享参数(工作节点相互之间不通信)。每个工作组设置一个计划表节点用来分配任务给工作节点和监视它们的进程。若增加或移除了工作节点,它将重新安排未完成的任务。

2.1 (Key,Value) Vectors

共享参数以(Key,Value) Vectors的方式传输。

2.2 Range Push and Pull

在节点间数据传输采用Push、Pull操作。
- 在Algorithm 1,每个工作节点Push它全部的本地梯度到参数服务器,然后Pull更新的参数回来。
- 在algorithm 3,每次传输一个范围的keys。

  • 参数服务器支持range-based push and pull。 设RR为一个key的范围,w.push(RR,dest)发送在RR范围内所有存在的ww到目的地(可以是一个节点,一个节点群如服务器群)。w.pull(RR,dest)从目的地读取在RR范围内所有存在的ww。
  • 如果我们把RR设置为全部key范围,则全部参数向量ww会被通信,若我们把RR设置为单个key,则只有独立的entry会被发送。
  • 这个接口可以扩展到通信任何分享相同keys作为ww的本地数据结构。?

2.3 User-Defined Functions on the Server

除了聚集从工作节点上传的数据,服务器节点还可以实行用户定义的函数。
- Algorithm 1,为了更新ww,服务器节点评估次梯度的正则化矩阵\Omega

2.4 Asynchronous Tasks and Dependency

任务执行时异步的:caller能在发出任务后立即执行下一步的计算。
- 只有在收到callee的回复后caller才将任务标记为完成。
- callee只有在该任务的call已经返回并且所有子任务都完成的情况下才将该任务标记为完成。

如上图,Iterations 10和11是独立的,但12依赖于11。因此,callee在计算Iterations 10的本地梯度后立即开始Iterations 11,而Iterations 12要延迟到pull了11的结果后执行。

2.5 Flexible Consistency

Bounded Delay:设置一个最大延迟时间τ\tau,只有在所有τ\tau前的任务都已经完成后才会开始新的任务。Algorithm 3使用。

2.6 User-defined Filters

参数服务器支持用户定义的过滤器来选择性的同步独立(键,值)对,允许在一个任务对数据一致性进行细粒度的控制。
- significantly modified filter:只push自上次同步后改变的大小超过阈值的entries。
- KKT利用优化问题的最优性条件:worker只push看起来对servers中的权重有影响的梯度

3 实现

  1. 服务器使用一致性哈希存储参数(键值对)。(3.3)
  2. 对于错误容忍,entires使用链复制。(3.4)
  3. 不同于先前的键值对系统,参数服务器充分利用以范围为基础的通信,压缩数据(3.2)和基于向量时钟的范围(3.1)。

3.1 Vector Clock

考虑到复杂任务的依赖图以及快速恢复的需要,每个键值对与一个向量时钟对应,向量时钟记录了在这个键值对上的每个独立节点的时间。向量时钟在追踪聚合状态或是阻止重复发送数据等方面是方便的,但对于n个节点、m个参数,向量时钟需要O(nm)O(nm)的空间,对于上千个节点以及数十亿个参数,存储和带宽是不可能的满足的
但是,参数服务器基于范围的通信模式,很多参数都有相同的时间戳:如果节点在一个范围内push参数,那么这些与这个节点相关的参数的时间戳几乎是一样的。因此,它们可以被压缩到单个范围的向量时钟中。更特别地,假设vci(k)vc_i(k)是节点ii在key kk的时间,考虑key的范围为RR,则范围向量时钟vci(R)=tvc_i(R)=t表示对于任意key k∈Rk\in R,vci(k)=tvc_i(k)=t。
开始时,每个节点ii只有一个范围向量时钟,从初始时间戳覆以及范围0开始覆盖了全部的参数key空间。每个范围设置可能分开(split)范围并且创造至多3个新的向量时钟(见Algorithm 2)。这样对于kk个独立范围、m个节点数,至多O(mk)O(mk)个向量时钟。

3.2 Messages

  • 节点可能发送信息给独立的节点或者节点群。信息包括一个在key范围RR中键值对的列表以及与之相关的范围向量时钟:
    [vc(R),(k1,v1),...,(kp,vp)]kj∈R and j∈1,...,p[vc(R),(k_1,v_1),...,(k_p,v_p)] k_j\in R\ and\ j \in {1,...,p}
    这是在参数服务器中最基础的通信格式,不仅用于共享参数通信还用于任务任务。对于任务通信,键值对可能采取(任务ID,参数(arguments)或返回结果)的格式。
  • 信息可能包含在范围RR中所有可用keys的子集。缺失(missing)的keys被分配相同的时间戳但不改变它们的values。
  • 信息可以根据key的范围切割:当worker发送一个信息给整个服务器群,或者当key的接收节点的分配改变时,我们分割(partition)键值对列表并且分割(split)范围向量时钟。(类似于algorithm2)。
  • 机器学习通常需要高带宽,因此信息压缩是必要的。
    1. 迭代次数之间,训练数据经常保持不变,worker可能多次发送相同的key列表,因此接收节点缓存key列表是很有必要的,这样以后发送者只需要发送列表的hash而不需要发送列表本身。
    2. values中可能包含很多为0的entries,而我们只需要非零的键值对。使用fast Snappy compression library压缩信息,有效移除0。
  • key缓存和value的压缩是可以共同使用的。

3.3 Consistent Hashing


- 参数服务器划分keys与传统的分布式哈希表(DHT)做法相似:keys和服务器节点的ID共同插入到hash ring中(见figure7)。每个服务器节点管理的key范围从它的插入点逆时针方向到下一个点,这个节点就被称为这个key范围的master。一个物理服务器经常在ring中经常表示成多个“虚拟”服务器来提高负载均衡和恢复。
- 我们通过使用直接変换的分布式哈希表设计简化管理。server manager掌控ring的管理。所有其他节点缓存部分key到本地,这可以使节点直接判定哪个服务器是负责哪个key范围,并且在有任何改变时收到通知。

3.4 Replication and Consistency

  • 每个服务节点存储一个副本包含kk个逆时针方向相邻的key范围。例如figure7,kk=2,server1复制属于server2和server3的key范围。?
  • 工作节点采用push和pull与key范围的master通信,任何master上的修正都被带上时间戳复制到slaves中,对数据的修改将同步地push到slaves中。
  • figure8:worker1 push xx到server1,server1调用用户定义函数ff来改变共享数据。push任务只完成一次,数据更改f(x)f(x)就被复制到slave。
  • 参数服务器允许在聚合后复制来减少网络通信。服务器节点经常聚合来自工作节点的数据,如求和本地梯度,服务器可能延迟复制直到聚合完成。figure8右图,两个worker分别push xx和yy到server,server先将push聚合成x+yx+y,然后运用改变f(x+y)f(x+y),最后实行复制。

3.5 Server Management

  • 为了实现错误容忍和动态规模,我们支持添加和移除节点
  • 添加节点:
    1. server manager 分配给一个新节点一个key范围作为master。这可能导致另一个key范围被分割或从一个结束节点中移除。
    2. 节点获取范围内的数据作为master来维持(maintain),并且获取kk个额外范围作为slave来保持(keep)。
    3. server manager广播节点的改变。信息的收取者可能基于新的key范围收缩它们的数据并且重发未完成的任务给新节点。
  • 从SS节点获取在RR范围内的数据可分为两阶段:
    1. SS预复制在范围内的所有键值对和与之相关的向量时钟。这可能导致一个范围向量时钟被分割(类似于Algorithm 2)。如果新节点在这一步失败,则SS仍然为改变。
    2. SS不再接受影响key范围RR的信息,同时,SS发送所有发生在RR范围在预复制阶段的改变给新节点。
  • 节点N在接收到节点改变信息后,首先确认它是否维持key范围也是RR。如果是并且这个key范围不在是N维持,则删除在R<script type="math/tex" id="MathJax-Element-57">R</script>范围内的所有相关的键值对和向量时钟。然后,N浏览所有还未接收到回复的外出(outgoing)信息。如果一个key范围与R相交,则信息会被分割和重发。

3.6 Worker Management

  • 增加一个工作节点W比增加一个新服务节点简单:

    1. task scheduler 分配W一个范围的数据
    2. 这个节点从网络文件系统或存在的workers中载入范围内的训练数据。然后,W从servers pull共享参数。
    3. task scheduler 广播这个改变,可能造成其他workers释放一些训练数据。
  • 当一个worker离开时,task scheduler可能启动复位。

4 评估

采用参数服务器的分布式机器学习相关推荐

  1. 《分布式机器学习》-刘铁岩:全书汇总

    文章目录 1 背景 2 数据划分与模型并行 2.1 计算并行模式 2.2 数据并行模式 2.3 模型并行模式 2.3.1 线性模型 2.3.2 神经网络 3 通信机制 3.1 通信的内容 3.2 通信 ...

  2. 参数服务器——分布式机器学习的新杀器

    转自:微信公众号 数据极客 在大规模数据上跑机器学习任务是过去十多年内系统架构师面临的主要挑战之一,许多模型和抽象先后用于这一任务.从早期的MPI,到后来的Hadoop,乃至于目前使用较多的Spark ...

  3. 【二】分布式训练---参数服务器训练(飞桨paddle1.8)

    1.参数服务器训练简介 参数服务器训练是分布式训练领域普遍采用的编程架构,主要解决以下两类问题: 模型参数过大:单机内存空间不足,需要采用分布式存储. 训练数据过多:单机训练太慢,需要加大训练节点,来 ...

  4. 参数服务器训练基本理论

    参数服务器训练基本理论 参数服务器训练是分布式训练领域普遍采用的编程架构,主要解决以下两类问题: • 模型参数过大:单机内存空间不足,需要采用分布式存储. • 训练数据过多:单机训练太慢,需要加大训练 ...

  5. python ray定时_使用 Ray 用 15 行 Python 代码实现一个参数服务器

    使用 Ray 用 15 行 Python 代码实现一个参数服务器 参数服务器是很多机器学习应用的核心部分.其核心作用是存放机器学习模型的参数(如,神经网络的权重)和提供服务将参数传给客户端(客户端通常 ...

  6. 【对标TensorFlow】阿里公开内部超大规模分布式机器学习平台

    摘要:近年来,随着"大"数据及"大"模型的出现,学术界和工业界对分布式机器学习算法引起了广泛关注.针对这一刚需,阿里集团和蚂蚁金服设计了自己的分布式平台--鲲鹏 ...

  7. 【对标TensorFlow】阿里公开内部超大规模分布式机器学习平台,对此你怎么看?...

    原文地址 近年来,随着"大"数据及"大"模型的出现,学术界和工业界对分布式机器学习算法引起了广泛关注.针对这一刚需,阿里集团和蚂蚁金服设计了自己的分布式平台-- ...

  8. 【对标TensorFlow】阿里公开内部超大规模分布式机器学习平台,对此你怎么看?

    原文地址 近年来,随着"大"数据及"大"模型的出现,学术界和工业界对分布式机器学习算法引起了广泛关注.针对这一刚需,阿里集团和蚂蚁金服设计了自己的分布式平台-- ...

  9. [翻译] NVIDIA HugeCTR,GPU 版本参数服务器 --(10)--- 推理架构

    [翻译] NVIDIA HugeCTR,GPU 版本参数服务器 --(10)- 推理架构 文章目录 [翻译] NVIDIA HugeCTR,GPU 版本参数服务器 --(10)--- 推理架构 0x0 ...

  10. 【Spark Summit EU 2016】使用参数服务器在Spark上扩展因式分解机

    更多精彩内容参见云栖社区大数据频道https://yq.aliyun.com/big-data:此外,通过Maxcompute及其配套产品,低廉的大数据分析仅需几步,详情访问https://www.a ...

最新文章

  1. PHP实进程池,swoole_process实现进程池的方法示例
  2. ITK:越界像素返回常数值
  3. Java面试题之HashMap如何有效减少碰撞
  4. mysql 分区信息查看
  5. 太棒了!8 个流行的 Python 可视化工具包,你喜欢哪个?
  6. 在html中单选选择器,已选中单选按钮标签的CSS选择器
  7. xss攻击突破转义_每个人都应该了解的7种xss漏洞
  8. java构造反射和函数_反射类的构造函数和方法
  9. 新浪新规:9点关灯,公司加班要交空调费:1600元/小时
  10. OneProxy中间件生产使用经验视频分享
  11. Photoshop照片模糊变清晰大全
  12. Android进阶——性能优化之APP启动速度优化实战总结(三)
  13. android xp,安卓手机刷xp系统装机版xp
  14. 设置Win10防火墙规则,使得局域网能访问此电脑的Tomcat服务器
  15. 石油和天然气行业的大数据分析:新兴趋势Big Data analytics in oil and gas industry: An emerging trend
  16. Gap year | 最好金龟换酒
  17. 页面滚动的时候自动切换导航栏
  18. 百度移动优化:关于移动端点击图片放大有多少人注意?
  19. [CodeForces-1141D] Colored Boots
  20. moia调度mysql到hive_必看:数据平台的搭建教程及软件工具

热门文章

  1. 项目管理手记(八) SaaS模式的DRP系统是否适用?
  2. html图片左右滑动代码dw,DW图片无缝滚动代码
  3. opensips配置
  4. windows电脑版便签工具哪款好用?
  5. linux 批量更改三四级目录 扩展名,Linux批量更改文件后缀名
  6. [RK3288][Android6.0] 音频输入接口Mic In和Line In
  7. 开发流程与管理--国内IT项目开发流程
  8. 图像识别的原理、过程、应用前景
  9. java 观察者模式类图_设计模式——观察者模式
  10. 机器学习识别图片的基本原理