2

最初,tensorflow 和 pytorch 有一个根本的区别:

  • tensorflow 基于计算图。构建此图并在会话中对其进行评估是两个独立的步骤。当它被使用时,图表不会改变,这允许优化。
  • torch 急切地评估张量上的操作。这使得 API 更方便(无会话),但也失去了识别和优化总是按顺序发生的操作的潜力。

现在,这种差异变得不那么明显了。Tensorflow 通过tf eager回应了火炬的流行。还有一个JAX项目,它建立在与 tensorflow ( XLA )相同的底层框架上。JAX 没有会话的概念。但它允许您通过简单地调用jit将多个操作一起编译。

由于 Tensorflow 已经开始涵盖 PyTorch 功能,PyTorch 是否也在努力整合 Tensorflow 的优势?PyTorch(或其路线图)中是否有类似会话或 jit 功能的东西?

API 文档有一个jit 部分,但据我所知,这更多是关于导出模型。

4

1 回答 1

3

正如您所提到的,有一个torch.jit,它的目的也是在导出的图中引入优化(例如内核融合,常量优化等)。IIRC 你可以在他们的github repo 中找到一些源代码,尽管我不确定这些源代码是否在文档中的某个地方明确提到(或者明确到足以被记住)。

由于1.3还引入了量化(有关一些介绍,请参见此处)。在教程部分,也就是在这里你可以看到明确的融合Conv2dBatchNormReLU为了提高性能。Ofc 还存在特定的东西,例如使用int而不是float权重(量化)、混合算术(half尽可能使用浮点精度,请参阅 NVidia 的Apex)等。

最后但并非最不重要的一点是,我认为使用矢量化操作并与torchscript您一起导出的编写良好的模型不会因为一些通用图优化而看到真正显着的运行时差异。无论您是要使用 GPU、CPU、TPU,它们的版本是什么,您是只进行推理还是训练等,仍然有所不同。很难确定tensorflow与 相比有多快pytorch(除了一些众所周知的问题在这两个框架中)。总而言之,这取决于AFAIK,并且测量值变化很大。

顺便提一句。当谈到每个框架的优势时,它们的核心确实开始涵盖类似的东西(PyTorch 最近获得了移动支持,请参见此处)。真正的区别仍然是不同的底层方法以及每个框架必须做什么来规避这些限制。

于 2019-10-28T18:44:45.227 回答