我刚刚发现PyTorch文档公开了称为Torch Scripts的内容。但是,我不知道:
答案 0 :(得分:9)
火炬脚本是使用PyTorch just in time compiler的两种模式之一,另一种是tracing。好处在链接的文档中进行了解释:
Torch脚本是一种从PyTorch代码创建可序列化和可优化模型的方法。任何用Torch脚本编写的代码都可以从Python进程中保存,并加载到没有Python依赖项的进程中。
以上引用实际上在脚本编制和跟踪中均适用。所以
关于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。
最后,有关应如何使用它们,请参考所有文档和教程链接。