PyTorch 导出

💡 原文英文,约800词,阅读约需3分钟。
📝

内容提要

PyTorch 2引入torch.export功能,允许将模型导出为静态图以优化推理性能。自定义操作可通过无状态的torch.ops或有状态的torch.classes定义。导出时需避免数据依赖形状和控制流,以确保模型可静态表示。导出的模型可在Python中保存和加载,但在C++中需使用AOTInductor或Executorch进行优化和编译,确保模型无图断裂是推理的关键。

🎯

关键要点

  • PyTorch 2引入torch.export功能,允许将模型导出为静态图以优化推理性能。

  • 自定义操作可以通过无状态的torch.ops或有状态的torch.classes定义。

  • 导出时需避免数据依赖形状和控制流,以确保模型可静态表示。

  • 导出的模型可以在Python中保存和加载,但在C++中需使用AOTInductor或Executorch进行优化和编译。

  • 确保模型无图断裂是推理的关键。

  • 自定义操作的实现可以使用假Python类来追踪并包含在导出的图中。

  • 导出模型不能在C++中加载和运行,必须先进行优化和编译。

  • PyTorch导出模型类似于ONNX模型,PyTorch IR类似于ONNX Opset。

延伸问答

PyTorch 2中的torch.export功能有什么作用?

torch.export功能允许将PyTorch模型导出为静态图,以优化推理性能。

如何定义自定义操作以便于导出?

自定义操作可以通过无状态的torch.ops函数或有状态的torch.classes类来定义,推荐使用无状态的方式。

导出模型时需要避免哪些问题?

导出时需避免数据依赖形状和控制流,以确保模型可静态表示。

导出的模型如何在Python和C++中使用?

导出的模型可以在Python中使用torch.export.save和torch.export.load进行保存和加载,但在C++中需使用AOTInductor或Executorch进行优化和编译。

为什么导出模型不能在C++中直接加载和运行?

导出的模型必须先进行优化和编译,才能在C++中运行,直接加载和运行是不支持的。

PyTorch导出模型与ONNX模型有什么相似之处?

PyTorch导出模型类似于ONNX模型,PyTorch IR类似于ONNX Opset,二者都不允许数据依赖形状和控制流。

➡️

继续阅读