编者按:Google、Uber、DeepMind和Microsoft这四大科技公司是当前将深度学习研究广泛应用于自身业务的典型代表,跻身全球深度学习研究水平最高的科技公司之列。GPipe、Horovod、TF Replicator和DeepSpeed分别是这四家公司开发应用的深度学习框架,它们结合了深度学习研究及其基础设施的前沿技术,以提高深度学习模型的训练效率。这四个深度学习框架各有什么特点和优势?本文将对此做一个基本介绍。

作者 | Jesus Rodriguez

译者 | 苏本如,编辑 | 夕颜

出品 | CSDN(ID:CSDNnews)

大规模深度学习训练是在现实世界中构建深度学习解决方案最具挑战性的方面之一。 正如俗语所说,你最大的优点可以成为你最大的缺点,这一点自然也适用于深度学习模型。整个深度学习空间在一定程度上取决于深度神经网络(DNN)跨越GPU拓扑的能力。然而,同样的扩展能力导致了计算密集型程序的创建,这给大多数组织带来了操作上的挑战。从训练到优化,深度学习项目的生命周期需要健壮的基础设施构建块,以便能够并行化和扩展计算工作负载。

尽管深度学习框架正在快速发展,但相应的基础架构模型仍处于初期阶段。在过去的几年里,技术巨头谷歌、微软、优步(Uber)、DeepMind和其他公司定期发布了各自的研究成果,以便在大型GPU等基础设施上实现深度学习模型的并行化。

分布式和并行化计算的原理与深度学习程序生命周期的几乎所有阶段都息息相关。训练一个深度学习模型可能是一个非常昂贵的任务,运行也是如此。显而易见的答案是,可以利用大型GPU网络来分配深度学习程序的工作负载,但这绝非易事。众所周知,并发和并行编程是非常复杂的,尤其在应用于大型神经网络时更是如此。大型科技公司每天都在面临这些挑战,因为它们必须为关键业务应用运行极其复杂的深层神经网络。

今天,我想回顾一下谷歌、微软、DeepMind、和优步(Uber)等科技巨头用于并行化大规模深度学习模型训练的一些顶级框架。具体来说,我们将讨论以下四个框架:

  • 谷歌的 GPipe

  • 优步的Horovod

  • DeepMind的TF-Replicator

  • 微软的 DeepSpeed

谷歌的GPipe

GPipe专注于为深度学习项目提高训练工作量。从基础设施的角度来看,训练过程的复杂性是深度学习模型中经常被忽视的一个方面。训练数据集越来越大,也越来越复杂。例如,在医疗保健领域,遇到需要使用数百万高分辨率图像进行训练的模型已不罕见。因此,训练过程通常需要很长的时间才能完成,并且由于内存和CPU消耗而导致的成本也非常高。

将深度学习模型的并行性分为数据并行性和模型并行性,是一种研究深度学习模型并行性的有效方法。数据并行方法使用大量的机器集群来拆分输入数据。模型并行性尝试将模型移至加速器上,如GPU或TPU,它们具有加速模型训练的特殊硬件。在较高的层次上,几乎所有的训练数据集都可以按照一定的逻辑进行并行化,但在模型上却不是这样。例如,一些深度学习模型是由可以独立训练的并行分支组成的。在这种情况下,经典的策略是将计算划分为多个分区,并将不同的分区分配给不同的分支。然而,这种策略在连续堆叠层的深度学习模型中存在不足,这给高效并行计算带来了挑战。

GPipe采用一种称为管道的技术,将数据和模型并行性结合起来。从概念上讲,GPipe是一个分布式机器学习库,它使用同步随机梯度下降和管道并行性进行训练,适用于任何由多个连续层组成的深度神经网络(DNN)。GPipe将一个模型划分到不同的加速器上,并自动将一个小批量的训练实例分割成更小的微批量。该模型允许GPipe的加速器并行运行,以最大限度地提高了训练过程的可伸缩性。

下图说明了具有多个连续层的神经网络的GPipe模型在四个加速器之间的划分。Fk是第k个划分的复合正向计算函数。Bk是对应的反向传播函数。Bk既依赖于上层的Bk+1,也依赖于Fk的中间激活。在图片的上部中,我们可以看到网络的顺序特性如何导致资源利用不足的。图片的下部显示了GPipe方法,其中输入的小批量(mini-batch)被划分为更小的宏批量(macro-batch),这些宏批量(macro-batch)可以由加速器同时处理。

谷歌开源了GPipe的一种实现,作为TensorFlow项目的一部分。

开源地址:https://github.com/tensorflow/lingvo/blob/master/lingvo/core/gpipe.py

优步的 Horovod

Horovod是Uber的机器学习(ML)堆栈之一,它已经在社区中非常流行,并且已经被DeepMind和OpenAI等人工智能巨头的研究团队采用。从概念上讲,Horovod是一个用于大规模运行分布式深度学习训练工作的框架。

Horovod利用诸如OpenMPI之类的消息传递接口栈,来使训练作业能够在高度并行和分布式的基础设施上运行,而无需进行任何修改。通过以下四个简单的步骤即可在Horovod中运行分布式TensorFlow训练工作:

  1. hvd.init()初始化Horovod。

  2. config.gpu_options.visible_device_list = str(hvd.local_rank())为每个TensorFlow进程分配一个GPU。

  3. opt=hvd.DistributedOptimizer(opt)使用Horovod优化器包装任何常规的TensorFlow优化器,该优化器使用ring-allreduce来处理平均梯度。

  4. hvd.BroadcastGlobalVariablesHook(0)将变量从第一个进程广播到所有其他进程,以确保一致的初始化。

下面这个代码示例是一个基本的TensorFlow训练作业的模板,你可以从中看到上面的四个步骤:

 1import tensorflow as tf2import horovod.tensorflow as hvd# Initialize Horovod3hvd.init()# Pin GPU to be used to process local rank (one GPU per process)4config = tf.ConfigProto()5config.gpu_options.visible_device_list = str(hvd.local_rank())# Build model…6loss = …7opt = tf.train.AdagradOptimizer(0.01)# Add Horovod Distributed Optimizer8opt = hvd.DistributedOptimizer(opt)# Add hook to broadcast variables from rank 0 to all other processes during9# initialization.
10hooks = [hvd.BroadcastGlobalVariablesHook(0)]# Make training operation
11train_op = opt.minimize(loss)# The MonitoredTrainingSession takes care of session initialization,
12# restoring from a checkpoint, saving to a checkpoint, and closing when done
13# or an error occurs.
14with tf.train.MonitoredTrainingSession(checkpoint_dir=“/tmp/train_logs”,
15                                      config=config,
16                                      hooks=hooks) as mon_sess:
17 while not mon_sess.should_stop():
18   # Perform synchronous training.
19   mon_sess.run(train_op)

DeepMind的TF-Replicator

TF-Replicator专注于TensorFlow程序如何利用Tensor处理单元(TPU)有关的可伸缩性的另一个方面。TPU被认为是最先进的人工智能芯片之一,它为机器学习工作负载提供了本机可扩展性。然而,在TensorFlow程序中使用TPU需要专门的API,这会给不熟悉底层硬件模型的数据科学家们带来可移植性问题和采用障碍。DeepMind的TF Replicator通过提供一个更简单、对开发人员更友好的编程模型来利用TensorFlow程序中的TPU,从而解决了这一难题。

TF-Replicator的魔力依赖于一种“图内复制(in-graph replication)”模型,其中每个设备的计算被复制到同一张TensorFlow图中。设备之间的通信是通过连接设备对应子图中的节点来实现的。为了达到这种级别的并行化,TF-Replicator利用TensorFlow的图重写模型在图中的设备之间插入本机通信。当呈现一个TensorFlow图时,TF Replicator首先独立地为每个设备构建计算,并在用户指定跨设备计算的地方留下占位符。一旦构建了所有设备的子图,TF Replicator就会用实际的跨设备计算替换占位符来连接它们。

从编程模型的角度来看,使用TF-Replicator编写的代码看起来类似于为单个设备编写的本机TensorFlow代码。用户只需定义:(1)一个公开数据集的输入函数,和(2)一个定义其模型逻辑的阶跃函数(例如,梯度下降的单个阶跃)。下面的代码片段展示了一个简单的TF-Replicator程序:

 1# Deploying a model with TpuReplicator.2repl = tf_replicator.TpuReplicator(3num_workers=1, num_tpu_cores_per_worker=84)5with repl.context():6model = resnet_model()7base_optimizer = tf.train.AdamOptimizer()8optimizer = repl.wrap_optimizer(base_optimizer)# ... code to define replica input_fn and step_fn.per_replica_loss = repl.run(step_fn, input_fn)9train_op = tf.reduce_mean(per_replica_loss)with tf.train.MonitoredSession() as session:
10repl.init(session)
11for i in xrange(num_train_steps):
12session.run(train_op)
13repl.shutdown(session)

为了优化不同设备之间的通信,TF-Replicator利用了最先进的MPI接口。在一些实验中,DeepMind能够在一个TPUv3 pod的512个核心上,以2048的batch size批量训练著名的BigGAN模型。目前,TF-Replicator是DeepMind公司的TPU的主要编程接口。

微软的DeepSpeed

微软的DeepSpeed是一个新的开源框架,专注于优化大型深度学习模型的训练。当前版本包含了ZeRO的第一个实现以及其他优化方法。从编程的角度来看,DeepSpeed是在PyTorch之上构建的,它提供了一个简单的API,允许工程师只需几行代码就可以利用并行化技术来进行训练。DeepSpeed抽象了大规模训练的所有困难方面,例如并行化、混合精度、梯度累积和检查点,使得开发人员可以专注于模型的构建。

从功能角度来看,DeepSpeed在以下四个关键方面表现出色:

  • 规模:DeepSpeed可以为运行高达1,000亿个参数的模型提供系统支持,这和其他训练优化框架相比,提高了10倍。

  • 速度:在最初的测试中,DeepSpeed表现出的吞吐量比其他库高出4-5倍。

  • 成本:可以使用DeepSpeed进行训练的模型,其成本比其他替代方案少三倍。

  • 可用性:DeepSpeed不需要重构PyTorch模型,仅需几行代码即可使用。

将深度学习模型的训练并行化是一项非常复杂的工作,超出了大多数机器学习团队的专业知识。利用谷歌、微软、优步或DeepMind等科技公司创建的框架和架构,肯定可以简化这些工作。

在不久的将来,我们希望看到这些框架的一些版本包含在主流深度学习堆栈中,以加速核心深度学习社区准入的民主化。

原文链接:

https://towardsdatascience.com/the-frameworks-that-google-deepmind-microsoft-and-uber-use-to-train-deep-learning-models-at-scale-30be6295725

欢迎所有开发者扫描下方二维码填写《开发者与AI大调研》,只需2分钟,便可收获价值299元的「AI开发者万人大会」在线直播门票!

推荐阅读

  • GitHub标星2000+,如何用30天啃完TensorFlow2.0?

  • 斩获GitHub 2000+ Star,阿里云开源的Alink机器学习平台如何跑赢双11数据“博弈”?

  • 百年 IBM 终于 All In 人工智能和混合云!

  • 微软为一人收购一公司?破解索尼程序、写黑客小说,看他彪悍的程序人生!

  • 机器学习项目模板:ML项目的6个基本步骤

  • BM、微软、苹果、谷歌、三星……这些区块链中的科技巨头原来已经做了这么多事!

  • 你点的每个“在看”,我都认真当成了AI

AI四巨头Google、DeepMind、Microsoft、Uber深度学习框架大比拼相关推荐

  1. AI 四巨头 Google、DeepMind、Microsoft、Uber 深度学习框架大比拼

    2020-04-08 15:08:38 编者按:Google.Uber.DeepMind和Microsoft这四大科技公司是当前将深度学习研究广泛应用于自身业务的典型代表,跻身全球深度学习研究水平最高 ...

  2. 清华「计图」、旷视「天元」纷纷重磅开源,国产深度学习框架迎来高光时刻...

    来源:CSDN 本文约3141字,建议阅读7分钟. 本文介绍清华开源的深度学习框架 Jittor(计图) 引起了广泛关注,支撑旷视诸多业务和战绩的深度学习框架 MegEngine(天元) 也将在近日开 ...

  3. 国产深度学习框架迎来高光时刻,继清华 Jittor开源后,旷视「天元」纷纷重磅开源!...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 1956年,美国的达特茅斯会议成为人工智能开启的标志性事件.同年,中国第一批自主制 ...

  4. 深度学习框架不能“包治百病”,开发者如何选出最适合自己的?

    随着深度学习关注度和势头上升,深度学习被越来越多的企业和组织的生产实践结合起来.这时,无论是对于深度学习相关专业的初学者,还是已经在企业和组织中从事工业场景应用和研发的开发者来说,选择一个适合自己,适 ...

  5. 云平台运行python_如何免费云端运行Python深度学习框架?

    想运行TuriCreate,却没有苹果电脑,也没有Linux使用经验,怎么办?用上这款云端应用,让你免安装Python运行环境.一分钱不用花,以高性能GPU,轻松玩儿转深度学习. 痛点 <如何用 ...

  6. 【AI创新者】TensorFlow 贡献者唐源:掌握 Google 深度学习框架的正确姿势

    自 2015 年底开源到如今更快.更灵活.更方便的 1.0 版本正式发布,由 Google 推出的第二代分布式机器学习系统 TensorFlow 一直在为我们带来惊喜,一方面是技术层面持续的迭代演进, ...

  7. TensorFlow:实战Google深度学习框架(四)MNIST数据集识别问题

    第5章 MNIST数字识别问题 5.1 MNIST数据处理 5.2 神经网络的训练以及不同模型结果的对比 5.2.1 TensorFlow训练神经网络 5.2.2 使用验证数据集判断模型的效果 5.2 ...

  8. 资深算法工程师万宫玺:Java工程师转型AI的秘密法宝——深度学习框架Deeplearning4j | 分享总结

    资深算法工程师万宫玺:Java工程师转型AI的秘密法宝--深度学习框架Deeplearning4j | 分享总结 本文作者:杨文 2018-01-02 11:03 导语:一文读懂深度学习框架Deepl ...

  9. 免费教材丨第55期:Python机器学习实践指南、Tensorflow 实战Google深度学习框架

    小编说  时间过的好快啊,小伙伴们是不是都快进入寒假啦?但是学习可不要落下哦!  本期教材  本期为大家发放的教材为:<Python机器学习实践指南>.<Tensorflow 实战G ...

最新文章

  1. 机房收费系统【VB版】——选择下机
  2. C++结构体,联合体
  3. 802.11协议中的广播与tcp/ip中的广播
  4. 使用Python作为计算器
  5. Solidity编程 二 之Solidity安装
  6. 漫画:如何给女朋友解释灭霸的响指并不是真随机消灭半数宇宙人口的?
  7. div添加一个点击事件(绑定点击事件)
  8. pku2777 Count Color
  9. 关于在linux系统下卸载软件的问题
  10. C小项目 简易英汉词典
  11. python文件下载学习
  12. EDSR dataloader.py代码问题
  13. Flutter 开发之 Dart语言 基础
  14. c语言无法定位程序输入点,WinXP提示无法定位程序输入点于动态链接库上的快速解决办法...
  15. iPhone 手势识别
  16. 计算机网络期末复习(学会不挂科)
  17. Stop worrying and start living
  18. javascript面试题大全_Js基础面试题(附答案)
  19. 【Linux】RHCE -- RHCSA 认证考试 模拟练习题解析
  20. sql中的大于小于等于的表示

热门文章

  1. Microsoft Office Communications Server 2007 R2 RTM 简体中文企业版部署速成篇之二
  2. TCP Cluster for mqtt 技术实施方案
  3. jquery mobie导致超链接不可用
  4. Eclipse mac 下的快捷键
  5. 从1.5K到18K 一个程序员的5年成长之路(二)
  6. modules黑名单
  7. github 视觉测量_教你如何提高双目立体视觉系统的精度
  8. 苏州之行的点滴感悟---活动中老师的言论以及火车上遇到的人
  9. 2018-4-17论文《狼群算法的研究与应用》笔记2 :高维复杂单目标连续优化问题的改进狼群算法
  10. echarts如何修改散点大小