Transformers 文档

ONNX

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

ONNX

ONNX 是一个开放标准,定义了一组通用的运算符和一个文件格式,用于表示不同框架(包括 PyTorch 和 TensorFlow)中的深度学习模型。当模型导出到 ONNX 时,运算符会构建一个计算图(或中间表示),该图表示数据在模型中的流动。标准化的运算符和数据类型使得在框架之间切换变得容易。

Optimum 库使用配置对象将模型导出到 ONNX,这些配置对象支持多种架构,并且可以轻松扩展。如果某个模型不受支持,请随时为 Optimum 做出贡献

导出到 ONNX 的好处包括以下几点。

使用 Optimum CLI 或 optimum.onnxruntime 模块将 Transformers 模型导出到 ONNX。

Optimum CLI

运行以下命令安装 Optimum 和 exporters 模块。

pip install optimum[exporters]

请参阅 “使用 optimum.exporters.onnx 将模型导出到 ONNX” 指南,了解所有可用参数或以下命令。

optimum-cli export onnx --help

设置 --model 参数以从 Hub 导出 PyTorch 或 TensorFlow 模型。

optimum-cli export onnx --model distilbert/distilbert-base-uncased-distilled-squad distilbert_base_uncased_squad_onnx/

您应该看到指示进度的日志,并显示生成的 model.onnx 的保存位置。

Validating ONNX model distilbert_base_uncased_squad_onnx/model.onnx...
	-[✓] ONNX model output names match reference model (start_logits, end_logits)
	- Validating ONNX Model output "start_logits":
		-[✓] (2, 16) matches (2, 16)
		-[✓] all values close (atol: 0.0001)
	- Validating ONNX Model output "end_logits":
		-[✓] (2, 16) matches (2, 16)
		-[✓] all values close (atol: 0.0001)
The ONNX export succeeded and the exported model was saved at: distilbert_base_uncased_squad_onnx

对于本地模型,请确保模型权重和 tokenizer 文件保存在同一目录中,例如 local_path。将目录传递给 --model 参数,并使用 --task 来指示模型可以执行的任务。如果未提供 --task,则使用不带特定于任务头的模型架构。

optimum-cli export onnx --model local_path --task question-answering distilbert_base_uncased_squad_onnx/

model.onnx 文件可以部署到任何支持 ONNX 的加速器。下面的示例演示了使用 ONNX Runtime 加载和运行模型。

>>> from transformers import AutoTokenizer
>>> from optimum.onnxruntime import ORTModelForQuestionAnswering

>>> tokenizer = AutoTokenizer.from_pretrained("distilbert_base_uncased_squad_onnx")
>>> model = ORTModelForQuestionAnswering.from_pretrained("distilbert_base_uncased_squad_onnx")
>>> inputs = tokenizer("What am I using?", "Using DistilBERT with ONNX Runtime!", return_tensors="pt")
>>> outputs = model(**inputs)

optimum.onnxruntime

optimum.onnxruntime 模块支持以编程方式导出 Transformers 模型。实例化一个用于任务的 ORTModel 并设置 export=True。使用 ~OptimizedModel.save_pretrained 保存 ONNX 模型。

>>> from optimum.onnxruntime import ORTModelForSequenceClassification
>>> from transformers import AutoTokenizer

>>> model_checkpoint = "distilbert/distilbert-base-uncased-distilled-squad"
>>> save_directory = "onnx/"

>>> ort_model = ORTModelForSequenceClassification.from_pretrained(model_checkpoint, export=True)
>>> tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)

>>> ort_model.save_pretrained(save_directory)
>>> tokenizer.save_pretrained(save_directory)
< > 在 GitHub 上更新