什么是PyTorch中的Torch脚本?

And*_*uib 16 jit pytorch

我刚刚发现PyTorch文档暴露了一些名为Torch Scripts的东西.但是,我不知道:

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

Jat*_*aki 22

Torch Script是在时间编译器中使用PyTorch的两种模式之一,另一种是跟踪.链接文档中解释了这些好处:

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

以上引用实际上是脚本和跟踪的真实情况.所以

  1. 您可以通过LibTorch(C++本机模块)序列化模型,然后在Python之外运行它们.这允许您将DL模型嵌入到移动或物联网等各种生产环境中.有在出口车型C++的官方指南这里.
  2. PyTorch可以编译您的jit-able模块,而不是将它们作为解释器运行,允许在训练和推理期间进行各种优化并提高性能.这对开发和生产同样有帮助.

特别是关于Torch Script,与跟踪相比,它是Python的一个子集,在这里详细说明,当遵守时,可以由PyTorch编译.编写Torch Script模块而不是跟踪常规nn.Module子类更加费力,但它允许一些额外的功能而不是跟踪,最明显的是流控制,如if语句或for循环.跟踪将这种流控制视为"常量" - 换句话说,如果if model.training模块中有一个子句并跟踪它training=True,它将始终以这种方式运行,即使您将training变量更改为False稍后.

要回答你的第一个问题,你需要使用,jit如果你想在Python之外部署你的模型,否则你应该使用,jit如果你想以额外的开发工作的代价获得一些执行性能(因为不是每个模型都可以直接符合jit).特别是,如果您的代码不能仅jit通过跟踪来编辑,则应该使用Torch Script ,因为它依赖于某些功能,例如if语句.为了获得最大的人体工程学,您可能希望根据具体情况将两者混合使用.

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