PyTorch 中的 Torch 脚本是什么?
What are Torch Scripts in PyTorch?
我刚刚发现 PyTorch 文档公开了一些叫做 Torch Scripts 的东西。但是,我不知道:
- 什么时候应该使用它们?
- 它们应该如何使用?
- 它们有什么好处?
Torch 脚本是使用 PyTorch 的两种模式之一 just in time compiler, the other being tracing。链接文档中解释了这些好处:
Torch Script is a way to create serializable and optimizable models from PyTorch code. Any code written in Torch Script can be saved from your Python process and loaded in a process where there is no Python dependency.
以上引述实际上对脚本和跟踪都是正确的。所以
- 您可以通过 C++ 原生模块 LibTorch 在 Python 之外序列化您的模型,然后 运行 它们。这使您可以将 DL 模型嵌入到各种生产环境中,例如移动或物联网。有关于将模型导出到 C++ 的官方指南 here。
- PyTorch 可以编译 您的 jit-able 模块,而不是 运行将它们作为解释器,允许在训练和推理期间进行各种优化和提高性能。这对开发和生产同样有帮助。
具体来说,关于 Torch 脚本,与跟踪相比,它是 Python 的子集,详细说明 here,如果遵守,可以由 PyTorch 编译。编写 Torch 脚本模块而不是跟踪常规 nn.Module
子类更加费力,但它允许一些额外的跟踪功能,最显着的是流量控制,如 if
语句或 for
循环。跟踪将此类流量控制视为“常量” - 换句话说,如果您的模块中有一个 if model.training
子句并使用 training=True
跟踪它,它将始终以这种方式运行,即使您更改了 training
稍后变为 False
。
要回答你的第一个问题,如果你想在 Python 之外部署你的模型,你 需要 使用 jit
,否则你 应该 如果你想以额外的开发工作为代价获得一些执行性能(因为不是每个模型都可以直接与 jit
兼容)。特别是,如果您的代码不能单独使用跟踪 jit
,您应该使用 Torch 脚本,因为它依赖于某些功能,例如 if
语句。为了最大限度地符合人体工程学,您可能希望根据具体情况 mix the two。
最后,关于如何使用它们,请参考所有文档和教程链接。
我刚刚发现 PyTorch 文档公开了一些叫做 Torch Scripts 的东西。但是,我不知道:
- 什么时候应该使用它们?
- 它们应该如何使用?
- 它们有什么好处?
Torch 脚本是使用 PyTorch 的两种模式之一 just in time compiler, the other being tracing。链接文档中解释了这些好处:
Torch Script is a way to create serializable and optimizable models from PyTorch code. Any code written in Torch Script can be saved from your Python process and loaded in a process where there is no Python dependency.
以上引述实际上对脚本和跟踪都是正确的。所以
- 您可以通过 C++ 原生模块 LibTorch 在 Python 之外序列化您的模型,然后 运行 它们。这使您可以将 DL 模型嵌入到各种生产环境中,例如移动或物联网。有关于将模型导出到 C++ 的官方指南 here。
- PyTorch 可以编译 您的 jit-able 模块,而不是 运行将它们作为解释器,允许在训练和推理期间进行各种优化和提高性能。这对开发和生产同样有帮助。
具体来说,关于 Torch 脚本,与跟踪相比,它是 Python 的子集,详细说明 here,如果遵守,可以由 PyTorch 编译。编写 Torch 脚本模块而不是跟踪常规 nn.Module
子类更加费力,但它允许一些额外的跟踪功能,最显着的是流量控制,如 if
语句或 for
循环。跟踪将此类流量控制视为“常量” - 换句话说,如果您的模块中有一个 if model.training
子句并使用 training=True
跟踪它,它将始终以这种方式运行,即使您更改了 training
稍后变为 False
。
要回答你的第一个问题,如果你想在 Python 之外部署你的模型,你 需要 使用 jit
,否则你 应该 如果你想以额外的开发工作为代价获得一些执行性能(因为不是每个模型都可以直接与 jit
兼容)。特别是,如果您的代码不能单独使用跟踪 jit
,您应该使用 Torch 脚本,因为它依赖于某些功能,例如 if
语句。为了最大限度地符合人体工程学,您可能希望根据具体情况 mix the two。
最后,关于如何使用它们,请参考所有文档和教程链接。