内容提要
torch.export()用于提前编译Python可调用对象,生成功能图。它利用TorchDynamo进行字节码追踪,AOT Autograd功能化图形,并通过torch.fx.graph提供图形表示。ExportedProgram包含GraphModule和图签名,支持动态形状和序列化。使用export_for_training()可处理非功能操作,但存在无法追踪的代码和缺失的假内核等限制。
延伸解读
torch.export与torch.compile的区别
torch.export和torch.compile都是用于优化PyTorch模型的工具,但它们的工作原理不同。torch.export主要通过提前编译生成功能图,而torch.compile则侧重于在运行时进行动态编译。理解这两者的区别有助于开发者选择合适的工具来满足不同的需求。
动态形状的支持
torch.export支持动态形状的处理,这意味着在编译期间可以根据输入的不同生成相应的范围约束。这对于需要处理变形输入的模型尤为重要,开发者在使用时应注意如何定义动态形状,以确保模型的灵活性和适应性。
导出过程中的限制
在使用torch.export时,开发者需注意一些限制,例如无法追踪的代码和缺失的假内核可能导致导出失败。这要求开发者在编写模型时考虑到这些因素,必要时进行代码重写或提供额外信息,以确保导出过程顺利进行。
Q&A
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主要用于即时编译。