Revisiting Distributed Synchronous SGD 带有Back-up机制的分布式同步SGD方法 论文精读

news2024/9/24 3:22:26

论文链接:Revisiting Distributed Synchronous SGD

ABS

本文介绍了用于分布式机器学习的同步和异步 S G D SGD SGD,同时指出各自的缺点: s t r a g g l e r s stragglers stragglers s t a l e n e s s staleness staleness

同时为了解决同步 S G D SGD SGD存在 s t r a g g l e r s stragglers stragglers的问题,本文提出了一种新的算法,通过back-up来加速同步 S G D SGD SGD的速度。

注:我第一次接触到 s t r a g g l e r s stragglers stragglers是在MapReduce的论文中,MapReduce中也提出了back-up的解决办法,当然MapReduce中的back-up的方法不是由MapReduce提出的,而是引用了另一篇文章中的方法。当然本文的back-upMapReduce中的有着一些不同的地方。

MapReduceback-up引用的文章是:Arash Baratloo, Mehmet Karaul, Zvi Kedem, and Peter Wyckoff. Charlotte: Metacomputing on the web. In Proceedings of the 9th International Conference on Parallel and Distributed Computing Systems, 1996

1 INTRO

异步 S G D SGD SGD解决分布式机器学习中的通信速率的问题的同时引入了新的问题:过期的梯度。

过期的梯度对模型的收敛速度以及收敛精度都有着不小的影响。

而如果使用同步 S G D SGD SGD有存在 s t r a g g l e r s stragglers stragglers(完成时间远远低于其他结点的节点)的问题。

本文采用同步 S G D SGD SGD但是引入了 b a c k − u p back-up backup机制,能够一定程度的环节 s t r a g g l e r s stragglers stragglers的情况,本文的主要贡献如下:

  • 阐明了异步 S G D SGD SGD中过期的梯度对测试精度的负面影响;
  • 阐明了通过 S G D SGD SGD s t r a g g l e r s stragglers stragglers对训练时间的影响;
  • 提出带有 b a c k − u p back-up backup机制的同步 S G D SGD SGD
  • 做了实验来验证新方法的收敛速度以及收敛精确度;
  • 通过实验证明新方法比异步 S G D SGD SGD更加优秀(不论是收敛速度还是收敛精度)

1.1 Preliminaries and Notation

通常我们的训练需要让损失函数最小。

而我们可以通过梯度下降的方法来求出一个局部的最优解。

当将机器学习通过分布式来实现的时候,所需要做的事情是类似的,只是我们需要定期的从各个节点收集数据进行一次数据的汇总再将新的数据分发给各个节点进行新的训练。正是有了数据收集和分发的过程,才产生了两种不同算法同步 S G D SGD SGD和异步 S G D SGD SGD

2 Asynchronous Stochastic Optimization

异步 S G D SGD SGD的算法如下所示:

在这里插入图片描述

需要注意的是,虽然叫做异步算法,但是上述的过程还是存在一些同步机制,例如工作结点在从参数服务器读取参数的时候,必须要保证读取到的参数比上一轮读取到参数新(如果不这样,那么工作结点就会做多余的计算,当然这往往是必然的,因为在自己进行下一轮的读取的时候,自己本轮的参数应该会上传到服务器进行更新),也就是说在读取参数的时候不需要所有的工作结点都完成自己本轮的工作再上传参数,这也就是异步的意思。

这样做能够充分的利用资源,但是也同样存在问题,在一个工作结点进行计算的过程中 A l g o r i t h m   1   l i n e 3 − 7 Algorithm\ 1\ line 3 -7 Algorithm 1 line37时,其他的工作结点可能完成了某一轮的计算,将参数上传到服务器进行更新,这也就代表正在进行工作的工作结点的参数过时了,也就是出现了 s t a l e n e s s staleness staleness

后续的实验会说明过时梯度对最终的影响有多大。

T a b l e   1 Table\ 1 Table 1展示了ImageNet上使用Inception模型进行训练,工作结点个数为 40 40 40的异步 S G D SGD SGD在各层出现梯度过期情况。

在这里插入图片描述

虽然异步 S G D SGD SGD存在过期梯度的问题,但是在工作结点的个数比较少的情况下,异步 S G D SGD SGD的效果还是不错的,但是当工作结点的个数增加时,异步 S G D SGD SGD就变得力不从心了。

2.1 Impact of Staleness on Test Accuracy

实验的细节可以在原文的附录中找到。

F i g u r e   2 Figure\ 2 Figure 2展示了平均过期梯度数量与测试精度的关系。

在这里插入图片描述

F i g u r e   2 Figure\ 2 Figure 2可以看出当梯度过期出现的次数越多的时候,整体的错误率会有着明显上升,特别是从 100 100 100 120 120 120这一段。

事实上当梯度过期的平均值达到 15 15 15的时候就已经出现错误率剧烈上升了,为了能够做更大数值的梯度过期,作者使用了一些技巧:

  • 前三个 e p o c h s epochs epochs过期的数量增长较慢;
  • 当梯度过期的数量过大时候,降低学习率;
  • 如果上述两点依然会导致非常大的错误率,那么就多次进行实验,取最好的结果。

3 Revisiting Synchronous Stochastic Optimization

过去提出了同步 S G D SGD SGD该方法解决了异步 S G D SGD SGD中过期梯度的问题,但是同时又引入了新的问题,现在每一次同步的时间,取决于服务器最后收到的参数的时间(通常是完成本轮本地计算最慢的工作结点,也就是 s t r a g g l e r s stragglers stragglers)。

s t r a g g l e r s stragglers stragglers的出现是很常见的,在规模越大的分布式集群中收到 s t r a g g l e r s stragglers stragglers的影响就会越大,而出现本地计算变慢的原因也是多种多样的:例如硬件出现故障,其他进程占用资源等等。

为了解决 s t r a g g l e r s stragglers stragglers的问题,作者提出了back-up的方法,作者将参与训练的工作结点划分为两部分: N N N个正常工作者和 b b b个备用工作者。

N + b N+b N+b个结点依然执行不同的数据上的计算,当服务器收到任意 N N N个结点的参数之后,服务器就可以进行本轮的参数聚合。

注意,上述的过程中 N N N b b b仅仅只是两个参数,在算法的过程中并没有实实在在地标注那个结点属于正常工作者还是备用工作者,而是类似于自动分配的,通常(网络不出现卡顿)情况下,先完成本地计算的 N N N个结点会成为正常工作者,剩下的 b b b个结点此时就是备用工作者,也可以看做是 b b b s t r a g g l e r s stragglers stragglers,每一轮更新的备用工作者可能会发生变化。

A l g o r i t h m 3 , 4 Algorithm 3, 4 Algorithm3,4分别描述了工作结点的执行步骤和参数服务器执行的步骤:

在这里插入图片描述

工作结点开始之前先从参数服务器读取本轮的参数(如果本轮的参数还没准备好,那么此时会阻塞),之后工作结点计算自己本地的梯度,计算完成后将梯度发送给服务器。可以看到工作结点的步骤与传统的同步 S G D SGD SGD没有任何区别,而不同的地方出现在参数服务器。

参数服务器会收集本轮工作结点梯度信息(梯度信息带有时间戳,会丢弃之前的梯度,因为可能在进行新的一轮的时候,之前的 s t r a g g l e r s stragglers stragglers才完成),当收集到 N N N个梯度信息的时候就进行参数的聚合,之后就可以将参数发送给工作结点进行新的一轮计算。

上面算法中的 θ ‾ \overline {\theta} θ是用于性能估计的。

说明:个人认为上面的算法存在一个问题。从我的理解来看,当一个工作结点在某一轮成为了 s t r a g g l e r straggler straggler之后,那么其他正常工作结点再开始下一轮计算的时候,该结点可能还没有完成本轮的计算,如果正常工作结点没有出现“卡顿”的情况,那么该工作结点在下一轮依然有很大的可能再一次成为掉队者,这样下去就会一直出现恶性循环, s t r a g g l e r s stragglers stragglers会更有可能成为 s t r a g g l e r s stragglers stragglers。这就相当于这些 s t r a g g l e r s stragglers stragglers的数据完全没有参与到更新,这等价于在一开始训练的时候我们人工的丢弃一些固定的数据,这样并不能很好的利用数据。关于这个问题,我认为至少有两种可以解决的方法:

  • 根据 k k k折交叉验证的想法,我想到了一个改进的想法,每一次参数服务器完成本轮更新后,应该向所有的工作结点发送信息(这条信息的数据量非常小,所以不会称为瓶颈),当收到这条信息的时候,还没有完成本轮本地计算结点应该停止本轮计算(因为参数已经进行更新了,再计算也没有意义了),然后直接开始下一轮的读取参数操作,这样当前的 s t r a g g l e r s stragglers stragglers在下一轮的时候才有公平竞争的机会,因为这些 s t r a g g l e r s stragglers stragglers的性能可能在下一轮的时候恢复,这个时候新的 s t r a g g l e r s stragglers stragglers就很有可能是其他出现性能下降的结点,这样每轮丢弃的数据具有随机性,很类似于 k k k折交叉验证。
  • 除了上面的方法,服务器参数还可以在收到之前的梯度的时候不进行丢弃,而是将该部分的梯度也对参数进行修改,但是并不增加本轮收到的梯度个数,这样做的目的就相当于是延迟修改,这似乎比直接丢弃掉要好一些。但是延迟丢弃可能会对整体造成不好的影响,这个就需要具体进行实验分析了,或者设计更加合理的延迟更新操作。

3.1 Straggler Effects

这一部分的实验是展示 s t r a g g l e r s stragglers stragglers的负面影响,实验的细节可以在原文的附录找到。

F i g u r e   3 Figure\ 3 Figure 3展示了某个模型上等待不同个数的结点完成本地计算需要的时间(一共有 100 100 100个工作结点), F i g u r e   4 Figure\ 4 Figure 4代表的是等待 k k k个结点完成本地计算所需要的平均数(Mean)和中位数(Median):

1

F i g u r e   3 Figure\ 3 Figure 3的纵轴代表的是整个迭代过程的占比,横轴代表所需要的时间, k k k代表等待 k k k个结点完成本地计算。

从上图中我们可以看到的是,如果要等待 100 100 100个工作结点都完成本轮的计算,需要的时间比等待的 90 90 90个结点的时候增加了很多,而且图片的说明还指出:最大的一次等待时间达到了 310 s 310s 310s。这表明 s t r a g g l e r s stragglers stragglers的影响是非常大的,同时上面的图片也说明 s t r a g g l e r straggler straggler的占比是非常低的。

为了确定 N , b N,b Nb的取值,作者做了实验 F i g u r e   5 Figure\ 5 Figure 5是不同的 N N N收敛所需要的迭代次数( N + b = 100 N+b=100 N+b=100),可以看到 N = 100 , b = 0 N=100, b = 0 N=100,b=0的时候所需要的迭代次数最少。不过需要注意的时候迭代次数少时间并不一定短,如果 N = 100 N=100 N=100那么需要等待所有的工作结点完成计算,那么由上一个实验可以看到这样的时间会非常长,于是作者作者用 F i g u r e   6 Figure\ 6 Figure 6来展示时间与 N N N的关系。

在这里插入图片描述

可以看到 N = 96 , b = 4 N=96,b=4 N=96,b=4的时候收敛所花费的时间最少。

注意:并不是 N = 1 , 2 , 3 , . . . , 100 N=1, 2, 3, ..., 100 N=1,2,3,...,100的实验均做了,作者只做了部分的实验,其余的地方的是通过线性插值计算得来。

4 Experiments

更多的实验细节可以原文的附录中找到,这里只介绍一些重要的结果。

4.1 Metrics of Comparison: Faster Convergence, Better Optimum

评价的指标有两个:收敛速度和准确率。

做了关于不同学习率的实验,学习率初始化后会随着训练的进行进行指数级别的衰减。

Table 2展示了不同的初始学习率下的收敛速率以及收敛后的准确。

在这里插入图片描述

Figure 7的左边展示了不同学习率初始值的测试集精度随着迭代次数的变化,右边则展示了不同学习率到达某个精度所需要的迭代次数。

在这里插入图片描述

从上面的实验结果可以看出来,较大的学习率具有较慢的收敛速度,但是收敛速度变慢的情况下,精确度相对也有所提高。有时候较小的学习率也有可能既不能获得更高的准确度,也不能获取更快地收敛。

4.2 Inception

Inception是一个2016年提出的一个训练模型,本部分的实验数据集是ImageNet,更多该实验的细节可以在原文的附录部分找到。

在这里插入图片描述

Figure 8展示了这一部分的实验结果:

  • (a)图展示了不同工作结点个数下各算法的测试准确度与迭代次数的变换关系。
  • (b)图展示了不同工作结点个数下各算法最终收敛的测试精度。
  • ©图展示了不同工作结点个数下各算法收敛所需要的迭代次数。
  • (d)图展示了不同工作结点个数下各算法收敛所需要的时间。
  • (e)图展示了不同工作结点个数下各算法每一次迭代的平均时间。

从上面的结果可以看出本文提出的算法收敛的更快,准确度更加高。

4.3 Pixel CNN Experiments

Pixel CNN是2016年提出的一个模型,数据集是CIFAR-10。

实验结果如Figure 9所示:

在这里插入图片描述

左图展示的是NLL和训练时间的变化(NLL越小效果越好),右图则是达到某个NLL值所需要的时间。

值得指出的异步的 S G D SGD SGD的效果不如串行的 R M S P r o RMSPro RMSPro,这也表明过期的梯度对训练结果有着较大的影响。

5 Related Work

这一部分介绍了一些相关工作,个人认为其中有两篇很有参考意义,后续会做这两篇论文的精读:

软同步:Staleness-Aware Async-SGD for distributed deep learning,在进行异步 S G D SGD SGD先进行一部分的本地聚合。

不需要参数服务器进行分布式机器学习:Ako: Decentralised deep learning with partial gradient exchange使用轮转的方式来实现参数的聚合。

6 Conclusion and Future Work

随着数据集的以及模型的增大,分布式机器学习会变得越来越重要。

本文介绍了同步 S G D SGD SGD和异步 S G D SGD SGD各自的缺点,并且提出了一定程度上解决同步 S G D SGD SGD缺点的新方法。

未来可以将能够共享的工作结点先进行本地的聚合,再在服务器进行参数聚合。亦或是可以将back-up机制更改为超时机制,这也意味着每轮参与参数聚合的结点个数将不再固定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/356804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【go语言grpc之client端源码分析二】

go语言grpc之server端源码分析二DialContextparseTargetAndFindResolvergetResolvernewCCResolverWrapperccResolverWrapper.UpdateStatecc.maybeApplyDefaultServiceConfigccBalancerWrapper.updateClientConnState上一篇文章分析了ClientConn的主要结构体成员,然后…

扫雷小游戏 - C语言

目录 一、扫雷游戏 1.游戏一共创建使用了三个文件 2.test.c 文件代码(游戏逻辑) 3.game.h - 必要的函数声明代码 4.game.c 游戏所有函数实现代码 一、扫雷游戏 1.游戏一共创建使用了三个文件 test.c - 测试游戏逻辑 game.h - 游戏代码包含的函数…

低频量化之指数 PE-PB-偏离 数据

目录历史文章股票明日涨停预测指数PEPB分位指数PE分位指数PB分位行业指数PEPB分位行业指数PE分位行业指数PB分位指数60日线偏离数据指数MA60偏离统计上证指数 MA60偏离度深证成指 MA60偏离度创业板指 MA60偏离度中小100 MA60偏离度上证50 MA60偏离度沪深300 MA60偏离度中证500 …

代码随想录算法训练营第45天动态规划 背包基础 1 2、 416. 分割等和子集

文章目录01背包基础 (二维数组)思路递推公式初始化遍历顺序一维dp数组(滚动数组)一维数组的递推公式遍历顺序LeetCode 416. 分割等和子集思路总结01背包基础 (二维数组) 思路 根据动态规划五部进行分析&a…

Vulnhub 渗透练习(八)—— THE ETHER: EVILSCIENCE

环境搭建 环境下载 靶机和攻击机网络适配都选 NAT 即可。 信息收集 主机扫描 两个端口,22 和 80,且 apache httpd 2.4.0~2.4.29 存在换行解析漏洞。 Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中…

跨域问题的三种解决办法

我们平时对于前后端联调的项目,以下的错误是经常常见的,我们查看浏览器报错: Access to XMLHttpRequest at http://localhost:63110/system/dictionary/all fromorigin http://localhost:8601 has been blocked by CORS policy: No Access…

自动化测试5年经验,分享一些心得

自动化测试介绍 自动化测试(Automated Testing),是指把以人为驱动的测试行为转化为机器执行的过程。实际上自动化测试往往通过一些测试工具或框架,编写自动化测试用例,来模拟手工测试过程。比如说,在项目迭代过程中,持…

【Flutter入门到进阶】Dart进阶篇---Dart多线程异步原理

1 Isolate 1.1 什么是Isolate 1.1.1 概念 线程?异步?隔离?到底什么意思? Isolate中文意思是隔离,从使用角度来说是Dart的线程,但是从本质虚拟机的实现角度来讲Isolate是一组封装。 isolate可以理解为dar…

群晖-第1章-IPV6的DDNS

群晖-第1章-IPV6的DDNS 方案:腾讯云群晖DS920 本文参考群晖ipv6 DDNS-go教程-牧野狂歌,感谢原作者的分享。 这篇文章只记录了我需要的部分,其他的可以查看原文,原文还记录了更多的内容,可能帮到你。 一、购买域名 …

【基于众包标注的语文教材句子难易度评估研究 论文精读】

基于众包标注的语文教材句子难易度评估研究 论文精读信息摘 要0 引言1 相关研究2 众包标注方法3 语料库构建3.1 数据收集3.1 基于五点量表的专家标注3.3 基于成对比较的众包标注4 特征及模型4.1 特征抽取4.2 模型与实验设计4.2.1 任务一:单句绝对难度评估4.2.2 任务二:句对相对…

《JavaScript百炼成仙》,简单但是挺有效的

编程之修,重在积累,而非资质。资质虽然重要,可是后天的努力更不可少。 《JavaScript百炼成仙》是一本以玄幻小说的形式,来讲述JavaScript的知识。 此篇仅仅是我快速阅读《JavaScript百炼成仙》这本书的笔记,流水账笔…

MySQL进阶篇之InnoDB存储引擎

06、InnoDB引擎 6.1、逻辑存储结构 表空间(Tablespace) 表空间在MySQL中最终会生成ibd文件,一个mysql实例可以对应多个表空间,用于存储记录、索引等数据。 段(Segment) 段,分为数据段&#x…

python基于vue微信小程序 房屋租赁出租系统

目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发环境 4 2.1 2.2MyEclipse环境配置 4 2.3 B/S结构简介 4 2.4MySQL数据库 5 2. 3 系统分析 6 3.1系统可行性分析 6 3.1.1经济可行性 6 3.1.2技术可行性 6 3.1.3运行可行…

面试准备知识点与总结——(虚拟机篇)

目录JVM的内存结构JVM哪些部分会发生内存溢出方法区、永久代、元空间三者之间的关系JVM内存参数JVM垃圾回收算法1.标记清除法2.标记整理3.标记复制说说GC和分代回收算法三色标记与并发漏标的问题垃圾回收器项目中什么时候会内存溢出,怎么解决类加载过程三个阶段何为…

Docker 架构简介

Docker 架构 Docker 包括三个基本概念: 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。容器&am…

【力扣-LeetCode】64. 最小路径和 C++题解

64. 最小路径和难度中等1430收藏分享切换为英文接收动态反馈给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入&#xff…

实例1:控制树莓派板载LED灯闪烁

实例1:控制树莓派板载LED灯闪烁 实验目的 通过背景知识学习,了解四足机器人mini pupper搭载的微型控制计算机:树莓派。通过对树莓派板载LED灯的状态读写控制,熟悉树莓派本身的操作及Linux中文件的读写。掌握常见函数time.sleep(…

初识Hadoop,走进大数据世界

文章目录数据!数据!遇到的问题Hadoop的出现相较于其他系统的优势关系型数据库网格计算本文章属于Hadoop系列文章,分享Hadoop相关知识。后续文章中会继续分享Hadoop的组件、MapReduce、HDFS、Hbase、Flume、Pig、Spark、Hadoop集群管理系统以及…

rewrite中的if、break、last

目录 rewrite 作用: 依赖: 打开重定向日志: if 判断: location {} 本身有反复匹配执行特征 在 location 中加入 break 和 last (不一样) 加了break后,立刻停止向下 且 跳出。 加了last&#xf…

Windows 版本ffmpeg编译概述

在使用ffmpeg过程当中,ffmpeg在Linux(包括mac,android)编译非常容易,直接configure,make即可,Android需要交叉编译,在windows就比较麻烦,庆幸的是ffmpeg官方提供已编译好Windows版本的二进制库(http://ffmpeg.org/download.html#b…