PyTorch横扫顶会,TensorFlow退守业界:机器学习框架一年变天
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年的各大顶会对比吧:
表格列出了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) 的主要贡献者之一: