051将模型导出为 ONNX 格式
将模型导出为 ONNX 格式¶
在生产环境中部署 🤗 Transformers 模型时,通常需要将模型导出为一种序列化格式,以便在专用运行时和硬件上加载和执行。
🤗 Optimum 是 Transformers 的一个扩展,通过其 exporters 模块,可以将模型从 PyTorch 或 TensorFlow 导出为序列化格式,如 ONNX 和 TFLite。🤗 Optimum 还提供了一组性能优化工具,以在目标硬件上以最大效率训练和运行模型。
本指南演示了如何使用 🤗 Optimum 将 🤗 Transformers 模型导出为 ONNX 格式。有关将模型导出为 TFLite 的指南,请参阅 导出到 TFLite 页面。
导出到 ONNX¶
ONNX(开放神经网络交换) 是一个开放标准,定义了一组通用的操作符和一个通用的文件格式,用于在各种框架(包括 PyTorch 和 TensorFlow)中表示深度学习模型。当模型导出为 ONNX 格式时,这些操作符用于构建一个计算图(通常称为中间表示),该图表示数据在神经网络中的流动。
通过公开具有标准化操作符和数据类型的图,ONNX 使得在框架之间切换变得容易。例如,在 PyTorch 中训练的模型可以导出为 ONNX 格式,然后在 TensorFlow 中导入(反之亦然)。
一旦导出为 ONNX 格式,模型可以:
- 通过图优化和量化等技术进行推理优化。
- 通过
ORTModelForXXX类 使用 ONNX Runtime 运行,这些类遵循与 🤗 Transformers 中相同的AutoModelAPI。 - 通过优化推理管道运行,其 API 与 🤗 Transformers 中的 pipeline() 函数相同。
🤗 Optimum 通过利用配置对象来支持 ONNX 导出。这些配置对象为多种模型架构提供了现成的支持,并且设计为易于扩展到其他架构。
有关现成配置的列表,请参阅 🤗 Optimum 文档。
有两种方法可以将 🤗 Transformers 模型导出为 ONNX,这里我们展示两种方法:
- 通过 CLI 使用 🤗 Optimum 导出。
- 通过
optimum.onnxruntime使用 🤗 Optimum 导出。
通过 CLI 导出 🤗 Transformers 模型到 ONNX¶
要将 🤗 Transformers 模型导出为 ONNX,首先安装一个额外的依赖项: