什么是参数服务器?为什么要使用参数服务器?

2023-05-16

近些年来,参数服务器(parameter server) 这个词汇频频出现在各大顶级期刊,会议,学术报告上,成为研究热点之一。如此前沿的名词背后究竟隐藏着什么秘密?本文就参数服务器这一热点话题进行简要分析,带领读者揭开其神秘面纱。

参数服务器是什么?

概括来说,参数服务器是一个为了解决分布式机器学习问题的编程框架[1]。该框架主要包括服务器端(Server ),客户端(Client)和调度器(Scheduler)。

  • 服务器端的主要功能是存放机器学习任务的参数,接收客户端的梯度,对本地参数进行更新。
  • 客户端的主要功能有两点:一是从服务器端获取当前最新的参数;二是,使用本地或者远程节点的数据和从服务器端获取的参数,计算得到预测值,然后根据设定的损失函数,计算关于训练参数的梯度,最后将梯度发送给服务器端。
  • 调度器的主要功能是管理服务器,客户端节点,完成节点之间数据同步,节点添加/删除等功能。

一个简化的参数服务器的流程图如图1所示:
在这里插入图片描述

图 1:参数服务器流程图

这里需要注意一点,图中使用了共享的参数服务器端。这是因为如果仅使用单一的服务器端,多个客户端不断地从此服务器获取参数,推送梯度,会导致服务器端网络拥塞,部分数据丢失。
此外整个系统还有存在一个或若干控制节点,用来管理服务器端和客户端。整个参数服务器最主要的操作就是图中的Pull(从服务器获取参数)和Push(推送梯度到服务器)。通过不断迭代执行Pull和Push操作,最小化损失函数,就是简易的参数服务器原型。

为什么要使用参数服务器?

说到参数服务器,不得不说起深度学习。众所周知,很多深度学习任务(例如:分类任务目标检测人脸识别等)都依靠大数据来训练,海量参数来提高模型的拟合能力。对于世界上顶尖的科技公司(Facebook,Google,Baidu等)来说,训练数据从来都不是困难,他们甚至具有多达TB,PB(1TB=1024GB,1PB=1024TB)量级的数剧。这样规模的数据在单机上训练和预测是明显不可能的。此外,他们还拥有丰富的计算资源(CPU/GPU集群)来支持大规模计算。

因此,如何有效的利用数据和计算资源,提高模型效率,成为急需解决的问题。于是,参数服务器应运而生。参数服务器提供了一条可行解决思路:将数据和训练参数分散到不同的计算节点上,分布式训练。

设计一个参数服务器需要注意什么问题?

在实际的应用中,设计者需要考虑如下几个方面:

1. 通信:针对实际应用场景,选取同步或者异步的通讯方式。一般来说,参数服务器采用异步通信,Server节点无须停下来等待所有Worker节点都完成梯度计算,不排除例外情况。这样做能够减少通信延迟,提高计算效率,也能够减少约束,方便研究人员进行后续优化。

2. 一致性:一致性用来衡量不同节点之间的数据是否一致。强一致性意味着不同节点间的同步成本和时延提高。在设计参数服务器时,考虑到深度学习此类应用对数据一致性不敏感,因此研究人员可以通过设计宽松的一致性模型(flexible consistency model),来平衡系统性能和算法收敛。

3. 可扩展性:设计参数服务器需要考虑动态的插入移除某些节点,不能因为某些节点加入,移除或者故障导致系统重启。

4. 容错:在分布式集群中,难免会出现节点故障,因此需要系统能够快速从非灾难性机器故障中恢复。

5. 易用性:设计参数服务器要考虑用户的需求和使用习惯,减少用户的学习成本。使用户能够集中精力专注到自己的研究领域,而不是花大量时间学习使用手册。

参考文献:

[1] Mu Li, David G. Andersen, Jun Woo Park,Alexander J. Smola, Amr Ahmed, Vanja Josifovski, James Long, Eugene J. Shekita,and Bor-Yiing Su. 2014. Scaling distributed machine learning with the parameterserver. In Proceedings of the 11th USENIX conference on Operating SystemsDesign and Implementation (OSDI’14). USENIX Association, Berkeley, CA, USA,583-598.

[2] Eric P. Xing, Qirong Ho,Wei Dai, Jin Kyu Kim, Jinliang Wei, Seunghak Lee, Xun Zheng, Pengtao Xie,Abhimanu Kumar, Yaoliang Yu Petuum: A New Platform for Distributed Machine Learningon Big Data IEEE Transactions on Big Data, Volume 1, No. 2, Pages 49-67, 2015

[3] PhilippMoritz∗, Nishihara R , ∗ Stephanie Wang, et al. Ray:A Distributed Framework for Emerging AI Applications[J]. 2017.

[4] https://github.com/mlflow/mlflow.git

[5] Jie Jiang, Lele Yu,Jiawei Jiang, Yuhong Liu and Bin Cui. Angel: a new large-scale machine learningsystem. National Science Review (NSR), 2017

[6] Olston, Christopher, et al.“TensorFlow-Serving: Flexible, High-Performance ML Serving.” (2017).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是参数服务器?为什么要使用参数服务器? 的相关文章

  • golang表单及验证支持

    在Web开发中对于这样的一个流程可能很眼熟 xff1a 打开一个网页显示出表单 用户填写并提交了表单 如果用户提交了一些无效的信息 xff0c 或者可能漏掉了一个必填项 xff0c 表单将会连同用户的数据和错误问题的描述信息返回 用户再次填
  • sublime搭建C/C++编译环境

    代码一 xff1a 34 cmd 34 34 g 43 43 34 34 file 34 34 std 61 c 43 43 11 34 34 o 34 34 file path file base name 34 34 amp 34 34
  • golang用户认证

    在开发Web应用过程中 xff0c 用户认证是开发者经常遇到的问题 xff0c 用户登录 注册 登出等操作 xff0c 而一般认证也分为三个方面的认证 HTTP Basic和 HTTP Digest认证第三方集成认证 xff1a QQ 微博
  • golang多语言支持

    专注后台开发相关技术 xff0c 广度深度并存 xff0c 干货情怀同在 微信搜索 盼盼编程 关注这个不一样的程序员 强烈推荐人工智能学习网站 beego中设置全局变量如下 xff1a Translation i18n IL Lang st
  • golang中的pprof支持

    专注后台开发相关技术 xff0c 广度深度并存 xff0c 干货情怀同在 微信搜索 盼盼编程 关注这个不一样的程序员 强烈推荐人工智能学习网站 Go语言有一个非常棒的设计就是标准库里面带有代码的性能监控工具 xff0c 在两个地方有包 xf
  • 大厂动态规划面试汇总,提升内功

    注 xff1a 本文是BAT真题收录很值得大家花心思看完 xff0c 看完会有收获 前言 算法是面试大公司必考的项目 xff0c 所以面试前准备好算法至关重要 xff0c 今天整理的常见的动态规划题目 xff0c 希望可以帮到大家 要想学习
  • 进程知识点,只需这一篇

    前言 你的进程 xff0c 为啥挂了 xff1f 进程挂了 xff0c 这个问题大家并不陌生 学完这篇 xff0c 你会对进程有一定了解 后面碰到进程挂的情况 xff0c 你很快能找到对应解决思路 进程在操作系统中 xff0c 是一个很重要
  • 算法:多数元素,多种解法

    前言 xff1a 以前做数学题的时候 xff0c 老师说 xff1a 你们学习多种解题方法 遇到类似不同的问题 xff0c 你都会了 xff0c 这样能提高解题能力 如果你写出多种解法 xff0c 面试官会对你刮目相看 下面一题 xff0c
  • 栈和队列互相实现,一文弄懂它们的关系

    前言 栈和队列是比较基础的数据结构 无论在工作中 xff0c 还是在面试中 xff0c 栈和队列都用的比较多 在计算机的世界 xff0c 你会看到队列和栈 xff0c 无处不在 栈 xff1a 一个先进后出的数据结构 队列 xff1a 一个
  • linux下调试core dump方式汇总,工作必备技能

    缘起 调试 xff0c 是开发流程中一个非常重要的环节 每个程序员都应 xff0c 具备调试代码的能力 xff0c 尤其对于从事 Linux 下的开发的读者 从事 linux 下后台开发 xff0c 有时候会遇到程序突然崩溃的情况 xff0
  • TCP 连接的前世今生

    前言 大家好 xff01 我是盼盼 xff01 之前写了几篇关于算法和 linux 命令的文章 xff0c 今天来学习下 xff0c 网络协议相关的知识 不管你是客户端 xff0c 还是服务端开发 xff0c 网络协议这块都是要学习和了解的
  • 反向传播算法推导过程(看一篇就够了)

    反向传播BackPropagation算法简称BP xff0c 算是神经网络的基础了 在神经网络中 xff0c 正向传播用于模型的训练 xff0c 模型中的参数不一定达到最佳效果 xff0c 需要进行 反向传播 进行权重等参数的修正 此外
  • 2021-08-21

    Snapper for Mac是一款强大的音频文件编辑软件 Snapper mac版会跟随您在Finder中选择的文件 选择音频文件后 xff0c 它会立即显示波形 并支持50 多种声音文件格式 还等什么 xff0c 快来下载吧 xff01
  • MAC系统如何连接Windows共享文件?MAC系统连接Win共享文件的方法

    MAC系统如何连接Windows共享文件 xff1f MAC系统和Windows是两个不同的系统 xff0c 有时候我们想要MAC系统访问Windows共享文件 xff0c 那么有什么方法呢 xff0c 下面小编就为大家介绍一下 MAC系统
  • mac恢复文件的方法,在Mac上使用时间机器恢复文件

    如果您使用时间机器对 Mac 上的文件进行备份 xff0c 则可以轻松恢复丢失的项目 xff0c 或者恢复文件的较早版本 您可以在很多 App 中使用时间机器 1 在 Mac 上 xff0c 打开想要恢复项目的窗口 例如 xff0c 若要恢
  • 中断响应流水灯控制程序

    include lt reg51 h gt void delay unsigned int i int main void using 0 int i 61 1 EA 61 1 EX0 61 1 IT0 61 1 P0 61 0 while
  • NX二次开发-BlockUI树列表快速插入多个节点

    适用版本 xff1a NX 7 5及以上版本 一 概述 在NX二次开发中 xff0c 我们经常使用BlockUI来设计界面 xff0c 树列表控件 xff08 Tree List xff09 是非常常用的控件之一 xff0c 可以创建表示节
  • 通过fix-broken解决dpkg安装时依赖问题

    以安装teamviewer为例 环境 xff1a Ubuntu desktop 20 04 1 minimal 安装 xff1a span class token operator gt gt span span class token o
  • 【Nginx】解决413错误

    项目场景 xff1a 接收Excel文件 问题描述 调用该接口时发生413错误 接口服务nginx日志 2022 09 09 07 02 18 error 10 10 6 client intended to send too large

随机推荐