PyTorch横扫各大顶会,TensorFlow退守工业界:机器学习框架,一年间局势突变

你pick谁?

鱼羊 栗子 发自 凹非寺

量子位 报道 | 公众号 QbitAI

TensorFlow 2.0正式发布没几天,PyTorch 1.3今天也上线了。

一个疯狂强调“易用性”,一个整出了移动端部署。老将和新秀都卯足了劲。

毕竟,机器学习框架的世界,局势变化过于迅猛,稍不注意就会被抢了地盘。

一年前,TensorFlow还是各大顶会论文选择的主流框架,如今顶会几乎成了PyTorch的天下。

CVPR 2019,只提到PyTorch的论文有280篇,只提到TensorFlow的论文有125篇,但这还不是悬殊最大的一场会议。

有网友 (@programmerChilli) 说,虽然知道大批研究者逃离TF拥抱PT:

但我绝对想不到涨幅能到这种地步。

那么,PyTorch的优势到底在哪里?

PyTorch一路凯歌,对TensorFlow经营多年的格局又有怎样的冲击。

这一次,一位来自康奈尔大学的少年Horace He,用一份详尽的调查报告,对现状进行了总结,也为潜在入门者提供了方向:

PyTorch制霸学界

报告开头就提到:目前的大背景是,大量研究人员从TensorFlow转投PyTorch。

但大家未必知道,这势头来得多猛烈。来看2018年与2019年的各大顶会对比吧:

△ 被挡住的ICML是32.5%

表格列出了CVPR、NAACL、ACL、ICLR、ICML这五大顶会上,仅提到PyTorch/仅提到TensorFlow的论文数量。

2018年,PyTorch五项数据全部低于TensorFlow。

2019年,PyTorch五个数字全部超越TensorFlow。

PyTorch每项数据的增幅,都在192%450%之间,涨势十分凶猛。

其中,以自然语言处理(NLP) 的顶会NAACL (450%) 和ACL (290%) 最为显著;在视觉顶会CVPR上也有大幅增长 (240%) 。

相比之下,TensorFlow有三项数据下滑。其中NAACL数据下降幅度达到了38.2%,而这里正是PyTorch飞跃式增长的地方。

此消彼长,PyTorch只用了一年,便把弱势变成了压倒性优势

280:125 (CVPR) ,两倍有余。

66:21 (ACL) ,三倍有余。

103:33 (NAACL) ,三倍有余。

在语言和视觉顶会上,PyTorch的主导地位最明显。这跟上文提到的涨幅是吻合的。

如果还有人把PyTorch当做一个新秀,试图在TensorFlow主导的世界里,划出一片自己的地盘,那么数据告诉他们,已经不是这样了。

虽然,看上去TensorFlow还有两项数据在增长,但其实只有ICML的涨幅 (32.5%) ,还跟得上会议总录取论文数的增长。

也就是说,在另外四场会议上,TensorFlow已经开始衰退了。

为何研究人员爱PyTorch?

一是简单。它和NumPy比较像,风格很Python,能轻易和Python生态集成起来。

比如,你只要把一个pdb断点扔进PyTorch模型里,它直接就能用了。

相比之下,在TensorFlow模型里面debug的话,便会复杂得多了。

二是API好。比起TensorFlow的API,大多数研究人员更偏爱PyTorch的API。PyTorch设计得更科学;而TensorFlow要在各种API之间切换,令人操作不便:

‘layers’ -> ‘slim’ -> ‘estimators’ -> ‘tf.keras’

三是性能。虽然PyTorch的动态图 (Dynamic Graphs) 提供的优化空间比较小,但许多用户都反馈说PyTorch的速度不亚于TensorFlow,甚至比对方还快。

虽然,没有严格测试数据表明到底谁更快,但至少TensorFlow并没有明显的优势。

这样,再加上前两点,足够让许多研究人员拥抱PyTorch了。

TensorFlow在研究领域会怎样?

就算今后TensorFlow变得像PyTorch一样友好,PyTorch的地盘也已经很大了。

这就是说,PyTorch的代码实现更容易找到,人们也更有动力发表PyTorch的代码给大家用,跟别人合作的话队友也可能会倾向PyTorch。

所以,迁回TensorFlow 2.0这件事,大概率不会进展很快。

当然,谷歌和DeepMind内部研究还是会用TensorFlow。他们的研究成果,大概也给了一部分研究人员,继续用TensorFlow的信心。

不过Horace He听说,谷歌内部也有许多研究人员,渴望逃离TensorFlow了。

另一方面,PyTorch主导地位越来越强,谷歌研究人员可能和整个社区之间产生隔阂:他们很难在外部研究的基础上搭建自己的应用,外面的研究人员也很难借鉴谷歌的代码。

最后,TensorFlow 2.0能不能挽回一些研究人员,还需要时间来观察。Eager Execution一定是个吸引人的点,而Keras API就不一定了。

TensorFlow守住工业界

虽然在各个开发者社区,“PyTorch真香”论声势浩大,现在又在顶会数据上实力压倒TensorFlow,但其实,在工业界,TensorFlow仍具优势。

比如,根据Medium博主Jeff Hale的统计结果,2019年,TensorFlow在线上招聘启事中拥有1541个新增职位,而PyTorch有1437个。

从arXiv的论文数量来看,TensorFlow也仍然占据首位,只是领先优势在缩小。

一方面,TensorFlow的诞生早于PyTorch,工业界对新鲜事物的追逐,不像学术界那样热切,使用TensorFlow已成行业惯性。

并且,许多企业的代码都是基于TensorFlow搭建的,想要迁移到PyTorch上,并非易事。

另一方面,相比于PyTorch,TensorFlow本身就是为工业界量身打造的。

相比于研究实验,工业界会有更多的限制和要求,比如:

· 不用Python。Python在服务器上运行时开销太大,有些公司承受不来。

· 可移动性。移动二进制文件中没法嵌入Python解释器。

· 服务。无停机更新,模型间无缝切换,可预测时间的批处理,等等等等。

TensorFlow在这些方面显然比PyTorch做得好得多。比如,训练好模型,然后使用TF Lite进行部署,是目前最可靠的生产管道之一。

有网友举了个例子:

TensorFlow能够将模型导出到coreml Android模型中,也能很容易地将其转移到GCP(谷歌云端平台)环境等任何形式的生产环境中。

相比之下,PyTorch的部署有些让人头秃:模型无法导出到非Python环境,无法优化,无法在移动设备上运行(随着PyTorch 1.3的发布,无法在移动端部署的问题已经得到解决)。

况且,TensorFlow还有Keras这个好伙伴呢。

不过,也有网友认为,PyTorch在工业界取得主导地位,只是时间问题。

毕竟在2018年的顶会上,TensorFlow还是主流呢。仅仅一年时间,王座就已易主。

“融合”趋势

PyTorch势头猛烈,但TensorFlow也没有坐以待毙。

一个有趣的现象是,现在,这两个机器学习框架呈现出了“融合”的趋势。

十一假期,TensorFlow 2.0正式登场,进一步整合TensorFlow和Keras,增强易用性,官方表示,这是一个快速、可扩展、可投入生产的灵活而强大的平台。

Keras的作者François Chollet甚至说:“TensorFlow 2.0是一个来自未来的机器学习平台,它改变了一切。”

在默认的eager execution模式下,TensorFlow 2.0能提供PyTorch eager模式下的大部分优点,比如易用性、可调试性等。

并且,针对TensorFlow的API过于复杂这个问题,2.0版本也提供了更易用的API。模型的训练和serving都无缝集成在了基础框架中。

PyTorch这边,2018年底引入了JIT编译器和“TorchScript”,增加图形功能。

就在今天,PyTorch 1.3发布,新增移动端部署、量化和命名张量等功能。

机器学习框架未来的游戏规则会如何改变,还真令人期待呢。

FB谷歌双料实习生

最后,介绍下这份详细报告的作者:

Horace He,来自康奈尔大学,是2016年入学的本科生。

自从上了大学,他每个暑假都在大厂实习:2017年是Facebook实习软件工程师,2018年是谷歌的实习软件工程师,2019年在Facebook做PyTorch实习生

另外,少年还是VSCodeVim (标星6.2k) 的主要贡献者之一:

那么,TensorFlow和PyTorch,你会pick谁?

参考资料:

https://thegradient.pub/state-of-ml-frameworks-2019-pytorch-dominates-research-tensorflow-dominates-industry/

https://towardsdatascience.com/which-deep-learning-framework-is-growing-fastest-3f77f14aa318

— 完 —

版权所有,未经授权不得以任何形式转载及使用,违者必究。