torch.export

torch.export

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

内容提要

torch.export()用于提前编译Python可调用对象,生成功能图。它利用TorchDynamo进行字节码追踪,AOT Autograd功能化图形,并通过torch.fx.graph提供图形表示。ExportedProgram包含GraphModule和图签名,支持动态形状和序列化。使用export_for_training()可处理非功能操作,但存在无法追踪的代码和缺失的假内核等限制。

🎯

关键要点

  • torch.export()用于提前编译Python可调用对象,生成功能图。

  • torch.export()内部使用TorchDynamo进行字节码追踪,AOT Autograd功能化图形,并通过torch.fx.graph提供图形表示。

  • ExportedProgram包含GraphModule和图签名,支持动态形状和序列化。

  • GraphModule将每个指令编译为低级ATen操作,ATen是PyTorch的核心张量库。

  • ExportedProgram的图签名是功能性的,给定相同输入总会产生相同输出。

  • 严格模式和非严格模式都将模型编译为torch.fx.Graph,非严格模式需要Python运行时,严格模式通过torch.Dynamo检查字节码。

  • 使用export_for_training()可以处理非功能操作,适用于训练场景。

  • 支持动态形状,使用Dim()生成编译期间的范围约束。

  • torch.export.save()用于保存模型,torch.export.load()用于加载模型。

  • 在导出期间,某些值(如输入形状和Python原始类型)被固定为常量,简化图形。

  • torch.export存在一些限制,如无法追踪的代码和缺失的假内核可能导致失败。

🔎

延伸解读

torch.export与torch.compile的区别

torch.export和torch.compile都是用于优化PyTorch模型的工具,但它们的工作原理不同。torch.export主要通过提前编译生成功能图,而torch.compile则侧重于在运行时进行动态编译。理解这两者的区别有助于开发者选择合适的工具来满足不同的需求。

动态形状的支持

torch.export支持动态形状的处理,这意味着在编译期间可以根据输入的不同生成相应的范围约束。这对于需要处理变形输入的模型尤为重要,开发者在使用时应注意如何定义动态形状,以确保模型的灵活性和适应性。

导出过程中的限制

在使用torch.export时,开发者需注意一些限制,例如无法追踪的代码和缺失的假内核可能导致导出失败。这要求开发者在编写模型时考虑到这些因素,必要时进行代码重写或提供额外信息,以确保导出过程顺利进行。

延伸问答

torch.export()的主要功能是什么?

torch.export()用于提前编译Python可调用对象,生成功能图。

torch.export()如何处理动态形状?

torch.export()支持动态形状,使用Dim()生成编译期间的范围约束。

ExportedProgram包含哪些主要组件?

ExportedProgram包含GraphModule和图签名。

如何使用torch.export保存和加载模型?

使用torch.export.save()保存模型,使用torch.export.load()加载模型。

torch.export的限制是什么?

torch.export存在无法追踪的代码和缺失的假内核等限制,可能导致失败。

torch.export与torch.compile有什么区别?

torch.export用于提前编译并生成功能图,而torch.compile主要用于即时编译。

🏷️

标签

➡️

继续阅读