阿里妹导读:得力于数据规模增长、神经网络结构的演进和计算能力的增强,深度学习的图像处理、语音识别等领域取得了飞速发展。随着训练数据规模和模型复杂度的不断增大,如何充分利用分布式集群的计算资源加快训练速度,提升业务支持能力成为用户非常关注的问题。今天,我们就来分享阿里工程师的实践成果:将深度学习模型的大规模分布式训练框架 PAISoar应用于绿网模型(多层CNN网络)后,绿网模型在128 GPU卡上取得101倍的计算加速比,效果显著。
近几年来深度学习发展迅速,图像处理、语音识别等领域都取得了飞速发展。例如在图片识别上,神经网络结构快速演进,分类的网络结构从 AlexNet、VGG、Inception V1 发展到了 Inception V4、Inception-ResNet、SENet。随着模型层次越来越深,参数越来越多,模型能力也越来越强,ImageNet 数据集 Top-5 的错误率越来越低,目前降到了2.25%(人眼5.1%)。
随着模型复杂度不断增长、训练样本的指数级增长,分布式进行高效并行的神经网络训练已经变得越发重要。在社区版 Tensorflow 中,分布式训练是基于 Parameter Server 模式进行多机训练的。在这种训练方式下训练任务通常会遇到以下挑战:
对此,我们基于 PAI Tensorflow 研发了针对于深度学习模型的高速分布式训练框架 PAISoar,从硬件到软件打造一套分布式训练场景 E2E 的解决方案:
PAISoar 在 Tensorflow 官方 benchmarks 模型上取得了非常不错的加速效果。同时我们还和安全部团队合作,将该研发成果成功的在安全部图像模型业务上落地。安全部的绿网模型训练样本280万张图片,单机两卡训练需要12天才能收敛,因此有着非常强的分布式训练需求,希望能达到一天内完成训练,提升模型迭代能力。借助于 PAISoar,绿网模型分布式训练取得非常明显的加速效果,模型收敛时间从原先的12天降低到目前的一天以内,大大加速了业务的快速迭代。
我们用 images/sec (每秒处理的图片数或样本数)来统计分布式模型的计算能力。
假设单 GPU 卡下计算能力为1,绿网模型在 PAISoar 中计算加速比如下图所示:
在 PAISoar 上,绿网模型在128 GPU卡上取得了101倍的计算加速比,效果非常明显。
2.1 PAISoar简介
PAISoar 是基于 PAI Tensorflow 实现的分布式训练框架。通过 PAISoar,我们提供了一个从硬件到软件、易用的分布式训练的性能优异框架。
2.1.1 网络层
我们和 AIS 网络团队、RDMA 项目团队一起搭建了集团内部第一套基于 RoCE 的大规模 RDMA 集群,并针对于深度学习场景进行了相应的参数调优,包括:
2.1.2 软件层
2.1.3 API 层
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个模型的性能:
图中参数说明:
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 接口(用户文档),核心功能如下:
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 的分布式加速能力让我们可以尝试使用更复杂的模型结构来提高模型效果。
通过与 AIS 网络团队、RDMA 项目团队的协同合作,PAI Tensorflow 的分布式训练框架 PAISoar 成功上线,并和安全部在绿网模型上进行合作落地,取得非常好的效果,128 GPU卡上计算加速比达到101倍。期望后续能服务更多的用户,并为用户提供简单、高效、可靠的分布式服务。
接下来我们会继续优化分布式训练框架 PAISoar:
原文链接
本文为云栖社区原创内容,未经允许不得转载。