Optimum 文件

配置

您正在檢視的是需要從原始碼安裝. 如果您希望常規的 pip 安裝,請檢視最新的穩定版本 (v1.27.0)。
Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

配置

配置類是指定任務執行方式的方法。ONNX Runtime 包支援以下兩個任務:

  1. 最佳化:由 ORTOptimizer 執行,此任務可以透過 OptimizationConfig 進行調整。

  2. 量化:由 ORTQuantizer 執行,量化可以透過 QuantizationConfig 設定。在某些情況下(訓練後靜態量化),需要一個校準步驟,這可以透過 CalibrationConfig 指定。

OptimizationConfig

optimum.onnxruntime.OptimizationConfig

< >

( optimization_level: int = 1 optimize_for_gpu: bool = False fp16: bool = False optimize_with_onnxruntime_only: typing.Optional[bool] = None enable_transformers_specific_optimizations: bool = True disable_gelu: typing.Optional[bool] = None disable_gelu_fusion: bool = False disable_layer_norm: typing.Optional[bool] = None disable_layer_norm_fusion: bool = False disable_attention: typing.Optional[bool] = None disable_attention_fusion: bool = False disable_skip_layer_norm: typing.Optional[bool] = None disable_skip_layer_norm_fusion: bool = False disable_bias_skip_layer_norm: typing.Optional[bool] = None disable_bias_skip_layer_norm_fusion: bool = False disable_bias_gelu: typing.Optional[bool] = None disable_bias_gelu_fusion: bool = False disable_embed_layer_norm: bool = True disable_embed_layer_norm_fusion: bool = True enable_gelu_approximation: bool = False use_mask_index: bool = False no_attention_mask: bool = False disable_shape_inference: bool = False use_multi_head_attention: bool = False enable_gemm_fast_gelu_fusion: bool = False use_raw_attention_mask: bool = False disable_group_norm_fusion: bool = True disable_packed_kv: bool = True disable_rotary_embeddings: bool = False )

引數

  • optimization_level (int, 預設為 1) — ONNX Runtime 對載入圖執行的最佳化級別。支援的最佳化級別為 0、1、2 和 99。
    • 0:將停用所有最佳化
    • 1:將啟用基本最佳化
    • 2:將啟用基本和擴充套件最佳化,包括應用於分配給 CPU 或 CUDA 執行提供程式的節點的複雜節點融合,使生成的最佳化圖與硬體相關
    • 99:將啟用所有可用最佳化,包括佈局最佳化
  • optimize_for_gpu (bool, 預設為 False) — 是否為 GPU 推理最佳化模型。當 optimization_level > 1 時,最佳化後的圖可能只包含 GPU 或 CPU 的運算子。
  • fp16 (bool, 預設為 False) — 所有權重和節點是否應從 float32 轉換為 float16。
  • enable_transformers_specific_optimizations (bool, 預設為 True) — 是否在 ONNX Runtime 通用最佳化之上僅使用 transformers 特定最佳化。
  • disable_gelu_fusion (bool, 預設為 False) — 是否停用 Gelu 融合。
  • disable_layer_norm_fusion (bool, 預設為 False) — 是否停用 Layer Normalization 融合。
  • disable_attention_fusion (bool, 預設為 False) — 是否停用 Attention 融合。
  • disable_skip_layer_norm_fusion (bool, 預設為 False) — 是否停用 SkipLayerNormalization 融合。
  • disable_bias_skip_layer_norm_fusion (bool, 預設為 False) — 是否停用 Add Bias 和 SkipLayerNormalization 融合。
  • disable_bias_gelu_fusion (bool, 預設為 False) — 是否停用 Add Bias 和 Gelu / FastGelu 融合。
  • disable_embed_layer_norm_fusion (bool, 預設為 True) — 是否停用 EmbedLayerNormalization 融合。由於此融合與 ONNX Runtime 量化不相容,因此預設值設定為 True
  • enable_gelu_approximation (bool, 預設為 False) — 是否啟用 Gelu / BiasGelu 到 FastGelu 的轉換。預設值設定為 False,因為此近似可能會輕微影響模型的準確性。
  • use_mask_index (bool, 預設為 False) — 是否在 attention 運算子中使用掩碼索引而不是原始注意力掩碼。
  • no_attention_mask (bool, 預設為 False) — 是否不使用注意力掩碼。僅適用於 bert 模型型別。
  • disable_embed_layer_norm (bool, 預設為 True) — 是否停用 EmbedLayerNormalization 融合。由於此融合與 ONNX Runtime 量化不相容,因此預設值設定為 True
  • disable_shape_inference (bool, 預設為 False) — 是否停用符號形狀推理。預設值設定為 False,但符號形狀推理有時可能會導致問題。
  • use_multi_head_attention (bool, 預設為 False) — 實驗性引數。使用 MultiHeadAttention 代替 Attention 運算子,它具有合併的 Q/K/V 投影權重,這在某些情況下可能更快,因為 3 個 MatMul 合併為一個。” “請注意,當 QKV 未打包時,MultiHeadAttention 可能比 Attention 慢。”
  • enable_gemm_fast_gelu_fusion (bool, 預設為 False) — 啟用 GemmfastGelu 融合。
  • use_raw_attention_mask (bool, 預設為 False) — 使用原始注意力掩碼。如果您的輸入不是右側填充,請使用此選項。這可能會停用融合注意力並導致效能下降。
  • disable_group_norm_fusion (bool, 預設為 True) — 不融合 GroupNorm。僅適用於 model_type=unet。
  • disable_packed_kv (bool, 預設為 True) — 在交叉注意力中不使用打包的 kv。僅適用於 model_type=unet。
  • disable_rotary_embeddings (bool, 預設為 False) — 是否停用旋轉嵌入融合。

OptimizationConfig 是處理所有 ONNX Runtime 最佳化引數的配置類。有兩種最佳化堆疊:

  1. ONNX Runtime 通用最佳化工具:可用於任何 ONNX 模型。
  2. ONNX Runtime 變換器最佳化工具:僅適用於部分變換器模型。

optimum.onnxruntime.AutoOptimizationConfig

< >

( )

建立通用 OptimizationConfig 的工廠。

O1

< >

( for_gpu: bool = False **kwargs ) OptimizationConfig

引數

  • for_gpu (bool, 預設為 False) — 待最佳化模型是否將在 GPU 上執行,某些最佳化取決於模型將執行的硬體。僅當 optimization_level > 1 時需要。
  • kwargs (Dict[str, Any]) — 提供給 ~OptimizationConfig 建構函式的引數。

返回

OptimizationConfig

與 O1 最佳化級別對應的 OptimizationConfig

建立 O1 ~OptimizationConfig

O2

< >

( for_gpu: bool = False **kwargs ) OptimizationConfig

引數

  • for_gpu (bool, 預設為 False) — 待最佳化模型是否將在 GPU 上執行,某些最佳化取決於模型將執行的硬體。僅當 optimization_level > 1 時需要。
  • kwargs (Dict[str, Any]) — 提供給 ~OptimizationConfig 建構函式的引數。

返回

OptimizationConfig

與 O2 最佳化級別對應的 OptimizationConfig

建立 O2 ~OptimizationConfig

O3

< >

( for_gpu: bool = False **kwargs ) OptimizationConfig

引數

  • for_gpu (bool, 預設為 False) — 待最佳化模型是否將在 GPU 上執行,某些最佳化取決於模型將執行的硬體。僅當 optimization_level > 1 時需要。
  • kwargs (Dict[str, Any]) — 提供給 ~OptimizationConfig 建構函式的引數。

返回

OptimizationConfig

與 O3 最佳化級別對應的 OptimizationConfig

建立 O3 ~OptimizationConfig

O4

< >

( for_gpu: bool = True **kwargs ) OptimizationConfig

引數

  • for_gpu (bool, 預設為 False) — 待最佳化模型是否將在 GPU 上執行,某些最佳化取決於模型將執行的硬體。僅當 optimization_level > 1 時需要。
  • kwargs (Dict[str, Any]) — 提供給 ~OptimizationConfig 建構函式的引數。

返回

OptimizationConfig

與 O4 最佳化級別對應的 OptimizationConfig

建立 O4 ~OptimizationConfig

with_optimization_level

< >

( optimization_level: str for_gpu: bool = False **kwargs ) OptimizationConfig

引數

  • optimization_level (str) — 最佳化級別,允許以下值:
    • O1:基本通用最佳化
    • O2:基本和擴充套件通用最佳化,變換器特定融合。
    • O3:與 O2 相同,但包含 Fast Gelu 近似。
    • O4:與 O3 相同,但包含混合精度。
  • for_gpu (bool, 預設為 False) — 待最佳化模型是否將在 GPU 上執行,某些最佳化取決於模型將執行的硬體。僅當 optimization_level > 1 時需要。
  • kwargs (Dict[str, Any]) — 提供給 ~OptimizationConfig 建構函式的引數。

返回

OptimizationConfig

與請求的最佳化級別對應的 OptimizationConfig

根據最佳化級別建立具有預定義引數的 ~OptimizationConfig

QuantizationConfig

optimum.onnxruntime.QuantizationConfig

< >

( is_static: bool format: QuantFormat mode: QuantizationMode = <QuantizationMode.QLinearOps: 1> activations_dtype: QuantType = <QuantType.QUInt8: 1> activations_symmetric: bool = False weights_dtype: QuantType = <QuantType.QInt8: 0> weights_symmetric: bool = True per_channel: bool = False reduce_range: bool = False nodes_to_quantize: typing.List[str] = <factory> nodes_to_exclude: typing.List[str] = <factory> operators_to_quantize: typing.List[str] = <factory> qdq_add_pair_to_weight: bool = False qdq_dedicated_pair: bool = False qdq_op_type_per_channel_support_to_axis: typing.Dict[str, int] = <factory> )

引數

  • is_static (bool) — 是否應用靜態量化或動態量化。
  • format (QuantFormat) — 目標 ONNX Runtime 量化表示格式。對於面向運算子 (QOperator) 格式,所有量化運算子都有自己的 ONNX 定義。對於面向張量 (QDQ) 格式,透過插入 QuantizeLinear / DeQuantizeLinear 運算子對模型進行量化。
  • mode (QuantizationMode, 預設為 QuantizationMode.QLinearOps) — 目標 ONNX Runtime 量化模式,預設為 QLinearOps 以匹配 QDQ 格式。當目標動態量化模式時,預設值為 QuantizationMode.IntegerOps,而靜態量化模式的預設值為 QuantizationMode.QLinearOps
  • activations_dtype (QuantType, 預設為 QuantType.QUInt8) — 用於啟用的量化資料型別。
  • activations_symmetric (bool, 預設為 False) — 是否對啟用應用對稱量化。
  • weights_dtype (QuantType, 預設為 QuantType.QInt8) — 用於權重的量化資料型別。
  • weights_symmetric (bool, 預設為 True) — 是否對權重應用對稱量化。
  • per_channel (bool, 預設為 False) — 我們是否應該進行逐通道(也稱為“逐行”)量化。啟用此功能可以提高整體準確性,但會使量化模型更重。
  • reduce_range (bool, 預設為 False) — 是否使用縮減範圍的 7 位整數而不是 8 位整數。
  • nodes_to_quantize (List[str], 預設為 []) — 要量化的節點名稱列表。未指定時,將量化所有節點。如果為空,則量化 operators_to_quantize 中的所有運算子節點。
  • nodes_to_exclude (List[str], 預設為 []) — 應用量化時要排除的節點名稱列表。模型中的節點列表可以透過 onnx.load 載入 ONNX 模型或透過 netron 進行視覺化檢查來找到。
  • operators_to_quantize (List[str]) — 要量化的運算子型別列表。預設為給定量化模式和格式的所有可量化運算子。可量化運算子可以在 https://github.com/microsoft/onnxruntime/blob/main/onnxruntime/python/tools/quantization/registry.py 找到。
  • qdq_add_pair_to_weight (bool, 預設為 False) — 預設情況下,浮點權重被量化並僅提供給插入的 DeQuantizeLinear 節點。如果設定為 True,則浮點權重將保留,並且將插入 QuantizeLinear / DeQuantizeLinear 兩個節點。
  • qdq_dedicated_pair (bool, 預設為 False) — 插入 QDQ 對時,多個節點可以共享一個 QDQ 對作為其輸入。如果為 True,它將為每個節點建立相同且專用的 QDQ 對。
  • qdq_op_type_per_channel_support_to_axis (Dict[str, int]) — 設定特定運算子型別的通道軸。僅當支援逐通道量化且 per_channel 設定為 True 時有效。

QuantizationConfig 是處理所有 ONNX Runtime 量化引數的配置類。

AutoQuantizationConfig

class optimum.onnxruntime.AutoQuantizationConfig

< >

( )

arm64

< >

( is_static: bool use_symmetric_activations: bool = False use_symmetric_weights: bool = True per_channel: bool = True nodes_to_quantize: typing.Optional[typing.List[str]] = None nodes_to_exclude: typing.Optional[typing.List[str]] = None operators_to_quantize: typing.Optional[typing.List[str]] = None )

引數

  • is_static (bool) — 布林標誌,指示我們是目標靜態量化還是動態量化。
  • use_symmetric_activations (bool, 預設為 False) — 是否對啟用使用對稱量化。
  • use_symmetric_weights (bool, 預設為 True) — 是否對權重使用對稱量化。
  • per_channel (bool, 預設為 True) — 我們是否應該進行逐通道(也稱為“逐行”)量化。啟用此功能可以提高整體準確性,但會使量化模型更重。
  • nodes_to_quantize (Optional[List[str]], 預設為 None) — 要量化的特定節點。如果為 None,則量化 operators_to_quantize 中的所有運算子節點。
  • nodes_to_exclude (Optional[List[str]], 預設為 None) — 要從量化中排除的特定節點。模型中的節點列表可以透過 onnx.load 載入 ONNX 模型或透過 netron 進行視覺化檢查來找到。
  • operators_to_quantize (Optional[List[str]], 預設為 None) — 要執行量化的節點型別。預設情況下,將量化所有可量化運算子。可量化運算子可以在 https://github.com/microsoft/onnxruntime/blob/main/onnxruntime/python/tools/quantization/registry.py 找到。

為 ARM64 建立適用於 ARM64 的 QuantizationConfig

avx2

< >

( is_static: bool use_symmetric_activations: bool = False use_symmetric_weights: bool = True per_channel: bool = True reduce_range: bool = False nodes_to_quantize: typing.Optional[typing.List[str]] = None nodes_to_exclude: typing.Optional[typing.List[str]] = None operators_to_quantize: typing.Optional[typing.List[str]] = None )

引數

  • is_static (bool) — 布林標誌,指示我們是目標靜態量化還是動態量化。
  • use_symmetric_activations (bool, 預設為 False) — 是否對啟用使用對稱量化。
  • use_symmetric_weights (bool, 預設為 True) — 是否對權重使用對稱量化。
  • per_channel (bool, 預設為 True) — 我們是否應該進行逐通道(也稱為“逐行”)量化。啟用此功能可以提高整體準確性,但會使量化模型更重。
  • reduce_range (bool, 預設為 False) — 指示是使用 8 位整數(False)還是縮減範圍的 7 位整數(True)。作為基線,始終建議使用全範圍(reduce_range = False)進行測試,然後,如果準確性下降顯著,則嘗試使用縮減範圍(reduce_range = True)。使用 AVX512(非 VNNI)的 Intel CPU 在呼叫 VPMADDUBSW 指令時可能會出現飽和問題。為了解決這個問題,應該使用 7 位而不是 8 位整數。
  • nodes_to_quantize (Optional[List[str]], 預設為 None) — 要量化的特定節點。如果為 None,則量化 operators_to_quantize 中的所有運算子節點。
  • nodes_to_exclude (Optional[List[str]], 預設為 None) — 要從量化中排除的特定節點。模型中的節點列表可以透過 onnx.load 載入 ONNX 模型或透過 netron 進行視覺化檢查來找到。
  • operators_to_quantize (Optional[List[str]], 預設為 None) — 要執行量化的節點型別。預設情況下,將量化所有可量化運算子。可量化運算子可以在 https://github.com/microsoft/onnxruntime/blob/main/onnxruntime/python/tools/quantization/registry.py 找到。

為具有 AVX2 指令集的 CPU 建立適用於 CPU 的 QuantizationConfig

avx512

< >

( is_static: bool use_symmetric_activations: bool = False use_symmetric_weights: bool = True per_channel: bool = True reduce_range: bool = False nodes_to_quantize: typing.Optional[typing.List[str]] = None nodes_to_exclude: typing.Optional[typing.List[str]] = None operators_to_quantize: typing.Optional[typing.List[str]] = None )

引數

  • is_static (bool) — 布林標誌,指示我們是目標靜態量化還是動態量化。
  • use_symmetric_activations (bool, 預設為 False) — 是否對啟用使用對稱量化。
  • use_symmetric_weights (bool, 預設為 True) — 是否對權重使用對稱量化。
  • per_channel (bool, 預設為 True) — 我們是否應該進行逐通道(也稱為“逐行”)量化。啟用此功能可以提高整體準確性,但會使量化模型更重。
  • reduce_range (bool, 預設為 False) — 指示是使用 8 位整數(False)還是縮減範圍的 7 位整數(True)。作為基線,始終建議使用全範圍(reduce_range = False)進行測試,然後,如果準確性下降顯著,則嘗試使用縮減範圍(reduce_range = True)。使用 AVX512(非 VNNI)的 Intel CPU 在呼叫 VPMADDUBSW 指令時可能會出現飽和問題。為了解決這個問題,應該使用 7 位而不是 8 位整數。
  • nodes_to_quantize (Optional[List[str]], 預設為 None) — 要量化的特定節點。如果為 None,則量化 operators_to_quantize 中的所有運算子節點。
  • nodes_to_exclude (Optional[List[str]], 預設為 None) — 要從量化中排除的特定節點。模型中的節點列表可以透過 onnx.load 載入 ONNX 模型或透過 netron 進行視覺化檢查來找到。
  • operators_to_quantize (Optional[List[str]], 預設為 None) — 要執行量化的節點型別。預設情況下,將量化所有可量化運算子。可量化運算子可以在 https://github.com/microsoft/onnxruntime/blob/main/onnxruntime/python/tools/quantization/registry.py 找到。

為具有 AVX512 指令集的 CPU 建立適用於 CPU 的 QuantizationConfig

avx512_vnni

< >

( is_static: bool use_symmetric_activations: bool = False use_symmetric_weights: bool = True per_channel: bool = True nodes_to_quantize: typing.Optional[typing.List[str]] = None nodes_to_exclude: typing.Optional[typing.List[str]] = None operators_to_quantize: typing.Optional[typing.List[str]] = None )

引數

  • is_static (bool) — 布林標誌,指示我們是目標靜態量化還是動態量化。
  • use_symmetric_activations (bool, 預設為 False) — 是否對啟用使用對稱量化。
  • use_symmetric_weights (bool, 預設為 True) — 是否對權重使用對稱量化。
  • per_channel (bool, 預設為 True) — 我們是否應該進行逐通道(也稱為“逐行”)量化。啟用此功能可以提高整體準確性,但會使量化模型更重。
  • nodes_to_quantize (Optional[List[str]], 預設為 None) — 要量化的特定節點。如果為 None,則量化 operators_to_quantize 中的所有運算子節點。
  • nodes_to_exclude (Optional[List[str]], 預設為 None) — 要從量化中排除的特定節點。模型中的節點列表可以透過 onnx.load 載入 ONNX 模型或透過 netron 進行視覺化檢查來找到。
  • operators_to_quantize (Optional[List[str]], 預設為 None) — 要執行量化的節點型別。預設情況下,將量化所有可量化運算子。可量化運算子可以在 https://github.com/microsoft/onnxruntime/blob/main/onnxruntime/python/tools/quantization/registry.py 找到。

為具有 AVX512-VNNI 指令集的 CPU 建立適用於 CPU 的 QuantizationConfig

當目標是 Intel AVX512-VNNI CPU 時,底層執行引擎利用 CPU 指令 VPDPBUSD 在單個指令中計算 \i32 += i8(w) * u8(x)\。

AVX512-VNNI (AVX512 向量神經網路指令) 是一種 x86 擴充套件指令集,是 AVX-512 ISA 的一部分。

AVX512 VNNI 旨在加速 INT8 推理的卷積神經網路。

tensorrt

< >

( per_channel: bool = True nodes_to_quantize: typing.Optional[typing.List[str]] = None nodes_to_exclude: typing.Optional[typing.List[str]] = None operators_to_quantize: typing.Optional[typing.List[str]] = None )

引數

  • per_channel (bool, 預設為 True) — 我們是否應該進行逐通道(也稱為“逐行”)量化。啟用此功能可以提高整體準確性,但會使量化模型更重。
  • nodes_to_quantize (Optional[List[str]], 預設為 None) — 要量化的特定節點。如果為 None,則量化 operators_to_quantize 中的所有運算子節點。
  • nodes_to_exclude (Optional[List[str]], 預設為 None) — 需要從量化中排除的特定節點。模型的節點列表可以透過 onnx.load 載入 ONNX 模型或透過 netron 視覺化檢查來找到。
  • operators_to_quantize (Optional[List[str]], 預設為 None) — 要執行量化的節點型別。預設情況下,所有可量化運算元都將被量化。可量化運算元可在 https://github.com/microsoft/onnxruntime/blob/main/onnxruntime/python/tools/quantization/registry.py 找到。

建立一個適用於 TensorRT 靜態量化,面向 NVIDIA GPU 的 QuantizationConfig

CalibrationConfig

class optimum.onnxruntime.CalibrationConfig

< >

( dataset_name: str dataset_config_name: str dataset_split: str dataset_num_samples: int method: CalibrationMethod num_bins: typing.Optional[int] = None num_quantized_bins: typing.Optional[int] = None percentile: typing.Optional[float] = None moving_average: typing.Optional[bool] = None averaging_constant: typing.Optional[float] = None )

引數

  • dataset_name (str) — 校準資料集的名稱。
  • dataset_config_name (str) — 校準資料集配置的名稱。
  • dataset_split (str) — 用於執行校準步驟的資料集拆分。
  • dataset_num_samples (int) — 構成校準資料集的樣本數量。
  • method (CalibrationMethod) — 使用校準資料集計算啟用量化引數的方法。
  • num_bins (Optional[int], 預設為 None) — 當使用 Percentile 或 Entropy 方法執行校準步驟時,用於建立直方圖的 bin 數量。
  • num_quantized_bins (Optional[int], 預設為 None) — 當使用 Entropy 方法執行校準步驟時,量化 bin 的數量。
  • percentile (Optional[float], 預設為 None) — 當使用 Percentile 方法執行校準步驟時,計算啟用量化範圍所使用的百分位數。
  • moving_average (Optional[bool], 預設為 None) — 在使用 MinMax 方法執行校準步驟時,是否計算最小值和最大值的移動平均值。
  • averaging_constant (Optional[float], 預設為 None) — 在計算最小值和最大值的移動平均值時使用的恆定平滑因子。僅當選擇 MinMax 校準方法且 moving_average 設定為 True 時有效。

CalibrationConfig 是一個配置類,用於處理與靜態量化的校準步驟相關的所有 ONNX Runtime 引數。

ORTConfig

class optimum.onnxruntime.ORTConfig

< >

( opset: typing.Optional[int] = None use_external_data_format: bool = False one_external_file: bool = True optimization: typing.Optional[optimum.onnxruntime.configuration.OptimizationConfig] = None quantization: typing.Optional[optimum.onnxruntime.configuration.QuantizationConfig] = None **kwargs )

引數

  • opset (Optional[int], 預設為 None) — 匯出模型時使用的 ONNX opset 版本。
  • use_external_data_format (bool, 預設為 False) — 允許匯出大於 2GB 的模型。
  • one_external_file (bool, 預設為 True) — 當 use_external_data_format=True 時,是否將所有張量儲存到一個外部檔案。如果為 False,則將每個張量儲存到以張量名稱命名的檔案中。(量化時不能設定為 False
  • optimization (Optional[OptimizationConfig], 預設為 None) — 指定用於最佳化 ONNX Runtime 模型的配置
  • quantization (Optional[QuantizationConfig], 預設為 None) — 指定用於量化 ONNX Runtime 模型的配置

ORTConfig 是一個配置類,用於處理與 ONNX IR 模型匯出、最佳化和量化引數相關的所有 ONNX Runtime 引數。

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.