加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 运营中心 > 建站资源 > 经验 > 正文

2019机器学习框架之争:与Tensorflow竞争白热化,进击的PyTorch赢在哪里?

发布时间:2019-10-14 22:12:33 所属栏目:经验 来源:thegradient 编译:张大笔茹、曹培信、刘俊寰、牛婉
导读:副标题#e# 大数据文摘出品 来源:thegradient 编译:张大笔茹、曹培信、刘俊寰、牛婉扬、Andy 2019年,机器学习框架之争进入了新阶段:PyTorch与TensorFlow成为最后两大玩家,PyTorch占据学术界领军地位,TensorFlow在工业界力量依然强大,两个框架都在向对

另一个区别是部署。研究人员一般在自己的机器上或某个专门用于运行研究工作的服务器集群上进行实验。但是在产业上,部署则有一连串的限制与要求。

  • 没有Python。运行Python对服务器的开销太大了;
  • 移动。你不能在移动终端二进制文件中嵌入Python解释器;
  • 服务。需要包罗万象的功能:不用停机更新的模型,在模型之间无缝切换,批处理在预测时间,等等。

TensorFlow就是特别针对这些需求构建的,并为所有这些问题提供了解决方案:网络图格式和执行引擎本身不需要Python,而TensorFlow Lite和TensorFlow Serving可以分别处理移动终端和服务器需求。

从历史上看,PyTorch在满足这些需求方面做得还不够,因此大多数公司目前在生产中都还是使用 TensorFlow。

三、架构「融合」

2018年末,两件大事彻底改变了这一局面:

PyTorch引入了JIT编译器和“TorchScript”,从而引入了基于图的特性;

TensorFlow宣布他们将在2.0版本中默认转移到Eager模式。

显然,这些举措都是为了解决PyTorch和TensorFlow各自的弱点。那么这些特性到底是什么,它们能提供什么呢?

1. PyTorch TorchScript

PyTorch JIT是PyTorch的一个中间表示(intermediate representation,IR) ,称为TorchScript。Torchscript是PyTorch的“图”表示。你可以通过使用跟踪或脚本模式将常规PyTorch模型转换为TorchScript。跟踪接受一个函数和一个输入,记录用该输入执行的操作,并构造IR。

虽然很简单,但是跟踪也有它的缺点。例如,它不能捕获未执行的控制流。例如,如果它执行了true块,它就不能捕获条件块的false块。

Script模式接受一个函数/类,重新解释Python代码并直接输出TorchScript IR。这允许它支持任意代码,但是它实际上需要重新解释Python。

2019机器学习框架之争:与Tensorflow竞争白热化,进击的PyTorch赢在哪里?

一旦PyTorch模型进入了这个IR,我们就可以获得图模式的所有优势。我们既可以在C++中部署PyTorch模型,而不依赖Python,或者对其进行优化。

2. TensorFlow Eager

在API级别上,TensorFlow Eager模式基本上与PyTorch Eager模式相同,后者最初由Chainer推出,这为TensorFlow提供了PyTorchEager模式的大部分优势(易用性、可调试性等等)

然而,这也给TensorFlow带来了同样的缺点。TensorFlow Eager模型不能导出到非python环境中,也不能进行优化,不能在移动设备上运行。

这将TensorFlow置于与PyTorch相同的位置,它们的解析方式基本相同——你可以跟踪代码(tf.function)或重新解释Python代码(Autograph)。

2019机器学习框架之争:与Tensorflow竞争白热化,进击的PyTorch赢在哪里?

因此,TensorFlow的Eager模式并不能真正做到“两全其美”。虽然可以使用 tf.function注释将eager code转换为静态图,但这永远不会是一个无缝转换的流程(PyTorch的TorchScript也有类似的问题)。跟踪基本上是有限的,重新解释Python代码实际上需要重写Python编译器的大部分内容。

当然,通过限制在深度学习中使用的Python子集,范围可以大大简化。

在默认启用Eager模式时,TensorFlow将强迫用户做出选择——为了便于使用而Eager执行,并且需要为部署而重写,或者根本不使用急于执行。

虽然这与PyTorch的情况相同,但PyTorch的TorchScript的可选择加入特性可能比TensorFlow的“默认Eager”更容易接受。

四、机器学习框架的现状

PyTorch在研究领域领先,并试图扩展到工业领域。而TensorFlow正试图在不牺牲太多产业优势的情况下,更多的参与到研究领域。

PyTorch要在行业中产生有意义的影响肯定还需要很长时间,毕竟TensorFlow在产业界的影响力已经根深蒂固。然而,从TensorFlow 1.0到2.0的转换为企业评估PyTorch提供了一个绝佳的机会。

至于未来,将取决于谁能最好地解决以下问题。

  • 研究者偏好对产业的影响有多大?随着当前一批博士研究生开始毕业,他们也许会带上用惯的PyTorch。这种势头是否足够明显,以至于公司会选择PyTorch用于招聘的条件?同时毕业生会在PyTorch的基础上创业吗?
  • TensorFlow的Eager模式在可用性上能赶上PyTorch吗?就网上的反应来看,TensorFlow Eager严重受到性能/内存方面问题的困扰,而且Autograph也有自己的问题。谷歌将花费大量的工程努力,但TensorFlow还是背负着历史包袱
  • PyTorch满足产业需求的速度有多快?PyTorch还有许多没有解决的基本问题——没有好的量化支持、不支持移动等等。在这些问题得到解决之前,PyTorch甚至不会成为许多公司的选择。PyTorch能否为企业提供一个足够吸引人的故事来进行转型?注意:PyTorch已经宣布支持量化和移动。虽然两者都还处于试验阶段,但代表了PyTorch在这方面的重大进展。
  • 谷歌在行业中的孤立会伤害TensorFlow吗?谷歌推动TensorFlow的主要原因之一是帮助其蓬勃发展的云服务。由于谷歌试图拥有整个机器学习垂直领域,这促使谷歌与之竞争的公司(如微软、亚马逊、Nvidia)支持只能支持PyTorch。

五、下一步怎么走?

机器学习框架在多大程度上影响了机器学习的研究呢?

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读