选自Uber
作者:AlexSergeev、MikeDelBalso
机器之心编译
参与:李泽南、路雪
Horovod是Uber开源的又一个深度学习工具,它的发展吸取了Facebook「一小时训练ImageNet论文」与百度RingAllreduce的优点,可为用户实现分布式训练提供帮助。本文将简要介绍这一框架的特性。
近年来,深度学习引领了图像处理、语音识别和预测等方面的巨大进步。在Uber,我们将深度学习应用到了公司业务中,从自动驾驶搜索路线到防御欺诈,深度学习让我们的数据科学家和工程师们能够为用户提供更好的体验。
TensorFlow已经成为了Uber首选的深度学习库。因为这个框架是目前使用最为广泛的开源深度学习框架,对于新的开发者而言非常友好。它结合了高性能与低级模型细节调试能力——例如,我们可以使用Keras这种高级API,同时使用自己定制的NvidiaCUDA工具。此外,TensorFlow还为各种深度学习用例提供了端到端支持,从进行实验性探索到将生产级模型部署到云服务器、移动端APP、甚至自动驾驶汽车上。
上个月Uber工程部门推出了Michelangelo——一个内部机器学习服务平台,可以让机器学习轻松部署到大规模系统中。在本文中Uber介绍了Michelangelo深度学习工具包的重要开源组件Horovod,它可以让分布式TensorFlow深度学习项目更加轻松地实现。
面向分布式
随着Uber在TensorFlow上训练越来越多的机器学习模型,项目的数据和计算能力需求正在急剧增加。在大部分情况下,模型是可以在单个或多GPU平台的服务器上运行的,但随着数据集的增大和训练时间的增长,有些时候训练需要一周甚至更长时间。因此,Uber的工程师们不得不寻求分布式训练的方法。
Uber开始尝试部署标准分布式TensorFlow技术,在试验了一些方法之后,开发者意识到原有方法需要进行一些调整:首先,在遵循文档和代码示例之后,我们并不总是清楚哪些功能对应着哪些模型训练代码的分布式计算。标准分布式TensorFlow引入了很多新的概念:工作线程、参数服务器、tf.Server()、tf.ClusterSpec()、tf.train.SyncReplicasOptimizer()以及tf.train.replicas_device_setter()等等。它们在某些情况下能起到优化作用,但也让我们难以诊断拖慢训练速度的bug。
第二个问题有关Uber规模的计算性能。在进行了一些基准测试之后,我们发现标准的分布式TensorFlow机制无法满足需求。例如,在使用个GPU进行训练时,我们因为低效率损失了一半的计算资源。
图1.标准TensorFlow基准套件,使用英伟达PascalGPU(从1块到块)运行InceptionV3和ResNet-模型,与理想状态下的分布式计算(单GPU算力简单叠加)每秒处理的图像数量对比。从中我们发现标准方法很难释放出硬件的全部潜能。
当我们使用标准TensorFlow基准测试套件在块英伟达PascalGPU上进行测试时(如图1所示),无论是InceptionV3还是ResNet-都浪费了将近一半GPU算力。
充分利用GPU资源是目前大规模训练的一大课题,此前Facebook的一小时训练ImageNet论文《Accurate,LargeMinibatchSGD:TrainingImageNetin1Hour》介绍了使用块GPU进行ResNet-50网络「数据并行」训练的方法,引起人们的广泛