PyTorch横扫各大顶会,TensorFlow退守工业界

OPEN编辑 4年前

  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 本身就是为工业界量身打造的。

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

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

  有网友举了个例子:

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

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

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

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

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


Medium 博主 Jeff Hale 统计

  “融合”趋势

  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 年是 非死book 实习软件工程师,2018 年是谷歌的实习软件工程师,2019 年在 非死book 做PyTorch 实习生

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

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