1. PyTorch 生态系统
PyTorch 支持 2 种独立的模式来处理研究和生产环境。
两种模式:
PyTorch 中两种主流模式:研究模式, 比如 eager mode 和 生产模式,比如 graph mode 或者script mode)。
科研模式 模式,侧重于易用性与灵活性,主要用于构建模型,易于调试,验证想法,适合科研人员魔改模型;
生产模式: 侧重于性能方面,适合生产,实际工程部署中应用。 (无论之前的script 模式或者 graph 都是为了更好的部署在生产环境中)
2. Script 模式
PyTorch1.0后,可以通过TorchScript的方式创建序列化和可优化的模型。可以通过两种方式,分别是Tracing和Script将一个Python代码转化为TorchScript代码,继而导出相应的模型可以继续被优化,同时被C++所调用,最终实现对生产环境下的支持(考虑到多线程执行和性能原因,一般Python代码并不适合做部署)。
TorchScript 是 PyTorch 中的一项功能,允许您序列化 PyTorch 模型并在各种环境中运行它们。它提供了一种保存经过训练的 PyTorch 模型并将其加载到无 Python 环境甚至不同硬件(例如 GPU、FPGA 或移动设备)上的方法。
与 PyTorch 相比,这有几个优点:
- 可移植性:借助 TorchScript,您可以在任何支持 TorchScript 运行时的环境中运行 PyTorch 模型,无论平台或语言如何。
可移植性允许将模型部署在多线程推理服务器、移动设备和汽车中,而这对于 Python 来说是困难的。为了实现这一点,PyTorch 模型需要与任何特定的运行时解耦。
- 性能:TorchScript 可以通过融合操作和消除未使用的操作来优化 PyTorch 模型,以加快执行速度。这可以显着提高速度,尤其是在移动电话等资源有限的设备上。
PyTorch JIT 是 PyTorch 的优化 JIT 编译器。它使用运行时信息来优化 TorchScript 模块。它可以自动执行层融合、量化、稀疏化等优化。
-
安全性:通过部署 TorchScript 模型,您可以保护您的 PyTorch 代码和模型免遭逆向工程或篡改。
-
易于部署:使用 TorchScript,您可以轻松地将 PyTorch 模型部署到生产环境,而无需 Python 环境。
它主要关注在生产用例方面,本节将讨论 TorchScript 相对于 PyTorch(或 Lightning)的优势,并展示如何完成转换.
2.1 Pytorch JIT
PyTorch JIT 是 PyTorch 程序的优化编译器
- 它是一个轻量级的线程安全解释器
- 支持轻松编写自定义转换
- 它不仅仅用于推理,因为它具有自动差异支持
2.2 TorchScript
TorchScript 是 Python 语言的静态高性能子集,专门用于 ML 应用程序。它支持
- Complex control flows 复杂的控制流程
- Common data structures 常见数据结构
- User-defined classes 用户定义的类
2.2.1 torch.jit.trace()
torch.jit.trace 将数据实例和经过训练的 eager 模块作为输入。跟踪器运行提供的模块并记录所执行的张量操作。
该记录被转换为 TorchScript 模块。
它可以重用现有的 eager 模型代码,并且可以使用专有的 torch 张量/操作处理几乎任何程序。
它的主要缺点是省略了所有控制流、数据结构和 python 结构。它还可以在没有任何警告的情况下创建不忠实的表示。始终检查其 IR 以查看它是否正确解析 PyTorch 模型的结构。
2.2.2 torch.jit.script()
torch.jit.script 允许您将代码直接写入 TorchScript。它更冗长,但更通用,只需稍加调整就可以支持大多数 PyTorch 模型。
与跟踪模式相反,您只需将模型/模块的实例传递给 torch.jit.script. 不需要数据样本。
它保留了控制流和其他 Python 结构,看起来更像 Python。它对列表/字典具有一流的支持。
它省略了常量值并且需要类型转换。如果未提供类型,则默认为张量。
对于一次来说,理论太多了,让我们转向代码并查看运行中的跟踪/脚本。
2.3
要更全面地了解 TorchScript,我建议您阅读本教程。
您可以通过调用 to_torchscript 方法轻松将 Lightning 模块转换为 TorchScript。
script = model.to_torchscript()
torch.jit.save(script, "torchscript_model.pt")
经过一些测试,我发现使用 TorchScript 在 GPU 上的推理时间比 PyTorch Lightning 的推理时间低 2 倍。然而,这只发生在小批量(根据我的测试,为 1 或 2)
PyTorch 旨在通过 TorchScript 创建一个从研究到生产的统一框架。 TorchScript 会将您的 PyTorch 模块作为输入,并将其转换为适合生产的格式。
它将更快地运行您的模型并且独立于 Python 运行时。
3. torch.fx 模式
3.1
3.2
3.3
4. 模型量化
ref
参考:
参考阅读文章来源:https://www.toymoban.com/news/detail-561773.html
阅读2文章来源地址https://www.toymoban.com/news/detail-561773.html
到了这里,关于pytorch 中的执行模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!