参数服务

Li, M., Andersen, D. G., Smola, A., & Yu, K. (2014). Communication efficient distributed machine learning with the parameter server. Advances in neural information processing systems, 27.

OSDI2014论文

Scaling Distributed Machine Learning with the Parameter Server。使用参数服务器来拓展机器学习

引言

目前ring-allreduce已取代参数服务器成为数据并行场景的主流选择。在中等集群中占比超过70%;

ring-allreduce:梯度聚合通过环形流水线完成

参数服务:中心点聚合后广播

单机无法解决全部模型的训练问题。现实情况下,大规模的机器学习的训练数据在1tb-1pb之间。训练出来的模型可能有$10^9-10^{12}$次的参数。这些模型参数需要被全局共享。所有的计算节点需要大量的访问这些参数,导致大量的网络通信。这篇论文发表的时候,机器学习的算法都是一个顺序模型,全局的同步会影响训练的性能。Transformer 是2017年提出的

任务的失败率随着时间的增长而增长,24.7意味着有四分之一可能出现故障。机器多,并且任务场的情况下出现故障的概率非常高。因此在机器学习中做容灾是非常重要的。三个要解决的问题是

  • 网络带宽的利用率
  • 容灾
  • 全局通讯

主要挑战是

  • 有效沟通
  • 固定的一致性模型
  • 弹性可扩展性
  • 容灾和持久性
  • 易用性

论文的贡献是放弃了分布式系统一些一致性问题,能和机器学习的系统更好的结合。当时工业界没有能覆盖大规模训练的通用解决方案。

分布式机器学习需要频繁读写参数服务,参数服务提供了有效的机制汇聚和计算统计的信息。参数数的服务节点会共同维护这些训练参数(单台机器维护不下)。每个计算节点拿参数中的一块。

然而市面上的键值对存储不能很好的存储向量,矩阵或者张量数据。每次发送的不是一个一个的数据而是一个segment段。这样就能批量的发送和更新,而不是对每个向量逐行更新。

容错方面,对每一个服务器节点会进行实时的复制。在2014用GPU训练还是少数。

训练

论文从工业角度讲机器学习系统的样子。

每个工作节点只需要读取和推送自己需要部分的数据。server端拿到计算节点发回的梯度后,相加做更新。这里的server端也是一个集群组,通过一致性哈希能够分布到多个节点上。数据复制:采用链式复制(chain replication)实现容错。集群越大,每个机器需要计算的参数部分越少。

server group是用来管理每一个服务器节点维护w(参数权重)的哪一段。中间的方块被叫做计算组。调度器将任务发给计算节点,计算节点读取数据和服务器交互,来计算收发权重。有多个方块组是因为,可能有不同的任务,比如多模态训练。server group有一些版本号命名空间来隔离不同的服务。可以做多个有交集的服务之间的同时训练。

架构

key value vectors是对数据模型的抽象。其中key可以是w的下标,但是很多场景下下标不一定是连续的。一些大型机器学习特征签名可能是int64,int128,甚至可能是字符串。w不一样可能会导致新的训练模型和老的训练模型无法一一对应。有的时候w的下标会是哈希出来的值。

通讯分为俩中,对权重的push和pull。这里的push和pull允许带区间。也就是允许把一个区间中的所有kv发出去,比如可以发送某一层的特定w。

服务器节点允许运行用户自定义的和拿书(比如用户可以自定义w是如何更新的)。

所有的任务都是可以异步执行的,相互之前没有依赖的任务是可以并行的。这个依赖通过一个叫做execute-after-finished(完成后才执行)的依赖来完成。

论文给出了几个等待模型

比如串行等,无等待,或者拿旧的梯度算一次,然后再拿到之前的梯度。

途中的bound为1,bound越小越慢,bound越大收敛越慢。是一个超参数。这里的依赖变成了一个有向无环图。

实现

向量时钟:有许多计算节点访问数据w,他们在每个时间点访问的w都是不一样的。

简单来说,如果参数量很大,但是每个节点只负责某一个层。只需要计算,每个层每个节点在某个时间是什么样的就行了。那么存储量就被降低了。

消息优化:key在发送一次之后,如果没有变化,就不需要再次发送。这一操作可以通过哈希来实现。

server端使用一致性哈希,同时也利用了一致性哈希算法的容灾特性。(向后一格进行冗余,类似链式复制。)

worker的容灾是比较容易的,因为worker是无状态的,可以使用故障探测,然后让调度器指派新的worker。权重都在server端进行备份。

Last modification:August 1, 2025
如果觉得我的文章对你有用,请随意赞赏