1. PyTorch 生态系统
PyTorch 支持 2 种独立的模式来处理研究和生产环境。
两种模式:
PyTorch 中两种主流模式:eager mode 和 graph mode(或者script mode)。
E 模式,侧重于易用性与灵活性,主要用于构建模型,易于调试,验证想法,适合科研人员魔改模型;
G模式: 侧重于性能方面,适合生产,实际工程部署中应用。 (无论之前的script 模式或者 graph 都是为了更好的部署在生产环境中)
2. Torch script 模式
PyTorch1.0后,可以通过TorchScript的方式创建序列化和可优化的模型。可以通过两种方式,分别是Tracing和Script将一个Python代码转化为TorchScript代码,继而导出相应的模型可以继续被优化,同时被C++所调用,最终实现对生产环境下的支持(考虑到多线程执行和性能原因,一般Python代码并不适合做部署)。
TorchScript 是 PyTorch 中的一项功能,允许您序列化 PyTorch 模型并在各种环境中运行它们。它提供了一种保存经过训练的 PyTorch 模型并将其加载到无 Python 环境甚至不同硬件(例如 GPU、FPGA 或移动设备)上的方法。
与 PyTorch 相比,这有几个优点:
-
可移植性:借助 TorchScript,您可以在任何支持 TorchScript 运行时的环境中运行 PyTorch 模型,无论平台或语言如何。
-
性能:TorchScript 可以通过融合操作和消除未使用的操作来优化 PyTorch 模型,以加快执行速度。这可以显着提高速度,尤其是在移动电话等资源有限的设备上。
-
安全性:通过部署 TorchScript 模型,您可以保护您的 PyTorch 代码和模型免遭逆向工程或篡改。
-
易于部署:使用 TorchScript,您可以轻松地将 PyTorch 模型部署到生产环境,而无需 Python 环境。
它主要关注在生产用例方面,本节将讨论 TorchScript 相对于 PyTorch(或 Lightning)的优势,并展示如何完成转换.
2.1 torch.jit.trace()
2.2 torch.jit.script()
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 运行时。