导语:深度学习领域经典的 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

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

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

    编者按: 深度学习领域经典的 Adam 算法在大规模并行训练的情况下会导致模型性能损失.为了解决这一问题,微软亚洲研究院采用 BMUF 框架对 Adam 算法进行了并行化,并在微软大规模 OCR 和语 ...

  2. 深入云原生 AI:基于 Alluxio 数据缓存的大规模深度学习训练性能优化

    作者 | 车漾(阿里云高级技术专家).顾荣(南京大学 副研究员) 导读:Alluxio 项目诞生于 UC Berkeley AMP 实验室,自开源以来经过 7 年的不断开发迭代,支撑大数据处理场景的数 ...

  3. 阿里云原生实践:基于 Alluxio 数据缓存的大规模深度学习训练性能优化

    导读:Alluxio 项目诞生于 UC Berkeley AMP 实验室,自开源以来经过 7年的不断开发迭代,支撑大数据处理场景的数据统一管理和高效缓存功能日趋成熟.然而,随着云原生人工智能(Clou ...

  4. 深度干货!如何将深度学习训练性能提升数倍?

    作者 | 车漾,阿里云高级技术专家 顾荣,南京大学副研究员 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 近些年,以深度学习为代表的人工智能技术 ...

  5. 听Alluxio小姐姐讲述:Alluxio云上K8S部署如何加速深度学习训练

    Alluxio云上K8S部署如何加速深度学习训练 在2021 Alluxio Day V中,Alluxio核心研发工程师邱璐,为我们带来[Alluxio云上K8S部署如何加速深度学习训练]的分享 邱璐 ...

  6. 基于NVIDIA GPUs的深度学习训练新优化

    基于NVIDIA GPUs的深度学习训练新优化 New Optimizations To Accelerate Deep Learning Training on NVIDIA GPUs 不同行业采用 ...

  7. 改善深度学习训练的trick总结 | CSDN博文精选

    扫码参与CSDN"原力计划" 作者 | ZesenChen 来源 | CSDN博客精选 在深度学习中,同样一个模型用不同的初始化,数据处理,batch size,学习率,优化器都能 ...

  8. 深度学习的异构加速技术(一):AI 需要一个多大的“心脏”?

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:kevinxiaoyu,高级研究员,隶属腾讯TEG-架构平台部,主要研究方向为深度学习异构计算与硬件加速.FPGA云.高速视觉感知等方向 ...

  9. GPU驱动“后摩尔定律时代” 为HPC和深度学习提供强大加速动力

    中国HPC领域盛会2015年全国高性能计算学术年会(HPC China 2015)今日在无锡开幕.全球视觉计算的行业领袖NVIDIA®(英伟达™)及应用其GPU的众多企业和科研机构,带来近20场报告和 ...

最新文章

  1. java root_java – 如何在没有root的情况下(如Automate和...
  2. Java 8备忘单中的可选
  3. Cadence PCB SI
  4. JavaScript笔记-使用JS管理URL链接(前端小技巧)
  5. php怎么修改div自带属性吗,修改html 属性,css样式。
  6. Oracle的SQL基础之用户与表空间
  7. ssis 包部署_如何使用各种选项从SSIS目录执行已部署的程序包
  8. Flask + Vue 搭建简易系统步骤总结
  9. python内置函数分类_注意 Python 内置函数并不是万能的!
  10. anylogic 学习(1)—— anylogic 简单介绍
  11. JavaScript纯前端上传和下载文件
  12. labview高级视频150讲下载_视频剪辑篇|讲真的,这些软件素材资源我真舍不得分享!(附下载包)...
  13. html中output标签详细介绍
  14. html屏幕缩小图片不失真,html图片失真怎么办
  15. Android作业批改系统(后台管理+前台app)
  16. 资料搜集-JAVA系统的梳理知识3-面试篇
  17. 利用WoWSimpleRegistration实现TrinityCore自助注册
  18. 教你如何把淘宝天猫店铺的图片快速保存下来
  19. 苏州新导关于机房RFID资产管理解决方案案例分析
  20. 【微服务】Nacos通知客户端服务变更以及重试机制

热门文章

  1. monkey如何获取app包名
  2. CIR:2020年全球数据中心应用AOC市场达$42亿
  3. 初级Java程序员所面临的4大挑战
  4. POJ 3174 暴力枚举
  5. Num55 boss09(activiti安装以及API)
  6. 普通帧,关键帧,空白关键帧的区别
  7. 用matlab编辑器打开.m文件
  8. 第11章 AOF持久化
  9. 解决Chrome中UEditor插入图片的选择框加载过慢问题
  10. Fiddler监控面板显示Server栏(Fiddler v5.0)