龙空技术网

PyTorch五周年,负责人历数发展过程中的重要决策和事件

灵机一动. 238

前言:

目前大家对“libtorch切片”都比较关切,小伙伴们都想要分析一些“libtorch切片”的相关知识。那么小编在网络上网罗了一些对于“libtorch切片””的相关文章,希望大家能喜欢,咱们快快来学习一下吧!

PyTorch 是一个开源的 Python 机器学习库,诞生五年来受到越来越多开发者和用户的欢迎。1 月 19 日,PyTorch 负责人、创造者、Meta 杰出工程师 Soumith Chintala 发文记录了 PyTorch 发展过程中的一系列重要决策和事件,比如如何从聚焦研究到转向生产。

全文参见:

全文内容编译整理如下:

PyTorch 诞生已经 5 年了,其用户、贡献者和资金方面都比我们预期的要大得多。我们很幸运,虽然我们并不完美。

第一年,我们从小处着手,主要聚焦研究人员——我们做到了,而且做得很好。我们拥有一个不错的产品、精心建造的强大支持结构和一个推特账户。它工作得有点太好了 :)

我们非常幸运能够在发展早期有 @ptrblck、@ezyang、@t-vi 以及无数其他人加入 PyTorch,并彻底改变了我们构建事物的方式!

那时,我们希望能够将 Github issue 全部解决,试图尽快修复和关闭 Github issue。当开放性 GitHub issue 数目发展到 150 个时,我记得与 Richard Zou 和 Simon Wang 坐在一起讨论如果我们工作得更快、更聪明,是否可以把所有问题归零。那会儿,我们是多么天真!

0.3 版本发布后,我们知道随着硬件速度越来越快,我们需要一个能够以最佳方式驱动硬件的编译器。有趣的是,@colesbury(Python nogil 的构建者)反对这种观点 :-)

不管是过去还是现在,构建 ML 编译器都是一个研究问题,原因有二:我们不知道如何为动态形状编写高效代码;我们不知道如何以正确的方式对 Python 进行切片,以使其小型化、强类型化,同时又能满足用户对 Python / PyTorch 的期望。

因此,我们押注于 TorchScript(更具体地说是 jit.script)。这是一段艰难的旅程,因为 Python 很大,而且人们喜欢使用大部分或全部 Python。那时这一问题还并不明显,尽管回想起来还是很明显的。我们正在进行解绑。

如果专注于性能,我们可以让 TorchScript 更具吸引力,显示出比在 Eager 模式下好 10 倍的性能——采用类似 Numba 的方法——有限但功能强大的子集。我们通过优化小型 RNN 进行了最低限度的尝试,但当我们到达那里时,世界已经在前进了,这会给人们带来强烈的动力移植到 TorchScript。但我们并没有过多关注性能,而是专注于将 PyTorch 程序导出到 C++ 以进行生产。原因如下:

我们很勇气,有能力,但资金严重不足。例如,PyTorch-Distributed 的第一个版本是由 Adam Paszke 和他的三个本科朋友作为班级项目构建的。此外,当时最大的批评(和需求)是 PyTorch 是一个尚未准备好投入生产的玩具。

因此,在构建编译器的时候,我们有机会与 Caffe2 项目合并,以获得更大的团队以及更持续的资金。我们接受了,是我做的决定。这也是我们提出“提交(commit)必须由 FB 工程师进行”的地方,这是一个巨大的权衡。我做出这个决定是因为了解到在我们能够简化这方面之前,面临的问题是这几年来开源方面的摩擦不断增加。生活并不完美。

之后大约两年时间里,我们将工作重心从编译器堆栈转向生产,同时默默地看着 XLA 和 TVM 轻松前进。我们还必须整合两个团队(PyTorch 和 Caffe2)——这更像是一个社会工程问题而不是技术问题。这需要时间——从 2018 年到 2020 年。

我们还清理了内部以构建 PyTorch Mobile,使硬件供应商能够构建 out-of-tree 后端,帮助我们与 Google 开启在 TPU 支持方面的强大合作,并启用了许多其他正在进行的项目(fx、functorch、dynamo、dispatch、lazy)。

此外,我们的 CPU 性能非常糟糕(但研究人员没有注意到),且生产工作负载非常需要 CPU,于是我们修复了它。

所有这些都产生了巨大的影响:libtorch 使我们能够进入许多新市场——自动驾驶、移动应用程序、推荐。我们在世界各地的许多顶级公司中开展业务。

直到今天,我们对向后兼容性的高度重视仍然受到普遍赞赏,我为此感到自豪。

无论如何,这一大规模的针对生产的推动并没有对研究人员带来重大帮助,所以许多研究者开玩笑说自 PyTorch 0.4 以来没有太大变化,从简单的、狭隘的观点来看,他们是对的。

研究取得了巨大的成功,我们的核心初始产品 + 强大的向后兼容性保证大大提升了它。

由于生产这一支点带来了持续/额外的资金,我们在分布式、性能方面做出了很大改进,添加了各种新的层和功能(其中一些设计很糟糕,抱歉!),复杂的支持。我们花费了大量的时间和精力,不过这确实使人们对 PyTorch 日常使用变得更便捷友好。

但是,当研究人员说“没有太大变化”时,他们的意思是其日常用户体验没有发生重大变化。

产品探索和产品设计的处理方式通常与研究相同——我们探索并利用我们发现的东西。随着 PyTorch 中的各种线程捆绑在一起,我认为今天我们已经拥有正确的基础设施、正确的领导者和维护者、正确的态度和优先事项,让 PyTorch 再次引领重大的产品颠覆(除非我们所有的赌注运气不好)。我们很幸运能得到研究界的信任,即使我做了一些在他们(当时)看来并不理想的决定。

我很高兴看到 dynamo、lazy、fx、functorch、nvfuser 等原型,并且非常有信心它们将整合成下一组具有颠覆性的体验。我很自豪我们已经构建了诸如命名张量(named-tensor)之类的原型,即使它们没有成功。

#深度学习##机器学习##Pytorch#

标签: #libtorch切片