阿里妹导读:得力于数据规模增长、神经网络结构的演进和计算能力的增强,深度学习的图像处理、语音识别等领域取得了飞速发展。随着训练数据规模和模型复杂度的不断增大,如何充分利用分布式集群的计算资源加快训练速度,提升业务支持能力成为用户非常关注的问题。今天,我们就来分享阿里工程师的实践成果:将深度学习模型的大规模分布式训练框架 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 模式进行多机训练的。在这种训练方式下训练任务通常会遇到以下挑战:
- Variable placement 策略,常用的 replica_device_setter 的策略是 round-robin over all ps tasks,这种策略并没有考虑 Variable 大小,会导致参数分配不均衡,某些 ps 上分配的 Variable size 大就会成为通信瓶颈;
- 多个 Worker 访问同一个 PS 节点时,受 PS 节点带宽限制和 TCP 的拥塞窗口控制,会导致通信效率大幅降低,并且规模越大,效率越差;
- 分布式扩展后,模型需要精细调参才能收敛,需要用户有丰富的调参经验。
对此,我们基于 PAI Tensorflow 研发了针对于深度学习模型的高速分布式训练框架 PAISoar,从硬件到软件打造一套分布式训练场景 E2E 的解决方案:
- 在硬件上,我们和 AIS 网络团队一起搭建了集团内部第一套基于 RoCE 的大规模 RDMA 集群,并针对于深度学习场景进行了相应的参数调优,支持低延迟、高吞吐的无损传输网络;
- 在软件上,我们基于 Ring AllReduce 算法在 RDMA 网络上实现了高度优化的 PAISoar 分布式训练框架,通过软硬件一体的深度优化大大提高了多机的计算加速比;
- 在 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个节点的集群中做长时间压测时采集到的发送带宽,可以看到各个节点的带宽非常稳定。