什么是GoogleTensorFlow
本文目录
如何评价Tensorflow和其它深度学习系统
编程模型
TF目前的编程模型是符号编程(symbolic computation)。大致的想法就是使用符号API去描述计算通过计算流图的方式,以及更新逻辑,然后通过像服务器去发送计算流图的方式来进行计算。原因是所有的计算全部需要通过计算流图来描述,也就是其实通pythonAPI编写的主要是Tensorflow这一门新的语言。然后通过session的run来进行一些交互。这样子做的主要好处是计算流图的执行可以进行比较多的优化,因为用户只是指定了数据关系,以及需要什么,计算的中间变量如何分配,是否需要保留,都是可以进行优化的。这一点是相比于Torch和numpy的库相对可以更多优化的地方。不过反过来说,和原有host语言的交互会相对比较有限一些,会比较难利用一些host语言(python)的特性来编写如条件和更新法则之类的东西。
作为一个工程师,从优化性能的角度,很容易倾向于用symbolic描述所有东西,然后做尽量多的优化。而作为researcher(Torch来自NYU),更容易倾向于灵活性,而选择过程计算风格的编程。
支持Mutation
和目前的符号语言比起来,TF最大的特点是强化了数据流图,引入了mutation的概念。这一点是TF和包括Theano在内的符号编程框架最大的不同。所谓mutation,就是可以在计算的过程更改一个变量的值,而这个变量在计算的过程中会被带入到下一轮迭代里面去。Mutation是机器学习优化算法几乎必须要引入的东西(虽然也可以通过immutablereplacement来代替,但是会有效率的问题)。 Theano的做法是引入了updatestatement来处理mutation。TF选择了纯符号计算的路线,并且直接把更新引入了数据流图中去。从目前的白皮书看还会支持条件和循环。这样就几乎让TF本身成为一门独立的语言。不过这一点会导致最后的API设计和使用需要特别小心,把mutation引入到数据流图中会带来一些新的问题,比如如何处理写与写之间的依赖。
细粒度操作优化
这一点是Google作为一个公司的资源带来的优势。TF大部分的操作是细粒度操作,可以来带比较大的灵活性,不过反过来,也在工程上面需要比较多的优化开销。一个更加偷懒的做法是直接支持常见的粗粒度操作,加上比较少的细粒度操作来做辅助,这样基本上可以减低优化带来的overhead,而对于大部分的问题也就可以比较轻松的应对了。caffe2和mxnet走了粗粒度操作加细粒度这条路也是基于同样的原因。这属于是在有限资源constraint下面做出的更加轻量级的选择。
分布式支持
TF目前并没有直接放出分布式的支持。从放出来的白皮书看,分布式的容错采取了consistent checkpointrestart策略,似乎没有更加fancy容错,但是又非常实用。可以看到google对于系统的选择还是非常现实的。同样的也可以反思现在的分布式系统,机器学习是不是真的需要像比如lineage这样的容错机制其实要打一个很大的问号。
Parameter Server已经过时了?
在TF白皮书里面提到的一点是PS因为系统的abstraction直接成为计算流图的一部分,相对弱化了PS作为一个系统的地位。这一点的主要原因是dependencytracking在计算流图里面得到的强化,而PS本身的一大功能就是完成dependencytracking。如果你仔细看mxnet本身的kvstore的实现,就会发现本地的参数整合代码几乎完全是利用依赖引擎完成的,这样的确可以大大简化PS的代码实现。不过PS本身作为一个abstraction,在通信和数据consistency上面还是可以提供一些不错的dataparallel解决方案。未来的方向应该是各个系统更加融合,ps本身也作为一个依赖调度中的primitive直接整合入深度学习引擎,而不再作为一个宿主系统存在了。
目前系统的关系
TF在编程模型上面最相似的是Theano,基本涵盖了Theano所有的功能。在最近新的编程框架上面,比较相关的两个,一个是caffe2,另外一个是mxnet。
caffe2的设计风格基本和TF一致,走的是符号计算的路线,唯一的不同是支持粗粒度的操作,这一点在之前也有提到,是为了轻量级而做的选择。目前主要由yangqing一个人完成,可以认为是轻量级的TF。
mxnet的设计思路是符号计算和过程计算混合。在符号计算部分没有引入mutation,而是允许把符号计算融入到过程计算中,通过host语言来表述更新法则,同时动态调度过程计算的和符号计算的指令。这么做对于调度引擎需要更多的一些要求,并且也可能带来一些效率的影响(过程计算是动态执行的,有动态内存开销,更少一些优化),不过如果合理地把主要的瓶颈部分放到符号计算里面去,剩下的部分用更加灵活的过程计算来做,最终的效率影响不会特别大。
这两个系统在依赖调度和系统优化上面的思想应该和TF基本一致,有兴趣的同学可以对比学习一下。
选择什么
我本人参与了mxnet的设计,因此比较难公正地回答这个问题。不过有一点是肯定的,计算流图和优化的思想,以及依赖关系的调度,和计算优化会是下一代深度学习系统的主题。
一些个人的note
DMLC团队从五月份开始决定联合三个项目做mxnet,六月份设计完成,到九月份初步版本确立。我个人在参与设计mxnet之后七月到G brain实习,接触到了TF和内部的东西。个人的感觉,不同的项目设计是在不同的人力资源,目标(灵活度,效率)和taste的权衡下面做出不同优化的设计决定。mxnet,caffe2和TF的设计实现差别大概就在于此。没有对错,只看每个设计者的品味和想法了。因为这一点,让我确信我们做了正确的选择,并且决定继续九月份结束实习后帮助团队mxnet到目前相对完整的阶段。yangqing因为工作的缘故可能限制更多一些,不过也希往每个人也都有机会实现每心中理想的系统。
谷歌开源了TensorFlow,世界就要马上被改变了吗
Google开源了其第二代深度学习技术 TensorFlow——被使用在 Google
搜索、图像识别以及邮箱的深度学习框架。这在相关媒体圈、工程师圈、人工智能公司、人工智能研究团队里有了一些讨论。比较有趣的是,微软亚洲研究院立刻向
媒体发邮件表示,我们发布了开源分布式机器学习工具包(DMTK)。
对于大众来说,这件事让人
“困惑”。从“深度学习”到“分布式系统”,太多概念大众一知半解,现今给出的资料又让人难以理解。而对于“Google开源
TensorFlow”这一事件,各个公司、团队、学术权威也是众说纷纭。因此,出门问问为大家“破雾”,并讲一讲这次开源意味着什么。
什么是深度学习?
深
度学习系统是什么?深度学习理论于 2006年被提出,它通过模拟“人脑的神经网络”
来解释图像、声音和文本等数据。但是目前的计算机还达不到模拟人脑数量庞大的神经元(千亿级),因此便有了用到成千上万大型计算机(计算平台集群)来吸收
数据对其进行自动分类的“分布式深度学习系统”。
TensorFlow的起源和此次开源事件
将自家研发的深度学习系统命名为“DistBelief”,它使得 Google
能够同时处理成千上万台大型计算机的数据,构建更大型的神经网络和大规模训练。Google
的搜索、图像识别及邮箱等均采用了该技术。一般情况下,深度学习系统都需要先设定好 feature(特征),再学习如何分辨。但
Google DistBelief神奇的地方在于,“Google Brain”开发团队“XLab”曾用它在未事先获取“猫的特征描述”
信息的情况下,从大量 YouTube视频中区分出了哪些是猫的视频。这意味着深度学习系统“DistBelief”自行总结出了猫的
feature(特征)!虽然这个案例的识别范围、识别率有待提高(81.7%),但作为人工智能最经典案例之一,为人工智能翻开了新的篇章。而“猫”
的事件,也让曾经的 Google Brain开发团队“XLab”的核心人员、现在被李彦宏挖到百度的吴恩达得到了
“Google Brain”之父的美誉。不过,时代总是进步,而“DistBelief”有缺陷。
称,虽然 DistBelief非常成功,但它仅仅以神经网络为目的、十分局限,而且很难进行配置。另外,DistBelief牢牢绑定在
Google的内部基础设施上,几乎不可能将代码与外界共享。因此,本文的主角,Google的第二代深度学习系统“TensorFlow”
横空出世了。
Google表示,TensorFlow
在设计上尤其针对克服 DistBelief的短板,灵活、更通用、易使用、更快,而且完全开源。TensorFlow
可以被架设在智能手机这样小的设备上,甚至仅一块电路板上,更灵活; TensorFlow
可以被使用在很多计算平台,无论是智能手机还是大型计算机、单个 CPU/ GPU计算机还是成百上千 GPU卡组成的分布式系统,ARM的还是
X86的构架,更通用;TensorFlow支持多种编程语言,提供了很多深度学习模型库,易使用;在很多指标上,TensorFlow要比
DistBelief要快一倍,更快。但是,学术界和工程界的一些朋友并不喜欢这个“刚刚闯入”开源界的“小伙子”,判了它“意义不大”
的死刑。“TensorFlow”之所以“开源”却不讨好,是因为 TensorFlow不是第一个被开源的深度学习系统,并且目前只开源了
“单机版”,而非能够识别猫的“分布式版本”。除了并非第一以及只开源了单机版代码这两点外,Google开源 TensorFlow
这件事最被人诟病的地方在于,在“用事实”、“用数据”说话的学术界、工程界,Google并未用“数据对比”证明 TensorFlow的
“灵活、更通用、易使用”。
对于 TensorFlow,出门问问的看法是,TensorFlow对学术界意义不大,但是对工程界意义挺大。
TensorFlow对工程界有意义:其它开源工具虽然众多但对工程界很难有效使用
这次开源的 TensorFlow是一种人工智能(更具体的说是深度学习)编程语言或计算框架,学术界从来都不缺少类似的开源工具,尤其是
“单机版工具包”有很多。但是学术界的工具往往更多专注在核心算法上,在系统和工程方面比较欠缺,工业界很难直接有效的使用,而 Google的
TensorFlow在架构设计,跨平台可移植性,算法可扩展性等等偏工程方面会做的比较好。所以,TensorFlow
对学术界的帮助比较小,但对工业界的帮助有很大潜在可能性。比如语音识别、自然语言理解、计算机视觉、广告等等都可以应用这种深度学习算法,Google
也因为深度学习系统的应用使得 Google语音识别水平提高 25%。
有意义归有意义,意义的大小
是另一回事了。在这个信息交流频繁的时代,没有公司能随便制造一个具有超大意义的事件或者跨时代的黑科技产品。对于工程界,TensorFlow
有意义但又不是神乎其神的东西,尤其是 Google目前开源的“单机版”的 TensorFlow
意义要小一些。因为在工程界里,若要完成一整件事,如识别语音,TensorFlow
这种通用深度学习框架的存在更多是锦上添花,而非决定根本。比如说在一个可以应用的语音识别系统里,除了深度学习算法外,还有很多工作是专业领域相关的
算法以及海量数据收集和工程系统架构的搭建。
其实,对于中国来说,TensorFlow
还有一个意义。在人工智能大潮下许多人和公司想入局,但大都没有能力理解并开发一个与国际同步的深度学习系统,而 TensorFlow
的存在会大大降低深度学习在各个行业中的应用难度。至于弄懂 TensorFlow要花费大量时间的问题,就像很多公司用 Linux或者
hadoop(一种分布式系统基础架构)但很少有公司弄懂了所有源代码一样,可以把 TensorFlow
当成一个黑盒,先快速用起来,之后再根据数据和专业领域知识来调整。
总的来说,如果 Google按照其所说的那样,在未来完全开源 TensorFlow——包括其“分布式版本”,那么 TensorFlow对工程界的影响会更明显些——尤其对中国创业公司来说。
Safetensors是什么文件
Safetensors是谷歌开发的一种TensorFlow Lite模型文件格式,用于在移动设备上运行模型。如果你想在手机上打开本地后缀为safetensors的模型文件,可以按照以下步骤操作:
首先,你需要确保你的手机上已经安装了TensorFlow Lite解释器。你可以在Google Play商店中搜索TensorFlow Lite并下载安装。
将safetensors模型文件拷贝到你的手机存储器上。你可以通过USB连接将模型文件复制到手机上,或者通过电子邮件或云存储服务将文件发送到手机上。
打开你的TensorFlow Lite应用程序。在应用程序中,你可以选择“加载模型”选项,并浏览到你的safetensors模型文件所在的位置。
选择模型文件并加载。在加载模型文件后,你可以使用TensorFlow Lite应用程序进行模型推断或进行其他操作。
需要注意的是,safetensors模型文件只能在TensorFlow Lite解释器中使用。如果你想在其他平台上使用模型文件,你需要将其转换为相应的格式。











