torch.export 不等于“导出到部署格式”,因为它仅生成与运行时解耦的 exportedprogram 中间表示,而非 onnx、torchscript 等可部署格式;其输出是 python 对象,不含运行时逻辑,需配合 torch._inductor.compile 或 torch.onnx.dynamo_export 才能落地为可执行代码或标准格式。

torch.export 目前(截至 PyTorch 2.4)不能直接用于端到端模型导出,它只负责生成一个可序列化的、与运行时解耦的 ExportedProgram 对象,后续必须配合 torch._inductor.compile 或 torch.dynamo.export(已弃用)等机制才能真正落地为可执行格式。直接调用 torch.export.export 后得到的产物不是 ONNX、TorchScript 或 LibTorch 可加载的格式。
为什么 torch.export 不等于“导出到部署格式”?
torch.export 的设计目标是提供一个标准化的中间表示(IR),而非最终部署载体。它的输出 ExportedProgram 是 Python 对象,包含图结构、元数据和参数绑定,但不包含运行时调度逻辑或后端适配器。
- 它不生成
.onnx文件 —— 需额外调用onnx.export(且目前ExportedProgram到 ONNX 的桥接仍处于实验阶段,需torch.onnx.dynamo_export) - 它不生成 TorchScript ——
torch.jit.script和torch.export走的是完全不同的 IR 路线,二者不兼容 - 它默认不优化或 lowering —— 没有自动启用
inductor编译,也不会生成 kernel 代码
如何用 torch.export + torch._inductor.compile 实现实际部署?
当前最接近“端到端”的路径是:先用 torch.export.export 获取规范图,再喂给 torch._inductor.compile 得到可执行的 Python callable(底层是 AOT-compiled C++/CUDA 模块)。
python-docx Skill功能概述python-docx Skill是一项面向实际任务的技能,主要用于本Skill提供使用python-docx生成专业Word文档的标准方法和最佳实践;生成安全服务方案文档;核心要点生成技术架构设计文档;生成任何需要专业排版的Word文档;核心库 : python-docx;使用与执行辅助库 : docx.shared , docx.enum , docx.oxml.ns;标准代码模板;1. 文档初始化;2. 字体设置(必须!它将相关步骤、工具调用和结果整理方式集
- 输入必须是
torch.fx.GraphModule或普通nn.Module,且所有控制流需为静态(无动态 if/for) - 需显式指定
dynamic_shapes(否则默认全静态),例如:{'x': {0: torch.export.Dim('batch')} - 导出后建议调用
exported_program.module()测试前向是否一致,避免 trace 错误 -
torch._inductor.compile接收的是ExportedProgram.module()返回的 callable,不是ExportedProgram本身
ep = torch.export.export(model, (x,), dynamic_shapes=...) compiled = torch._inductor.compile(ep.module()) y = compiled(x) # 这才是实际运行的优化后版本
想导出 ONNX?别直接用 torch.export.export
如果你的目标是 ONNX,torch.export.export 并非推荐入口。PyTorch 官方 ONNX 支持目前仍主要走 torch.onnx.dynamo_export(PyTorch ≥ 2.3),它内部会调用 torch.export,但封装了 shape inference 和算子映射逻辑。
- 不要手动从
ExportedProgram提取 graph 再喂给旧版torch.onnx.export—— 算子签名和语义不匹配,大概率报UnsupportedNodeError -
torch.onnx.dynamo_export要求模型能被dynamo正确 capture,对高阶函数、自定义 C++ op 支持有限 - 导出时传入的示例输入
args必须覆盖所有动态维度,否则 ONNX shape 推导失败
onnx_program = torch.onnx.dynamo_export(model, x)
onnx_program.save("model.onnx")
容易被忽略的兼容性陷阱
torch.export 对 Python 控制流极其敏感:哪怕一个 if len(x) > 0:,只要 len(x) 在 trace 时是 Python int(而非 torch.SymInt),就会导致 export 失败并抛出 ConstraintViolationError。
- 避免在模型 forward 中使用
isinstance、hasattr、type()等运行时类型检查 - 所有张量维度必须声明为
torch.export.Dim,不能靠 runtime shape 推断 -
torch.compile默认 backend 是aot_eager,不是 inductor —— 显式指定backend="inductor"才能触发 lowering - Windows 上
torch._inductor默认不可用,AOT 编译会 fallback 到解释执行,失去性能收益
真正能落地的“端到端”,目前还得靠组合:明确目标格式(ONNX / TorchScript / ExecuTorch),再选对应入口;torch.export 只是其中一环,而且是最容易卡在动态形状和控制流上的那一环。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










