Optimum 文档

导出函数

您正在查看 main 版本,该版本需要从源码安装。如果您想要常规 pip 安装,请查看最新的稳定版本 (v1.24.0)。
Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

导出函数

您可以从 🤗 Optimum 中的两个框架导出模型到 ONNX:PyTorch 和 TensorFlow。对于每个框架都有一个导出函数,export_pytorch()export_tensorflow(),但推荐的使用方法是通过主导出函数 ~optimum.exporters.main_export,它将负责根据可用的框架使用正确的导出函数,检查导出的模型是否有效,并提供扩展选项以在导出的模型上运行优化。

主要函数

optimum.exporters.onnx.main_export

< >

( model_name_or_path: str output: typing.Union[str, pathlib.Path] task: str = 'auto' opset: typing.Optional[int] = None device: str = 'cpu' dtype: typing.Optional[str] = None fp16: typing.Optional[bool] = False optimize: typing.Optional[str] = None monolith: bool = False no_post_process: bool = False framework: typing.Optional[str] = None atol: typing.Optional[float] = None cache_dir: str = '/root/.cache/huggingface/hub' trust_remote_code: bool = False pad_token_id: typing.Optional[int] = None subfolder: str = '' revision: str = 'main' force_download: bool = False local_files_only: bool = False use_auth_token: typing.Union[bool, str, NoneType] = None token: typing.Union[bool, str, NoneType] = None for_ort: bool = False do_validation: bool = True model_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None custom_onnx_configs: typing.Optional[typing.Dict[str, ForwardRef('OnnxConfig')]] = None fn_get_submodels: typing.Optional[typing.Callable] = None use_subprocess: bool = False _variant: str = 'default' library_name: typing.Optional[str] = None legacy: bool = False no_dynamic_axes: bool = False do_constant_folding: bool = True **kwargs_shapes )

必需参数

  • model_name_or_path (str) — huggingface.co 上的模型 ID 或磁盘上要导出的模型仓库的路径。示例:model_name_or_path="BAAI/bge-m3"mode_name_or_path="/path/to/model_folder
  • output (Union[str, Path]) — 指示存储生成的 ONNX 模型的目录的路径。

可选参数

  • task (Optional[str], 默认为 None) — 导出模型的任务。如果未指定,将根据模型自动推断任务。对于解码器模型,使用 xxx-with-past 导出使用解码器中过去键值的模型。
  • opset (Optional[int], 默认为 None) — 如果指定,则为导出模型使用的 ONNX opset 版本。否则,将使用给定模型架构的默认 opset。
  • device (str, 默认为 "cpu") — 用于执行导出的设备。默认为“cpu”。
  • fp16 (Optional[bool], 默认为 "False") — 在导出期间使用半精度。仅限 PyTorch,需要 device="cuda"
  • dtype (Optional[str], 默认为 None) — 用于导出的浮点精度。支持的选项:"fp32" (float32)、"fp16" (float16)、"bf16" (bfloat16)。默认为 "fp32"
  • optimize (Optional[str], 默认为 None) — 允许在导出期间直接运行 ONNX Runtime 优化。其中一些优化特定于 ONNX Runtime,并且生成的 ONNX 将无法与其他运行时(如 OpenVINO 或 TensorRT)一起使用。可用选项:"O1", "O2", "O3", "O4"。参考:AutoOptimizationConfig
  • monolith (bool, 默认为 False) — 强制将模型导出为单个 ONNX 文件。
  • no_post_process (bool, 默认为 False) — 允许禁用默认情况下对导出的 ONNX 模型执行的任何后处理。
  • framework (Optional[str], 默认为 None) — 用于 ONNX 导出的框架 ("pt""tf")。如果未提供,将尝试自动检测检查点的框架。
  • atol (Optional[float], 默认为 None) — 如果指定,则为验证模型时的绝对差异容差。否则,将使用模型的默认 atol。
  • cache_dir (Optional[str], 默认为 None) — 指示存储缓存的位置的路径。默认情况下将使用默认的 Hugging Face 缓存路径。
  • trust_remote_code (bool, 默认为 False) — 允许对模型仓库中托管的建模使用自定义代码。此选项仅应为您信任的仓库设置,并且您已阅读其中的代码,因为它将在您的本地机器上执行模型仓库中存在的任意代码。
  • pad_token_id (Optional[int], 默认为 None) — 某些模型和某些任务需要此参数。如果未提供,将尝试使用 tokenizer 猜测它。
  • subfolder (str, 默认为 "") — 如果相关文件位于模型仓库的子文件夹中(本地或在 huggingface.co 上),您可以在此处指定文件夹名称。
  • revision (str, 默认为 "main") — Revision 是要使用的特定模型版本。它可以是分支名称、标签名称或提交 ID。
  • force_download (bool, 默认为 False) — 是否强制(重新)下载模型权重和配置文件,覆盖缓存的版本(如果存在)。
  • local_files_only (Optional[bool], 默认为 False) — 是否仅查看本地文件(即,不尝试下载模型)。
  • use_auth_token (Optional[Union[bool,str]], 默认为 None) — 已弃用。请改用 token 参数。
  • token (Optional[Union[bool,str]], 默认为 None) — 用作远程文件的 HTTP Bearer 授权的令牌。 如果为 True,将使用运行 huggingface-cli login 时生成的令牌(存储在 huggingface_hub.constants.HF_TOKEN_PATH 中)。
  • model_kwargs (Optional[Dict[str, Any]], 默认为 None) — 实验性用法:在导出期间传递给模型的关键字参数。 此参数应与 custom_onnx_configs 参数一起使用,例如,如果模型输入/输出发生更改(例如,如果传递了 model_kwargs={"output_attentions": True})。
  • custom_onnx_configs (Optional[Dict[str, OnnxConfig]], 默认为 None) — 实验性用法:覆盖用于给定模型的默认 ONNX 配置。 对于希望更精细地控制导出的高级用户,此参数可能很有用。 此处提供了一个示例。
  • fn_get_submodels (Optional[Callable], 默认为 None) — 实验性用法:覆盖导出时使用的默认子模型。 当导出需要拆分 ONNX 的自定义架构(例如,编码器-解码器)时,这尤其有用。 如果未指定自定义模型,optimum 将尝试使用给定任务的默认子模型,但不保证成功。
  • use_subprocess (bool, 默认为 False) — 在子进程中执行 ONNX 导出的模型验证。 当在 CUDA 设备上导出时,这尤其有用,因为 ORT 在推理会话销毁时不会释放内存。 当设置为 True 时,main_export 调用应在 if __name__ == "__main__": 代码块中保护。
  • _variant (str, 默认为 default) — 指定要使用的 ONNX 导出变体。
  • library_name (Optional[str], 默认为 None) — 模型的库 ("transformers""diffusers""timm""sentence_transformers")。 如果未提供,将尝试自动检测检查点的库名称。
  • legacy (bool, 默认为 False) — 禁用文本生成模型对批量生成所需的 position_ids 的使用。 还可以导出为三个文件的仅解码器模型(不带 + 带 past 和合并模型)。 引入此参数是为了向后兼容,并将在 Optimum 的未来版本中删除。
  • no_dynamic_axes (bool, 默认为 False) — 如果为 True,则禁用 ONNX 导出期间的动态轴的使用。
  • do_constant_folding (bool, 默认为 True) — PyTorch 特定的参数。 如果为 True,则 PyTorch ONNX 导出将尽可能将常量折叠到相邻节点中。
  • **kwargs_shapes (Dict) — 推理期间要使用的形状。 此参数允许覆盖 ONNX 导出期间使用的默认形状。

全套 ONNX 导出功能,从 Hugging Face Hub 上的模型 ID 或本地模型仓库导出。

用法示例

>>> from optimum.exporters.onnx import main_export

>>> main_export("gpt2", output="gpt2_onnx/")

optimum.exporters.onnx.onnx_export_from_model

< >

( model: typing.Union[ForwardRef('PreTrainedModel'), ForwardRef('TFPreTrainedModel'), ForwardRef('DiffusionPipeline')] output: typing.Union[str, pathlib.Path] opset: typing.Optional[int] = None optimize: typing.Optional[str] = None monolith: bool = False no_post_process: bool = False atol: typing.Optional[float] = None do_validation: bool = True model_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None custom_onnx_configs: typing.Optional[typing.Dict[str, ForwardRef('OnnxConfig')]] = None fn_get_submodels: typing.Optional[typing.Callable] = None _variant: str = 'default' legacy: bool = False preprocessors: typing.List = None device: str = 'cpu' no_dynamic_axes: bool = False task: typing.Optional[str] = None use_subprocess: bool = False do_constant_folding: bool = True **kwargs_shapes )

必需参数

  • model (Union["PreTrainedModel", "TFPreTrainedModel"]) — 要导出到 ONNX 的 PyTorch 或 TensorFlow 模型。
  • output (Union[str, Path]) — 指示存储生成的 ONNX 模型的目录的路径。

可选参数

  • task (Optional[str], 默认为 None) — 要导出模型执行的任务。 如果未指定,将根据模型自动推断任务。
  • opset (Optional[int], 默认为 None) — 如果指定,则使用此 ONNX opset 版本导出模型。 否则,将使用给定模型架构的默认 opset。
  • device (str, 默认为 "cpu") — 用于执行导出的设备。 默认为 “cpu”。
  • optimize (Optional[str], 默认为 None) — 允许在导出期间直接运行 ONNX Runtime 优化。 其中一些优化是 ONNX Runtime 特有的,并且生成的 ONNX 将无法与其他运行时(如 OpenVINO 或 TensorRT)一起使用。 可用选项:"O1", "O2", "O3", "O4"。 参考:AutoOptimizationConfig
  • monolith (bool, 默认为 False) — 强制将模型导出为单个 ONNX 文件。
  • no_post_process (bool, 默认为 False) — 允许禁用默认情况下对导出的 ONNX 模型执行的任何后处理。
  • atol (Optional[float], 默认为 None) — 如果指定,则验证模型时的绝对差异容差。 否则,将使用模型的默认 atol。
  • model_kwargs (Optional[Dict[str, Any]], 默认为 None) — 实验性用法:在导出期间传递给模型的关键字参数。 此参数应与 custom_onnx_configs 参数一起使用,例如,如果模型输入/输出发生更改(例如,如果传递了 model_kwargs={"output_attentions": True})。
  • custom_onnx_configs (Optional[Dict[str, OnnxConfig]], 默认为 None) — 实验性用法:覆盖用于给定模型的默认 ONNX 配置。 对于希望更精细地控制导出的高级用户,此参数可能很有用。 此处提供了一个示例。
  • fn_get_submodels (Optional[Callable], 默认为 None) — 实验性用法:覆盖导出时使用的默认子模型。 当导出需要拆分 ONNX 的自定义架构(例如,编码器-解码器)时,这尤其有用。 如果未指定自定义模型,optimum 将尝试使用给定任务的默认子模型,但不保证成功。
  • use_subprocess (bool, 默认为 False) — 在子进程中进行 ONNX 导出模型验证。当在 CUDA 设备上导出时,这尤其有用,因为 ORT 在推理会话销毁时不会释放内存。当设置为 True 时,main_export 调用应在 if __name__ == "__main__": 代码块中受到保护。
  • _variant (str, 默认为 default) — 指定要使用的 ONNX 导出变体。
  • legacy (bool, 默认为 False) — 禁用文本生成模型的位置 ID 使用,这些模型在批量生成时需要位置 ID。 同时也支持将仅解码器模型导出为三个文件(不带 + 带 past 以及合并的模型)。引入此参数是为了向后兼容,并将在 Optimum 的未来版本中移除。
  • no_dynamic_axes (bool, 默认为 False) — 如果为 True,则禁用 ONNX 导出期间的动态轴使用。
  • do_constant_folding (bool, 默认为 True) — PyTorch 特有参数。如果为 True,PyTorch ONNX 导出将尽可能将常量折叠到相邻节点中。
  • **kwargs_shapes (Dict) — 推理期间使用的形状。此参数允许覆盖 ONNX 导出期间使用的默认形状。

完整的 ONNX 导出函数套件,从预加载的 PyTorch 或 Tensorflow 模型导出。当需要在导出到 ONNX 之前对模型进行修改(例如,覆盖前向调用)时,此函数尤其有用。

用法示例

>>> from transformers import AutoModelForCausalLM

>>> model = AutoModelForCausalLM.from_pretrained("gpt2")
>>> # At this point, we could override some submodules, forward methods, weights, etc. from the model.

>>> onnx_export_from_model(model, output="gpt2_onnx/")

optimum.exporters.onnx.export

< >

( model: typing.Union[ForwardRef('PreTrainedModel'), ForwardRef('TFPreTrainedModel'), ForwardRef('ModelMixin')] config: OnnxConfig output: Path opset: typing.Optional[int] = None device: str = 'cpu' input_shapes: typing.Optional[typing.Dict] = None disable_dynamic_axes_fix: typing.Optional[bool] = False dtype: typing.Optional[str] = None no_dynamic_axes: bool = False do_constant_folding: bool = True model_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None ) Tuple[List[str], List[str]]

参数

  • model (PreTrainedModelTFPreTrainedModel) — 要导出的模型。
  • config (OnnxConfig) — 与导出的模型关联的 ONNX 配置。
  • output (Path) — 用于存储导出的 ONNX 模型的目录。
  • opset (Optional[int], 默认为 None) — 要使用的 ONNX 运算符集的版本。
  • device (Optional[str], 默认为 "cpu") — ONNX 模型将要导出的设备。可以是 cpucuda。仅 PyTorch 支持在 CUDA 设备上导出。
  • input_shapes (Optional[Dict], 默认为 None) — 如果指定,则允许为提供给 ONNX 导出器的示例输入使用特定形状。
  • disable_dynamic_axes_fix (Optional[bool], 默认为 False) — 是否禁用默认的动态轴修复。
  • dtype (Optional[str], 默认为 None) — 用于重新映射模型输入的数据类型。仅限 PyTorch。仅支持 fp16
  • no_dynamic_axes (bool, 默认为 False) — 如果为 True,则禁用 ONNX 导出期间的动态轴使用。
  • do_constant_folding (bool, 默认为 True) — PyTorch 特有参数。如果为 True,PyTorch ONNX 导出将尽可能将常量折叠到相邻节点中。
  • model_kwargs (Optional[Dict[str, Any]], 默认为 None) — 实验性用法:在导出期间传递给模型的关键字参数。 如果模型输入/输出发生更改(例如,如果传递了 model_kwargs={"output_attentions": True}),则应将此参数与 custom_onnx_config 参数一起使用。

返回

Tuple[List[str], List[str]]

一个元组,其中包含模型输入的有序列表和来自 ONNX 配置的命名输出。

将 Pytorch 或 TensorFlow 模型导出为 ONNX 中间表示。

optimum.exporters.onnx.convert.export_pytorch

< >

( model: typing.Union[ForwardRef('PreTrainedModel'), ForwardRef('ModelMixin')] config: OnnxConfig opset: int output: Path device: str = 'cpu' input_shapes: typing.Optional[typing.Dict] = None no_dynamic_axes: bool = False do_constant_folding: bool = True model_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None ) Tuple[List[str], List[str]]

参数

  • model (PreTrainedModel) — 要导出的模型。
  • config (OnnxConfig) — 与导出的模型关联的 ONNX 配置。
  • opset (int) — 要使用的 ONNX 运算符集的版本。
  • output (Path) — 用于保存导出的 ONNX 文件的路径。
  • device (str, 默认为 "cpu") — ONNX 模型将要导出的设备。可以是 cpucuda。仅 PyTorch 支持在 CUDA 设备上导出。
  • input_shapes (Optional[Dict], 默认为 None) — 如果指定,则允许为提供给 ONNX 导出器的示例输入使用特定形状。
  • no_dynamic_axes (bool, 默认为 False) — 如果为 True,则禁用 ONNX 导出期间的动态轴使用。
  • do_constant_folding (bool, 默认为 True) — PyTorch 特有参数。如果为 True,PyTorch ONNX 导出将尽可能将常量折叠到相邻节点中。
  • model_kwargs (Optional[Dict[str, Any]], defaults to None) — 实验性用法:在导出期间传递给模型的关键字参数。 此参数应与 custom_onnx_config 参数一起使用,例如,如果模型输入/输出发生更改(例如,如果传递了 model_kwargs={"output_attentions": True})。

返回

Tuple[List[str], List[str]]

一个元组,其中包含模型输入的有序列表和来自 ONNX 配置的命名输出。

将 PyTorch 模型导出为 ONNX 中间表示。

optimum.exporters.onnx.convert.export_tensorflow

< >

( model: TFPreTrainedModel config: OnnxConfig opset: int output: Path ) Tuple[List[str], List[str]]

参数

  • model (TFPreTrainedModel) — 要导出的模型。
  • config (OnnxConfig) — 与导出的模型关联的 ONNX 配置。
  • opset (int) — 要使用的 ONNX 运算符集版本。
  • output (Path) — 用于存储导出的 ONNX 模型的目录。
  • device (Optional[str], defaults to "cpu") — ONNX 模型将在其上导出的设备。 可以是 cpucuda。 仅 PyTorch 支持在 CUDA 设备上导出。

返回

Tuple[List[str], List[str]]

一个元组,其中包含模型输入的有序列表和来自 ONNX 配置的命名输出。

将 TensorFlow 模型导出为 ONNX 中间表示。

实用函数

optimum.exporters.utils.check_dummy_inputs_are_allowed

< >

( model: typing.Union[ForwardRef('PreTrainedModel'), ForwardRef('TFPreTrainedModel'), ForwardRef('ModelMixin')] dummy_input_names: typing.Iterable[str] )

参数

  • model (Union[transformers.PreTrainedModel, transformers.TFPreTrainedModel]) — 模型实例。
  • model_inputs (Iterable[str]) — 模型输入名称。

检查来自 ONNX 配置的虚拟输入是否是 model 允许输入的子集。

optimum.exporters.onnx.validate_model_outputs

< >

( config: OnnxConfig reference_model: typing.Union[ForwardRef('PreTrainedModel'), ForwardRef('TFPreTrainedModel'), ForwardRef('ModelMixin')] onnx_model: Path onnx_named_outputs: typing.List[str] atol: typing.Optional[float] = None input_shapes: typing.Optional[typing.Dict] = None device: str = 'cpu' use_subprocess: typing.Optional[bool] = True model_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None )

参数

  • config (~OnnxConfig) — 用于导出模型的配置。
  • reference_model (~PreTrainedModel or ~TFPreTrainedModel) — 用于导出的模型。
  • onnx_model (Path) — 导出模型的路径。
  • onnx_named_outputs (List[str]) — 要检查的输出的名称。
  • atol (Optional[float], defaults to None) — 参考模型和导出模型之间输出差异的绝对容差。
  • input_shapes (Optional[Dict], defaults to None) — 如果指定,则允许使用特定形状来验证 ONNX 模型。
  • device (str, defaults to "cpu") — ONNX 模型将在其上验证的设备。 可以是 cpucuda。 仅 PyTorch 支持在 CUDA 设备上进行验证。
  • use_subprocess (Optional[bool], defaults to True) — 在子进程中启动每个导出模型的验证。
  • model_kwargs (Optional[Dict[str, Any]], defaults to None) — 实验性用法:在导出和验证期间传递给模型的关键字参数。

引发

ValueError

  • ValueError — 如果参考模型和导出模型之间的输出形状或值不匹配。

通过检查参考模型和导出模型的输出是否匹配来验证导出。

< > 在 GitHub 上更新