- PyTorch 最大的卖点是它对动态网络的支持,比其他需要构建静态网络的框架拥有更低的学习成本。但是它不适合部署。动态建图带来的优势对于性能要求更高的应用场景而言更像是缺点,非固定的网络结构给网络结构分析并进行优化带来了困难,多数参数都能以 Tensor 形式传输也让资源分配变成一件闹心的事。另外由于图是由 python 代码构建的,一方面部署要依赖 python 环境,另一方面模型也毫无保密性可言。
- 而 TorchScript 就是为了解决这个问题而诞生的工具。包括代码的追踪及解析、中间表示的生成、模型优化、序列化等各种功能,可以说是覆盖了模型部署的方方面面。
- 作为模型部署的一个范式,通常都需要生成一个模型的中间表示(IR),这个 IR 拥有相对固定的图结构,所以更容易优化。
- ONNX 是业界广泛使用的一种神经网络中间表示,PyTorch 自然也对 ONNX 提供了支持。
- torch.onnx.export函数可以帮助我们把 PyTorch 模型转换成 ONNX 模型,这个函数会使用 trace 的方式记录 PyTorch 的推理过程。
- ONNX 的导出,使用的正是 TorchScript 的 trace 工具。具体步骤如下:
- 使用 trace 的方式先生成一个 TorchScipt 模型,如果转换的本身就是 TorchScript 模型,则可以跳过这一步。
- 使用许多 pass 对 1 中生成的模型进行变换,其中对 ONNX 导出最重要的一个 pass 就是ToONNX,这个 pass 会进行一个映射,将 TorchScript 中prim、aten空间下的算子映射到onnx空间下的算子。
- 使用 ONNX 的 proto 格式对模型进行序列化,完成 ONNX 的导出。
- TorchScript 的主要用途是进行模型部署,需要记录生成一个便于推理优化的 IR,对计算图的编辑通常都是面向性能提升等等,不会给模型本身添加新的功能。
TorchScript--初步学习笔记
最新推荐文章于 2024-04-24 19:32:27 发布