doc22_069.md 2.3 KB
Newer Older
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
1 2
# torch.onnx

绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
3
> 原文:[`pytorch.org/docs/stable/onnx.html`](https://pytorch.org/docs/stable/onnx.html)
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
4 5 6

## 概述

绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
7
[Open Neural Network eXchange (ONNX)](https://onnx.ai/) 是表示机器学习模型的开放标准格式。`torch.onnx` 模块从本机 PyTorch `torch.nn.Module` 模型中捕获计算图,并将其转换为 [ONNX 图](https://github.com/onnx/onnx/blob/main/docs/IR.md)
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
8 9 10 11 12 13 14 15 16 17 18 19 20

导出的模型可以被支持 ONNX 的许多 [运行时](https://onnx.ai/supported-tools.html#deployModel) 使用,包括微软的 [ONNX Runtime](https://www.onnxruntime.ai)

**您可以使用以下两种 ONNX 导出器 API:**

## 基于 TorchDynamo 的 ONNX 导出器[](#torchdynamo-based-onnx-exporter "跳转到此标题")

*基于 TorchDynamo 的 ONNX 导出器是 PyTorch 2.0 及更新版本的最新(Beta)导出器*

TorchDynamo 引擎被用来钩入 Python 的帧评估 API 并动态重写其字节码为 FX 图。然后,生成的 FX 图在最终转换为 ONNX 图之前被优化。

这种方法的主要优势在于,[FX 图](https://pytorch.org/docs/stable/fx.html) 是通过保留模型的动态特性而不是使用传统的静态追踪技术来捕获的。

绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
21
了解基于 TorchDynamo 的 ONNX 导出器
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
22 23 24 25 26

## 基于 TorchScript 的 ONNX 导出器[](#torchscript-based-onnx-exporter "跳转到此标题")

*基于 TorchScript 的 ONNX 导出器自 PyTorch 1.2.0 起可用*

绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
27
[TorchScript](https://pytorch.org/docs/stable/jit.html) 被利用来追踪(通过 `torch.jit.trace()`)模型并捕获静态计算图。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
28 29 30 31 32 33 34 35 36

因此,生成的图有一些限制:

+   它不记录任何控制流,比如 if 语句或循环;

+   不处理 `training``eval` 模式之间的细微差别;

+   不真正处理动态输入

绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
37
为了支持静态追踪的限制,导出器还支持 TorchScript 脚本化(通过 `torch.jit.script()`),这增加了对数据相关控制流的支持,例如。然而,TorchScript 本身是 Python 语言的一个子集,因此并不支持 Python 中的所有功能,比如原地操作。
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
38

绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
39
了解基于 TorchScript 的 ONNX 导出器
绝不原创的飞龙's avatar
绝不原创的飞龙 已提交
40 41 42 43

## 贡献 / 开发

ONNX 导出器是一个社区项目,我们欢迎贡献。我们遵循 [PyTorch 的贡献指南](https://github.com/pytorch/pytorch/blob/main/CONTRIBUTING.md),但您可能也对阅读我们的 [开发维基](https://github.com/pytorch/pytorch/wiki/PyTorch-ONNX-exporter)感兴趣。