PyTorch中的Torch脚本是什么?

时间:2018-12-23 00:49:08

标签: pytorch jit

我刚刚发现PyTorch文档公开了称为Torch Scripts的内容。但是,我不知道:

  • 何时应使用它们?
  • 应如何使用它们?
  • 他们有什么好处?

1 个答案:

答案 0 :(得分:9)

火炬脚本是使用PyTorch just in time compiler的两种模式之一,另一种是tracing。好处在链接的文档中进行了解释:

  

Torch脚本是一种从PyTorch代码创建可序列化和可优化模型的方法。任何用Torch脚本编写的代码都可以从Python进程中保存,并加载到没有Python依赖项的进程中。

以上引用实际上在脚本编制和跟踪中均适用。所以

  1. 您可以获得序列化模型的能力,然后可以通过C ++本地模块LibTorch在Python之外运行它们。这使您可以将DL模型嵌入各种生产环境中,例如移动或IoT。有关将模型导出到C ++ here的官方指南。
  2. PyTorch可以编译您可jit的模块,而不是将其作为解释器运行,从而可以在训练和推理期间进行各种优化并提高性能。这对于开发和生产同样有用。

关于Torch脚本,与跟踪相比,它是Python的一个子集,在here中进行了详细说明,遵循该代码可以由PyTorch进行编译。编写Torch脚本模块而不是跟踪常规的nn.Module子类会比较费力,但是它允许在跟踪过程中使用一些额外的功能,例如if语句或for循环之类的流控制。跟踪将这种流控制视为“常量”-换句话说,如果您的模块中有一个if model.training子句并使用training=True对其进行跟踪,即使您更改了{将{1}}变量更改为training

要回答第一个问题,如果要在Python之外部署模型,则需要使用False,否则使用{{1} },如果您想以额外的开发工作为代价获得一些执行性能(因为并非每个模型都可以直接与jit兼容)。特别是,如果您的代码无法单独jit进行跟踪,因为它依赖于某些功能,例如jit语句,则应使用Torch脚本。为了获得最大的人体工程学,您可能希望根据具体情况mix the two

最后,有关应如何使用它们,请参考所有文档和教程链接。