NeurIPS'22 | GBA:面向搜推广模型的同步和异步自由切换的训练范式

news2024/11/17 11:57:33

丨目录:

   · 搜推广增量迭代挑战

   · GBA的诞生

   · GBA的收敛性分析

   · GBA工程实现

   · GBA实验效果

   · 未来展望

近日,阿里巴巴在国际顶级机器学习会议NeurIPS 2022上发表了新的自研训练模式Gloabl Batch gradients Aggregation GBA(论文链接:https://arxiv.org/abs/2205.11048),由阿里妈妈事业部搜索广告团队和智能引擎事业部XDL训练引擎团队联合探索和研发。GBA的提出对阿里巴巴搜推广稀疏模型的训练范式带来了架构性的跨越式升级。本文将从GBA的设计思路、收敛性分析及工程实现等方面展开介绍,欢迎阅读交流。

在过去一段时间内,高性能同步训练架构在阿里巴巴稀疏场景的全面落地,解决了稀疏场景无法充分利用GPU,以及缺乏高效的同步训练方案两个“硬骨头”。从资源性能角度,使得不同场景的深度学习任务训练加速比(每天训练样本日期数量)提高5~10倍,并利用GPU带来3~5倍的成本优势,节省训练开销可达每年千万量级;从业务效果角度,同步训练模式优化给部分广告业务带来了CTR指标百分位的提升。在这个时间点,GBA通过对同步和异步训练自由切换的技术突破,使得低配集群的资源也充分利用起来。GBA算法使得高性能资源和普通资源具有通用性,使业务在高性能资源紧张的环境下,也可以不断享受GPU算力提升的红利,是深度学习帮助业务持续发展的重要基石。更进一步,GBA基于阿里巴巴统一资源池资源混部的环境,为所有推荐系统业务用好云打下基础。目前,GBA/同步切换这种新的训练范式已经普遍应用到阿里妈妈广告模型的迭代中,并开始在全集团推广。

▐ 搜推广增量迭代挑战

搜推广模型既需要高训练加速比回追数据的能力,也需要高并行的定性实验和日常增量训练的能力。主流搜推广稀疏大模型通常采用异步或同步的训练模式。在异步训练中,训练通常采用PS(Parameter server)架构并以高并发的方式执行,每个计算节点所需的资源量不大,可以利用阿里巴巴内部混部策略下的海量资源,适合定性实验和日常增量训练。同步训练一般采用AllReduce架构,参数直接放置在计算节点上并在节点间通过集合通讯方式进行交换。在高性能集群中,同步模式能够充分用满计算、通信硬件资源,进而获得更高的训练性能表现,理论上可以远高于同等成本下的异步训练任务。

在过去两年间,XDL训练引擎推出的HPC(High-performance computing)同步训练已经在阿里巴巴内部搜索、推荐、广告业务上得到了大量的推广,相关开源训练框架HybridBackend也受到了业界广泛的关注。但是基于搜推广模型迭代特点,以及当前资源现状,既要有HPC模式的高训练加速比,也需要有日常实验迭代的高并发实验能力。如何实现同步和异步训练的自由切换,可以充分利用HPC高性能资源以及海量混部资源,成为提高迭代效率的重要问题。并且为了避免模型迭代过程中浪费时间和浪费资源的调参,以及保证模型效果稳定,对于训练模式的切换需要做到以下几点:

  1. 【效果】同步模式切换异步模式后效果不变,获得同步训练的效果;

  2. 【性能】在混部的不稳定的资源环境下,同步模式切换异步模式后,获得异步训练资源利用效率;

  3. 【鲁棒性】无需切换优化器,无需调节优化器等一系列超参;

  4. 【扩展性】可以缓解异步训练由于worker数量增长,staleness增大对于效果的影响。

然而在实践中我们发现,直接切换训练模式无法实现上述目标,要达到上述能力也有着较大挑战:

  1. 考虑到实际业务对精度损失的低容忍性,工业界和学术界目前没有针对生产混部环境尝试训练模式切换的成熟解决方案,因此并没有明确可以走通的方案路线。

  2. 切换引发的效果问题,不是简单调整学习率或其他超参就能解决的。两种训练模式在batch大小、相同数据下更新步数、优化器选择上都有显著差异,这会导致参数更新实际上趋向于不同的收敛点。切换后短期内精度损失(甚至直接训崩)以及在每个训练阶段结束时精度潜在的不一致性,是在日常迭代开发中无法容忍的。

从高效迭代的角度,需要一种在高性能同步训练和高并发异步训练之间自由切换、无需用户中途调整超参的训练模式。桥接两种训练模式的核心问题是,如何能让两种模式训练时,梯度分布大体相同,使得模型会向一致或类似的收敛方向更新。我们观察到梯度分布、梯度延迟性是影响效果的重要突破口。基于此,我们提出了基于全局梯度聚合(GBA)的训练模式,通过先累积若干梯度、直到总batch size大小相同时再执行梯度更新。实验证明,GBA与同步训练之间是可以自由切换的,无需超参调整。

业界相关工作

近年来,业界一直在探索一种介于同步与异步之间的“半同步”训练模式,在避免慢节点的影响的同时避免效果损失。例如,在Tensorflow中已经集成的Backup Worker方式,每次同步更新时自动忽略指定个数慢节点的梯度;又如XDL中原有的限制节点间梯度版本的方式,容许有限的梯度过期。同时还有一些“半异步”训练模式相关的工作,例如每聚合若干个batch的梯度进行一次更新,或是稀疏参数的获取及更新完全去相关,都是有效缓解慢节点影响的方式。然而,尽管这些训练模式在开源数据集上都汇报出了理想的效果,但在实际工业生产场景,丢数据、严重的梯度过期对业务精度的影响是无法接受的,且快慢节点速度差异巨大是普遍情况,所以为了真正落地,现有的这些学术设计还是远远不够的。

▐ GBA的诞生

源于生产实验的观测与启示

直接切换训练模式后,效果出现严重损失

5f99a204427695c296508168a2993d45.png
图1 切换训练模式后AUC变化趋势

我们在Criteo竞赛数据集和生产数据集上分配执行DeepFM和双塔模型的训练任务。最初我们选择同步或异步进行训练,在数据集消费一半后切换为另外一种训练模式继续训练。图1中绘制了不同训练阶段的测试AUC,每5%的训练进度进行一次测试。可以看到,在训练模式切换刚刚发生后,无论是哪个方向的切换,都会出现一个非常明显效果损失,而后慢慢回追效果,或是直接AUC降到0.5不可恢复。这说明如果没有特殊设计或精细的调参,训练模式的切换对于模型效果将会是灾难性的打击。

feb72ca2e554362a92136bb282ba9089.png
图2 双塔模型中一层参数在无切换和切换后的参数数值分布变化

进一步的观察说明,异步和同步训练本质上会导致模型向不同的收敛方向更新,如图2所示,异步和同步训练后某层参数的分布截然不同,而异步切换为同步训练一段时间后,参数分布是被强行训练更新到了类似同步的分布上。这意味着为了获得平滑的切换,保证参数分布不变是一个值得考虑的出发点。

梯度的分布与更新梯度时实际的batch大小有关

ac25d32960c58cfb994c7362dce1e50b.png
图3 异步梯度聚合方式与同步训练方式的梯度数值分布

参数分布相似的前提是梯度分布也是相似的。我们使用异步梯度聚合的方式进行了大量的实验,发现当Batch大小与同步训练的全局Batch大小相同时,两种训练模式的梯度分布会比较接近(如图3所示)。考虑到集群的整体硬件资源紧张程度是变化的,在一天的不同时段执行的结果略有不同,资源紧张会带来不同计算节点执行速度更大的方差,进而带来更高的平均梯度过期程度。我们发现,梯度过期程度与两种实验中梯度分布的偏离呈正相关。这个发现启示使用相同大小的Batch进行梯度更新,且保证梯度过期程度较小,是实现平滑切换的一种潜在方案。

全局梯度聚合机制

基于上述实验分析,我们引入全局Batch大小(Global batch size)的概念,定义为梯度实际更新所聚合的样本量大小。我们定义同步训练模式下Local batch size (即每个 worker 处理 batch size的大小)大小和 worker 的数量分别为 和 。同步训练中的 Global batch size 定义为 ,并且 = × 。根据分析和观察中的结论,我们在进行训练模式切换时,GBA 会保持 Global batch size 大小不变。XDL基于PS架构,设计了全局梯度聚合机制。在这种机制下,每个计算节点各自消费数据并计算梯度,而后将梯度发送至PS节点。梯度不会被立即应用,而是会在累积到和同步全局Batch大小一致时聚合执行一次参数更新。于是计算节点不会被梯度更新阻塞,快节点可以消费更多的数据,慢节点只需要消费更少的数据,算力被充分调动。

对于每一步更新,所有的稠密层参数都会被更新,但是稀疏层参数(即Embedding参数)只有少数一部分被更新,两种参数的梯度过期程度是不一致的,因此比较难以用参数版本进行控制。我们这里将梯度过期程度统一定义为训练过程中数据的过期程度。数据的 staleness 表示某一个 worker 从开始训练这个它的 local batch 时的 global step 和它进行梯度更新时的 global step 的差距。同步训练过程中,数据的 staleness 始终为 0。基于数据 staleness,我们在 PS 架构上实现了 token-controled 的 GBA 机制,实现梯度聚合以及应对稀疏模型在异步训练过程中的梯度过期问题。

e55e8fd810cf8c4e4727b8daa3b5f8f6.png
图4 GBA全局梯度聚合机制

图4给出了GBA中最为核心的Token控制机制。在传统的PS角色上,我们设置了一个名为Token List的队列,该队列中包含了按序的Token,队列中每种Token初始为Worker数个。每次worker请求参数时会取得一个Token,在计算完梯度后,将Token和反向相关的数据全部传回PS。PS上还设置了一个Gradient Buffer,用户缓存梯度而不立即更新。每当累积到batch size和同步全局batch size一致时,PS会对Gradient Buffer中的梯度进行聚合并进行参数更新。Gradient Buffer里不会关注梯度来自于哪个Worker,但会关注Token版本。如果Buffer中的某个Token相较于当前Token List已经发出的最新Token已经落后大于一个给定阈值的版本数,那么我们认为这个梯度过期较为严重,需要丢弃而不是参与到梯度更新中。如此,GBA既保证了实际更新梯度时的Batch size,又避免了慢节点和严重过期的梯度带来的不利影响。

在论文中我们结合稀疏参数与稠密参数具有不同梯度延迟敏感性的特点进行了GBA的偏差分析,结合训练多步后的误差期望证明了GBA训练模式不会影响模型收敛性。

▐ GBA收敛性分析

业界有许多针对同步和异步训练收敛性分析的工作,我们参考了一些工作将同步的收敛性公式形式化为在训练了步后 error 的期望:

88b7f8cc57c28d3a12dd40d828766a2a.png

其中,表示第步的参数,表示 learning rate,表示 Lipschitz constant,表示梯度的标准差。是一个 empirical risk 函数,并且假设是 strongly convex 系数为 。是训练结果和最优解之间的 gap。公式中的第一项表示了 error 的上界,并且表示了 error 的衰减速率。

我们提出的 GBA 是一种基于异步梯度聚合的方案,我们假设当存在并且

73490dcd18fa6ede31ea9c458cef82e8.png

这里,是梯度过期带来参数更新影响的度量因子,更小的代表梯度过期对于模型效果的影响越小。除此之外,表示参数同时在第的 token index 和第的 token index 被更新的概率。对于一个稀疏模型,将是一个远小于 1 的数,并且对于 dense 参数这个数值为 1。GBA 的 error 公式可以表示为:

81e7ff3ac94240e89dd1bfcbc96b70cc.png

其中,并且 是 token index 等于 global step 的概率下界,即非梯度过期的概率下界,。

考虑同步和异步收敛性公式,如果将设置为与相近的数值,可以让 GBA 获得与同步相似的收敛特性。这也与我们 GBA 中设置的 global batch size 的方案一致。特别是对于稀疏模型,使得比 CV 或者 NLP 模型更小,那么在稀疏模型场景使用 GBA 也会获得和同步更小的收敛性差异。

▐ GBA工程实现

d45cc41b33b93f1fc03629d45b3aa5f7.png
图5 GBA工程实现逻辑

图5给出了GBA的整体工程实现架构。PS侧主要包括三部分逻辑:生成Token并根据token控制staleness(黄色部分逻辑)、累积梯度并异步聚合更新参数(绿色部分逻辑)、无等待响应worker请求(蓝色部分逻辑)。Worker侧主要流程(红色部分逻辑)是,每次请求参数和Token(依TF设计,训练第0步时无需请求token),在节点内计算获得梯度后,上传至PS,并无等待地开始下一个batch的流程。

1.如何保证GBA获得同步的效果和异步的速度?

首先 GBA 的梯度聚合并不要求梯度来自不同 worker,GBA 定义同一步梯度为参数两次更新之间任意 worker 发送的梯度。系统每步会发 worker_num 个 token,此步所有 token 均可由任意 worker 获取,即使存在超慢节点,此步 token 仍能被全部取走,触发下一步 token 分发。因此只要任务存在 worker 运行,token 生产与消费即可正常运转。GBA通过ps的梯度聚合操作保证梯度按照global batch更新,获得同步的效果;通过worker无需任何等待的执行任务,获得异步的速度。

2.GBA模式会不会丢很多梯度,速度和数据完整性如何权衡?

因为 token queue 是优先队列,任何 worker 取到的 token 均是当时队列最小 token。假设慢 worker 拿到 sync_step 后相对其他 worker 慢了 10 步,再次取 token,取到的是 sync_step + 10,因为 [sync_step + 1, sync + 9] 已被其他 worker 代跑。因此只有这个慢worker比其他快worker慢很多倍的情况下,才会出现梯度丢弃。但是由于这个慢worker的梯度过期严重,丢弃梯度也并非是一件坏事。并且对于每天大量样本的搜推广模型,少量梯度的丢弃也不会影响效果。

▐ GBA实验效果

1ad48e4a942e466defc0550161bfc575.png
图6 GBA和典型半同步/半异步训练模式与同步训练切换后的AUC变化趋势

我们分别在Criteo-1TB数据集上实现了DeepFM、在阿里妈妈开源CTR数据集上实现了DIEN、在生产数据集上实现了简化的生产双塔模型,使用GBA和其他半同步/半异步方式进行训练,并与同步训练进行双向切换,以观察GBA的实际表现。图6展示了在切换发生后AUC的变化趋势。与保持同步训练相比,GBA的整体趋势相同,而其他方式则至少在某个任务上出现明显的降低,特别是切换自同步时,其他训练模式出现了明显的“重新收敛”的过程。从数据上看,在继承后第一天、数据集最后一天、多天均值三个指标上,GBA都取得了最佳的表现,实现了与同步训练之间的平滑切换。

在阿里巴巴集团内部,已有多个广告业务场景使用了GBA/同步切换的方式开展实验与迭代。在这些业务模型上,同步训练和GBA模式训练的离线效果是对齐的。从异步改为GBA/同步切换的训练范式后,在一些模型上我们观察到千分位上的AUC提升,这对于搜推广模型离线和在线效果的提升是非常显著的;同时继承参数续训已经不是唯一选择,从零开始训过去一年的数据仅需两周,使得GBA/同步切换成为了很受欢迎的方案。

▐ 未来展望

在GBA/同步切换的训练范式下,当模型版本改变需要大量回追数据训练时,使用高性能HPC资源执行训练,尽快拿到实验结果及模型参数;而在日常天级迭代或ODL训练时,则可以切换到GBA模式,利用普通计算节点执行训练及交付任务。特别是对于创新探索的场景,HPC同步+GBA的组合模式可以帮助算法工程师摆脱对“祖传参数”的强依赖,最大程度释放可探索的空间。当前,XDL也在设计自动化地进行训练模式迁移的方案,希望可以成为一种标准化普惠化的方案,服务于更多的大规模搜推广稀疏模型训练。欢迎对本篇工作以及搜推广算法迭代、训练框架等方面感兴趣的研究人员及工程师们与我们交流,我们非常期待能与大家一起探讨相关领域未来的发展方向,产出更多有价值的落地成果。

END

6f1ae89d5a601833767cb0dba494656f.gif

也许你还想看

PICASSO:面向搜推广业务的工业级稀疏训练引擎

广告深度学习计算:召回算法和工程协同优化的若干经验

广告深度学习计算:异构硬件加速实践

EFLS开源 | 阿里妈妈联邦学习解决方案详解

e9b74d3067ecf98730d5e01837ea8141.gif

喜欢要“分享”,好看要“点赞”哦ღ~

↓欢迎留言参与讨论↓

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

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

相关文章

Maven导入sqlserver驱动jar包依赖包到本地仓库并引用

一、配置maven环境变量 (1)、找到此电脑右键---->点击属性---->选择高级系统设置---->点击环境变量---->新建系统变量 (2)、新建系统变量:MAVEN_HOME,变量值填你maven解压的路径,然后点击确定。 (3)、在已有的path系统变量里&…

Codeforces Round #703 (Div. 2) C2. Guessing the Greatest (hard version)

翻译: 简单版本和困难版本之间的唯一区别是查询数量的限制。 这是一个互动的问题。 有一个包含𝑛不同数字的数组𝑎。在一个查询中,您可以询问子段𝑎[𝑙..𝑟]中第二个最大元素的位置。在不超过…

CUDA独立上下文模块加载

CUDA独立上下文模块加载 大多数 CUDA 开发人员都熟悉 cuModuleLoad API 及其对应项,用于将包含设备代码的模块加载到 CUDA 上下文中。 在大多数情况下,您希望在所有设备上加载相同的设备代码。 这需要将设备代码显式加载到每个 CUDA 上下文中。 此外&…

408总结-冲冲冲

数据结构 m阶B树除根节点外所有节点关键字范围⌈m/2⌉−1至m−1\lceil m/2\rceil-1至m-1⌈m/2⌉−1至m−1。所有叶节点都在同一层,且不带信息,代表查找失败的位置。是所有节点平衡因子都为0的多路平衡查找树完全二叉树的叶子结点只可能出现在最下面两层…

AndroidStudio使用maven-publish发布aar至mavencentral中央仓库

目录AndroidStudio使用maven-publish发布aar至mavencentral中央仓库1、注册[【sonatype】](https://issues.sonatype.org/secure/Signup!default.jspa)2、创建Group ID3、下载安装[gnupg](https://www.gnupg.org/download/index.html)4、创建生成密钥5. 配置maven-publish打包推…

设计模式之访问者模式

Visitor design pattern 访问者模式的概念、访问者模式的结构、访问者模式的优缺点、访问者模式的使用场景、访问者模式实现示例、访问者模式的源码分析、双分派 1、访问者模式的概念 访问者模式,即在不改变聚合对象内元素的前提下,为聚合对象内每个元素…

STM32F103VET6基于STM32CubeMX RTC时钟报警中断使用示例

STM32F103VET6基于STM32CubeMX RTC时钟报警中断使用示例📺STM32CubeMX配置RTC时钟报警中断演示过程: 📌相关篇《STM32F103VET6基于STM32CubeMX RTC时钟秒更新中断使用示例》📌《STM32F103VET6基于STM32CubeMX RTC时钟使用示例》&a…

VUE-router

七.Vue-router 1、什么是vue-router vue-router是vue.js官方路由管理器。vue的单页应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。 传统页面切换是用超链接a标签进行切换。但vue里是用路由,因为我们用Vue做的都是…

K8s 前世今生与架构组件简析

k8s 前世 k8s 的前世是google 内部的Borg 系统,是一个作业调度平台,调度的对象是一个个进程。 Borg 本身也利用了容器化技术比如 Cgroups, Namespace 实现应用的隔离。 运行在线上的业务主要分为在线业务(prod)和离线业务(non-…

Netty实战与源码剖析(二)——Netty线程模型

1 线程模型基本介绍 不同的线程模式,对于程序的性能有很大的影响,Netty为何具有如此高的性能,很大程度上是得益于Netty采用的线程模型。 目前主流存在的线程模型有两种: 传统阻塞IO模型Reactor模型 然而根据Reactor的数量和处理…

零基础转行程序员,有哪些经验可以借鉴?

随着互联网行业的迅速发展,市场对于程序员的需求增大,越来越多的人开始转行到IT领域,程序员也不再基于计算机科学或软件工程等个别专业的毕业生,其他非计算机相关专业的,像学物理、数学、自动化,甚至英语、…

云原生丨DataX在数据迁移中的应用与实践

文章目录一、前言二、准备工作三、安装工具与数据迁移Demo安装工具与数据迁移三、使用Datax抽取移动云上的gauss数据库四、Datax工具逻辑说明整体框架核心模板介绍流程调度数据库类型插件读、写说明五、Datax工具参数说明SettingReader& writerjdbcUrlusernamepasswordtabl…

数据人PK也无人,为什么业务部门的数据需求都是急活?

**导读:**你是不是经常听到数据开发吐槽业务部门:我可以理解业务部门数据需求多,但为什么经常要得这么急呢? 作为一个数据开发者,可以回想一下,当初是怎么进入数据行业的。 是不是也是听一些大V忽悠&…

Java Swing JSlider:滑块组件

在前面的章节中,我们介绍了 Swing 设计简单界面所需的窗口、布局组件以及如何响应事件。Swing 还提供了很多高级组件,如菜单栏、工具栏、文件选择器、表格以及树等。使用这些高级组件可以实现更为复杂的布局,也可以使程序界面更加人性化&…

颜色分析.

介绍 宽光谱光源对许多光学系统都很重要,应用范围包括白光照明、分光计等。Fred中的颜色图像分析,是通过计算每个像素的色度坐标并在表面上显示生成的RGB值来生成颜色分布。此外,FRED还可以显示彩色色度图,并在用户移动光标时指…

CSS -- CSS选择器精讲(基础选择器,符合选择器,属性选择器,结构伪类选择器,伪选择器)

文章目录1 CSS基础选择器1.1 选择器的分类1.2 标签选择器1.3 类选择器1.4 id选择器1.5 通配符选择器1.6 基础选择器总结2 CSS的复合选择器2.1 什么是复合选择器2.2 后代选择器2.3 子选择器2.4 并集选择器2.5 伪类选择器2.6 链接伪类选择器2.7 :focus 伪类选择器2.8 复合选择器总…

正点原子-Linux嵌入式开发学习-第二期04

第十一讲:BSP工程管理 BSP管理其实就是以前学stm32一样的单独为led写.h和.c,并且文件夹有很多种 使用ubuntu的vscode创建bsp文件 第一步:新建bsp文件夹,在bsp文件夹新建各个外设或者功能的文件夹(一定是在相应的文件夹…

nodejs+vue+elementui鲜花销售商城管理系统410

前台: (1) 用户注册:用户名,密码,确认密码,邮箱,手机号,真实姓名,收货地址 (2) 用户登录:用户名,密码,验证码 登录后在主页显示欢迎信息&am…

2022年保险行业和产品研究报告

第一章 行业概况 保险业是经营风险的特殊行业。保险是以契约形式确立双方经济关系,以缴纳保险费建立起来的保险基金,对保险合同规定范围内的灾害事故所造成的损失,进行经济补偿或给付的一种经济形式。 保险是专门以风险为经营对象、为人们提…

RK3568开发环境搭建

前面我给大家展示了RK3568的开发板,但是并没有对RK3568的芯片资源进行描述,这里简单给大家看下该芯片的资源,具体的请看瑞芯微官网https://www.rock-chips.com/ 对芯片有了写了解之后,下面就开始搭建开发环境,让我们早…