如何将深度学习训练速度提升一百倍?PAISoar 来了

阿里妹导读:得力于数据规模增长、神经网络结构的演进和计算能力的增强,深度学习的图像处理、语音识别等领域取得了飞速发展。随着训练数据规模和模型复杂度的不断增大,如何充分利用分布式集群的计算资源加快训练速度,提升业务支持能力成为用户非常关注的问题。今天,我们就来分享阿里工程师的实践成果:将深度学习模型的大规模分布式训练框架 PAISoar应用于绿网模型(多层CNN网络)后,绿网模型在128 GPU卡上取得101倍的计算加速比,效果显著。

1. 概述

近几年来深度学习发展迅速,图像处理、语音识别等领域都取得了飞速发展。例如在图片识别上,神经网络结构快速演进,分类的网络结构从 AlexNet、VGG、Inception V1 发展到了 Inception V4、Inception-ResNet、SENet。随着模型层次越来越深,参数越来越多,模型能力也越来越强,ImageNet 数据集 Top-5 的错误率越来越低,目前降到了2.25%(人眼5.1%)。

随着模型复杂度不断增长、训练样本的指数级增长,分布式进行高效并行的神经网络训练已经变得越发重要。在社区版 Tensorflow 中,分布式训练是基于 Parameter Server 模式进行多机训练的。在这种训练方式下训练任务通常会遇到以下挑战:

  1. Variable placement 策略,常用的 replica_device_setter 的策略是 round-robin over all ps tasks,这种策略并没有考虑 Variable 大小,会导致参数分配不均衡,某些 ps 上分配的 Variable size 大就会成为通信瓶颈;
  2. 多个 Worker 访问同一个 PS 节点时,受 PS 节点带宽限制和 TCP 的拥塞窗口控制,会导致通信效率大幅降低,并且规模越大,效率越差;
  3. 分布式扩展后,模型需要精细调参才能收敛,需要用户有丰富的调参经验。

对此,我们基于 PAI Tensorflow 研发了针对于深度学习模型的高速分布式训练框架 PAISoar,从硬件到软件打造一套分布式训练场景 E2E 的解决方案:

  1. 在硬件上,我们和 AIS 网络团队一起搭建了集团内部第一套基于 RoCE 的大规模 RDMA 集群,并针对于深度学习场景进行了相应的参数调优,支持低延迟、高吞吐的无损传输网络;
  2. 在软件上,我们基于 Ring AllReduce 算法在 RDMA 网络上实现了高度优化的 PAISoar 分布式训练框架,通过软硬件一体的深度优化大大提高了多机的计算加速比;
  3. 在 API 层面,我们提供了简化用户构建分布式 TF 模型训练的ReplicatedVarsOptimizer,极大地方便了将单机模型扩展成分布式模型,降低了用户构建分布式TF训练代码的难度,同时提供支持 warm up 的 learning rate 动态调节方法,帮助模型训练更容易的收敛。

PAISoar 在 Tensorflow 官方 benchmarks 模型上取得了非常不错的加速效果。同时我们还和安全部团队合作,将该研发成果成功的在安全部图像模型业务上落地。安全部的绿网模型训练样本280万张图片,单机两卡训练需要12天才能收敛,因此有着非常强的分布式训练需求,希望能达到一天内完成训练,提升模型迭代能力。借助于 PAISoar,绿网模型分布式训练取得非常明显的加速效果,模型收敛时间从原先的12天降低到目前的一天以内,大大加速了业务的快速迭代。

我们用 images/sec (每秒处理的图片数或样本数)来统计分布式模型的计算能力。

假设单 GPU 卡下计算能力为1,绿网模型在 PAISoar 中计算加速比如下图所示:

在 PAISoar 上,绿网模型在128 GPU卡上取得了101倍的计算加速比,效果非常明显。

2. PAISoar:基于 PAI Tensorflow 的分布式训练框架

2.1 PAISoar简介

PAISoar 是基于 PAI Tensorflow 实现的分布式训练框架。通过 PAISoar,我们提供了一个从硬件到软件、易用的分布式训练的性能优异框架。

2.1.1 网络层

我们和 AIS 网络团队、RDMA 项目团队一起搭建了集团内部第一套基于 RoCE 的大规模 RDMA 集群,并针对于深度学习场景进行了相应的参数调优,包括:

  • 机器上搭载 Mellanox 25G 网卡支持基于 RoCE v2的 RDMA,打造低延迟高吞吐通信网络;
  • ASW(接入层交换机,32口)和 PSW(聚合层交换机)间采用 8*100Gb 高速传输光纤,支持交换机 1:1 收敛比,搭建无损传输网络;
  • 构建 TCP 和 RDMA 多级混合流控策略,解决各种混跑场景的流量干扰;

2.1.2 软件层

  • 在 PAI Tensorflow 中接入 RDMA 驱动,使用 verbs 库进行 RDMA 通信,并和思科交换机进行适配调参;
  • 对 RDMA 通信的关键路径进行梳理,加速内存拷贝,异步化数据发送,优化通信状态机,提高 RDMA 通信的效率和稳定性;
  • 自研了深度优化的 Ring AllReduce 同步算法,通过针对 RDMA 网络的深度适配、多路通信融合等关键点优化,大大提升了多机的分布式训练性能。

2.1.3 API 层

  • 我们同时提供了简化用户构建分布式TF模型训练的ReplicatedVarsOptimizer,极大的方便了将单机模型扩展成分布式模型,降低了用户构建分布式TF训练代码的难度和学习成本;
  • 为方便用户在分布式训练中调参,我们提供 lr(learning rate) 的动态调节算法smooth_exponential_decay,算法中,lr 经过一定轮数的 warm up,从一个较小的 lr 平滑增加到目标 lr,再采用指数衰退,每隔固定 epoch 衰退一次,动态调节的 lr 可以加速用户调参过程。

2.2 性能指标

基于 PAISoar,深度神经网络模型的分布式训练性能提升明显。

我们使用 Tensorflow 官方 Benchmarks 进行性能测试。Tensorflow Benchmarks 是一套 CNN 模型的基准测试集合,包括 Inception v3、ResNet-50、ResNet-152、VGG16、Alexnet 等经典 CNN 模型。下面是我们分别在1、2、4、8、16、32、64GPU卡规模下测试了 Inception v3、ResNet-50、ResNet-152、VGG16 这4个模型的性能:

图中参数说明:

  • 上面4个图分别是 Inception v3、ResNet-50、ResNet-152、VGG16 这四个模型的性能测试数据;
  • 横坐标是 GPU 卡数,纵坐标是模型训练总的 Images/sec;
  • ps、allreduce 分别表示模型参数同步的模式是 worker+ps 模式或 Ring AllReduce 模式;
  • grpc、rdma 分别表示通信底层使用的是 grpc 协议还是 rdma 协议。

Tensorflow 默认的分布式方法是 worker+ps 模式,variable 定义在 ps 上,worker 会训练并更新 ps 上的参数。我们将底层通信协议替换成 RDMA 后,各模型性能都有提升,在 64GPU 卡下,Inception v3、ResNet-50、ResNet-152、VGG16 四个模型性能分别提升:24.94%、44.83%、38.80%、23.38%。

相较于 worker+ps 模式,PAISoar 中提供的 Ring AllReduce 通信模式对网络带宽利用率更高,延迟更小。与 worker+ps (使用 grpc 通信)相比,各模型性能提升非常明显,在64 GPU 卡下,Inception v3、ResNet-50、ResNet-152、VGG16四个模型性能分别提升:84.77%、125.43%、56.40%、40.04%。

同时,我们也和开源的 horovod 进行对比,在64 GPU卡下,Inception v3、ResNet-50、ResNet-152、VGG16四个模型性能分别提升:-6.4%、2%、21%、36%,整体性能要好于 horovod。

接下来将会介绍 PAISoar 中的关键技术:RDMA 和 Ring AllReduce 的技术细节。

2.3 RDMA技术

RDMA(Remote Direct Memory Access) 是一种硬件IO技术,通过将传输协议固化在网卡硬件中,网卡就可以实现内核旁路(kernel bypass)和零拷贝操作,从而大幅降低网络 IO 的延迟时间,大幅提高网络吞吐,同时不影响 CPU 的负载。RDMA 在以太网上有2个标准,2002年,ITEF 制定了 iWARP(Internet Wide Area RDMA Protocol),2010年,IBTA 制定了 RoCE(RDMA over Converged Ethernet)规范。阿里数据中心网络里采用 RoCE(v2) 方案。在时延测试中,RoCE 可以达到单向为2 - 3us左右,而与之对应的 TCP 时延为10 - 15us 左右。

为了实现 RoCE 的性能优势,以太网需要提供一个无损网络做为基础,否则对性能的负面影响非常大。以太网的无损机制主要通过端到端的 QoS 来实现,即所有的QoS 机制需要在服务器和交换机上做统一的设置,包括 DSCP、队列、DCQCN、ECN、PFC 等。通过使用这些技术,能够保证在 burst,incast 等 IO 场景下 RDMA也有稳定的表现。下图是在一个32个节点的集群中做长时间压测时采集到的发送带宽,可以看到各个节点的带宽非常稳定。

RoCE 技术虽然有很多技术优势,但是它对无损网络的要求也导致网络配置非常复杂,除了新增很多网络设备的管控配置,同时也把之前相对独立的网卡设备纳入了网络运营的范围,大大增加了运营的内容和难度。与此相适应,在主机上需要安装专门的 RDMA 软件平台包,包括网卡驱动、用户库和管控软件等部件。这些软件可以做到一键部署、自动配置和定期巡检,并且与相应的监控系统都有数据对接。通过安装这些软件包,就可以做到及时发现物理网络的配置错误,硬件故障,让应用远离复杂的网络管理,顺利享受 RDMA 带来的技术红利。

2.3 Ring AllReduce 技术

对于许多在大型数据集上训练的现代深度学习模型来说,基于数据并行(Data Parallelism)的同步分布式训练是最合适的训练方法。数据并行的同步分布式训练在每个 worker 上都有一份完整的模型,每个 worker 读取训练集的不同部分计算出不同的梯度,然后同步各个 worker 上的梯度并求平均值,再用平均梯度来更新每个 worker 上的模型。在社区版 Tensorflow 中,梯度平均通过将 Variable 分配到公共的 ps (parameter server)节点上实现,通信代价受 worker 数量和 Variable 分配策略影响很大。在 PAISoar 中我们使用 Ring AllReduce 技术实现梯度平均,通信代价的上限与 worker 数量无关,且不再需要额外的 ps 节点。

Ring Allreduce 算法的原理与核心功能如下:

Ring AllReduce 算法将 device 放置在一个逻辑环路(logical ring)中。每个 device 从上行的 device 接收数据,并向下行的 deivce 发送数据,因此可以充分利用每个 device 的上下行带宽。

使用 Ring Allreduce 算法进行某个稠密梯度的平均值的基本过程如下:

将每个设备上的梯度 tensor 切分成长度大致相等的 num_devices 个分片;

ScatterReduce 阶段:通过 num_devices - 1 轮通信和相加,在每个 device 上都计算出一个 tensor 分片的和;

AllGather 阶段:通过 num_devices - 1 轮通信和覆盖,将上个阶段计算出的每个 tensor 分片的和广播到其他 device;

在每个设备上合并分片,得到梯度和,然后除以 num_devices,得到平均梯度;

以 4 个 device上的梯度求和过程为例:

ScatterReduce 阶段:

经过 num_devices - 1 轮后,每个 device 上都有一个 tensor 分片进得到了这个分片各个 device 上的和。

AllGather 阶段:

经过 num_devices - 1 轮后,每个 device 上都每个 tensor 分片都得到了这个分片各个 device 上的和;由上例可以看出,一次 Ring Allreduce 中单个节点总的通信数据量是

每个节点上通信数据量的上限不会随分布式规模变大而变大。

在 PaiSoar 中,我们基于 Tensorflow 原生的通信原语 Rendezvous 实现 Ring AllReduce 算法,并提供简化用户构建分布式 TF 模型训练的

ReplicatedVarsOptimizer 接口(用户文档),核心功能如下:

  • 简单的用户接口:只需开启 PAISoar 之后将原有的 Optimizer 包装为 ReplicatedVarsOptimizer,即可将单机模型改成分布式模型,不需要修改太多的代码;
  • 支持多种通信协议:支持 gRPC、RDMA 等多种通信协议;
  • 优化的通信策略:根据计算图的信息,平衡计算通信重叠度和通信效率,合并计算时间相近的梯度一起传输。

3. 安全部绿网模型

3.1 模型介绍

绿网模型开始于2013年,在安全部成立初期就已经存在,用于电商场景中的色情内容的识别。绿网模型最初基于 BOW(Bag of Word)类型的图像分类模型,这是在深度学习(Deep Learning)出现之前学术界以及工业界普遍使用的建模方式,在图像检索以及分类上都得到了广范的使用。

绿网模型分为互联网场景与电商场景两个模型。本文中主要集中介绍互联网场景的模型。互联网场景是绝大多数网站/ App 的需求,特点是只检出有明确证据判断为色情内容的图片/视频,标准较宽松,可以容忍一些大尺度性感照、不雅姿势、猥琐动作等。

目前绿网模型互联网场景主要是在阿里云的阿里绿网(内容安全),绿网的付费客户数量随着互联网内容管控的需求加大呈现了指数级增长。目前已经为集团内和集团外的大量客户提供了安全稳定的内容保障。

目前绿网模型互联网场景每天调用量已经达到亿级别,平均的 RT 为80ms左右。

由于图像计算量复杂以及图像数据量大,GPU 单机训练已经无法满足目前模型迭代的速度,单机2卡训练一个模型需要长达12天之久,因此分布式训练势在必行:

3.2 分布式调参

如上文,使用 PAISoar 进行分布式训练后,绿网模型取得了非常明显的计算加速效果,在128 GPU卡上,计算加速比能达到101倍。

分布式训练另一个重要的工作就是调参,分布式规模扩大相当于增加 batch size,如果沿用以前的学习策略和参数(learning Rate等)会导致模型收敛慢或不收敛,达不到单机训练的精度。我们需要进行调参来让模型训练收敛。

我们调参所用的方法:

1.训练数据分片,在分布式训练时,需要对数据进行分片,确保每个 worker 读到的数据不一样,最好是每几个 epoch 后整体数据 shuffle 一次,避免模型对输入数据顺序的依赖。

2.使用 PaiSoar 中的 learning rate 动态调节方法smooth_exponential_decay,在训练初期采用 lr(learning rate) 平滑上升的策略,训练刚开始时,使用一个较小的 lr,尽量避免一开始由于 lr 太大导致收敛不稳定。后面再平滑增大 lr,尽量让 weights 更新到离初始的 init weight 比较远的地方。lr 增长到目标值后再采用指数衰退的方式,每个几个 epoch 衰退一次,逐步减少 lr,避免训练后期过大的 lr 导致训练波动,不收敛,learning rate 变化趋势如下图所示:

3.分布式 N 个 worker 训练,相当于单机 batch size 增大N倍,此时需要调大 learning rate,一般调大 sqrt(N)~N倍,可以结合 Tensorboard 来观察 loss 和 lr 的变化趋势来决定调大还是调小 lr.

经过调参在不同 GPU 卡下绿网模型都调试收敛,不同 GPU 卡下训练轮数如下表所示:

在16机(32 GPU卡)下绿网模型在20个小时收敛,比单机(2 GPU卡)快了14.4倍,完成一天内训练收敛的目标。同时对所有分布式训练的模型使用了安全部的的火眼平台进行 ROC 测试,测试集有4万多条数据。经测试,分布式模型效果和单机2 GPU卡效果一致:

3.3 模型迭代

我们通过分布式训练加快了绿网模型的收敛,这时就可以尝试采用更复杂的神经网络结构来提高 AUC,之前绿网模型内使用的是 Inception v3 结构,我们升级到 Inception v4 进行测试,发现 ROC 曲线提升明显:

PAISoar 的分布式加速能力让我们可以尝试使用更复杂的模型结构来提高模型效果。

4. 总结和展望

通过与 AIS 网络团队、RDMA 项目团队的协同合作,PAI Tensorflow 的分布式训练框架 PAISoar 成功上线,并和安全部在绿网模型上进行合作落地,取得非常好的效果,128 GPU卡上计算加速比达到101倍。期望后续能服务更多的用户,并为用户提供简单、高效、可靠的分布式服务。

接下来我们会继续优化分布式训练框架 PAISoar:

  • 尝试不同的网络拓扑结构和通信架构,进一步充分利用网络带宽;
  • 参数稀疏化通信,尝试发现高频变化特征从而达到进一步提高通信效率并且将模型精度衰减在一定范围之内;
  • 提供便捷的使用方法,方便用户快速接入,降低学习成本。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause 的问题 MySQL

show variables like "sql_mode"; set sql_mode; set sql_modeNO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES;

破解面试难题8个角度带你解读SQL面试技巧!

作者 | Xinran Waibel译者 | 天道酬勤 责编 | 徐威龙封图| CSDN 下载于视觉中国SQL是用于数据分析和数据处理的最重要的编程语言之一,因此SQL问题始终是与数据科学相关工作(例如数据分析师、数据科学家和数据工程师)面试过程中的一部分。 SQ…

一文读懂架构整洁之道(附知识脉络图)

程序的世界飞速发展,今天所掌握的技能可能明年就过时了,但有一些东西是历久弥新,永远不变的,掌握了这些,在程序的海洋里就不会迷路,架构思想就是这样一种东西。 本文是《架构整洁之道》的读书笔记&#xf…

python获取视频时长方法

1.使用subprocess和re import re import subprocess video r"work/train/video/a8b96f016a28d8f3836f7cbb7734ecde.mp4" import subprocessdef get_length(filename):result subprocess.run(["ffprobe", "-v", "error", "-sho…

阿里敏捷教练全面解析淘宝直播敏捷实践之路

背景介绍 阿里很少提敏捷转型或DevOps,阿里是强业务驱动的,不管用什么办法,一定要达到业务目标。 我来自敏捷教练团队,我们的职责是帮助团队拿结果。这里的团队不限于研发团队,我现在支持的团队包括销售团队和产品运…

int默认值为0,Integer默认值为null

前提概要 Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。 int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况。 代码示例 public class…

GitHub 接连封杀开源项目惹众怒,CEO 亲自道歉!

作者 | 唐小引头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)王坚博士曾经做过这样一个非常形象的比喻,他将做 App 比作是在别人的花园里弄盆栽,「种点花草是没有问题的」,不过「别人叫你的产品下架你…

一键托管,阿里云全链路追踪服务正式商用:成本仅自建1/5或更少

随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、消息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用,这些组件共同构成了繁杂的分布式网络。 在一次800多人的开发者调研中&…

基于Docker的Mysql主从复制搭建_mysql5.7.x

文章目录为什么基于Docker搭建?一、拉取镜像创建容器1. 拉取mysql:5.7镜像2. 创建master容器3. 创建slave容器4. 查看正在运行的容器5. 此时可以使用Navicat等工具测试连接mysql二、搭建Master(主)服务器2.1. 进入到Master容器内部2.2. my.cnf编辑2.2. 重启mysql服务…

医疗保健、零售、金融、制造业……一文带你看懂大数据对工业领域的影响!...

作者 | Zubair Hassan译者 | 风车云马 责编 | 徐威龙封图| CSDN 下载于视觉中国随着大数据技术的兴起,工业领域在很大程度上发生了变化。智能手机和其他通讯方式的使用迅速增加,使得每天都能收集大量数据。以下是大数据对工业领域的影响。如今&#xff0…

mysql主从复制排错

使用start slave开启主从复制过程后,如果SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,这种情况一般是下面几种原因造成的,我们可以根据 Last_IO_Error提示予以排除。 可能的原因说明网络不通查看master和sla…

揭秘!一个高准确率的Flutter埋点框架如何设计

背景 用户行为埋点是用来记录用户在操作时的一系列行为,也是业务做判断的核心数据依据,如果缺失或者不准确将会给业务带来不可恢复的损失。闲鱼将业务代码从Native迁移到Flutter上过程中,发现原先Native体系上的埋点方案无法应用在Flutter体…

如何运行没有Root权限的Docker?干货来了!

作者 | Vaibhav Raizada译者 | 天道酬勤责编 | 徐威龙封图| CSDN 下载于视觉中国在本文中,我们讨论了如何在没有root权限的情况下运行Docker,以便更好地管理容器中的安全性。Docker作为Root用户Docker以root用户身份运行其容器。但是你的工作负载真的需要…

搭建主从数据库出现的错误 error connecting to master ‘slave@172.17.0.2:3306‘ - retry-time: 30 retries: 1

在搭建主从数据库的时候出现了报错 出现错误的截图: 解决办法: 重新授权 CREATE USER slave% IDENTIFIED BY 123456; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave%;参考链接: 搭建主从数据库出现的错误error connecting to master …

Java-For循环

public class ForDemo01 {public static void main(String[] args) {int a 1; // 初始化条件while (a<100){ // 条件判断System.out.println(a);a2;}System.out.println("while 循环结束&#xff01;");// 初始化 // 条件判断 // 迭代for(int i1;i<100;i){S…

spring.shardingsphere.rules.sharding.sharding-algorithms.database_inline.props‘ is not valid

spring.shardingsphere.rules.sharding.sharding-algorithms.database_inline.props is not valid 解决方案&#xff1a; 原配置 修改后

以云战“疫”,这次阿里云又让人们惊了……

本文转载自CSDN博主「L-JingJing」的原创文章 近日&#xff0c;阿里云对外宣布其容器服务调度GPU云服务器启动加速计算&#xff0c;最快只需60秒即可完成新冠病毒的核酸对比工作&#xff1b;同时将向医疗科研机构、疾控中心等一线病毒研究机构免费开放基因计算服务&#xff0c…

Java-增强for循环

public class ForDemo05 {public static void main(String[] args) {int[] numbers {10, 20, 30, 40}; // 定义一个数组for (int number : numbers) {System.out.println(number);}} }https://www.bilibili.com/video/BV12J41137hu?p42&spm_id_frompageDriver

五年从P5到P8,在阿里学做个靠谱的人

师兄文化&#xff0c;是阿里的老传统&#xff0c;新人入职都要认个师兄。 不是江湖上这种师兄哈&#xff0c;但帅是一样帅的 今天和大家聊聊我在阿里当师兄的故事。 我是“改之”&#xff0c;不是“有则改之无则加勉”的改之&#xff0c;而是“杨过&#xff0c;字改之”的那…

@开发者,微软 CEO 萨提亚带领 60 位大咖的集结令,你敢接吗?

2020年初&#xff0c;一场突如其来的疫情打乱了所有人的脚步&#xff0c;给人们的生活、工作、学习带来诸多不便&#xff0c;与此同时&#xff0c;我们看到一些企业迅速响应&#xff1a;各式买菜小程序、远程工具、在线教育的火爆……这背后&#xff0c;是企业的数字化转型步伐…