完整word版TensorFlow阅读报告汇总.docx
- 文档编号:15354749
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:18
- 大小:169.84KB
完整word版TensorFlow阅读报告汇总.docx
《完整word版TensorFlow阅读报告汇总.docx》由会员分享,可在线阅读,更多相关《完整word版TensorFlow阅读报告汇总.docx(18页珍藏版)》请在冰点文库上搜索。
完整word版TensorFlow阅读报告汇总
TensorFlow论文阅读报告
1.基本信息
题目:
TensorFlow:
Large-ScaleMachineLearningonHeterogeneousDistributedSystems
来源:
GoogleResearch
时间:
2015.9
作者:
Mart´ınAbadi,AshishAgarwal,PaulBarham……
2.摘要
TensorFlow是一个表达机器学习算法的接口,并且是执行算法的实现框架。
使用TensorFlow表示的计算可以在众多异构的系统上方便地移植,从移动设备如手机或者平板电脑到成千的GPU计算集群上都可以执行。
该系统灵活,可以被用来表示很多的算法,包括深度神经网络的训练和推断算法。
也已经被用于科研和应用机器学习系统在内的若干计算机科学领域或者其他领域中,例如语言识别、计算机视觉、机器人、信息检索、自然语言理解、地理信息抽取和计算药物发现。
3.引言
基于第一代可扩展分布式训练和推断系统DistBelief的经验,构建了TensorFlow——第二代大规模机器学习模型的实现和部署的系统。
TensorFlow使用类似数据流模型的计算,将这些计算映射到不同的硬件平台,例如使用包含一个或者多个GPU显卡的装有Android和iOS的单个机器,或运行在数百台包含数千个GPU的大规模训练系统。
拥有一个单一的系统可以扩展分布到众多的平台上可以大大简化真实场景中机器学习系统的使用,正如用分离的系统进行大规模训练和小规模的部署,会产生巨大的维护代价和较差的抽象效果。
TensorFlow的计算被表示为含状态的数据流图,在让这个系统足够灵活能够快速地实验研究中产生的新模型,并同时充分地提升产品级训练的性能和部署机器学习模型健壮性。
为扩展神经网络训练搞更大的部署环境,TensorFlow允许通过复制和并行执行一个核心模型数据流图,使client简单地表达不同类型的并行,依赖不同计算设备合作更新一个共享的参数或者其他的状态。
对计算描述的微妙变动可以使用较低的代价来达到和尝试很多不同的并行的法。
对比DistBelief,TensorFlow的编程模型更加灵活,性能也更好,支持在大规模的异构硬件平台上训练和使用很多的模型。
4.主要技术
1、编程模型和基本概念
TensorFlow的计算由一个有向图描述,这个图中由一个节点集合组成。
该图表达了数据流计算,作出了一些类型的节点保持和更新持久状态和让分支及循环控制结构类似于Naiad的行为方式的扩展。
客户一般都会使用TensorFlow支持的前端语言(C++或者Python)构建一个计算图。
下图表示一段样例使用Python构建并执行了一个TensorFlow的计算图:
下图表示结构计算图:
在一幅TensorFlow图中,每个节点(node)有一个或者多个输入和零个或者多个输出,表示一种操作(operation)的实例化。
流过图中正常的边(输出到输入)的值都是张量(tensor),任意维度的数组其中基础元素类型是指定的或者在图的构造过程中自动推断出来的。
特别的边,我们称之为控制依赖(controldependencies),同样也存在在图中:
这类边上没有数据流过,但是他们表示源节点必须在目标节点的控制依赖开始执行前完成运行。
由于我们的模型包括可变状态,控制依赖可以被直接用来确保happens-before关系。
我们的实现同样会插入控制依赖来确保独立操作之间的顺序,比如说作为控制内存使用最高峰值的方式。
1)操作和核(kernel)
一个操作有一个名字。
它表示一个抽象的计算(比如说,“矩阵相乘”或者“相加”)。
一个操作可以有属性(attribute),所有的属性必须提供或者在图构造的过程中推断出以实例化一个节点来执行操作。
属性通常的使用方式是让操作在不同的张量元素类型上多态(例如,两个float类型的张量和两个int32类型的张量)。
核(kernel)是一种操作的特别实现,可以运行在一个特定类型的设备上(如CPU或者GPU)。
TensorFlow的binary定义了可以通过注册(registration)机制实现的操作和核的集合上,这个集合可以通过连接额外的操作/核的定义/注册。
下表表示内置于TensorFlow核心库的一些操作类型。
2)会话(session)
客户端通过创建会话(session)和TensorFlow系统进行交互。
为了创建一个计算图,会话接口支持外部(external)方法来提升当前由包含额外节点和边的会话图(当会话创建时初始的图是空的)。
另一个由会话接口提供的主要的操作就是Run,以需要计算的输出名称和替换某些输出节点的张量的操作集合作为其参数输入。
通过控制Run的参数,TensorFlow的实现可以计算所有节点的必须执行传递闭包来计算需要的输出,然后安排执行合适节点来保证他们的依赖关系。
大多数TensorFlow的使用都是针对一个图启动一个会话,然后执行整个图或者通过Run多次调用执行分离的子图。
3)变量(variable)
在大多数计算中,图都是执行多次的。
大多数的张量在一次执行后不会存活。
然而,变量(variable)是一种特别的操作,可以返回一个在图执行若干次过程中存活的持久化的可变张量的句柄。
这个句柄可以传递给一系列特定的操作,例如Assign和AssignAdd(等同于+=)就可以改变其引用的张量了。
对应TensorFlow在机器学习中的应用,模型的参数典型地就存放在变量引用的张量中,并作为模型训练图的Run的一部分进行更新。
2、实现
TensorFlow系统的主要部分就是客户端,它使用了会话接口来和master及一个或者多个的workerprocesses进行通信,每个workerprocess负责按照master的要求执行对一个或者多个计算设备(CPU或者)的任意访问和在这些设备上进行图节点的计算。
我们有本地和分布式实现的TensorFlow接口。
本地实现通常是客户端、master和worker都是在同一台机器上单一的操作系统进程上运行。
分布式实现采用了本地实现的很多的代码,但是扩展了对客户端、master和worker可以在不同的机器的不同的进程上运行的场景支持。
1)设备
设备是TensorFlow的计算核心。
每个worker负责一个或者多个设备,每个设备有一个设备类型和一个名字。
设备名字由识别设备类型的部分,在worker中的设备索引,以及在分布式设定中,worker的job和任务的标志构成。
2)张量
张量是一种有类型的、多维度数组。
支持若干张量元素类型,包含大小为从8bit到64bit的带符号和无符号整型,IEEE浮点数和双精度类型、复数类型和字符串类型。
后台存储通过一个分配器进行管理,该分配器由张量所处的设备确定。
3)变量
变量维护图执行过程中的状态信息。
通常会将一个统计模型中的参数表示为一组变量。
例如,你可以将一个神经网络的权重作为某个变量存储在一个tensor中。
在训练过程中,通过重复运行训练图,更新这个tensor。
4)Fetch(输入)
为了取回操作的输出内容,可以在使用Session对象的run()调用执行图时,传入一些tensor,这些tensor会帮助你取回结果.在之前的例子里,可以单个节点state,也可以取回多个tensor。
5)Feed(输出)
feed使用一个tensor值临时替换一个操作的输出结果.可以提供feed数据作为run()调用的参数.feed只在调用它的方法内有效,方法结束,feed就会消失。
6)单设备执行
单一的worker进程运行在单一的设备上。
图上的节点按照代表节点之间的顺序执行。
每个节点上设置一个计数来记录这个节点上还没有执行的依赖。
一旦这个计数变为0,节点就可以被调度使用,并会加入到待续的队列中。
待续队列按照某个非指定的顺序处理,指派节点执行的kernel到设备对象上。
当一个节点完成执行,所有依赖这个完成节点的节点计数都会增加。
3)多设备执行
(1)节点的放置
给定计算图,TensorFlow实现的主要责任之一就是将计算映射到可用的设备集合上。
该置放算法的输入是一个代价模型,包括对每个图节点的输入和输出张亮的规模的估计,和对每个节点在给定其输入张量时的计算时间。
置放算法首先运行模拟的图的执行过程,对每个节点使用贪心策略选择一个设备。
置放算法从计算图的源点开始,在系统中的每个设备上模拟相应的活动。
对每个在遍历中抵达的节点,会考虑可选设备的集合。
对那些拥有多个可选设备的节点,置放算法使用一种贪心策略来检查在每个可能的置放节点需要的完成时间。
节点操作完成最快的设备会被选作该操作的设备,置放决策会继续针对图中其他的节点进行处理。
(2)交叉设备通信
之前是根据设备划分节点,现在是根据发送和接受划分节点。
可以保证资源设备到目的设备中需要的张量数据只被传输一次,目的设备仅为张量分配一次内存。
3)分布式执行
分布式执行和多设备执行非常相似。
布局算法之后,每个设备创建一个子图。
发送和接受节点对在工作进程中使用远程通讯机制例如TCP、RDMA等在机器边界之间移动数据。
3、扩展
该部分介绍了程序模块中一些更高级的功能。
分别是:
梯度计算、部分执行、设备限制、控制流、输入操作、队列、容器。
4、优化
该部分介绍了TensorFlow系统中用于提升性能和资源利用率的优化。
包括:
通用子表达式消除、控制数据通信和内存分配、异步kernel、用于kernel实现的优化库、有损压缩。
5.总结
1、TensorFlow基本使用
1、使用图(graph)来表示计算任务.
2、在被称之为会话(Session)的上下文(context)中执行图.
3、使用tensor表示数据.
4、通过变量(Variable)维护状态.
5、使用feed和fetch为任意操作输入和输出数据.
2、使用步骤
1)构建图
构建图的第一步,是创建源op(sourceop).源op的输出被传递给其它op做运算。
Python库中,op构造器的返回值代表被构造出的op的输出,这些返回值可以传递给其它op构造器作为输入。
2)在一个会话中启动图
构造阶段完成后,才能启动图.启动图的第一步是创建一个Session对象,如果无任何创建参数,会话构造器将启动默认图.Session对象在使用完后需要关闭以释放资源.除了显式调用close外,也可以使用"with"代码块来自动完成关闭动作。
3)计算图
TensorFlow程序通常被组织成一个构建阶段和一个执行阶段.在构建阶段,op的执行步骤被描述成一个图.在执行阶段,使用会话执行图中的op。
例如,通常在构建阶段创建一个图来表示和训练神经网络,然后在执行阶段反复执行图中的训练op。
TensorFlow支持C,C++,Python编程语言.目前,TensorFlow的Python库更加易用,它提供了大量的辅助函数来简化构建图的工作,这些函数尚未被C和C++库支持。
3、安装:
支持Linux和Mac(Linux安装示例)
1、安装Python的工具包pip
2、安装TensorFlow
3、安装Python的沙箱工具virtualenv(为了不来回修改各种环境变量)
4、将TensorFlow安装到virtualenv中
4、应用
整个系统是分布式的,不同节点可映射到不同主机上(包括手机到超级计算机),或者将不同数据,分别在CPU和GPU中计算。
其灵活体现在:
1.TensorFlow是一套通用计算架构:
o“深度学习”由系统核心之上的一组库支持
o对其他机器学习算法同样适用
o能应付高性能计算(HPC)任务
o抽象能力强,隐藏了底层设备和硬件,又可在需要时暴露
2.易于扩展:
o核心系统定义了一组标准Operation及Kernel(与设备相关的操作实现)
o易于定义新的Operation及Kernel
1)优点
1、TensorFlow支持异构设备分布式计算,能够在各个平台上自动运行模型,从电话、单个CPU/GPU到成百上千GPU卡组成的分布式系统。
目前其支持CNN、RNN和LSTM算法,这都是目前在图像,语音和自然语言处理中最流行的深度神经网络模型。
2、TensorFlow支持多种编程语言,提供了很多深度学习模型库,易使用。
3、在很多指标上,TensorFlow要比DistBelief要快一倍,更灵活。
4、TensorFlow在架构设计,跨平台可移植性,对工业界的帮助有很大潜在可能性。
比如语音识别、自然语言理解、计算机视觉、广告等等都可以应用这种深度学习算法。
2)缺点
1、TensorFlow是一个程序库,供数据分析人员使用,但是只有Python和C++接口(单机版工具包)。
TensorFlow不是一个工具,没有GUI,必须得依靠程序调用来运行。
2、不支持Windows,没有Windows的官方安装指南,可以在Linux和Mac环境下使用。
3、现公布的版本只支持单机,不支持多机的分布式环境。
因此无法支持大规模数据或模型的高速高精度学习。
4、TensorFlow缺乏公开的评测数据,没有在专业的dataset上进行性能测试,也没有与其它类似框架进行比较,具体性能如何有待进一步探讨。
5、其他机器学习开放平台
1)Facebook基于Torch的深度学习插件
Torch作为一个协助机器学习技术开发的开源环境,一直以来是很多人工智能项目的核心,不管是在学校研究或者是类似Google、Twitter和Intel这样的公司,都采用这一框架。
开源代码&工具:
Torch、iTorch、fbcunn、fbnn、fbcuda、fblualib。
主要技术:
1、基于FFT的卷积层:
在训练ConvNets中卷曲占用了大部分的计算时间,因此Facebook已经花了相当大的工程努力提高GPU卷积层。
这项工作成效显着,达到目前公布的最快代码的23.5倍。
2、多GPU之上的并行化:
Facebook一直努力实现在多GPU上并行训练神经网络模型的能力,通过数据并行和模型并行模块(fbcunn的一部分),实现代码自动调度模型在多个GPU上的最大化加速。
3、快速Temporal卷积,速度相比Torch的cunn实现快1.5倍至10倍。
4、用于神经语言模块(NeuralLanguageModels)和文字嵌入的快速LookupTable。
比在Torch/NN下快很多。
5、HierarchicalSoftMax模块,使得现在分类百万类成为实际可行的策略
作用:
对于训练图像识别,自然语言处理或其他应用程序的大规模深度学习系统(特别是卷积网络),fbcunn很有帮助。
效果:
加快了基于Torch的深度学习项目的运行速度,允许在更短的时间训练规模更大的神经网络,加快研究项目。
2)微软分布式机器学习工具包DMTK
DMTK(DstributedMachineLearningToolkit)当前包括以下组件:
1、DMTK分布式机器学习框架:
它由参数服务器和客户端软件开发包(SDK)两部分构成。
2、LightLDA:
LightLDA是一种全新的用于训练主题模型,计算复杂度与主题数目无关的高效算法。
3、分布式词向量:
为两种计算词向量的算法提供了高效的分步式实现:
一种是标准的word2vec算法,另一种是可以对多义词计算多个词向量的新算法。
微软DMTK开源版则支持分布式、异构、异步计算集群环境部署。
DMTK在算法方面实现了创新,可以用更少的资源,训练出大N个数量级的模型。
该工具包使机器学习的开发者只需要专注于数据、模型和模型训练等机器学习的核心逻辑部分。
3)IBM开源机器学习平台SystemML
SystemML是灵活的,可伸缩机器学习(ML)语言,使用Java编写。
机器学习(ML)是指无需显式的编程即可让计算机学习的能力。
SystemML先进的机器学习主要基于两方面:
1、SystemML语言,声明式机器学习(DML)。
SystemML包含线性代数原语,统计功能和ML指定结构,可以更容易也更原生的表达ML算法。
算法通过R类型或者Python类型的语法进行表达。
2、SystemML提供自动优化功能,通过数据和集群特性保证高效和可伸缩。
SystemML可以在MapReduce或者Spark环境运行。
优点:
1、可定制算法
2、多个执行模式,包括单个,Hadoop批量和spark批量
3、自动优化
4)XX深度机器学习开源平台
开源项目DMLC:
DeepMachineLearninginCommon,目的是提供更优质和更易使用的分布式机器学习系统。
关键技术如下:
1、Xgboost:
速度快效果好的Boosting分类器模型。
可以解决分类器数千次迭代运算产生的计算瓶颈。
单机采用多线程来加速树的构建,并依赖rabbit部件进行分布式计算。
2、CXXNET:
极致的C++深度学习库。
包含灵活的公式支持和极致的C++模板编程:
核心思想是expressiontemplate,它通过模板编程技术将开发者写的公式自动展开成优化过的代码,避免重载操作符等带来的额外数据拷贝和系统消耗。
同时提供了通用的分布式解决方案,通过单机多卡和多机多卡在不同的数据下的一致性来达到算法速度和系统性能的最佳平衡。
3、Minerva:
高效灵活的并行深度学习引擎,提供一个高效灵活的平台,快速实现一个高度定制化的神经网络。
4、ParameterServer:
组件参数服务器,通过降低网络通信开销,如异步执行、灵活的数据一致性模型、选择性通信、缓冲与压缩。
以及容灾措施,如服务节点和计算节点采用不同的容灾策略、使用一致性哈希和链备份提高系统性能。
未来规划:
开发组件虫洞。
目的是对所有组件提供一致的数据流支持,无论数据以任何格式存在网络共享磁盘。
此外,它还提供统一脚本来编译和运行所有组件。
使得用户既可以在方便的本地集群运行任何一个分布式组件,又可以将任务提交到任何一个包括AmazonEC2、MicrosfotAzure和GoogleComputeEngine在内的云计算平台,并提供自动的容灾管理。
6、比较
表1
功能特性
TensorFlow
一个用来编写和执行机器学习算法的工具。
计算在数据流图中完成,图中的节点进行数学运算,边界是在各个节点中交换的张量(Tensors--多维数组)。
TensorFlow负责在不同的设备、内核以及线程上异步地执行代码,目前支持CNN、RNN和LSTM等图像、语音和自然语言处理(NLP)领域最流行的深度神经网络模型。
DMTK
一个分布式机器学习框架。
件开发包(SDK)两部分构成。
参数服务器支持存储混合数据结构模型、接受并聚合工作节点服务器的数据模型更新、控制模型同步逻辑;客户端软件开发包负责维护节点模型缓存(与全局模型服务器同步)、本地训练和模型通讯之间的流水线控制以及片状调度大模型训练。
它包含DMTK框架、LightLDA和分布式词向量(WordEmbedding)三个组件。
SystemML
一门灵活的、可伸缩的机器学习(ML)语言,支持描述性分析、分类、聚类、回归、矩阵分解以及生存分析等算法。
DML中指定的算法能够根据数据和集群特性使用基于规则和基于成本的优化技术动态地编译和优化。
表2
执行环境与模式
TensorFlow
能够在台式机、服务器或者移动设备的CPU和GPU上运行,也可以使用Docker容器部署到云环境中。
在处理图像识别、语音识别和语言翻译等任务时,TensorFlow依赖于配备图像处理单元(GPU)的机器和被用于渲染游戏图像的芯片,它对这些芯片依赖度比想象中的高。
当前开源的版本能够运行在单机上,暂不支持集群。
操作系统方面,TensorFlow能够运行在Linux和MacOS上。
DMTK
采用了传统的客户端-服务器架构,有多个服务器实例运行在多台机器上负责维护全局模型参数,而训练例程(routines)则使用客户端API访问并更新这些参数。
为了适应不同的集群环境,DMTK框架支持两种进程间的通信机制:
MPI和ZMQ。
应用程序端不需要修改任何代码就能够在这两种方式之间切换。
DMTK支持Windows和Linux(测试环境为Ubuntu12.04)两种操作系统。
SystemML
有多种执行模式。
在独立模式下,SystemML能够运行在单台机器上,这样数据科学家就能够在本地开发算法,不需要分布式集群。
另外还可以将算法分发到Hadoop或者Spark上,从而利用已有的资源和技能。
SystemML能够运行于Windows、Linux以及MacOS上。
表3
实现语言、API接口及文档
TensorFlow
核心是使用C++编写的,有完整的PythonAPI和C++接口,同时还有一个基于C的客户端API。
目前TensorFlow的PythonAPI需要Python2.7,对于Python3的支持正在开发中。
在TensorFlow的官网上Google提供了完整的API接口说明、白皮书与示例教程(包括针对初学者和专家的)。
DMTK
使用C++编写的,提供了一个客户端API和SDK。
DMTK的官网对DMTK框架、LightLDA、分布式词向量的应用场景、下载、安装、配置、运行以及性能等方面都做了详尽的介绍。
SystemML
使用Java语言编写,开发人员能够使用类似于R或者Python的语法表达算法,通过Java、Scala以及Python操作SystemML。
文档方面 ,SystemML基本集中于GitHub上,包括构建、测试、独立模式运行命令以及一个线性回归的示例。
表4
应用场景
TensorFlow
Google已将TensorFlow用于GMail(SmartReply)、搜索(RankBrain)、图片(生成图像分类模型--InceptionImageClassificationModel)、翻译器(字符识别)等产品。
DMTK
Microsoft并没有在DMTK的官网上透露其在内部的应用情况,但是从其功能特点以及定位来看或许更倾向于自然语言处理方面,例如文本分类与聚类、话题识别以及情感分析等。
SystemML
SystemML是IBM研发了超过十年的机器学习技术,沃森(Watson)在几年前的大型活动里就整合了很多SystemML的机器学习功能,当然目前开源的SystemML依然在孵化阶段。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word TensorFlow 阅读 报告 汇总