Horovod:简单快速的分布式学习框架

训练现代深度学习模型需要大量计算,通常由多个GPU提供。这会遇到如下问题,第一,必须支持GPU间通信,取决硬件支持,这种通信会产生重大开销。其次,用户必须修改训练代码,以利用GPU间通信。所需的修改可能是重要的或很小的。在TensorFlow库下,启用多GPU训练需要不可忽视的通信开销,并要求用户大量修改他们的代码。在本文中我们介绍Horovod,一个开源库:它通过环形拓扑结构来实现高效的GPU间通信,并且只需对用户代码进行几行修改,即可实现更快、更轻松的TensorFlow分布式训练。

论文地址:
https://arxiv.org/abs/1802.05799
代码地址:
https://github.com/horovod/horovod

引言

近年来,深度学习引领了图像处理、语音识别和预测等方面的巨大进步。在 Uber,我们将深度学习应用到了公司业务中,从自动驾驶搜索路线到防御欺诈,深度学习让我们的数据科学家和工程师们能够为用户提供更好的体验。
TensorFlow 已经成为了 Uber 首选的深度学习库。因为这个框架是目前使用最为广泛的开源深度学习框架,对于新的开发者而言非常友好。此外,TensorFlow 还为各种深度学习用例提供了端到端支持,从进行实验性探索到将生产级模型部署到云服务器、移动端 APP、甚至自动驾驶汽车上。本文提出Horovod,它可以让分布式 TensorFlow 深度学习项目更加轻松地实现。

提出的方法

Uber 开始尝试部署标准分布式 TensorFlow 技术,在试验了一些方法之后,开发者意识到原有方法需要进行一些调整,在遵循文档和代码示例之后,我们并不总是清楚哪些功能对应着哪些模型训练代码的分布式计算。它们在某些情况下能起到优化作用,但也让我们难以诊断拖慢训练速度的 bug。
Tensorflow分布式性能对比
当我们使用标准 TensorFlow 基准测试套件在 128 块英伟达 Pascal GPU 上进行测试时如上图,无论是 Inception V3 还是 ResNet-101 都浪费了将近一半 GPU 算力。

应对不断增加的 TensorFlow 程序复杂性:在测试中我们发现,每个使用分布式 TensorFlow 的案例都需要指定初始工作线程和参数服务器。此外,用户必须保证所有的操作都正确地使用 tf.train.device_replica_setter(),并使用 towers 让代码符合服务器中多 GPU 的设置。这通常导致陡峭的学习曲线和大量的代码重构,压缩了实际建模的时间。
在 2017 年上半年,百度发表了研究《Bringing HPC Techniques to Deep Learning》(参见百度将 HPC 引入深度学习:高效实现模型的大规模扩展),提出使用不同的算法来平均梯度,并让这些梯度在所有节点之间交流,这被称为 ring-allreduce,他们使用 TensorFlow 也实现了这种算法(https://github.com/baidu-research/tensorflow-allreduce)。该算法的思路基于 2009 年 Patarasuk 与 Xin Yuan 的论文《Bandwidth Optimal All-reduce Algorithms for Clusters of Workstations》。
Ring-allreduce数据传输模式
在 ring-allreduce 算法中,每个 N 节点与其他两个节点进行 2*(N-1) 次通信。在这个通信过程中,一个节点发送并接收数据缓冲区传来的块。在第一个 N-1 迭代中,接收的值被添加到节点缓冲区中的值。在第二次 N-1 迭代中,接收的值代替节点缓冲区中保存的值。

百度的文章证明了这种算法是带宽上最优的,这意味着如果缓冲区足够大,它将最大化地利用可用的网络。本文使用百度的ring-allreduce进行改进,使用NCCL替换了百度的ring-allreduc,扩展到适应单个服务器和多个GPU。

实验效果

Horovod可以提高模型在我们的机器学习系统中的效率、速度和易用性。下面我们来展示 Horovod 在两个经典网络的性能。
不同分布式框架吞吐量对比
实验表明:Inception V3 和 ResNet-101 TensorFlow 模型在 25Gb网络上使用不同数量的NVIDIA Pascal GPU 时,使用标准分布式 Horovod 比标准TensorFlow 运行分布式训练更接近线性加速比。实验同时发现在RDMA网络下,Horovod的训练加速比更高一些。



扫码识别关注,获取更多论文解读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值