当前位置: 首页 > 编程日记 > 正文

让大规模深度学习训练线性加速、性能无损,基于BMUF的Adam优化器并行化实践...

导语:深度学习领域经典的 Adam 算法在大规模并行训练的情况下会导致模型性能损失。为了解决这一问题,微软亚洲研究院采用 BMUF 框架对 Adam 算法进行了并行化,并在微软大规模 OCR 和语音产品数据集上进行了测试,使其在并行训练中几乎实现了线性加速的同时,模型性能基本无损。

作者 | 陈凯、霍强

来源 | 微软研究院AI头条(ID: MSRAsia)

作为一种自适应步长随机梯度优化器,自2014年提出以来,Adam 算法便以其卓越的性能风靡深度学习领域。为了提高应用于训练大规模任务时的效率,该算法通常与同步随机梯度(Synchronous Stochastic Gradient,SSG)技术相结合,采用数据并行(data parallel)的方式在多台机器上执行。在本文中,我们称这一方法为 Sync-Adam。

本质上来讲,Sync-Adam 通过将一个 minibatch 内样本的梯度计算分布到多台机器上达到加速目的,因此通信十分频繁,并且随着并行机器数目增多,minibatch 内样本的数量也成比例增加,这种情况下,通常会损害最终得到的模型的性能。为解决基于 SSG 的 Adam 算法可扩展性差的难题,我们把目光投向了逐区块模型更新滤波(Blockwise Model-Update Filtering, BMUF)框架。

BMUF 是一种通信高效的通用分布式优化算法框架,于2016年由微软亚洲研究院语音组的研究人员提出并发表。该算法在多个并行工作机之间周期性同步模型更新信息,并与历史更新信息相结合提升全局模型性能。与基于 SSG 的算法相比,BMUF 具有通信频率较低、训练几乎线性加速、模型性能基本无损的特点。这一算法已经在工业界广泛用于大规模深度学习模型的训练。

本文中,我们采用 BMUF 框架并行化 Adam 算法,并在微软大规模 OCR 和语音产品数据集上进行了测试。实验结果表明,在大规模 OCR 任务中,BMUF-Adam 在多达64机的并行训练中几乎实现了线性加速的同时,基本没有模型性能损失,在32机大词汇量连续语音识别任务中也获得了类似效果。

接下来我们探讨如何采用 BMUF 框架赋能 Adam 算法,在大规模深度学习任务上成就不凡。

BMUF框架回顾

在基于 BMUF 的训练框架下,假设我们总共有 N 个并行工作机,一个工作机可以是一块或多块 GPU 卡,也可以是一个计算节点。给定一个包含 Nτ 个 minibatch 的训练数据子集,首先我们将这些数据均匀分布到 N 个并行工作机,每台工作机获得 τ 个 minibatch。从一个共同的初始模型 θ_(t-τ)^((init)) 开始,N 个工作机独立更新各自的局部模型 τ 步,得到 {θ_(t,1),θ_(t,2),…,θ_(t,N)},对局部模型取平均得到 θ ̅_t。这一过程称之为数据块内并行优化(Intra-Block Parallel Optimization, IBPO)。与直接将 θ ̅_t 作为全局模型不同,BMUF 技术将历史更新信息与当前更新信息结合,得到全局模型:

其中 η 是区块冲量(block momentum),ζ 为区块学习率(block learning rate),在本文中,我们设置 ζ=1。BMUF 通过采用区块冲量的方式弥补每个 minibatch 由于平均操作带来的对最终模型贡献不足的问题,来提升模型性能。为了方便接下来的分析,我们引入一个新的变量 ρ_n 表示 Δ_n 的等效 minibatch 数目,由于

因此我们可以得到:

依据文献[2], 如果我们设置 η=1-1/N,那么 lim┬(n→∞)⁡(ρ_n)=Nτ。通过这一推导可以看出,lim┬(n→∞)⁡(Δ_n) 可以模拟序列化处理 Nτ 个 minibatch 的模型更新。上述的推导基于 θ ̅_t-θ_(t-τ)^((init)) 的平稳性假设。

本文中,我们采用 Nesterov 区块冲量技术,得到下一 IBPO 操作的初始模型:

由于

因此

Adam算法回顾

Adam 是一种采用随机梯度的一阶矩和二阶矩估计确定每个参数更新步长的算法,其具体形式如下:


其中 θ_t 为模型参数,⨀ 表示逐元素乘法,g_t 为第 t 个 minibatch 对应的随机梯度。在实际使用中,精确的一阶矩和二阶矩的获得需要大量的计算,Adam 算法基于 E[g_t] 和 E[g_t⊙g_t] 的短时平稳假设,采用随机梯度序列的指数滑动平均来对一阶矩和二阶矩进行近似:

其中

BMUF-Adam算法

由于 BMUF 是通用分布式优化框架,因此我们可以把 Adam 作为局部优化器嵌入其中。结合我们对 BMUF 和 Adam 的回顾,可以发现,如果不作任何处理直接将 Adam 嵌入 BMUF 框架,会面临 Adam 的一阶矩和二阶矩信息与模型参数不匹配的问题。假如我们设置

很明显由于 ηΔ_n 的存在,一阶矩和二阶矩的平均对于下一 IBPO 的初始参数值来说已经陈旧。由于 ηΔ_n 的等效 minibatch 数目为 ηρ_n,因此我们认为,与 θ_t^((init)) 兼容的 m_t^((init)),v_t^((init)) 可以通过以 m ̅_t,v ̅_t 起始,处理 ηρ_n 个 minibatch 得到。

根据一阶矩的更新公式,我们知道

结合 E[g_t] 的平稳性假设,可以得到

其中 E[g^((n))] 表示第 n 次 IBPO 的 minibatch 随机梯度期望,因此

由于

最终我们得到

分析 m ̅_t 和 m_t^((init)) 的计算公式,不难发现,当 τ 比较小而 N 比较大时,m_(t-τ)^((init)) 对 m ̅_t 的过大贡献导致其与 θ_t^((init)) 的不一致现象更为严重,这一情况在我们的实验结果中得到了验证,而等效 minibatch 的引入,大大降低了 m_(t-τ)^((init)) 这一历史陈旧值对 m_t^((init)) 的贡献,可以起到改善模型性能的效果。同时,采用较小的 β_1 也能起到降低 m_(t-τ)^((init)) 贡献的作用。上述分析同样适用于二阶矩。最终我们得到 BMUF-Adam 算法如下:

实验结果

我们首先在微软大规模英文 OCR 任务上,对该方法进行了验证。首先比较将 Adam 嵌入 BMUF 框架时,采用不同矩估计策略的效果,结果如表1(该实验中模型同步周期 τ=8):

表1:实验结果

我们发现,直接采用平均策略时,随着并行机器数目的增多,模型性能出现了明显下降,而我们提出的策略显著缓解了模型性能损失,而较小 β_1 的采用,显著提高了模型性能。接下来,在该任务上,我们对比了 Sync-Adam 和 BMUF-Adam,结果如表2:

表2:Sync-Adam 和 BMUF-Adam 比较结果

随着并行机器数目的增多,Sync-Adam 训练的模型出现了显著的性能下降,且训练数据处理的加速比明显变差。BMUF-Adam 在几乎线性加速模型训练的同时,基本不损失模型性能。

同时我们还在微软基于6000小时语音训练数据集的语音识别任务上对 BMUF-Adam 算法进行了验证,结果如表3:

表3:在语音识别任务上的实验结果

BMUF-Adam 再次在基本不损失模型性能的前提下,实现了模型训练的几乎线性加速,展示出了优秀的可扩展性。


总结

我们在本文中采用 BMUF 框架对广泛使用的 Adam 算法进行了并行化,实验结果显示该算法相比传统的基于 SSG 的算法具有更快的训练速度,更好的模型性能,更优秀的可扩展性。该算法已应用于微软 OneOCR 和语音产品等多个产品中。

论文链接:

https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=9052983

推荐阅读

  • 全球Python调查报告:Python 2正在消亡,PyCharm比VS Code更受欢迎

  • 看他那台笔记本,盲猜是个程序员

  • 来了来了!趋势预测算法大PK

  • 附代码 | OpenCV实现银行卡号识别,字符识别算法你知多少?

  • 没错,你离分布式搜索只差一个Elasticsearch入门

  • 重磅!阿里巴巴开源首个边缘计算云原生项目 OpenYurt

  • 区块链共识算法总结 | 原力计划

  • 你点的每个“在看”,我都认真当成了AI

相关文章:

Spring AOP AspectJ Pointcut Expressions With Examples--转

原文地址:http://howtodoinjava.com/spring/spring-aop/writing-spring-aop-aspectj-pointcut-expressions-with-examples/ 1) Matching Method Signature Patterns The most typical pointcut expressions are used to match a number of methods by their signatu…

限免!百名AI大咖,20大技术和行业论坛,不可错过的开发者嘉年华

根据《2020科技趋势报告》的预测,AI将引发第三次计算浪潮,也是重塑世界最大的动因之一。而在全球人工智能技术的赛道上,中国无疑是领先者,到2030中国将成为全球主要的人工智能创新中心。在这样的大环境下,如何抓住机遇…

浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击

旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/14/network_attack_of_blockchain_ddos_attack/ 写在前面的话 自比特币诞生到现在,比特币(网络)经历过大大小小非常多次的攻击,尤其在比特币诞生之初…

C++中#include的工作原理

大多数人可能对“#include”比较熟悉,因为我们写C/C程序的时候都会写的字符串之一,但是它是具体怎么工作的?或者它的原理是什么呢? 可能不太熟悉,也有可能没有去关心过。我们只关心程序能否正确运行,或者程…

浅谈几种区块链网络攻击以及防御方案之其它网络攻击

旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特币诞生到现在,比特币(网络)经历过大大小小非常多次的攻击,尤其在比特币诞生之初…

基于深度学习和传统算法的人体姿态估计,技术细节都讲清楚了

作者 | 站长 pursueYfuture来源 | AI专栏(ID: pursue-Y-future)计算机视觉的一大研究热点是人体姿态估计,还有很多问题急需解决,比如遮挡,交互等等。在最近的CVPR2020里边也有很多这方面的工作。本文站长主要是想谈谈基…

怎么让百度快速重新收录

每天更新网站和做外链让百度重新收录的快速方法很多人都比较头疼让百度如何重新来收录你站点,这里为大家介绍一下我的经验;大家都知道做网络推广,特别是企业站推广,如果能在相关的关键字在搜索引擎里有个好的名次,肯定能给企业增长…

HQL语句大全

Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。Hibernate配备了一种非常强大的查询语言&#…

自动创建阿里云抢占式实例

旧博文,搬到 csdn 原文:http://rebootcat.com/2020/08/24/auto_run_aliyun_spot/ aliyun_spot 自动创建阿里云抢占式实例。 支持一下作者,购买阿里云 背景 阿里云抢占式实例应该属于阿里云的一种闲置资源利用,性价比非常高&am…

What?! Python一行代码,能玩这么多童年的游戏?

来源 | 早起 Python责编 | Carol封图 | CSDN 下载自视觉中国儿童节就要来了,虽然秃头程序员没有头发,但是童心还是一直都在的,今天就分享一个私藏的GitHub项目——free-python-games,一行代码就能进入使用Python开发的小游戏快乐…

McAfee可能要收购NitroSecurity?

近日,根据国外媒体报道和业界人士的坊间传闻,有传闻指McAfee可能将在近期收购SIEM厂商NitroSecurity。最近,NitroSecurity正在准备IPO,去年年收入约4000万美元,在Gartner的MQ中位于Leader阵营。 NitroSecurity的SIEM技…

进程间通信IPC之--共享内存

每个进程各自有不同的用户地址空间,任何一个进 程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲 区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读…

Scons构建C++项目

旧博文,搬到 csdn 原文:http://rebootcat.com/2020/08/30/scons/ 前言 我是一个 linux c 开发者,但是一直对 Makefile 的语法很是头痛,每次都记不住,所以每次写 Makefile 都很痛苦,Makefile 里需要你自己编…

2020 AI产业图谱启动,勾勒中国AI技术与行业生态

《2020年国务院政府工作报告》提出,重点支持「两新一重」建设。其中「两新一重」中的第一个「新」,就是新基建,而人工智能是新基建的重要组成部分。新基建首次被纳入政府工作报告后,各大科技厂商纷纷押注,重金投向「新…

Windows Phone 7 SDK 7.1 Beta2 发布

早上看到消息,有Marketplace账号的筒子们注意了,可以去下载芒果的ROM了,一个开发者账号只能更新一个WP7,以下是App hub上的消息:来自http://create.msdn.com/en-US/news/Mango_Beta。关于开发工具的更新,可…

javascript基础语法——表达式

前面的话 一般地,关于javascript基础语法,人们听得比较多的术语是操作符和语句。但是,其实还有一个术语经常使用,却很少被提到,这就是javascript表达式(expression)。本文将详细介绍javascript表达式,表达式…

Hexo Next 博客添加相册瀑布流

原文:https://rebootcat.com/2020/09/19/nextphotowall/ 前言 一直没有时间来整理下博客搭建的一些事情,现在补上一篇,给 Hexo Next 博客添加一个相册功能,使用瀑布流的方式。 原理说明 使用 github 作为仓库存储图片文件&…

【分享几个日常巡检 监控数据库的语句】

查看数据库表空间语句 select df.tablespace_name "表空间名",totalspace "总空间M",freespace "剩余空间M",round((1-freespace/totalspace)*100,2) "使用率%" from (select tablespace_name,round(sum(bytes)/1024/1024) totalspa…

AI换脸、声音篡改等,明确写入新版《民法典》

来源 | HyperAI超神经5 月 28 日,十三届全国人大三次会议表决通过了《中华人民共和国民法典》(以下简称《民法典》)第四编人格权中的第四章肖像权,明确提出了以信息技术手段,对于他人肖像、声音等权益的侵害认定。《民…

awk: (FILENAME=- FNR=1) 致命错误: 试图访问字段 -2

执行:awk {print $(NF-2)} aa.log出现错误:awk: (FILENAMEaa.log FNR1) 致命错误: 试图访问字段 -2可能和aa.log中数据有关系:改为:awk NF>1{print $(NF-2)} aa.log转载于:https://blog.51cto.com/henly/1786692

迁移博客到香港虚拟空间

原文: https://rebootcat.com/2020/09/20/virtual_space_blog/ 缘起 我的博客一直采用的是 github pages 来托管,中间断断续续的也没怎么管理过,偶尔写几篇博客,所以也就没怎么关心过访问速度,搜索引擎收录等问题。 …

自动化神经网络理论进展缓慢,AutoML算法的边界到底在哪?

作者 | 夕颜出品 | CSDN(ID:CSDNnews)「AI 技术生态论」 人物访谈栏目是 CSDN 发起的百万人学 AI 倡议下的重要组成部分。通过对 AI 生态顶级大咖、创业者、行业 KOL 的访谈,反映其对于行业的思考、未来趋势判断、技术实践,以及成…

让电脑通过gns3里的路由器上网

题目我感觉写的不好,反正就是这个意思,看下文 头几天有网友问cisco2811路由器怎么用ACL封掉QQ,当时就想帮他,但是手里又没有cisco路由器,只有GNS3 cisco模拟器。 现在的问题就是要用gns3模拟器的路由器充当真实工作中的…

文件上传的渐进式增强

文件上传是最古老的互联网操作之一。 20多年了,它几乎没变,还是原来的样子:操作麻烦、缺乏交互、用户体验不佳。在这个新技术日新月异的时代,显得非常落伍。 网页开发者们想了很多办法,试图提升文件上传的功能和操作体…

使用 mkdocs 搭建个人 wiki 站点

原文: https://rebootcat.com/2020/09/20/wiki/ why wiki 博客通常是用来记录一些完整的文章,每篇文章有一个主题。但是我想把平日里的一些笔记也记录到我的博客里,但笔记是零散的,随时的,不是完整的一个主题。所以打…

追忆童年,教你用Python画出儿时卡通人物

作者 | 张同学来源 | 凹凸数据大家好,我是张同学。又到一年一度的国际儿童节,作为逢节必过的程序猿,怎么可以放过这个学习技能的机会呢?于是,今天我们来学习 Python 的 Turtle 库绘制童年的卡通人物,一起做…

xx学OD -- 消息断点 RUN跟踪(上)

这一篇讲的是 消息断点和RUN跟踪的简单知识这一篇没怎么看明白 大概使用知道了 怎么用不太清楚。介绍本次软件特点输入后木有反应(纱布垃圾的。。哈哈)启动OllyDBG载入这个程序,F9让它运行。这个程序按我们前面讲的采用字串参考或函数参考的方法都很容易断下来。…

iOS-UIWebView添加头部和尾部

2019独角兽企业重金招聘Python工程师标准>>> 前言 项目中使用UIWebView显示本地或者是服务器上的页面很容易,但是仅限于显示页面,可控性并不高,如果有需要在头部和尾部加上原生的view,显示部分信息相对于全部使用UIWeb…

epoll 入门例子 tcp server/client

原文: https://rebootcat.com/2020/09/26/epoll_examples/ 复习一下 上一篇博文 epoll原理深入分析 详细分析了 epoll 底层的实现原理,如果对 epoll 原理有模糊的建议先看一下这篇文章。那么本文就开始用 epoll 实现一个简单的 tcp server/client。 本…

张红忠:智慧化时代,如何通吃5G模组、AIoT?

受访者 | 张红忠,日海智能副总裁、云AIoT创新中心总经理记者 | Aholiab,编辑 | 邓晓娟出品 | AI科技大本营(ID:rgznai100)日海智能是目前国内AIoT领域的头部企业,以AIoT为核心,形成了5G&AI物联网终端、…