锐眼洞察 | TensorFlow在企业中的应用——深度学习生态概述 ②(翻译)

作者:Sean Murphy & Allen Leis

原文:Considering TensorFlow for the Enterprise

译者:TalkingData Heisatis

本译文禁止商用,转载请注明来源与译者!

导语:本文翻译自 O’Reilly 的一篇报告,介绍了 TensorFlow 在企业中的应用,对深度学习生态进行了概述。报告篇幅较长,译文将分为三篇发布,本文为第二篇

第一篇回顾:锐眼洞察 | TensorFlow在企业中的应用——深度学习生态概述 ①(翻译)

屏幕快照_2017-12-11_下午6.36_.00_.png

第二章:选择一个深度学习框架

当决定采用深度学习时,第一个问题就是你应该选择哪个深度学习库(以及为什么)?深度学习已经成为许多大型科技公司的重要差异化因素,每一个都已经发展或正在倡导一个特定的选择。如谷歌的TensorFlow,微软的认知工具包(又名CNTK)。亚马逊正在支持学术界建造的MXNet,这导致有人质疑其内部开发的DSSTNE(Deep Scalable Sparse Tensor Network Engineer)的寿命。百度拥有并列分布式深度学习(PADDLE)库。 Facebook有Torch和PyTorch。英特尔拥有BigD等等。毫无疑问未来还会有更多选择出现。

我们可以对各种深度学习库进行评估,包括性能,支持的神经网络类型,易用性,支持的编程语言,作者,社区的支持等等。为了提高竞争力,每个库应该支持使用图形处理单元(GPU),最好是多个GPU和分布式计算集群。表2-1总结了十几种可用的顶级开源深度学习库。

图2-1.png

表2-1 12个选定深度学习框架的一般信息和GitHub统计信息(每个适用列中的“最佳”值以粗体突出显示)

支持的编程语言

几乎所有表内列出的框架都是用C ++实现的(可以使用Nvidia的CUDA进行GPU加速),但是在Lua中有后端的Torch和为Java虚拟机(JVM)写了后端的Deeplearning4J。使用这些框架的一个重要问题是他们支持哪些编程语言进行魔性训练,允许神经网络从数据中学习并更新内部权重的计算密集型任务,以及支持哪种语言进行推断,通过之前训练得到模型和新数据获得预测值。

由于推断是生产中比较常见的任务,人们可能会争辩说,库支持推理的语言越多,插入现有企业基础架构就越容易。一般来说训练过程需要专业技术,支持的语言可能会比较有限。理想情况下,一个框架需要可以支持这两个任务的同一套语言。

不同类型的网络

有许多不同类型的神经网络,学术界和工业界的研究人员几乎每天都在开发具有相应新缩写词的新网络类型。例如前馈网络、全连接网络、卷积神经网络(CNN)、受限玻耳兹曼机器(RBM)、深度信念网络(DBN)、自动去噪编码器、堆叠去噪自动编码器、生成对抗网络(GAN) 、循环神经网络(RNN)等等。如果要用图形或列表来表示不同的神经网络类型/结构,神经网络俱乐部是一种初步的选择。

已经受到广泛关注的两种网络类型是卷积神经网络,其能够处理图像作为输入,以及可以处理时序数据的循环神经网络及其变体(例如LSTM),支持将句子中的文本、时间序列数据、音频流等等作为输入。企业选择的深度学习库应该支持最广泛的网络,至少需要尽量与业务需求相关。

部署和操作选项

尽管机器学习和深度学习通常需要大量的训练数据,但深度学习确实预示着从大数据向大型计算的过渡。 对于企业来说,这可能是最大的问题和潜在的障碍,从更传统的机器学习技术过渡到深度学习。训练大规模的神经网络可能需要几周甚至几个月的时间;因此即使是50%的性能增益也能带来巨大的收益。 为了使这个过程变得可行,训练网络需要大量的原始计算能力,这些计算能力通常以一个到多个GPU,或专用处理器的形式出现。 理想情况下,一个框架将支持单CPU、多CPU、GPU环境以及他们的异构组合。

无障碍的帮助

提供帮助的程度对于库的实用性和成功性而言是非常重要的组成部分。 文档量是衡量平台是否成功(及其潜在寿命)的有力指标。大量的文档促使用户容易选择和使用库。 随着生态系统的不断发展,在线教程、电子书籍和在线图书、视频、在线和离线课程,甚至会议等多种形式的文档都是需要的。特别要注意的是企业商业支持的问题。尽管上述所有库都是开源的,但只有一个库提供直接的商业支持:Deeplearning4J。 第三方很可能会更愿意提供咨询服务来支持每个库的使用。

1. 企业级的深度学习

从十几个深度学习框架中进行选择,我们对其中四个更适合企业生产环境部署的库进行了深入研究:TensorFlow、MXNet、Microsoft Cognitive Toolkit和Deeplearning4J。 为了大致估算受欢迎程度,图2-1显示了按Google搜索量衡量的搜索词相对全球范围内的兴趣。

图2-2.png

图2-1 在深度学习开源框架中,全球搜索“随时间推移的兴趣” 最大相对值(100)出现在在2017年5月14日这周

TensorFlow

Google在处理大规模数据方面有着丰富的历史经验,运用机器学习和深度学习为消费者和企业创造有价值的服务。 当Google发布开源软件时,业界都会比较关注,特别是有新版本发布时。 2011年,Google内部使用名为DistBelief的系统进行深度学习,该系统能够使用“大规模机器集群在深度网络中分发训练和推理”。凭借多年运营这个平台的经验, Google最终于2015年11月发布了 TensorFlow。

TensorFlow是用于表达机器学习算法的界面,以及用于执行这种算法的实现。 使用TensorFlow表达的计算可以在各种各样的异构系统上执行,从移动设备(例如手机和平板电脑)到大型分布式系统(数百台机器)以及数千个计算设备(如GPU)。 该系统是灵活的,可以用来表达各种各样的算法,包括深度神经网络模型的训练和推理算法,它已经被应用在十几个计算机科学等研究领域,进行机器学习系统部署和投产, 例如语音识别,计算机视觉,机器人学,信息检索,自然语言处理,地理信息提取和计算药物成分等。

有些人认为这是一个赢家通吃的领域,可以说TensorFlow已经赢得了开发者的心。 虽然这个声明可能还为时过早,但TensorFlow目前拥有令人印象深刻的源动力。 几乎所有的指标都显示,TensorFlow都是深度学习领域最活跃的开源项目。 现在已经产生了相当多有关TensorFlow的书籍和高端会议。以Google搜索量衡量,已经获得了全球范围内广泛的关注和兴趣,并且具有最多的有关活动聚会。 对竞争对手来说,这种领先将很难被超越。

MXNet

MXNet是我们将深入研究的最新的深度学习框架。 它于2017年1月进入Apache孵化,截至2017年10月的最新版本是目前已经发布 1.0 正式版。 问题是,由于其比较新而且竞争对手很强大,企业是否应该考虑到这种替代性的深度学习框架呢? 亚马逊在2016年11月宣布:“Apache MXNet是AWS 选择的深度学习框架”。 MXNet背后的创始机构之一,卡内基梅隆大学和CMU机器学习系教授Alexander Smola博士,2017年7月加入亚马逊可能并非巧合。

为了进一步证明MXNet 的竞争力,最新的框架版本允许开发人员将MXNet深度学习模型转换为Apple的CoreML格式,这意味着数十亿iOS设备现在可以为使用MXNet的应用程序提供推理功能。 另外请注意,苹果公司是与上述任何一个深度学习框架都没有关联的大型科技公司。

什么是MXNet,它是如何改进现有的库的?

MXNet是一个多语言机器学习库,用于简化机器学习算法的开发,特别是深度神经网络。 嵌入在宿主语言中,它将声明性符号表达式与命令张量计算相结合。它提供了自动分化来推导梯度。 MXNet具有计算和内存的高效性,可运行在各种异构系统上,从移动设备到分布式GPU集群。

MXNet是由许多顶尖大学(包括CMU,麻省理工学院,斯坦福大学,纽约大学,华盛顿大学和阿尔伯塔大学)合作而成的。从其最近的开发情况看,作者有机会已有的深度学习框架中学习并改进。 框架努力提供灵活性能。 开发人员可以混合使用符号和命令式编程模型,并且可以通过动态依赖调度程序来并行化两者。 开发人员还可以利用预定义的神经网络层来构建复杂的网络,代码很少。 重要的是,MXNet远不止支持Python。 它也具有完整的Scala、R、Julia,C ++、甚至Perl的API。 最后,MXNet代码库很小,专为在GPU和CPU上进行高效扩展而设计。

微软认知工具包(CNTK)

尽管互联网崛起,微软仍然是企业领域的主要厂商之一。 因此,微软研究院推出深度学习框架应该是不足为奇的。 以前称为“计算神经工具包”(CNTK),该工具包显然是从微软研究院的世界级语音识别团队中涌现出来的,然后推广到其他问题集。 2014年出现了第一篇综合报告,2016年1月在Github上发布了该软件。2016年,该软件在会话语音识别领域取得了人类的表现。 与竞争对手相比,该工具包有望实现高效的可扩展性和令人印象深刻的性能。

Deeplearning4J

Deeplearning4J在这个列表中有些奇怪的框架。 尽管Python已经成为深度学习的近乎事实上的首选语言,但Deeplearning4J是在Java中开发的,旨在使用JVM并与基于JVM的语言(如Scala、Clojure、Groovy、Kotlin和JRuby)兼容。 请注意,底层计算采用C / C ++和CUDA编码。 这也意味着Deeplearning4J可以同时支持Hadoop和Spark。 其次,许多早期的深度学习框架是由学术界出现的,而第二波则是由大型科技公司兴起的。 Deeplearning4J是不同的,因为它是由一个位于旧金山的小型科技创业公司(Skymind)在2014年创建的。尽管Deeplearning4J是开源的,但还是有一家公司愿意为使用该框架的客户提供付费支持。

2. 行业观点

Jet.com提供了深度学习库选择的一个有趣的例子。 Jet.com是一家从上到下采用微软技术栈的公司,是美国为数不多的专注于F#编程语言的商店之一(他们也使用C#和.NET框架)。 对于云服务,该公司使用Microsoft Azure。 尽管重度依赖微软,Jet.com还是使用TensorFlow进行深度学习。 该公司最初是从Theano开始的,但在TensorFlow 发布之后迅速转换到了TensorFlow。

TensorFlow运行在具有在Microsoft Azure云中运行的GPU的虚拟实例上。

作为一家技术创业公司,PingThings在选择不同的技术方面有很大的余地。 Google在这个领域的突出地位以及大量的文档和教程都是选择TensorFlow的强大动力。 然而,PingThings正在与国家科学基金会(NSF)和高级研究计划署能源(ARPA-E)资助的项目与多个研究机构的合作者合作,同时在公用事业部门内部署硬件。 因此,Google设计TensorFlow来平衡研究和大规模运营的需求是非常重要的事实。 Tensor2Tensor(我们稍后讨论的生态系统的一部分)特别吸引人,因为它专注于序列数据。 MXNet是一个有趣的新选项,未来的发展将受到关注,特别是考虑到其卓越的性能和亚马逊的支持。

3. 本章小结

TensorFlow做得非常好:有竞争力的性能,对不同神经网络类型的强大支持,大量的硬件部署选项,支持多GPU、多种编程语言选项等等。然而,库的魅力超越了这个功能集。Google通过分布式文件系统和Map-Reduce计算框架的结合,在帮助启动大数据革命方面发挥了重要作用,并在今天继续领跑业界。 此外,谷歌内部有许多成功的技术迭代,然后看到广泛的发布。受欢迎的容器编排系统Kubernetes就是这样一个例子,它是早期内部系统(如Borg和Omega)的多年经验和教训的结果。谷歌在网络技术和软件工程方面的推进规模,学术界和工业界之间的平衡,似乎特别适合于深度学习的淘金热。

TensorFlow继承了这种合理性,目的是充分灵活地进行深入的研究,同时也足够强大,以允许其模型的生产部署。未来可能会出现更新的框架,可以借鉴TensorFlow的经验教训,改进库的各个方面,提供多种编程方法,或提供更高的性能。上述许多库都试图做一个或多个这样的事情。 然而,TensorFlow正在不断应用这些教训,努力提高性能并探索新的方法。 只要Google的重量和努力落在TensorFlow后面,它将继续成为深度学习库的一个强大、安全、实际上默认的选择,特别是考虑到我们在第3章中描述的生态系统。

参考资料:

  1. J. Dean et al., “Large Scale Distributed Deep Networks,” Advances in Neural Information Processing Systems 25 (2012).
  2. M. Abadi, A. Agarwal, P. Barham, E. Brevdo, Z. Chen, C. Citro, G.S. Corrado et al., “TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems”, preliminary white paper (2015).
  3. T. Chen et al., “MXNet: A Flexible and Efficient Machine Learning Library for Hetero‐ geneous Distributed Systems”, NIPS Machine Learning Systems Workshop (2016).
  4. A. Agarwal et al. (2014). “An Introduction to Computational Networks and the Com‐ putational Network Toolkit”, Microsoft Technical Report MSR-TR-2014-112 (2014).

(未完待续)

发表评论

电子邮件地址不会被公开。 必填项已用*标注