Optimum 文件
匯出函式
並獲得增強的文件體驗
開始使用
匯出函式
您可以從 🤗 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 pad_token_id: typing.Optional[int] = None subfolder: str = '' revision: str = 'main' force_download: bool = False local_files_only: bool = False trust_remote_code: bool = False cache_dir: str = '/root/.cache/huggingface/hub' token: typing.Union[str, bool, 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 slim: bool = False **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
) — 某些模型在某些任務中需要此項。如果未提供,將嘗試使用分詞器猜測它。 - subfolder (
str
, 預設為""
) — 如果相關檔案位於模型倉庫的子資料夾中(本地或 huggingface.co 上),您可以在此處指定資料夾名稱。 - revision (
str
, 預設為"main"
) — 修訂版本是要使用的特定模型版本。它可以是分支名稱、標籤名稱或提交 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 持票人授權的令牌。如果為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、帶 past 和合並模型)。此引數是為向後相容性而引入的,將在 Optimum 的未來版本中移除。 - no_dynamic_axes (bool, 預設為
False
) — 如果為 True,則在 ONNX 匯出期間停用動態軸的使用。 - do_constant_folding (bool, 預設為
True
) — PyTorch 特有引數。如果為True
,PyTorch ONNX 匯出將盡可能將常量摺疊到相鄰節點中。 - slim (bool, 預設為
False
) — PyTorch 特有引數。如果為True
,則使用 onnxslim 最佳化 ONNX 模型。 - **kwargs_shapes (
Dict
) — 推理期間使用的形狀。此引數允許覆蓋 ONNX 匯出期間使用的預設形狀。
全套 ONNX 匯出函式,從 Hugging Face Hub 上的模型 ID 或本地模型儲存庫匯出。
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 slim: bool = False **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
) — 停用文字生成模型使用 position_ids 進行批處理生成。此外,允許將僅解碼器模型匯出為三個檔案(不帶 past、帶 past 和合並模型)。此引數是為向後相容性而引入的,將在 Optimum 的未來版本中移除。 - no_dynamic_axes (bool, defaults to
False
) — 如果為 True,在 ONNX 匯出期間停用動態軸的使用。 - do_constant_folding (bool, defaults to
True
) — PyTorch 特有引數。如果為True
,PyTorch ONNX 匯出將盡可能地將常量摺疊到相鄰節點中。 - slim (bool, defaults to
False
) — 使用 onnxslim 最佳化 ONNX 模型。 - **kwargs_shapes (
Dict
) — 用於推理的形狀。此引數允許覆蓋 ONNX 匯出期間使用的預設形狀。
全套 ONNX 匯出函式,**從預載入的 PyTorch 或 Tensorflow 模型**匯出。此函式在需要對模型進行修改(例如,在匯出到 ONNX 之前覆蓋前向呼叫)的情況下特別有用。
optimum.exporters.onnx.export
< source >( 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 (
PreTrainedModel
或TFPreTrainedModel
) — 要匯出的模型。 - config (OnnxConfig) — 與匯出模型關聯的 ONNX 配置。
- output (
Path
) — 儲存匯出 ONNX 模型的目錄。 - opset (
Optional[int]
, defaults toNone
) — 要使用的 ONNX 運算子集的版本。 - device (
Optional[str]
, defaults to"cpu"
) — ONNX 模型將匯出的裝置。可以是cpu
或cuda
。CUDA 裝置上的匯出僅支援 PyTorch。 - input_shapes (
Optional[Dict]
, defaults toNone
) — 如果指定,允許為提供給 ONNX 匯出器的示例輸入使用特定形狀。 - disable_dynamic_axes_fix (
Optional[bool]
, defaults toFalse
) — 是否停用預設的動態軸修復。 - dtype (
Optional[str]
, defaults toNone
) — 將模型輸入重新對映到的資料型別。僅限 PyTorch。僅支援fp16
。 - no_dynamic_axes (bool, defaults to
False
) — 如果為 True,在 ONNX 匯出期間停用動態軸的使用。 - do_constant_folding (bool, defaults to
True
) — PyTorch 特有引數。如果為True
,PyTorch ONNX 匯出將盡可能地將常量摺疊到相鄰節點中。 - model_kwargs (
Optional[Dict[str, Any]]
, defaults toNone
) — 實驗性用法:在匯出期間傳遞給模型的關鍵字引數。此引數應與custom_onnx_config
引數一起使用,例如,當模型輸入/輸出發生更改時(例如,如果傳遞了model_kwargs={"output_attentions": True}
)。
返回
Tuple[List[str], List[str]]
一個元組,包含模型輸入的有序列表和 ONNX 配置中的命名輸出。
將 PyTorch 或 TensorFlow 模型匯出到 ONNX 中間表示。
optimum.exporters.onnx.convert.export_pytorch
< source >( 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
, defaults to"cpu"
) — ONNX 模型將匯出的裝置。可以是cpu
或cuda
。CUDA 裝置上的匯出僅支援 PyTorch。 - input_shapes (
Optional[Dict]
, defaults toNone
) — 如果指定,允許為提供給 ONNX 匯出器的示例輸入使用特定形狀。 - no_dynamic_axes (bool, defaults to
False
) — 如果為 True,在 ONNX 匯出期間停用動態軸的使用。 - do_constant_folding (bool, defaults to
True
) — PyTorch 特有引數。如果為True
,PyTorch ONNX 匯出將盡可能地將常量摺疊到相鄰節點中。 - model_kwargs (
Optional[Dict[str, Any]]
, defaults toNone
) — 實驗性用法:在匯出期間傳遞給模型的關鍵字引數。此引數應與custom_onnx_config
引數一起使用,例如,當模型輸入/輸出發生更改時(例如,如果傳遞了model_kwargs={"output_attentions": True}
)。
返回
Tuple[List[str], List[str]]
一個元組,包含模型輸入的有序列表和 ONNX 配置中的命名輸出。
將 PyTorch 模型匯出到 ONNX 中間表示。
optimum.exporters.onnx.convert.export_tensorflow
< source >( 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 模型將匯出的裝置。可以是cpu
或cuda
。CUDA 裝置上的匯出僅支援 PyTorch。
返回
Tuple[List[str], List[str]]
一個元組,包含模型輸入的有序列表和 ONNX 配置中的命名輸出。
將 TensorFlow 模型匯出到 ONNX 中間表示。
實用函式
optimum.exporters.utils.check_dummy_inputs_are_allowed
< source >( model: typing.Union[ForwardRef('PreTrainedModel'), ForwardRef('TFPreTrainedModel'), ForwardRef('ModelMixin')] dummy_input_names: typing.Iterable[str] )
檢查 ONNX 配置中的虛擬輸入是否是 model
允許輸入的子集。
optimum.exporters.onnx.validate_model_outputs
< source >( 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
或~TFPreTrainedModel
) — 用於匯出的模型。 - onnx_model (
Path
) — 匯出模型的路徑。 - onnx_named_outputs (
List[str]
) — 要檢查的輸出名稱。 - atol (
Optional[float]
, defaults toNone
) — 參考模型和匯出模型之間輸出差異的絕對容差。 - input_shapes (
Optional[Dict]
, defaults toNone
) — 如果指定,允許使用特定形狀來驗證 ONNX 模型。 - device (
str
, defaults to"cpu"
) — ONNX 模型將驗證的裝置。可以是cpu
或cuda
。CUDA 裝置上的驗證僅支援 PyTorch。 - use_subprocess (
Optional[bool]
, defaults toTrue
) — 在子程序中啟動每個匯出模型的驗證。 - model_kwargs (
Optional[Dict[str, Any]]
, defaults toNone
) — 實驗性用法:在匯出和驗證期間傳遞給模型的關鍵字引數。
引發
ValueError
ValueError
— 如果參考模型和匯出模型之間的輸出形狀或值不匹配。
透過檢查參考模型和匯出模型之間的輸出是否匹配來驗證匯出。