如何评价Google发布的第二代深度学习系统TensorFlow

如题所述

个人的一点看法:
1. TensorFlow是采用的DataFlow的数据流模型,不过我不觉得和Dryad有太多相似之处,此外Dryad也不是第一个提出DataFlow模型的地方,要说最早可以参考MIT TaggedToken
machine里面的static dataflow 和dynamic dataflow architecture[2]的资料. 在一个大规模机器学习系统上全面、可靠的支持DataFlow的feature本不是一件容易的事情,但是Tensorflow做到这一点,支持control_dependence, merge, condition,for-loop/while-loop, iteration。1. 就像LSTM的unrolling,原来需要predefine unroll,现在用for-loop去做展开(内部维持状态的变化) 2. 还有比如一些算法需要对不同的input example做不同的训练(不同的gradient,更新不一样的variables),以前需要hack很多东西(至少在DistBelif上是),现在只需要一个ConditionOp就解决了。3. 比如不同的variables用不同的optimizer,SGD/AdaGrad/FTRL/Momentum等。有了ControlFlow的支持,tensorflow graph更像是一种语言的抽象(variables, tensors, controlflow, compile[这个是指会rewrite整个graph, send/recv node, un-reference, graph partition, dynamic placement], parallelism,functional programming等),从这个角度讲还是有不少新东西在里面。

2. 是否用Dataflow和BSP并无直接对应关系,Dataflow只是tensor/token的流动,怎么 schedule和控制流动是别的部分的事情(session 如何drive)。事实上,Tensorflow提供的灵活性用户很容易在上层做BSP(如果你非常喜欢这样做的话,这种模型最大的缺点是fault tolerance很难做),SSP(如果非要把这个概念引入的话) 或者parameter server的结构(事实上我从来不认为这是一种通用的结构,只是ps被centralized起来存有状态的variables而已, 5年前的DistBelief就是这种架构),有了这个框架的抽象,然后进一步你可以做Synchronous or Asynchronous training。所以说Dataflow只能做BSP,这个是很没有缘由的。

3. 数据表示成tensor/token,单单这一点非要说这个有多少的创新确实也谈不上。不过基于tensor的每一个single op怎么做实现就有考究了,从Eigen开始到每一个kernels op基本都有micro-benchmark来保证单个op的performance达到最优,既然是kernel级的tensorflow的框架支持用户可以随便扩展GPU、CPU甚至即使是CPU的可以针对不同的指令级做优化和定制。当然任何事情有得就有失,大的系统的设计本身就是trade-off,比如你本来所有的东西揉在一起操作指针、inplace内存读写就可以,但现在抽象成多个各个粒度的operators,operators之间读写难免有很多overhead(当然graph rewrite已经最大限度的避免)。所以概括而言TensorFlow采用(目标)的设计其实是是production级的performance/成熟度和research flexibility的trade-off。从Google内部的各种产品线(Search/inbox/Photo等)的使用看,这个系统无论从各个方面都是经受住了考验(performance/scalability/flexibility/usability等)。Ps: TensorFlow绝不是只能做deep learning, shallow/wide model 以及传统的ML都可以基于这个系统来做(当然一些operators并不现成,需要去实现)。

4. 最后说一下多机版本的开源问题。有各种复杂的因素导致了这次release的版本没有多机在里面,比如并没有很好的job shedule和高性能的RPC系统的支持。这个问题不深入讲但是希望不久的将来这些障碍都会排除。说到和DistBelief的性能比较,各种大大小小的task表明Tensorflow比DistBelief的性能提高不少(我不会说几X的这样的number,显然不同的tasks这个number的variance会很大. Tensorflow比DistBelief扩展性和灵活性的优势自然不用多少)要说开放出来比较数据更是没有意义,因为DistBelief本身并没有开源。

5. 再来说一下distributed version support的问题,如果你仔细研究一下Tensorflow的framework就会发现再当前的基础上加一个分布式的支持是相当容易的,你可以用Zeromq/MPI 任何一种高效的通信框架来做,结合当前的Graph rewrite的functionality,只需要增加一些通信的节点就可以。

6. 最后关于详细情况请参考Tensorflow writepaper[3],欢迎试用。

[1]: Arvind and David E. Culler. Annual review
of computer science vol. 1, 1986. chapter
Dataflow Architectures, pages 225–253. 1986 http://www.dtic.mil/cgi-bin/GetTRDoc?Location=U2&
doc=GetTRDoc.pdf&AD=ADA166235.
[2]: Arvind and Rishiyur S. Nikhil. Executing a program
on the MIT tagged-token dataflow architecture.
IEEE Trans. Comput., 39(3):300–318, 1990.
http://dl.acm.org/citation.cfm?id=78583.
[3]: TensorFlow:
Large-Scale Machine Learning on Heterogeneous Distributed Systems

编辑于 2015-11-12

10 条评论

感谢
分享

收藏



没有帮助


举报



作者保留权利

收起

谢澎涛机器学习话题优秀回答者

CMU机器学习

227 人赞同

我极少在公开场合质疑或批评别人的工作,但是Google这次的宣传与实际开源的东西差别太大,忍不住出来说几句。在尚未确定能否发布分布式版本之前,把一个单机工具描述成 ”Today we’re proud to announce the open source release of TensorFlow -- our sec…

显示全部

我极少在公开场合质疑或批评别人的工作,但是Google这次的宣传与实际开源的东西差别太大,忍不住出来说几句。在尚未确定能否发布分布式版本之前,把一个单机工具描述成 ”Today we’re proud to announce the open source release of TensorFlow -- our second-generation machine learning system [4]“ , ”Why Google Is Giving Away Its Artificial Intelligence Secrets [5]",这样的claim是否过大? 不管是工业界还是学术界,都应该珍惜机器学习(或者人工智能)今天这来之不易的局面,在宣传与推广自己工作的时候实事求是,不给公众造成误导。

=========================================

仔细研读了TensorFlow的开源代码文档和slides,总体印象是:一个新的单机深度学习工具包,没有明显的理论和系统创新,开源版本不支持分布式,所以对大规模深度学习没有太大益处。

1. 编程模式。采用了一种称作“computation graph”的数据流编程模式,这种模式在之前很多系统中已有实现,如微软Dryad [1], Spark。
2. 数据表示。称作为”Tensor“,统一来表示向量、矩阵、三维及以上张量。类似的抽象在之前很多系统与工具中已有。大部分机器学习操作的对象(数据或者参数)都是以向量、矩阵的形式存在,少部分是张量。统一表征成"tensor"没有问题,但在创新性上贡献有限。
3. 开源版本不支持分布式。单机的深度学习工具已经不下10个,Google没有提供测评数据显示TensorFlow相比这些工具在性能上有优势。市面上真正缺乏的是能够支持大规模深度学习的分布式框架或系统,而TensorFlow开源版本并没有提供。

希望TensorFlow能够开源分布式版本。如果不方便开源的话,希望在以后的宣传中清晰指出开源版本是一个单机深度学习工具,而不是支持大规模深度学习的系统,这二者有本质的区别。
温馨提示:答案为网友推荐,仅供参考
相似回答