APP下载

经典分散式论文阅读:Parameter Server

消息来源:baojiabao.com 作者: 发布时间:2024-05-20

报价宝综合消息经典分散式论文阅读:Parameter Server

本文提出了“引数服务器”的分散式架构来支援分散式机器学习。分散式机器学习主要面临以下挑战:

访问引数消耗大量的网络带宽很多机器学习算法都是序列的容错能力非常重要而本文中的框架给开发者带来两点优势:

通过分解机器学习的元件,可以让业务程式码更加简洁能够实现鲁棒、多功能、高效能的分散式机器学习算法本系统主要有以下五个特点:

高效的通讯 :使用了异步非阻塞通讯模型灵活的一致性模型 :可以允许系统设计人员手动权衡收敛率和系统效率弹性的规模 :能够在执行期间新增新节点容错和耐久 :能从故障中快速恢复,通过向量时钟保证行为的确定性易用 :引数表示为向量和矩阵便于开发机器学习算法系统的这些特性都是通过选择正确的系统技术,运用在机器学习算法中,以及修改机器学习适应系统来实现。在系统实现过程中,主要面临以下挑战:

通讯 :通过批量传输引数(向量片段、矩阵的行列而不是单个引数值)来提高通讯效率容错 :通过实时备份和热修复和实现机器学习

机器学习需要从 训练资料 中学习模型,主要包含三个要素: 特征提取目标函式学习 。特征提取将原始训练资料转换为 特征向量 ,不在本文赘述。学习的过程就是最小化目标函式从而获得模型。另外,在分散式机器学习任务中,训练资料量也通常是非常巨大的。

风险最小化

监督学习就是风险最小化的过程,例如最小化预测误差。如果有 个训练样本,每个样本的特征向量为 ,对应的标签为 ,模型的引数为 ,目标函式为

其中 为损失函式,定义了预测值和真实值之间的误差, 为正则化项,用来防止模型过拟合。在引数服务器框架中可以采用 分散式子梯度下降 对目标函式进行最小优化

在分散式子梯度下降算法中,每个工作节点只需要计算分配到的引数工作集 对应的梯度,然后由服务节点完成聚合。模型的完整引数 可能会十分巨大,工作节点在使用的时候会面临很大的负担,但是可以通过只储存用到的引数值即可。

生成模型

另外一种机器学习的形式为无监督学习,通常用来学习资料的自身结构。比较典型的就是话题模型:给一些文件,推断出每个文件包含的话题。主题模型的挑战就是:关于当前文件如何生成的引数必须被共享。解决方法就是每个工作节点只储存分配到的文件出现的词有关的引数即可。

架构

引数服务器系统由一个 服务节点 组和多个 工作节点 组构成。服务节点之间互相通讯来备份和迁移引数,服务管理节点负责维护服务节点元资料之间的一致性。一组工作节点执行一个应用程序,工作节点组中的排程节点负责任务的分配和监控。

引数服务器以 名称空间 的方式组织引数,模型的引数采用 键值 的形式储存。不同的应用程序可能会共享名称空间,例如一个应用程序负责模型训练,另一个应用程序负责模型推断。

范围推送和拉取

为提高带宽利用率,系统支援范围推送和拉取。令 为键范围,那么

w.push(R,dest) 将 中键范围在 中的引数推送到destw.pull(R,dest) 从dest拉去 中键范围在 中的引数服务节点的使用者定义函式

服务节点除了从工作节点聚合资料之外,也可以执行 使用者定义函式 。这样一来,使用者可以实现可以实现一些更加高阶的优化算法。

异步任务和依赖

任务都是 异步执行 的:呼叫者发起一个任务之后,可以马上执行其他运算。为了提高模型收敛率,可以设定某个任务执行完成后执行的依赖关系,设定任务依赖关系可以保证算法的逻辑。

灵活的一致性

工作节点可以并行执行分配的任务,但是可能会对学习算法的收率产生影响。系统效率和一致性之间的权衡关系取决于算法对于不一致的敏感程程度以及系统硬件能力,本框架提供了三种模式供设计者选择:

顺序一致 :下一个任务必须在前一个任务完成之后才能执行最终一致 :所有任务一起开始有界延迟 :在 时间之前开始的任务全部完成之后才开始任务使用者定义的过滤器

使用者可以定义 使用者定义过滤器 选择性地同步部分引数,例如使用者可以之推送那些对模型引数有影响的梯度。

实现

向量时钟

为了支援任务依赖图和快速恢复,每个键值对需要一个时钟。如果每个 个引数每个引数都储存一个时间,如果有 个节点,那么一共需要 空间,更合理的方式是储存范围的时间。

讯息

系统中传递的讯息有多个在键范围 内的键值对以及对应的向量时钟:

讯息可能并没有包含范围内全部的键值对,但是那些缺失的键值对的时钟照常更新。

如果每次迭代,工作节点的训练资料没有变化,那么键应该是不变的,那么可以让接收放储存键快取,而工作节点只需要传送值和键列表的杂凑即可。另外,使用使用者自定义过滤器可以进一步减少需要传送的键值对数量。

一致杂凑

服务节点组中的节点使用 分散式杂凑表 来储存模型引数。为了简化设计,系统使用直接对映,由服务管理节点统一管理。

副本和一致

每个服务节点储存了逆时针方向k个邻居键范围内的引数的副本,作为这些副本的从节点。副本更新的方式可以是

在更新引数的时候,更新讯息也会推送给储存副本的从节点在完成引数引数聚合后推送给从节点服务节点管理

当一个服务节点加入服务节点组之后:

服务管理节点分配给新节点一个键范围,新节点将作为这个范围的引数的主节点节点获取这个范围内的引数并成为主节点,以及获取 个额外范围的引数作为从节点服务管理节点广播更改。其他节点会释放不再需要自己管理的引数,并且叫没完成的任务交给新节点新节点从某节点 拉取范围 内的引数的过程可以分为两步:

预先拷贝一份原先的全部键值对资料以及对应的时钟,当新节点下线时可以用来恢复;不再处理范围 内的讯息,并且把预拷贝阶段的更改传送给新节点。当节点N收到节点新增讯息后,需要:

删除不再需要自己管理的引数重新发送未确认的讯息,去掉不属于自己管理的内容在某个服务节点下线后,服务管理节点需要把该节点管理的引数分配给其他节点。

end:如果你觉得本文对你有帮助的话,记得关注点赞转发,你的支援就是我更新动力。

2019-08-23 22:53:00

相关文章