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

作者:Sean Murphy & Allen Leis

原文:Considering TensorFlow for the Enterprise

译者:TalkingData Heisatis

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

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

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

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

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

第三章:深度学习框架及生态系统探索

虽然令人印象深刻,但TensorFlow本身“仅仅”是一个使用数据流图进行数值计算的开源库。 如第2章所述,有许多开源竞争者可以用来构建,训练和运行复杂神经网络的推理; 未来甚至会出现更多。深度学习框架的生态系统是围绕着这个框架本身的,不仅由原作者创建,而且还由社区建立,在不断发展的空间中形成了一个长期的解决方案。 这是TensorFlow丰富而不断增长的生态系统,迫使许多人使用它。 对每个TensorFlow组件的详细使用将超出本报告的范围,但我们将努力介绍相关的部分,并提供一些更大的整体难题的视角。

Python是生态系统力量的一个很好的例子。该语言的卖点之一是其“能力内置”的理念; 它带有一个标准的库,使许多任务(如发出HTTP请求)变得简单。即使采用这种方法,Python也将其一些成功归功于其生态系统。 Numpy和Scipy图书馆为数字和科学计算奠定了坚实的基础,扩展了语言的核心功能和使用它的社区。像scikit-learn这样的库,几乎可以作为机器学习领域的算法的参考实现,而Pandas是基于Python的数据分析的事实标准,它们建立在Numpy和Scipy的基础之上,为了帮助Python争夺数据科学首选编程语言的宝座。像Enthought和Continuum Analytics这样的公司创建了Python的分发版本,其中包括许多外部依赖造成安装困难的关键库。这简化了Python的部署,拓宽了用户群体。 IPython Notebook已经发展成为Jupyter(Julia Python R)来支持Python以外的新语言。 Jupyter正在成为数据科学,深度学习和人工智能的标准IDE。支持基于Python的深度学习库,也不仅扩展了Python的生态系统,而且也因为这个生态系统而成为可能。

我们将TensorFlow生态系统划分为几个功能类别。 第一组通过使用TensorFlow设计,构建和训练神经网络更容易,从而增加了库的直接效用。 这方面的几个例子是预建的或预训练的深度神经网络,用于跟踪训练进度的图形界面(TensorBoard)以及TensorFlow(Keras)的更高级别API。 第二类包含可以预判行为并易于管理的工具。下一个类别是用于连接到其他流行的开源项目(如Hadoop、Spark、Docker和Kubernetes)并与之交互的组件。 最后一类是减少训练深度神经网络的时间和成本的技术,因为这通常是需要进一步发展的部分。

这个部分大致上遵循TensorFlow工作流程的三个阶段:(1)数据准备、(2)训练、(3)推理和模型服务。 我们不会把太多的精力放在准备用于TensorFlow的数据上;假设从其他类型的机器学习过渡到现在的企业已经有了清理,准备训练数据的机制。 图3-1显示了生态系统如何与整个工作流程保持一致。

3-1.png

图3-1 TensorFlow生态系统各个部分与整个工作流程之间的一致性

1. 改进网络设计和训练

以下工具和开源项目能够帮助软件工程师和数据科学家设计、构建和训练深度学习模型,力求为TensorFlow用户创造即时的价值。如果您是新手,我们建议您以相关的预建神经网络为出发点,然后仔细研究Keras,这可以简化复杂网络的创建并为模型提供一些便捷性。 如果您的应用程序涉及序列数据(文本、音频、时间序列等),请不要跳过Tensor2Tensor。 无论你的经验水平如何,期望你使用TensorBoard。

估计

TensorFlow为机器学习(tf.estimator)提供了一个更高级别的API。 它包含许多内置的模型——线性分类、线性回归、神经网络分类、神经网络回归以及组合模型,并支持更快速地配置、训练、预测和评估。

预建神经网络

深度神经网络设计仍然是一种学术追求和艺术形式。 为了加速DL的使用,TensorFlow附带了许多可供即时使用的示例神经网络。 在开始任何项目之前,请检查此目录以查看是否有可用的跳转启动。 特别值得一提的是Inception网络,这是一种卷积神经网络,在2014年的ImageNet大规模视觉识别挑战中,在分类和检测方面都表现出最好的效果。

Keras

Keras是一个用Python编写的高级API,专为人类在尽可能短的时间内构建和实验复杂的神经网络而设计。 您可以使用Keras作为TensorFlow的模型定义抽象层,也可以与其他TF相关的工具兼容。 有趣的是,Keras提供了一个将网络从一个深度学习库转移到另一个深度学习库的潜在可移植性途径,与实现标准模型抽象最接近。 目前它不仅能够在TensorFlow上运行,还能在Theano、Microsoft Cognitive Toolkit以及最近的MXNet上运行。 此外,Keras是Deeplearning4J的Python API。

用于TensorFlow的机器学习工具包

该工具包提供了开箱即用的高级机器学习算法(参见下面的列表),该算法受流行的scikit-learn库的启发,可立即使用,优于使用TF的低级API重写算法。

  • 神经网络(DNN,RNN,LSTM等)
  • 线性和逻辑回归
  • K-means聚类
  • 高斯混合模型
  • WALS矩阵分解
  • 支持向量机(L1和L2正则化)
  • 用于上下文优化的随机双重坐标上升
  • 随机森林
  • 决策树

重要的是,所有这些算法都具有分布式实现,并且可以并行执行跨机器,与非并行实现相比,性能显著提高。

Tensor2Tensor(T2T)

T2T是一个建立在TensorFlow之上的开源系统,用于支持最先进的深度学习网络的开发和训练,特别关注sequence-to-sequence模型(用于翻译文本或为图像提供说明)。这个在2017年发布的库正在被Google Brain团队积极使用、开发、维护和支持。 它还包括以下内容:

  • 许多包含不同类型的数据的数据集(文本,音频和图像)
  • 超参数配置
  • 最近的一些学术论文中的最佳模型,包括:

– “Attention Is All You Need”

– “Depthwise Separable Convolutions for Neural Machine Translation”

– “One Model to Learn Them All”

该软件的目标是提供比基本TensorFlow API更高的抽象级别,并将许多最佳实践和交易中的难学“技巧”封装到软件中,在所有软件之间实施标准化接口。

TensorBoard

机器学习通常很难形象化,神经网络一直被批评为黑盒子,几乎没有透明的内部工作。 深度网络图可能难以可视化。 很多图层中的数据流很难原位观察甚至后验。 从实践者的角度来看,了解和调试神经网络可能是非常困难的。

TensorBoard是一个可视化工具的集合,提供对TensorFlow图形的洞察,并允许开发人员或分析人员了解、调试和优化网络。 这些工具的用户界面是基于浏览器的。 它提供了三个核心功能:

图表结构的可视化

理解一个神经网络的第一步,可以由几十层,几十万个节点或更多的网络组成,从视觉上检查和验证网络的结构。

摘要的可视化

TensorBoard允许您附加总结,以捕获在训练和执行过程中流过图表的各种张量。 这些张量可以表示输入数据或网络权重,直方图显示网络权重或网络中其他张量如何随时间变化。

嵌入式可视化器

TensorBoard还允许您在三维界面中显示机器学习结果。

通用的功能是很方便使用的,例如学习期间的图表汇总统计。 您还可以深入了解特定图层的输出以运行您自己的分析。 这使得可以在这些值作为下一层的输入之前审查来自一层的输出分布。 TensorBoard读取序列化的TensorFlow事件数据。 尽管某些功能和可视化功能是在没有设置的情况下自动提供的,但其他功能和可视化功能需要更改代码才能捕捉要显示的数据,并且您可以选择收集摘要信息的节点或对象。

谷歌有持续的TensorBoard发展的大目标。 首先,TensorFlow调试器将与TensorBoard集成在一起,以便您可以通过此工具可视化调试信息。 接下来,TensorBoard即将支持允许复杂和定制可视化的插件,这些插件可用于在各种问题领域中查询具有独特可视化需求的特定神经网络类型。 最后,Google计划发布一个“组织级”的TensorBoard,不仅为个人而且为团队设计,以便结果可以迅速传播,共享的发展历史可以继续保持。

TensorFlow调试器

TensorFlow带有一个专门的调试器(tfdbg),它可以在通过TensorFlow图形进行训练和推理时自动检测任何数据。 TensorFlow(tdb)有一个有趣的第三方开源调试器,具有强大的可视化功能。 这被作者描述为:“TDB之于TensorBoard,就像GDB之于printf。 两者在不同的情况下都是有用的。”然而,作者Eric Jang显然是被Google Brain聘用的,外部的努力已经被放弃了。

2. 部署网络用于预测

由于需要大量的计算需求,深度学习训练通常会承担大部分压力。 但是,如果没有人使用深度神经网络,那么最新的深度神经网络是没有价值的。 以强大、可扩展和高效的方式提供预测功能对于深度学习库和生态系统的成功至关重要。

TensorFlow Serving

训练结束后,企业将面临如何运行深度学习网络和机器学习模型的决策。 将会有一些用例,例如在研究、实验或者异步预测/分类活动中,交互性是不需要的。 然而,在许多情况下,企业将希望为面向用户的应用程序提供实时预测(如移动应用程序中的对象检测,例如HBO硅谷的“Not Hotdog”应用程序),人为决策支持或自动化指挥和控制系统;这就要求将先前训练过的网络投入生产进行预测。

部署机器学习模型带来的需求在设计生产系统方面打开了潘多拉盒子。 我们如何提供最高水平的表现? 如果我们需要为不同的操作公开多个模型呢? 我们如何管理部署过程或处理多个模型版本的配置管理?

TensorFlow Serving提供了一个面向生产的高性能系统来解决这个模型部署的问题;它托管TensorFlow模型并允许远程访问它们以满足客户端请求。 重要的是,所提供的模型是可版本化的,使得用新的权重或迭代更新网络变得容易,同时维护独立的研究和生产分支。 您无法通过浏览器发出HTTP请求来与TensorFlow服务进行通信。 相反,构建在C++上的性能的服务器实现了gRPC接口。 gRPC是Google的远程过程调用框架,旨在以可扩展的方式高效地连接数据中心内的服务。 因此,需要建立一个客户端来与服务器通信。 深度学习和机器学习模型必须以Google的protobuf格式保存。 TensorFlow服务可以在CloudML中或通过使用Docker / Kubernetes进行(自动)扩展。

进程内服务

在某些情况下,组织可能不想部署TensorFlow Serving或不能使用TensorFlow Serving RPC服务器来为模型提供服务。在这些情况下,通过在应用程序中包含核心TensorFlow库,您仍然可以直接使用保存的模型。进程内服务提供了一种非常轻量级的机制来提供预测功能,但TensorFlow Serving所提供的好处却没有,比如自动请求批处理或模型版本控制。

举个例子,我们来考虑一个用Python库Flask构建的基本网站。该网站将允许用户使用深度卷积神经网络来上传图像并识别图像内的对象。从我们的角度来看,有趣的部分发生在用户上传照片之后,并且经过训练的卷积神经网络被加载之后。一旦收到照片,Flask服务器将显示网络输入照片,执行预测,并返回结果。所有的预测能力都将由TensorFlow库提供,这些库很容易被基于Flask的Web服务器调用。类似的方式也可以用在移动设备上(请参阅http://tensorflow.org/mobile)

3. 与其他系统集成

企业正在考虑采用的新技术的一个重要方面是如何适应现有的企业基础架构。 尽管当今的大数据格局非常拥挤和复杂,但是有一些明显的技术在许多行业的大数据栈中发挥作用。

数据摄取选项

深度学习的关键是大量的数据,必须清理、调整,然后用于训练神经网络。为了达到这个目的,数据集是必须事先准备的。 幸运的是,我们有很多选择。 首先,TensorFlow支持在TFRecords中的协议缓冲区上建立自己的本地TensorFlow格式(tf.Example和tf.SequenceExample)。 请注意,Apache Beam对TFRecords有本地支持。 其次,稍微慢一些,TensorFlow内置了读取JSON,逗号分隔值(CSV)和Avro数据文件的功能。 最后,最终用户可以使用Python来读取数据,包括Pandas数据表中的数据。 因为最后一个选项最慢,所以最好进行测试和实验。 最后,TensorFlow支持几种不同的分布式存储选项,包括Apache Hadoop HDFS、Google Cloud Storage和Amazon Elastic File System。

TensorFlowOnSpark

雅虎非常友好地开放源代码,允许分布式TensorFlow训练和预测运行在为Apache Spark构建的集群上。 从企业角度来看,这可能非常强大,因为许多希望使用TensorFlow的公司可能已经在使用Spark进行数据分析和机器学习 。 因此,组织可以重新使用现有的集群资产,而不是单独设置单独的基础设施来进行深入学习,从而使转换变得更加容易。 此外,这可以减轻将数据从一个集群转移到另一个集群的需求——这是常常一个痛苦且耗时的过程。

从策略的角度来看,TensorFlowOnSpark与TensorBoard兼容,甚至在集群设置训练期间配置Spark执行器来运行Tensorboard。 该API是最小的,使其快速学习和使用,只需要很少的变化便能通过现有的TensorFlow代码运行。

TensorFlowOnSpark提供了三个方面的手段:

  • 在spark中启动/配置TensorFlow群集
  • 通过将Spark的弹性分布式数据集(RDD)转换为feed_dict将数据馈送到TensforFlow图
  • 完成后关闭TensorFlow群集

为了最大限度地利用Spark,你需要运行TensorFlow程序,这个程序将完全饱和资源;否则,性能不会像任何分布式应用那样线性扩展。 在缺点方面,TensorFlowOnSpark并不完全符合所有的社区项目(如Keras)。 此外,在Java虚拟机(JVM)中运行的Spark可能会在失败时提供一些相对难以理解的错误消息。 无论如何,如果您的企业已经在使用Spark群集,这可能是运行分布式TensorFlow进行训练的最简单方法。

“Ecosystem” Repo

“Ecosystem” Repo是Google公司在GitHub上的一个Apache 2.0许可的开放源代码存储库,其中包含将TensorFlow与众多开源软件集成在一起的示例:

Docker:

Dockerfiles中的一组示例,用于构建具有各种TensorFlow配置的容器。

Kubernetes:

用于在Kubernetes上运行分布式TensorFlow的YAML模板文件。

Marathon (on top of Mesos):

在Marathon中运行的TensorFlow的配置文件,Mesos的容器流程,它是一个集群管理器。

Hadoop:

使用TRRecords格式实现Apache Hadoop MapReduce的InputFormat / OutputFormat。

Spark-tensorflow-connector:

用于读取和写入Spark 2.0+ SQL DataFrame中的TensorFlow记录(TFRecords)的库。

考虑“生态系统”回购的一个起点,探索如何将TensorFlow与其他软件集成在一起。

4. 加速训练和预测

训练深度神经网络需要大量的计算能力,通常超过了通用微处理器集群可以提供的功能。 然而,随着深度学习的价值越来越明显,寻求更高性能的硬件变得至关重要。 GPU很快就被用于这个任务,后来,为这个用例专门设计的定制硬件也在开发中。 需要注意的是,如果没有足够的训练数据和足够的计算能力,深度学习将是无关紧要的,并且如今也不会取得的如此令人印象深刻的成功。

GPU和CUDA

使用图形处理单元(GPU)以大规模并行方式执行浮点计算已经引起了近二十年来重视性能的程序员的兴趣。 实际上,GPU上的通用计算(GPGPU)这个术语是在2002年创造的。NVIDIA一直是这个用例的一个长期推动者,并为公司的GPU开发了其专有的计算统一设备架构(CUDA)作为并行计算平台和编程模型。

训练深度学习网络已经成为这个领域的杀手级应用,NVIDIA借助NVIDIA深度学习软件开发套件(NVIDIA Deep Learning Software Development Kit)增强了其CUDA产品,该套件包含一个GPU加速的神经网络(称为cuDNN)所需的关键原语库。训练深度网络,与英特尔最快的CPU相比,使用NVIDIA提供的最快的GPU可以提供10到100倍的加速。

张量处理单元

在2016年5月世界了解Google IO的谷歌张量处理单元(TPU)之前,GPU被用于加速深度神经网络的基准。第一代TPU于2016年5月在Google I / O会议上宣布, 加速预测工作量(不是训练)使用量化的整数算术,而不是浮点。 第一个第一代TPU的优秀技术概况在网上发布,过去一年中提供了一篇非常全面的技术文章,可在线获得。重要的是,这个第一代TPU已经在Google的数据中心 一年多的时间,并帮助谷歌的AlphaGo赢下了世界冠军李世乭。

第二代TPU于2017年发布,可进行预测和训练,并进行浮点运算。 每个单独的处理器提供45 teraflops的性能,并被安排到一个四芯片,180 个teraflop的设备。 64个这样的设备组装成一个容器,提供了11.5千万亿次的深度学习性能。对于任何面向服务器的处理器来说,这两个芯片的关键在于它们不仅提供令人印象深刻的浮点性能,而且 比传统处理器消耗更少的电力。

为什么这对企业来说很重要? 因为TPU降低了模型训练所需的成本和时间。 尽管Google没有出售TPU的计划,但通过Google的云产品可以提供这种功能。 此外,考虑到公司控制整个堆栈,Google有一些有趣的选择可以在软件和硬件上进行优化。 Google并不是这个领域唯一的公司。 英特尔于2016年8月收购了一家定制芯片加速深度学习的小公司Nervana。

Google Cloud TPU和CloudML

Cloud TPU是目前提供alpha版本的Google Cloud服务,使用户能够使用第二代TPU对机器学习模型进行训练和预测。 您可以使用标准虚拟机和自定义虚拟机类型连接到Cloud TPU,该产品还与其他Google云端平台产品(包括Google Compute Engine和BigQuery)完全集成。这是企业利用Google TPU的最直接方式。Google还通过云计算机学习引擎(Cloud ML)的一些功能间接公开TPU。

5. 本章小结

对于任何采用深度学习的企业来说,面临的问题是如何融入组织现有的工作流程和数据通道。 TensorFlow数据流水线由三个阶段组成:(1)数据准备、(2)模型训练、(3)模型服务和预测。 这三个都直接从TensorFlow库和新兴的生态系统获得了大量的支持。 这个数据流水线与企业中的传统机器学习流水线非常相似,但有一个显着的区别。 对于深度学习模式,模型训练会花费更多的时间和资源。 生态系统试图通过支持多个GPU甚至Google自己的TPU来弥补这种情况。

参考资料:

  • Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott E. Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, and Andrew Rabinovich, “Going Deeper with Convolutions”, Computer Vision and Pattern Recognition (2015).
  • N.P. Jouppi et al., “In-Datacenter Performance Analysis of a Tensor Processing Unit”, Proceedings of the 44th Annual International Symposium on Computer Architecture (June 2017): 1-12.
  • Patrick Kennedy, “Google Cloud TPU Details Revealed,” STH, May 17, 2017, https:// www.servethehome.com/google-cloud-tpu-details-revealed/.
  • Cloud TPUs – ML accelerators for TensorFlow | Google Cloud Platform.

结论

本报告试图介绍深度学习,以及它的使用和使用TensorFlow的企业会遇到的核心问题。我们首先介绍了深度学习的情况,特别是与更传统的机器学习技术相比较,并且盘点了一些使用了深度学习技术的最新应用。如果您的组织对使用音频、视频、图像或自由文本数据感兴趣,深入学习是值得探索的。接下来,我们盘点了深度学习的各种框架,特别关注以企业为中心的库,包括微软的Cognitive Toolkit、MXNet和Deeplearning4J。最后,我们讨论了TensorFlow库和现有的生态系统,以了解各种组件如何补充图书馆的核心功能,并协助网络训练和预测。我们希望这个概述能够帮助企业内的决策者和技术领导者驾驭不断发展的深度学习世界。

关于作者

Sean Murphy是PingThings Inc.的联合首席执行官,这是一家以人工智能为核心的创业公司,将先进的数据科学和机器学习带入全国的电网。在获得马里兰大学数学与电子工程双学士学位后,Sean在约翰·霍普金斯大学(Johns Hopkins University)的生物医学工程专业毕业,获得荣誉学位。他在约翰霍普金斯大学应用物理实验室担任高级科学家十多年,主要从事机器学习、高性能、云计算、图像分析和异常检测。从科学转向MBA课程,他毕业于牛津大学。他利用自己的商业头脑创建了一家电子邮件分析公司和一家数据科学咨询公司。 Sean还曾担任A系列资助的医疗保健分析公司的首席数据科学家,以及精品研究生教育公司Manhattan Prep的研究和指导主任。他是多个学术领域的多本书和数十篇论文的作者。

Allen Leis是一位经验丰富的数据工程师,有时也是一名数据科学家,位于华盛顿。他以前的工作需要为美国海军、美国参议院和非营利组织开发网络系统,他目前致力于数据分析的技术“狂野西部”以及机器学习。 Allen目前担任各种数据科学初创公司的顾问和软件工程师,以引导他们的数据摄入、清洗和机器学习。 除了投身于解决大数据工程和分布式计算问题,他平常会参与乔治敦大学数据科学证书课程的教学,或沉迷于马里兰大学计算机科学研究生的课程。

(全文完,感谢阅读)

发表评论

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